Límites de marcas de tiempo

Introducción

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

¿Por qué establecer un límite de marca de tiempo? Si tu base de datos está distribuida geográficamente (esa es que creaste tu instancia de Spanner con una instancia configuración) y tu aplicación puede tolerar un poco de obsolescencia cuando lea puedes obtener beneficios de latencia con la ejecución de una lectura inactiva 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, Spanner esperará esa marca de tiempo antes de entregar la operación de 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.

  • Spanner realiza un seguimiento del earliest_version_time de una base de datos, que especifica el momento más antiguo en el que se pueden leer versiones anteriores de datos. No puedes leer en una marca de tiempo anterior a la hora de la versión más antigua.

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

Sólida

Spanner proporciona un tipo de límite para 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

Spanner proporciona un tipo de límite para la inactividad limitada. Inactividad limitada le permiten a Spanner elegir la marca de tiempo de lectura, sujeta a una solicitud límite de inactividad proporcionado. Spanner elige la marca de tiempo más reciente en el límite de inactividad que permite la ejecución de las lecturas en el límite disponible más cercano 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

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 se puede expresar como una confirmación absoluta de Spanner marca de tiempo o una obsolescencia 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

Spanner recolecta, de forma continua, elementos no utilizados de los datos borrados y 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 después de que vencen después de la version_retention_period de la base de datos. El valor predeterminado es de 1 hora, pero se puede configurar hasta 1 semana. 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. de lectura y consultas en SQL con Las marcas de tiempo de lectura demasiado antiguas fallan con el error FAILED_PRECONDITION. El único excepción es Partition Read/Query con los tokens de partición, que impedirán la recolección de elementos no utilizados de datos vencidos la sesión permanezca activa.