Coherencia de datos en consultas de Cloud Datastore

Niveles de coherencia de datos

Las consultas en Cloud Datastore pueden dar resultados según dos niveles de coherencia:

  • Coherencia sólida: las consultas garantizan los resultados más actualizados, pero pueden tardar más en completarse.
  • Coherencia eventual: las consultas suelen ejecutarse más rápido, pero, en ocasiones, pueden mostrar resultados obsoletos.

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:

  • Las consultas principales (aquellas dentro de un grupo de entidad) son de coherencia sólida según la configuración predeterminada, pero se pueden volver de coherencia eventual si se configura la política de lectura de Cloud Datastore (detallada a continuación).
  • 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. En este momento, no se puede establecer un plazo más largo, pero puedes reducirlo para asegurarte de que una operación en particular falle rápido (por ejemplo, con el objetivo de mostrar una respuesta más rápida al usuario).

Para configurar la política de lectura de Cloud Datastore en Java, construye una configuración de servicio Datastore (DatastoreServiceConfig) con la clase de ayuda anidada DatastoreServiceConfig.Builder y la pasas a una instancia de clase ReadPolicy. El siguiente ejemplo 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

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno estándar de App Engine para Java