Coerenza dei dati nelle query Datastore

Livelli di coerenza dei dati

Le query del datastore possono restituire i risultati a due livelli di coerenza:

  • Le query molto coerenti garantiscono i risultati più recenti, ma potrebbero richiedere più tempo per essere completate.
  • Le query coerenti in modo definitivo in genere vengono eseguite più rapidamente, ma a volte possono restituire risultati non aggiornati.

In una query con coerenza finale, anche gli indici utilizzati per raccogliere i risultati vengono acceduti 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 di transazioni.

Coerenza dei dati delle query di Datastore

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

  • Le query sugli antenati (quelle all'interno di un gruppo di entità) sono fortemente coerenti per impostazione predefinita, ma possono essere rese coerenti in modo definitivo impostando il criterio per la lettura del Datastore (vedi di seguito).
  • Le query non relative agli antenati sono sempre coerenti in modo definitivo.

Il recupero di un'entità tramite chiave, chiamato anche "ricerca tramite 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 eventualmente 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 antecedenti sono sempre eventualmente coerenti indipendentemente dal criterio.

Puoi anche impostare la scadenza della chiamata di Datastore, ovvero il tempo massimo, in secondi, che l'applicazione attenderà che Datastore restituisca un risultato prima di abortire con un errore. Il termine per impostazione predefinita è di 60 secondi. Al momento non è possibile impostarlo su un valore superiore, ma puoi modificarlo 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 in Java, crea una configurazione del servizio Datastore (DatastoreServiceConfig), utilizzando la classe di assistenza nidificata DatastoreServiceConfig.Builder e passa un'istanza della 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);

Passaggi successivi