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 fortemente coerenti garantiscono i risultati più recenti, ma potrebbero richiedere più tempo per essere completate.
  • Le query eventualmente coerenti� vengono eseguite in genere più rapidamente, ma a volte potrebbero restituire risultati obsoleti.

In una query con coerenza finale, anche gli indici utilizzati per raccogliere i risultati vengono accessi con coerenza finale. Di conseguenza, a volte queste query possono restituire entità che non corrispondono più ai criteri della query originale, mentre le query fortemente coerenti 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 (quelle all'interno di un gruppo di entità) sono fortemente coerenti per impostazione predefinita, ma possono invece essere rese coerenti in modo definitivo impostando il criterio per la lettura di Datastore (vedi sotto).
  • Le query non discendenti 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 il rendimento, puoi impostare i criteri di lettura di Datastore in modo che tutte le letture e le query siano coerenti nel tempo. L'API consente anche di impostare esplicitamente un criterio di elevata coerenza, ma questa impostazione non avrà alcun effetto pratico, poiché le query non discendenti sono sempre coerenti alla fine, indipendentemente dal criterio.

Puoi anche impostare la scadenza della chiamata di Datastore, ovvero il tempo massimo, in secondi, che l'applicazione attenderà prima che Datastore restituisca un risultato prima di interrompere l'operazione 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 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 in Java, devi creare una configurazione del servizio Datastore (DatastoreServiceConfig), utilizzando la classe helper nidificata DatastoreServiceConfig.Builder e passandogli un'istanza della classe ReadPolicy. Il seguente esempio mostra come impostare la criterio per la lettura, la scadenza della chiamata o entrambe:

double deadline = 5.0;

// Construct a read policy for eventual consistency
ReadPolicy policy = new ReadPolicy(ReadPolicy.Consistency.EVENTUAL);

// Set the read policy
DatastoreServiceConfig eventuallyConsistentConfig =
    DatastoreServiceConfig.Builder.withReadPolicy(policy);

// Set the call deadline
DatastoreServiceConfig deadlineConfig = DatastoreServiceConfig.Builder.withDeadline(deadline);

// Set both the read policy and the call deadline
DatastoreServiceConfig datastoreConfig =
    DatastoreServiceConfig.Builder.withReadPolicy(policy).deadline(deadline);

// Get Datastore service with the given configuration
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(datastoreConfig);

Passaggi successivi