Multitenancy

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 Tasktipos que têm esquemas diferentes com base no espaço de nomes:

  • Task entidades no espaço de nomes Joe excluem a propriedade description do índice
  • As entidades Taskno espaço de nomes Alice incluem a description 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.TaskTask

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.

O que se segue?