Níveis de consistência de dados
As consultas do Datastore podem gerar resultados em dois níveis de consistência:
- Consultas com consistência forte garantem os resultados mais recentes, mas podem levar mais tempo para serem concluídas.
- Consultas com consistência eventual costumam ser mais rápidas, mas podem retornar resultados desatualizados.
Em uma consulta com consistência eventual, os índices usados para coletar os resultados também são acessados com esse tipo de consistência. Consequentemente, essas consultas podem, algumas vezes, retornar entidades que não correspondem mais aos critérios de consulta originais, e as consultas fortemente consistentes são sempre consistentes de maneira transacional.
Consistência de dados da consulta do Datastore
As consultas retornam resultados com diferentes níveis de garantia de consistência, dependendo da natureza da consulta:
- As consultas de ancestral ficam dentro de um grupo de entidades e têm consistência forte por padrão, mas é possível atribuir uma consistência eventual a elas. Para isso, basta definir a política de leitura do Cloud Datastore conforme descrito abaixo.
- As consultas de não ancestral sempre têm consistência eventual.
A busca de uma entidade por chave, também chamada de "pesquisa por chave", tem consistência forte.
Como configurar a política de leitura do Datastore
Para melhorar o desempenho, defina a política de leitura do Datastore para que todas as leituras e consultas tenham consistência posterior. A API também permite definir explicitamente uma política de consistência forte, mas essa configuração não terá efeito prático, porque as consultas de não ancestral sempre têm consistência eventual, independentemente da política.
Também é possível definir o prazo de chamada do Datastore, que é o tempo máximo, em segundos, que o aplicativo aguardará o Datastore retornar um resultado antes de ser cancelado com um erro. O prazo padrão é de 60 segundos. No momento, não é possível aumentá-lo, apenas diminuí-lo para garantir que uma determinada operação falhe rapidamente, por exemplo, para retornar uma resposta mais rápida ao usuário. Para definir a política de leitura do Datastore e a duração máxima da chamada no Python, transmita-as como argumentos para os métodosrun()
, get()
, fetch()
e count()
da classe Query
ou GqlQuery
. Por exemplo:
for result in Employee.all().run(limit=5,
read_policy=db.EVENTUAL_CONSISTENCY,
deadline=5):
# Body of iterative loop
Próximas etapas
- Saiba como especificar o que uma consulta retorna e ter mais controle sobre os resultados da consulta.
- Conheça as restrições comuns para consultas no Datastore.
- Saiba mais sobre os cursores de consulta, que permitem que um aplicativo recupere os resultados de uma consulta em lotes convenientes.
- Conheça a sintaxe básica e a estrutura das consultas do Datastore.