Coerenza dei dati nelle query Datastore

Livelli di coerenza dei dati

Le query Datastore possono fornire i risultati a uno dei due livelli di coerenza:

  • Le query a elevata coerenza garantiscono i risultati più recenti, ma potrebbero richiedere più tempo.
  • Le query a coerenza finale generalmente vengono eseguite più velocemente, ma a volte potrebbero restituire risultati non aggiornati.

In una query a coerenza finale, si accede anche agli indici utilizzati per raccogliere i risultati con coerenza finale. Di conseguenza, queste query a volte possono restituire entità che non corrispondono più ai criteri originali, mentre le query a elevata coerenza sono sempre coerenti dal punto di vista 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 essere rese coerenti impostando il criterio per la lettura Datastore (vedi di seguito).
  • Le query non predecessori sono sempre coerenti alla fine.

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

Impostazione del criterio per la lettura di Datastore

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

Puoi anche impostare la scadenza delle chiamate di Datastore, ovvero il tempo massimo, in secondi, durante il quale l'applicazione attenderà che Datastore restituisca un risultato prima di interromperla con un errore. La scadenza predefinita è 60 secondi. Al momento non è possibile impostarla su un valore superiore, ma puoi regolarla verso il basso per assicurarti che una determinata operazione non vada a buon fine rapidamente (ad esempio per restituire una risposta più rapida all'utente).

Per impostare il criterio per la lettura di Datastore e la scadenza delle chiamate in Python, devi passarli come argomenti ai metodi run(), get(), fetch() e count() della classe 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?