Consistência de dados em consultas do Datastore

Níveis de consistência dos dados

As consultas da Datastore podem fornecer os respetivos resultados em qualquer um dos dois níveis de consistência:

  • As consultas Fortemente consistentes garantem os resultados mais recentes, mas podem demorar mais tempo a serem concluídas.
  • As consultas eventualmente consistentes são geralmente executadas mais rapidamente, mas podem, ocasionalmente, devolver resultados desatualizados.

Numa consulta eventualmente consistente, os índices usados para recolher os resultados também são acedidos com consistência eventual. Consequentemente, essas consultas podem, por vezes, devolver entidades que já não correspondem aos critérios de consulta originais, enquanto as consultas fortemente consistentes são sempre consistentes do ponto de vista transacional.

Consistência de dados de consulta do armazenamento de dados

As consultas devolvem os respetivos resultados com diferentes níveis de garantia de consistência, consoante a natureza da consulta:

  • As consultas de antepassados (as que estão num grupo de entidades) são fortemente consistentes por predefinição, mas podem ser tornadas eventualmente consistentes definindo a política de leitura do Datastore (veja abaixo).
  • As consultas não descendentes são sempre eventualmente consistentes.

A obtenção de uma entidade por chave, também denominada "pesquisa por chave", é fortemente consistente.

Definir a política de leitura do Datastore

Para melhorar o desempenho, pode definir a política de leitura do Datastore para que todas as leituras e consultas sejam eventualmente consistentes. (A API também permite definir explicitamente uma política de consistência forte, mas esta definição não tem efeito prático, uma vez que as consultas não descendentes são sempre eventualmente consistentes, independentemente da política.)

Também pode definir o prazo de chamada do Datastore, que é o tempo máximo, em segundos, que a aplicação aguarda que o Datastore devolva um resultado antes de terminar com um erro. O prazo predefinido é de 60 segundos. Atualmente, não é possível defini-lo como superior, mas pode ajustá-lo para baixo para garantir que uma determinada operação falha rapidamente (por exemplo, para devolver uma resposta mais rápida ao utilizador).

Para definir a política de leitura e o prazo da chamada do armazenamento de dados em Python, transmita-os como argumentos para os métodos run(), 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

O que se segue?