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 propriedadedescription
do índice - As entidades
Task
no namespace de Alice incluem a propriedadedescription
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 conferir as estatísticas dos 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.
Próximas etapas
- Saiba mais sobre entidades.
- Saiba mais sobre consultas.