Pode suportar a multilocação na sua aplicação fornecendo partições de dados separadas para várias organizações de clientes, conhecidas como locatários. Isto permite-lhe personalizar os valores de dados para cada inquilino, mantendo o mesmo esquema de dados para todos os inquilinos. Isto torna o aprovisionamento de novos inquilinos mais eficiente porque não tem de alterar a estrutura de dados quando adiciona um inquilino.
Vantagens da multitenancy
O Firestore no modo Datastore permite que uma aplicação multiinquilino use silos de dados separados para cada inquilino, enquanto continua a usar:
- um único projeto
- uma única estrutura lógica para os tipos
- Um único conjunto de definições de índice, porque os tipos são logicamente os mesmos para cada inquilino
O modo Datastore ativa a multilocação através da disponibilização de espaços de nomes.
Multilocatário e dados particionados
O modo Datastore usa partições para isolar os dados de cada inquilino. A combinação de um ID do projeto e um ID do espaço de nomes forma um ID da partição, que identifica cada partição. Uma entidade pertence a uma única partição e as consultas são limitadas a uma única partição.
Especificar um espaço de nomes para uma entidade
Especifica o espaço de nomes quando cria a entidade. Depois de criar a entidade, não pode alterar o espaço de nomes. Se não especificar explicitamente um espaço de nomes para uma entidade, esta é automaticamente atribuída ao espaço de nomes predefinido, que não tem um identificador de string.
Usar espaços de nomes com entidades principais
Uma entidade e todos os respetivos antecessores pertencem a um e apenas um espaço de nomes. Isto significa que, quando cria uma entidade com outra entidade designada como principal, a entidade secundária está no mesmo espaço de nomes que a principal. Não pode especificar outro espaço de nomes.
Exemplo de utilização
Uma das principais vantagens da multilocação é ter a mesma aplicação a servir várias organizações de clientes. Para alcançar esta vantagem, para um determinado tipo, a sua aplicação deve comportar-se da mesma forma, independentemente do espaço de nomes. Por exemplo, do ponto de vista da aplicação, uma entidade do tipo Task
num espaço de nomes deve ser logicamente igual a uma entidade do tipo Task
em todos os outros espaços de nomes. A sua aplicação pode, então, usar um único conjunto de definições de índice
para suportar consultas Task
, independentemente dos espaços de nomes que contenham entidades Task
.
Por exemplo, considere uma aplicação de lista de tarefas que armazena dados em silos por utilizador. A aplicação pode definir espaços de nomes com base no nome de utilizador, o que resulta nas seguintes partições:
Partition ID: project:"my_project_id"/namespace:"Joe" Partition ID: project:"my_project_id"/namespace:"Alice" Partition ID: project:"my_project_id"/namespace:"Charlie"
A aplicação pode definir uma estrutura lógica de um tipo Task
da seguinte forma para usar em todos os espaços de nomes:
kind: Task properties: - "done", Boolean - "created", DateTime - "description", String, excluded from index
Quando um utilizador cria uma entidade do tipo Task
, a entidade é armazenada na partição do próprio utilizador, o que resulta em dados isolados. A aplicação processa entidades Task
de forma consistente em todos os espaços de nomes porque apenas um esquema é usado para o tipo Task
. Uma aplicação com dados isolados e um comportamento consistente seria
multilocatária.
Se a estrutura lógica de um tipo Task
diferir por espaço de nomes, a aplicação não seria multiinquilino porque processa entidades Task
de forma diferente em todos os espaços de nomes. Por exemplo, considere Task
tipos que têm esquemas diferentes
com base no espaço de nomes:
Task
entidades no espaço de nomes Joe excluem a propriedadedescription
do índice- As entidades
Task
no espaço de nomes Alice incluem adescription
propriedade do índice
A aplicação podia consultar a propriedade description
para as entidades de Alice, mas não podia consultar a propriedade description
para as entidades de Joe. Por isso, a aplicação não seria multi-inquilino.Task
Task
Visualizar espaços de nomes na consola
Para ver estatísticas dos espaços de nomes usados no seu projeto, visite a página Painel de controlo do Datastore na Google Cloud consola. Para determinar programaticamente que espaços de nomes são usados no seu projeto, consulte Consultas de espaços de nomes.
Se precisar de agrupar dados num inquilino, pode categorizar os dados por tipos e também pode organizar dados altamente relacionados com grupos de entidades.