Coerenza dei dati nelle query di Datastore

Livelli di coerenza dei dati

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

  • Le query a elevata coerenza 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 originali della query, mentre 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 precedenti (all'interno di un gruppo di entità) sono a elevata coerenza per impostazione predefinita, ma possono essere rese alla fine coerenti impostando il criterio per la lettura Datastore (vedi di seguito).
  • Le query sui 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 alla fine coerenti. L'API consente anche di impostare esplicitamente un criterio di elevata coerenza, ma questa impostazione non avrà alcun effetto pratico, poiché le query non relative ai predecessori sono sempre coerenti indipendentemente dal criterio.

Puoi anche impostare la scadenza della chiamata di Datastore, ossia il tempo massimo, in secondi, entro cui 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 è possibile regolarla in basso per garantire che una determinata operazione si spenga rapidamente (ad esempio, per restituire una risposta più rapida all'utente).

Per impostare il criterio per la lettura Datastore in Java, devi creare una configurazione del servizio Datastore (DatastoreServiceConfig) utilizzando la classe helper nidificata DatastoreServiceConfig.Builder, quindi passare un'istanza di classe ReadPolicy. L'esempio seguente mostra come impostare il criterio per la lettura, la scadenza della chiamata o entrambi:

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);

Che cosa succede dopo?