Coerenza dei dati nelle query Datastore

Livelli di coerenza dei dati

Le query Datastore possono restituire risultati a uno dei due livelli di coerenza seguenti:

  • Le query molto coerenti garantiscono i risultati più recenti, ma il completamento potrebbe richiedere più tempo.
  • Le query a coerenza finale in genere vengono eseguite più velocemente, ma a volte possono restituire risultati obsoleti.

In una query a coerenza finale, si accede anche agli indici utilizzati per raccogliere i risultati con coerenza finale. Di conseguenza, a volte queste query potrebbero restituire entità che non corrispondono più ai criteri di query originali, mentre query a elevata coerenza sono sempre coerenti a livello transazionale.

Coerenza dei dati delle query Datastore

Le query restituiscono i risultati con diversi livelli di garanzia di coerenza, a seconda della natura della query:

  • Le query predecessore (all'interno di un gruppo di entità) sono a elevata coerenza per impostazione predefinita, ma possono invece essere rese coerenti impostando il criterio per la lettura di Datastore (vedi di seguito).
  • Le query dei non predecessori sono sempre coerenti alla fine.

Il recupero di un'entità per chiave, chiamato anche "ricerca per chiave", è fortemente coerente.

Impostazione del criterio per la lettura di Datastore

Per migliorare le prestazioni, puoi impostare il criterio di lettura di Datastore in modo che tutte le letture e le query siano coerenti. L'API consente inoltre di impostare esplicitamente un criterio di elevata coerenza, ma questa impostazione non avrà alcun effetto pratico, poiché le query dei non predecessori sono sempre coerenti indipendentemente dal criterio.

Puoi anche impostare la scadenza della chiamata di Datastore, ovvero il tempo massimo, in secondi, durante il quale l'applicazione attende che Datastore restituisca un risultato prima di interrompere con un errore. La scadenza predefinita è di 60 secondi; al momento non è possibile impostarla su un valore superiore, ma puoi ridurla per assicurarti che una determinata operazione fallisca rapidamente, ad esempio per restituire una risposta più rapida all'utente.

Per impostare il criterio per la lettura di Datastore e la scadenza della chiamata in Python, devi passarli come argomenti ai metodi run(), get(), fetch() e count() delle classi Query o GqlQuery. Ad esempio:

for result in Employee.all().run(limit=5,
                                 read_policy=db.EVENTUAL_CONSISTENCY,
                                 deadline=5):
  # Body of iterative loop

Che cosa succede dopo?