Puoi supportare il multitenancy nella tua applicazione fornendo partizioni di dati separate per più organizzazioni clienti, note come tenant. In questo modo puoi personalizzare i valori dei dati per ogni tenant, mantenendo lo stesso schema dei dati per tutti i tenant. In questo modo il provisioning di nuovi tenant è più efficiente perché non devi modificare la struttura dei dati quando aggiungi un tenant.
Vantaggi del multitenancy
Firestore in modalità Datastore consente a un'applicazione multitenant di utilizzare silo di dati separati per ogni tenant, continuando a utilizzare:
- un singolo progetto
- una singola struttura logica per i tipi
- un unico insieme di definizioni di indice, perché i tipi sono logicamente gli stessi per ogni tenant
La modalità Datastore consente il multitenancy fornendo spazi dei nomi.
Multitenancy e dati partizionati
La modalità Datastore utilizza le partizioni per isolare i dati di ogni tenant. La combinazione di un ID progetto e un ID spazio dei nomi forma un ID partizione, che identifica ogni partizione. Un'entità appartiene a una singola partizione e le query sono limitate a una singola partizione.
Specificare uno spazio dei nomi per un'entità
Specifichi lo spazio dei nomi quando crei l'entità: dopo aver creato l'entità, non puoi modificare lo spazio dei nomi. Se non specifichi esplicitamente uno spazio dei nomi per un'entità, questa viene assegnata automaticamente allo spazio dei nomi predefinito, che non ha un identificatore stringa.
Utilizzo degli spazi dei nomi con le entità padre
Un'entità e tutti i relativi antenati appartengono a un solo spazio dei nomi. Ciò significa che quando crei un'entità con un'altra entità designata come padre, l'entità figlio si trova nello stesso spazio dei nomi del padre: non puoi specificare un altro spazio dei nomi.
Caso d'uso di esempio
Un vantaggio fondamentale del multitenancy è che la stessa applicazione serve più organizzazioni
client. Per ottenere questo vantaggio, per un determinato tipo, la tua
applicazione deve comportarsi allo stesso modo indipendentemente dallo spazio dei nomi. Ad esempio,
dal punto di vista dell'applicazione, un'entità di tipo Task
in uno spazio dei nomi
dovrebbe essere logicamente uguale a un'entità di tipo Task
in tutti gli altri
spazi dei nomi. La tua applicazione potrebbe quindi utilizzare un unico insieme di definizioni di indice
per supportare le query Task
, indipendentemente dagli spazi dei nomi che contengono entità Task
.
Ad esempio, considera un'applicazione Elenco attività che isola i dati in base all'utente. L'applicazione potrebbe definire spazi dei nomi in base al nome utente, con conseguenti partizioni:
Partition ID: project:"my_project_id"/namespace:"Joe" Partition ID: project:"my_project_id"/namespace:"Alice" Partition ID: project:"my_project_id"/namespace:"Charlie"
L'applicazione potrebbe definire una struttura logica di tipo Task
come segue, da utilizzare per tutti gli spazi dei nomi:
kind: Task properties: - "done", Boolean - "created", DateTime - "description", String, excluded from index
Quando un utente crea un'entità di tipo Task
, questa viene archiviata nella partizione dell'utente, con conseguente isolamento dei dati. L'applicazione elabora le entità Task
in modo coerente tra gli spazi dei nomi perché viene utilizzato un solo schema per il
tipo Task
. Un'applicazione con dati isolati e un comportamento coerente sarebbe
multitenant.
Se la struttura logica di un tipo Task
varia in base allo spazio dei nomi, l'applicazione
non sarebbe multi-tenant perché elabora le entità Task
in modo diverso
nei vari spazi dei nomi. Ad esempio, considera i tipi Task
che hanno schemi diversi
in base allo spazio dei nomi:
- Le entità
Task
nello spazio dei nomi Joe escludono la proprietàdescription
dall'indice - Le entità
Task
nello spazio dei nomi Alice includono la proprietàdescription
dell'indice
L'applicazione potrebbe eseguire query sulla proprietà description
per le entità Task
di Alice, ma non sulla proprietà description
per le entità Task
di Joe, quindi non sarebbe multi-tenant.
Visualizzazione degli spazi dei nomi nella console
Per visualizzare le statistiche per gli spazi dei nomi utilizzati nel tuo progetto, visita la pagina della dashboard Datastore nella console Google Cloud . Per determinare in modo programmatico quali spazi dei nomi vengono utilizzati nel tuo progetto, consulta Query sugli spazi dei nomi.
Se devi raggruppare i dati all'interno di un tenant, puoi classificarli per tipi e puoi anche organizzare i dati correlati con i gruppi di entità.