Coherencia de datos en consultas de Cloud Datastore

Niveles de coherencia de datos

Las consultas de Cloud Datastore pueden dar como resultado cualquiera de los dos niveles de coherencia:

  • Coherencia sólida: Estas consultas garantizan que los resultados incluyan la información más reciente, pero pueden tardar más en completarse.
  • Coherencia eventual: Estas consultas suelen ejecutarse más rápido, pero en ocasiones muestran información obsoleta en los resultados.

En una consulta de coherencia eventual, también se accede a los índices usados para reunir los resultados con coherencia eventual. Por lo tanto, esas consultas, a veces, pueden mostrar entidades que ya no coinciden con los criterios originales de la consulta, al tiempo que las consultas de coherencia sólida siempre son coherentes entre las transacciones. Consulta el artículo Aislamiento de transacción en App Engine para obtener más información sobre cómo se actualizan las entidades y los índices.

Coherencia de datos en consultas de Cloud Datastore

Las consultas muestran sus resultados con distintos niveles de garantía de coherencia, según la naturaleza de la consulta.

  • Según la configuración predeterminada, las consultas principales (las que están dentro de un grupo de entidad) usan la coherencia sólida. Sin embargo, se puede modificar la política de lectura de Cloud Datastore (detallada a continuación) para hacer que usen la coherencia eventual.
  • Las consultas no principales siempre son de coherencia eventual.

Recuperar una entidad por clave (lo cual se denomina hacer una "búsqueda por clave") es una operación con coherencia sólida.

Cómo configurar la política de lectura de Cloud Datastore

Para mejorar el rendimiento, puedes configurar la política de lectura de Cloud Datastore a fin de que todas las lecturas y consultas sean de coherencia eventual. (La API también te permite establecer de forma explícita una política de coherencia sólida, pero esta configuración no tendrá efectos prácticos, ya que las consultas no principales son siempre de coherencia eventual sin importar la política).

También puedes configurar el plazo de llamada de Cloud Datastore, que es el tiempo máximo en segundos durante el cual la aplicación esperará que Cloud Datastore muestre un resultado antes de anular con un error. El plazo predeterminado es de 60 segundos. Actualmente no se puede establecer un plazo más largo, pero sí puedes reducirlo a fin de asegurarte de que una operación determinada falle rápido (por ejemplo, para mostrarle una respuesta más rápida al usuario).

Para configurar la política de lectura de Cloud Datastore en Java, debes desarrollar una configuración de servicio de Datastore (DatastoreServiceConfig) con la clase auxiliar anidada DatastoreServiceConfig.Builder y pasarla a una instancia de clase ReadPolicy. En el ejemplo siguiente, se muestra cómo configurar la política de lectura, el plazo de llamada o ambos:

Java 8

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

Java 7

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

Próximos pasos