Coerenza dei dati nelle query Datastore

Livelli di coerenza dei dati

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

  • 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 con coerenza finale, anche gli indici utilizzati per raccogliere i risultati sono accessibili 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 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 di lettura di Datastore (vedi di seguito).
  • Le query non relative agli antenati sono sempre coerenti in modo definitivo.

Il recupero di un'entità per chiave, detto anche "ricerca per chiave", 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 inoltre di impostare in modo esplicito 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. 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 di 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