Multilocação

Seus aplicativos podem ser compatíveis com a multilocação fornecendo partições de dados separadas para várias organizações clientes, conhecidas como locatários. Isso permite personalizar valores de dados para cada locatário, mantendo o mesmo esquema de dados para todos eles. Assim, o provisionamento de novos locatários se torna mais eficiente, já que você não precisa alterar a estrutura de dados ao adicionar um locatário.

Benefícios da multilocação

O Firestore no modo Datastore permite que um aplicativo multilocatário use silos de dados separados para cada locatário enquanto usa:

  • um único projeto;
  • uma única estrutura lógica para os tipos;
  • um único conjunto de definições de índice, porque os tipos são os mesmos logicamente para cada locatário.

O modo Datastore permite a multilocação fornecendo namespaces.

Multilocação e dados particionados

O modo Datastore usa partições em dados de silo para cada locatário. A combinação entre um código de projeto e um código de namespace forma um código de partição, que identifica cada uma delas. Uma entidade pertence a uma única partição, e o escopo das consultas é direcionado a uma única partição.

Como especificar um namespace para uma entidade

O namespace é especificado ao criar a entidade. Depois de criá-la, não é possível alterar o namespace. Se você não especificar explicitamente um namespace para uma entidade, é atribuído automaticamente a ela o namespace padrão, que não tem identificador de strings.

Como usar namespaces com entidades mãe

Uma entidade e todos os seus ancestrais pertencem somente um namespace. Isso significa que, ao criar uma entidade com outra entidade designada como mãe, a entidade filha estará no mesmo namespace que a mãe. Não é possível especificar outro namespace.

Amostra de caso de uso

Um dos benefícios principais da multilocação é que o mesmo aplicativo serve a várias organizações cliente. Para ter esse benefício, seu aplicativo deve se comportar da mesma maneira em relação a um determinado tipo independentemente do namespace. Por exemplo, na perspectiva do aplicativo, uma entidade do tipo Task em um namespace deve ser logicamente igual a uma entidade do tipo Task em todos os outros namespaces. Seu aplicativo poderia, então, usar um único conjunto de definições de índice para aceitar consultas Task, independentemente de quais namespaces contenham entidades Task.

Por exemplo, pense em um aplicativo de Lista de tarefas que separa os dados em silos por usuário. O aplicativo pode definir namespaces com base no nome de usuário, resultando 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"

O aplicativo poderia definir uma estrutura lógica de um tipo Task da seguinte maneira, para usar em todos os namespaces:

kind: Task
properties:
 - "done", Boolean
 - "created", DateTime
 - "description", String, excluded from index

Quando um usuário cria uma entidade do tipo Task, a entidade é armazenada na própria partição do usuário, resultando em dados isolados. O aplicativo processa entidades Task de forma consistente em namespaces, porque apenas um único esquema é usado para o tipo Task. Um aplicativo com dados agrupados e comportamento consistente é multilocatário.

Se a estrutura lógica de um tipo Task difere por namespace, o aplicativo não seria multilocatário porque processa entidades Task de maneira diferente em namespaces. Por exemplo, considere os tipos Task que têm esquemas diferentes com base no namespace:

  • As entidades Task no namespace de Joe excluem a propriedade description do índice
  • As entidades Task no namespace de Alice incluem a propriedade description do índice

O aplicativo pode consultar na propriedade description das entidades Task de Alice, mas não pode fazer o mesmo na propriedade description das entidades Task de Joe, de modo que o aplicativo não seria multilocatário.

Como exibir namespaces no console

Para ver estatísticas sobre os namespaces usados no seu projeto, acesse a página Painel do Datastore no Console do Google Cloud. Para determinar via programação quais namespaces serão usados no projeto, consulte Consultas de namespace.

Para agrupar dados dentro de um locatário, classifique os dados por tipos. Também é possível organizar dados altamente relacionados com grupos de entidades.

A seguir