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 ver 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.