Descriere & Utilizare
Când construiești o platformă SaaS bazată pe AI utilizată de sute de companii diferite, izolarea datelor este o cerință critică de securitate și conformitate GDPR: un utilizator al companiei A nu trebuie sub nicio formă să primească fragmente de text aparținând companiei B în răspunsul RAG.
Există trei strategii principale de arhitectură:
1) Filtrare pe Payload cu Partition Key (Recomandat): toate datele stau într-o singură colecție mare, dar fiecare punct are un câmp indexat tenant_id. Qdrant și Milvus optimizează graful HNSW pe baza acestui câmp. 2) Namespaces: sub-spații logice în cadrul aceluiași index (nativ în Pinecone și Qdrant). 3) Colecție per Tenant: izolare fizică completă, dar greu de scalat la peste câteva sute de clienți din cauza overhead-ului de memorie.
Cum să o reții ușor
💡 Este diferența între a construi un bloc separat pentru fiecare chiriaș (cost uriaș), a da fiecărui chiriaș un apartament încuiat cu cheie proprie în același bloc (Namespaces), sau a folosi carduri de acces pe fiecare etaj (Payload Filtering).
Opțiuni și parametri tehnici
tenant_id / workspace_id: cheia unică de identificare a organizației sau a utilizatorului.Tenant Partitioning (Qdrant): permite crearea de micro-indecși HNSW independenți per tenant în interiorul aceleiași colecții.Izolare la nivel de interogare: injectează întotdeauna parametrultenant_iddirect din sesiunea securizată JWT a backend-ului, niciodată din datele primite de la utilizator!
Exemple practice și cazuri de utilizare
- Filtru forțat pe tenant în Qdrant:
query_filter=models.Filter(must=[models.FieldCondition(key="tenant_id", match=models.MatchValue(value=current_user.tenant_id))]) - Creare partiție automată în Qdrant: setează
is_tenant=Truela crearea indexului pe câmpultenant_id. - Ștergere rapidă a tuturor datelor când un client își închide contul:
client.delete(collection_name="...", points_selector=models.FilterSelector(filter=...))
Sfaturi de configurare & capcane
Nu lăsa niciodată clientul de frontend să trimită tenant_id ca parametru liber în corpul cererii — validează-l și extrage-l exclusiv din tokenul de autentificare verificat de backend!
Comenzi și ghiduri înrudite
qdrant-search-filtering: Resursă asociată din acest modul.pinecone-index-query: Resursă asociată din acest modul.backup-export-migration-vectordb: Resursă asociată din acest modul.