Puoi supportare la multitenancy nella tua applicazione fornendo dati separati per più organizzazioni cliente, note come tenant. In questo modo, puoi personalizzare i valori dei dati per ogni tenant, mantenendo lo stesso schema di dati per tutti i tenant. In questo modo, il provisioning dei 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 silos di dati separati per ogni tenant mentre continui a utilizzare:
- un singolo progetto
- una singola struttura logica per i tipi
- un singolo insieme di definizioni di indice, perché i tipi sono logicamente uguali per ogni inquilino
La modalità Datastore attiva la multitenancy fornendo gli spazi dei nomi.
Multitenancy e dati partizionati
La modalità Datastore utilizza le partizioni per isolare i dati per ciascun tenant. La combinazione di un ID progetto e di 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.
Specifica di 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à, questo viene assegnato automaticamente allo spazio dei nomi predefinito, che non ha un identificatore di stringa.
Utilizzo degli spazi dei nomi con entità padre
Un'entità e tutti i suoi antenati appartengono a un solo spazio dei nomi. Questo significa che quando crei un'entità con un'altra entità designata come principale, l'entità figlio si trova nello stesso spazio dei nomi dell'entità padre: non puoi specificare a un altro spazio dei nomi.
Caso d'uso di esempio
Un vantaggio chiave della multitenancy è che la stessa applicazione gestisce più
alle organizzazioni clienti. Per ottenere questo vantaggio, per un determinato tipo,
dovrebbe comportarsi allo stesso modo a prescindere 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. L'applicazione potrebbe quindi utilizzare un unico insieme di definizioni di indici per supportare le query Task
, indipendentemente dagli spazi dei nomi che contengono entità Task
.
Ad esempio, prendi in considerazione un'applicazione di elenchi di attività che raggruppa i dati per utente. L'applicazione può definire spazi dei nomi in base al nome utente, ottenendo le seguenti 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
, l'entità viene memorizzata
la tua partizione, generando dati isolati. 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 silo e comportamento coerente è
multi-tenant.
Se la struttura logica di un tipo Task
differisce in base allo spazio dei nomi, l'applicazione
non sarebbe multitenant perché elabora Task
entità in modo diverso
tra gli spazi dei nomi. Ad esempio, considera Task
tipi con schema diverso
in base allo spazio dei nomi:
- Le entità
Task
nello spazio di nomi Joe escludeno la proprietàdescription
dall'indice - Le entità
Task
nello spazio di 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, pertanto non sarebbe multi-tenant.
Visualizzazione degli spazi dei nomi nella console
Per visualizzare le statistiche relative agli spazi dei nomi utilizzati nel progetto, visita la pagina Dashboard di Datastore nella console Google Cloud. Per determinare in modo programmatico quali spazi dei nomi vengono utilizzati nel tuo progetto, consulta Query dello spazio dei nomi.
Se hai bisogno di raggruppare i dati all'interno di un tenant, puoi classificarli in base a tipi e puoi anche organizzare dati altamente correlati con gruppi di entità.