Puoi supportare la multitenancy nell'applicazione fornendo partizioni dei dati separate per più organizzazioni client, denominate tenant. In questo modo puoi personalizzare i valori dei dati per ogni tenant, mantenendo lo stesso schema dei dati per tutti i tenant. Questo rende il provisioning dei nuovi tenant più efficiente perché non devi modificare la struttura dei dati quando aggiungi un tenant.
Vantaggi della multitenancy
Firestore in modalità Datastore consente a un'applicazione multitenant di utilizzare silos di dati separati per ogni tenant, continuando a utilizzare:
- un singolo progetto
- un'unica struttura logica per i tipi
- un unico insieme di definizioni di indice, dato che i tipi sono gli stessi logicamente per ciascun tenant
La modalità Datastore abilita la multitenancy fornendo spazi dei nomi.
Multitenancy e dati partizionati
La modalità Datastore utilizza le partizioni per isolare i dati per 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 l'ambito delle query è una singola partizione.
Specifica di uno spazio dei nomi per un'entità
Lo spazio dei nomi viene specificato quando crei l'entità: dopo aver creato l'entità, non puoi modificare lo spazio dei nomi. Se non specifichi in modo esplicito uno spazio dei nomi per un'entità, questo viene automaticamente assegnato 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 predecessori 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 dell'entità padre: non puoi specificare altri spazi dei nomi.
Caso d'uso di esempio
Un vantaggio chiave della multitenancy è avere la stessa applicazione per più organizzazioni client. Per ottenere questo vantaggio, per un determinato tipo l'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 logicamente essere identica a un'entità di tipo Task
in tutti gli altri spazi dei nomi. L'applicazione potrebbe quindi utilizzare un singolo insieme di definizioni di indice per supportare le query Task
, indipendentemente da quali spazi dei nomi contengono entità Task
.
Ad esempio, considera un'applicazione Elenco attività che isola i dati in base a singoli utenti. L'applicazione potrebbe definire gli 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 archiviata nella partizione
dell'utente, il che genera dati isolati. L'applicazione elabora le entità Task
in modo coerente negli spazi dei nomi perché viene utilizzato un solo schema per il tipo Task
. Un'applicazione con dati isolati e comportamento coerente è multitenant.
Se la struttura logica di un tipo Task
differisce in base allo spazio dei nomi, l'applicazione non sarebbe multitenant perché elabora le entità Task
in modo diverso negli spazi dei nomi. Ad esempio, considera i tipi Task
con schema diverso 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 l'applicazione non sarebbe multitenant.
Visualizzazione degli spazi dei nomi nella console
Per visualizzare le statistiche per gli spazi dei nomi utilizzati nel progetto, visita la pagina Dashboard Datastore nella console Google Cloud. Per determinare in modo programmatico quali spazi dei nomi vengono utilizzati nel progetto, consulta Query dello spazio dei nomi.
Se devi raggruppare i dati all'interno di un tenant, puoi categorizzarli per tipi, nonché organizzare dati altamente correlati con gruppi di entità.