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:

In una query con coerenza finale, anche gli indici utilizzati per raccogliere i risultati vengono accessi con coerenza finale. Di conseguenza, queste query a volte 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 di antenati (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 a coerenza finale.

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 il criterio di lettura di Datastore in modo che tutte le letture e le query siano coerenti nel tempo. L'API consente anche di impostare esplicitamente una policy di elevata coerenza, ma questa impostazione non avrà alcun effetto pratico, poiché le query non discendenti sono sempre coerenti alla fine, indipendentemente dalla policy.

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. L'esempio seguente 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