> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
Hifadhi na utekelezaji wa masuala ya Neo4j kwa sasa hutoi ukinzani wa mtumiaji/mkusanyiko, jambo ambalo huunda tatizo la usalama la utendaji wa wateja wengi. Masuala yote yanahifadhiwa katika nafasi moja ya grafu bila njia yoyote ya kuzuia watumiaji kupata data ya watumiaji wengine au kuchanganya mkusanyiko.
Tofauti na mifumo mingine ya kuhifadhi katika TrustGraph:
- **Cassandra**: Hutumia nafasi tofauti kwa kila mtumiaji na meza kwa kila mkusanyiko.
- **Hifadhi za Vector** (Milvus, Qdrant, Pinecone): Hutumia nafasi maalum kwa kila mkusanyiko.
- **Neo4j**: Kwa sasa, inashiriki data yote katika grafu moja (hatari ya usalama).
## Muundo wa Sasa
### Mfano wa Data
- **Nod**: Laini `:Node` na `uri` ya jambo, `:Literal` na `value` ya jambo.
- Ujumbe wa `Triples` una `metadata.user` na `metadata.collection` ya jambo.
- Huduma ya kuhifadhi inapokea taarifa za mtumiaji/mkusanyiko lakini inaizaba.
- Huduma ya kuuliza inatarajia `user` na `collection` katika `TriplesQueryRequest` lakini inaizaba.
### Tatizo la Sasa la Usalama
```cypher
# Mtumiaji wowote anaweza kuuliza data yoyote - hakuna ukinzani
MATCH (src:Node)-[rel:Rel]->(dest:Node)
RETURN src.uri, rel.uri, dest.uri
```
## Suluhisho Lililopendekezwa: Kuchuja Kulingana na Jambo (Inapendekezwa)
### Muhtasari
Ongeza `user` na `collection` ya jambo kwenye nodi na uhusiano wote, kisha chuja shughuli zote kwa jambo hizi. Njia hii hutoa ukinzani kamili huku ikiendeleza uwezo wa kuuliza na urafiki na mifumo iliyopo.
### Mabadiliko ya Mfano wa Data
#### Muundo Ulioboreshwa wa Nodi
```cypher
// Vitu vya Nodi
CREATE (n:Node {
uri: "http://example.com/entity1",
user: "john_doe",
collection: "production_v1"
})
// Vitu vya Literal
CREATE (n:Literal {
value: "literal value",
user: "john_doe",
collection: "production_v1"
})
```
#### Muundo Ulioboreshwa wa Uhusiano
```cypher
// Uhusiano na jambo la mtumiaji/mkusanyiko
CREATE (src)-[:Rel {
uri: "http://example.com/predicate1",
user: "john_doe",
collection: "production_v1"
}]->(dest)
```
#### Faharasa Zilizosasishwa
```cypher
// Faharasa za pamoja kwa kuchuja kwa ufanisi
CREATE INDEX node_user_collection_uri FOR (n:Node) ON (n.user, n.collection, n.uri);
CREATE INDEX literal_user_collection_value FOR (n:Literal) ON (n.user, n.collection, n.value);
```
## Mpango wa Utendaji
### Awamu ya 1: Msingi (Wiki ya 1)
1. [ ] Sasisha huduma ya kuhifadhi ili kukubali na kuhifadhi jambo la mtumiaji/mkusanyiko.
2. [ ] Ongeza faharasa za pamoja kwa kuuliza kwa ufanisi.
3. [ ] Lenga ukinzani wa nyuma.
4. [ ] Unda vipimo vya kitengo kwa utendakazi mpya.
### Awamu ya 2: Masuala ya Uulizaji (Wiki ya 2)
1. [ ] Sasisha mifumo yote ya kuuliza ili kujumuisha vichujio vya mtumiaji/mkusanyiko.
2. [ ] Ongeza uthibitisho wa kuuliza na udhibiti wa usalama.
3. [ ] Sasisha vipimo vya ujumuishaji.
4. [ ] Vipimo vya utendaji na masuala yaliyofilishwa.
### Awamu ya 3: Uhamishaji na Uwekaji (Wiki ya 3)
1. [ ] Unda skripti za uhamishaji wa data kwa matukio ya sasa ya Neo4j.
2. [ ] Nyaraka na maelekezo ya uwekaji.
3. [ ] Ufuatiliaji na arifa kwa ukiukaji wa ukinzani.
4. [ ] Vipimo kamili na matukio mengi ya mtumiaji/mkusanyiko.
### Awamu ya 4: Uimarishaji (Wiki ya 4)
1. [ ] Ondoa hali ya ukinzani wa nyuma.
2. [ ] Ongeza ufuatiliaji kamili.
3. [ ] Mapitio ya usalama na majaribio ya uvamizi.
4. [ ] Uboreshaji wa utendaji.
## Mikakati ya Ujaribio
### Vipimo vya Kitengo
```python
def test_user_collection_isolation():
# Hifadhi masuala kwa mtumiaji 1/mkusanyiko 1
processor.store_triples(triples_user1_coll1)
# Hifadhi masuala kwa mtumiaji 2/mkusanyiko 2
processor.store_triples(triples_user2_coll2)
# Uulizaje kama mtumiaji 1 unapaswa kurejesha data ya mtumiaji 1
3.**Uhamishaji**: 100% ya data iliyopo iliyohama bila kupoteza.
4.**Urahisi**: Masuala yote ya sasa ya kuuliza yanapaswa kufanya kazi na muktadha wa mtumiaji/mkusanyiko.
5.**Uzingatiaji**: Ufuatiliaji kamili wa masuala ya mtumiaji/mkusanyiko.
## Hitimisho
Njia ya kuchuja kulingana na jambo hutoa uwiano bora wa usalama, utendaji, na urafiki kwa kuongeza ukinzani wa mtumiaji/mkusanyiko katika Neo4j. Inalingana na mifumo iliyopo ya utendaji wa wateja wengi katika TrustGraph huku ikiendeleza nguvu za Neo4j katika kuuliza na faharasa.
Suluhisho hili huhakikisha kwamba hifadhi ya Neo4j katika TrustGraph inakidhi viwango sawa vya usalama kama mifumo mingine ya kuhifadhi, ikiepuka udhaifu wa ukinzani wa data huku ikiendeleza uwezo na nguvu ya kuuliza ya grafu.