Límites de marcas de tiempo

Introducción

Cuando se leen datos en Cloud Spanner en una transacción de solo lectura o una llamada de solo lectura, puedes establecer un límite de marca de tiempo, que le indica a Cloud Spanner cómo elegir una marca de tiempo para leer los datos.

¿Por qué establecer un límite de marca de tiempo? Si tu base de datos está distribuida de manera geográfica (es decir, si creaste tu instancia de Cloud Spanner con una configuración de instancia multirregional) y tu aplicación puede tolerar un poco de inactividad cuando lee datos, obtendrás beneficios de la ejecución de una lectura inactiva en lugar de la ejecución de una lectura sólida. (Consulta Lecturas para obtén más información sobre estos tipos de lectura).

Tipos de límites de marca de tiempo

Los tipos de límites de marca de tiempo son los siguientes:

  • Óptima (predeterminado): lee los datos más recientes.
  • Inactividad limitada: lee una versión de los datos que no es más inactiva que un límite.
  • Inactividad exacta: lee la versión de los datos en una marca de tiempo exacta, p. ej., un punto en el pasado, aunque puedes especificar una marca de tiempo para un momento que aún no ha sucedido. (Si especificas una marca de tiempo en el futuro, Cloud Spanner esperará esa marca de tiempo antes de entregar la lectura).

Notas:

  • Aunque las lecturas que usan estos límites de marca de tiempo no son parte de una transacción de lectura y escritura, pueden bloquear la espera de transacciones de lectura y escritura simultáneas a confirmarse. Las lecturas de inactividad limitada intentan elegir una marca de tiempo para evitar el bloqueo, pero puede que aún se bloqueen.

  • Las lecturas inactivas (es decir, el uso de los tipos de inactividad limitada o exacta) tienen el beneficio máximo de rendimiento en los intervalos de inactividad más prolongados. Usa un mínimo de 10 segundos de inactividad para obtener un beneficio.

Los tipos de límites de marca de tiempo de Cloud Spanner se explican con más detalle a continuación.

Óptima

Cloud Spanner proporciona un tipo de límite para las lecturas sólidas. Se garantiza que las lecturas sólidas verán los efectos de todas las transacciones confirmadas antes del inicio de la lectura. Además, todas las filas generadas por una sola lectura son coherentes entre sí. Si alguna parte de la lectura observa una transacción, todas las partes de la lectura ven la transacción.

Las lecturas sólidas no se pueden repetir: dos transacciones consecutivas de solo lectura sólida podrían mostrar resultados incoherentes si hay escrituras simultáneas. Si se requiere coherencia entre las lecturas, las lecturas deben ejecutarse dentro de la misma transacción o en una marca de tiempo de lectura exacta.

Inactividad limitada

Cloud Spanner proporciona un tipo de límite para la inactividad limitada. Los modos de inactividad limitada permiten que Cloud Spanner elija la marca de tiempo de lectura, sujeta a un límite de inactividad proporcionado por el usuario. Cloud Spanner elige la marca de tiempo más reciente dentro del límite de inactividad que permite la ejecución de las lecturas en la réplica más cercana disponible sin bloquear.

Todas las filas generadas son coherentes entre sí. Si alguna parte de la lectura observa una transacción, todas las partes de la lectura ven la transacción. Las lecturas con inactividad limitada no se pueden repetir: dos lecturas inactivas, aunque usen el mismo límite de inactividad, pueden ejecutarse en diferentes marcas de tiempo y, de esa forma, mostrar resultados inconsistentes.

Las lecturas de inactividad limitada suelen ser un poco más lentas que las lecturas de inactividad exacta.

Inactividad exacta

Cloud Spanner proporciona un tipo de límite para la inactividad exacta. Estos límites de marca de tiempo ejecutan lecturas en una marca de tiempo especificada por el usuario. Se garantiza que las lecturas en una marca de tiempo ven un prefijo coherente del historial global de transacciones: observan las modificaciones hechas por todas las transacciones con una marca de tiempo de confirmación inferior o igual a la marca de tiempo de lectura y no observan ninguna modificación hecha por transacciones con una marca de tiempo de confirmación mayor. Se bloquearán hasta que hayan terminado todas las transacciones conflictivas a las que se les hayan asignado marcas de tiempo de confirmación inferiores o iguales a la marca de tiempo de lectura.

La marca de tiempo puede expresarse como una marca de tiempo de confirmación absoluta de Cloud Spanner o una inactividad relativa a la hora actual.

Estos modos no requieren una “fase de negociación” para elegir una marca de tiempo. Como resultado, se ejecutan un poco más rápido que los modos de simultaneidad de inactividad limitada equivalentes. Por otro lado, las lecturas de inactividad limitada suelen mostrar resultados más recientes.

Máxima marca de tiempo de inactividad

Cloud Spanner recolecta, de forma continua, elementos no usados que se borraron y datos reemplazados en segundo plano para recuperar espacio de almacenamiento. A este proceso se lo conoce como versión GC. La versión GC recupera versiones que tienen una hora de antigüedad. Debido a esto, Cloud Spanner no puede realizar lecturas en una marca de tiempo de lectura mayor que una hora de antigüedad. Esta restricción también se aplica a las lecturas o consultas de SQL en curso cuya marca de tiempo haya pasado a ser demasiado antigua durante la ejecución. Las lecturas y las consultas de SQL con marcas de tiempo de lectura demasiado antiguas fallan con el error FAILED_PRECONDITION. La única excepción es la lectura de partición con tokens de partición, lo que permite lecturas coherentes en una marca de tiempo de más de una hora de antigüedad, cuando la sesión permanece activa.