Multitenancy

Puoi supportare la multitenancy nella tua applicazione fornendo partizioni di dati separate per più organizzazioni client, 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 multi-tenant di utilizzare silos 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 indici, perché i tipi sono gli stessi logicamente per ogni tenant

La modalità Datastore abilita il multitenancy fornendo namespaces.

Multitenancy e dati partizionati

La modalità Datastore utilizza le partizioni per isolare i dati per ogni 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 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 le entità principali

Un'entità e tutti i suoi antenati appartengono a un solo spazio dei nomi. Ciò significa che quando crei un'entità con un'altra entità designata come principale, l'entità secondaria si trova nello stesso spazio dei nomi della principale: non puoi specificare un altro spazio dei nomi.

Caso d'uso di esempio

Uno dei principali vantaggi della multitenancy è che la stessa applicazione può essere utilizzata da più organizzazioni cliente. 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. 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 Elenco di attività che raggruppa i dati per utente. L'applicazione potrebbe definire gli spazi dei nomi in base al nome utente, generando 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, questa viene memorizzata nella sua partizione, 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 silo e comportamento coerente è multi-tenant.

Se la struttura logica di un tipo Task è diversa in base allo spazio dei nomi, l'applicazione non è multi-tenant perché elabora le entità Task in modo diverso tra gli spazi dei nomi. Ad esempio, considera i tipi Task che hanno schemi diversi 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 progetto, consulta Query sullo spazio dei nomi.

Se devi raggruppare i dati all'interno di un tenant, puoi classificarli in base ai tipi e organizzare i dati altamente correlati con i gruppi di entità.

Passaggi successivi