Descripción general de los flujos de cambios

Un flujo de cambios supervisa y transmite un los cambios en los datos (inserciones, actualizaciones y eliminaciones) de la base de datos en tiempo real.

En esta página, se ofrece una descripción general de los cambios en Spanner de contenido: qué hacen y cómo funcionan. Para aprender a crear y administrar flujos de cambios en tu base de datos y conectarlos a otros servicios, sigue los vínculos que aparecen en Próximos pasos.

Propósito de los flujos de cambios

Los flujos de cambios proporcionan una forma flexible y escalable de transmitir datos cambios a otros servicios. Los casos de uso comunes incluyen los siguientes:

  • Replicar los cambios de datos de Spanner en un almacén de datos, como BigQuery para estadísticas.

  • Activar la lógica de la aplicación según los cambios en los datos enviados a un mensaje como Pub/Sub.

  • Cambios de almacenamiento de datos en Cloud Storage para el cumplimiento o con fines de archivo.

Cambia la configuración del flujo

Spanner trata los flujos de cambios como objetos de esquema, mucho como índices y tablas. Por lo tanto, creas, modificas y borras cambios con instrucciones DDL, y puedes ver las propiedades de una base de datos flujos de cambios, igual que otros esquemas administrados por DDL objetos.

Puedes configurar un flujo de cambios para ver los cambios en los datos de una toda la base de datos o limitar su alcance a tablas y columnas específicas. R puede tener múltiples flujos de cambios y una tabla o puede tener varias transmisiones que la miran, en límites.

También puedes configurar un flujo de cambios para especificar una período de retención de datos, tipo de captura de valores, filtra las eliminaciones basadas en el TTL, o filtro de modificaciones de tablas.

La emisión del DDL que crea un flujo de cambios inicia una generación de una operación. Cuando finaliza, el nuevo flujo de cambios comienza inmediatamente a observar las tablas y las columnas que se le asignaron.

Observa tablas y columnas de forma implícita

Cambia las transmisiones que miran una tabla completa de forma implícita. columnas en esa tabla, incluso cuando la definición de esa tabla está actualizada. Para Por ejemplo, cuando agregas columnas nuevas a esa tabla, el flujo de cambios automáticamente comienza a observar esas columnas nuevas, sin necesidad de en la configuración de ese flujo de cambios. De forma similar, el la transmisión de cambios deja automáticamente de mirar las columnas que se descartan de esa tabla.

Los flujos de cambios de todas las bases de datos funcionan de la misma manera. Miran implícitamente en cada columna de cada tabla, viendo automáticamente cualquier tabla o columnas agregadas después de la creación del flujo de cambios y dejar de ver las tablas o columnas que se descartan.

Observar tablas y columnas de forma explícita

Si configuras un flujo de cambios para ver solo columnas determinadas en un y luego agregas columnas a ella, el flujo de cambios comiencen a observar esas columnas, a menos que reconfigures ese cambio para hacerlo.

El esquema de la base de datos trata los flujos de cambios como objetos dependientes de cualquier columnas o tablas que miran explícitamente. Antes de que puedas soltar de una columna o tabla, debes quitarla de la configuración de cualquier flujo de cambios que lo vea explícitamente.

Tipos de cambios en los datos que flujos de cambios

Los cambios en los datos que observa un flujo de cambios incluyen todas las inserciones, actualizaciones y eliminaciones realizadas en las tablas y columnas que supervisa. Estos los cambios pueden provenir de:

Las transmisiones de cambios pueden observar los cambios en los datos solo en las transmisiones como columnas y tablas. No miran índices, vistas, otros flujos de cambios o tablas del sistema, como el esquema de información o las tablas de estadísticas. Cambiar no miran columnas generadas, a menos que la columna sea parte del clave primaria. Siempre se realiza un seguimiento de las columnas de clave primaria.

Además, los flujos de cambios no observan los cambios de esquema ni los datos cambios que se producen directamente como resultado de cambios de esquema. Por ejemplo, un cambio ver una base de datos completa no trataría eliminar una tabla como una cambian los datos, aunque esta acción quite todos los datos de la tabla de la base de datos.

Cómo Spanner escribe y almacena flujos de cambios

Cada vez que Spanner detecta un cambio en los datos de una columna observada por un flujo de cambios, escribe un registro de cambios de datos en su almacenamiento interno. Lo hace de forma síncrona con esos datos cambio, dentro de la misma transacción. Spanner ambas escrituras para que el mismo servidor las procese lo que minimiza el procesamiento de escritura.

Contenido de un registro de cambios en los datos

Cada registro de cambios de datos escrito por un flujo de cambios incluye el la siguiente información sobre el cambio en los datos:

  • El nombre de la tabla afectada

  • Los nombres, valores y tipos de datos de las claves primarias que identifican la fila modificada

  • Los nombres y tipos de datos de las columnas de la fila modificada que se capturarse según la definición del flujo de cambios.

  • Los valores anteriores de las columnas de la fila. La disponibilidad de los valores anteriores y el contenido del que realizan seguimiento, que pueden ser solo las columnas modificadas o toda la fila a la que se le realiza el seguimiento, depende del tipo de captura de valores configurado por el usuario.

  • Los valores nuevos de las columnas de la fila. La disponibilidad de los valores nuevos y el contenido del que se hace un seguimiento depende del tipo de captura del valor configurado por el usuario.

  • El tipo de modificación (insertar, actualizar o borrar)

  • La marca de tiempo de confirmación

  • El ID de transacción

  • El número de secuencia del registro

  • El tipo de captura del valor del registro de cambios de datos.

Para ver una explicación más detallada de la estructura de los registros de cambios de datos, consulta Registros de cambios de datos.

Retención de datos

Un flujo de cambios retiene sus registros de cambios de datos durante un período entre uno y siete días. Puedes usar DDL para lo siguiente: especificar un límite de retención de datos distinto del predeterminado de un día cuando crear inicialmente un flujo de cambios o ajustarlo en cualquier momento futuro. Ten en cuenta que reducir el límite de retención de datos de un flujo de cambios datos de cambios históricos anteriores al nuevo límite de manera inmediata, y no disponible de forma permanente para los lectores de ese flujo de cambios.

Este período de retención de datos presenta una desventaja. una retención más larga este período conlleva mayores demandas de almacenamiento base de datos de la transmisión.

Tipo de captura de valor

La opción de configuración del tipo de captura de valores de un flujo de cambios controla la forma en que se almacenan los valores de una fila modificada. Puedes usar DDL para especificar uno de los siguientes tipos de captura de valor para un flujo de cambios:

  • OLD_AND_NEW_VALUES: Captura los valores antiguos y nuevos de la modificación de una fila. columnas.

  • NEW_VALUES: Captura solo los valores nuevos de las columnas sin clave, pero no los anteriores. de salida.

  • NEW_ROW: Captura todos los valores nuevos de las columnas observadas, tanto modificadas como sin modificar, siempre que cambie alguna de esas columnas. No se capturan valores anteriores.

  • NEW_ROW_AND_OLD_VALUES: Captura todos los valores nuevos de los objetos modificados y columnas sin modificar y valores antiguos para columnas modificadas.

Cómo excluir eliminaciones basadas en el tiempo de actividad

En Spanner, el tiempo de actividad (TTL) te permite Establecer políticas para borrar periódicamente los datos de las tablas de Spanner De forma predeterminada, los flujos de cambios incluyen todas las eliminaciones basadas en el TTL. Puedes usar exclude_ttl_deletes para configurar tu flujo de cambios y excluir las eliminaciones basadas en el TTL. Cuándo Configura este filtro para excluir las eliminaciones basadas en el TTL solo para las eliminaciones futuras basadas en el TTL. del flujo de cambios.

El valor predeterminado de este filtro es false. Para excluir las eliminaciones basadas en el TTL, establece el filtro en true. Tienes las siguientes opciones: agregar el filtro cuando crees un flujo de cambios o modificar un flujo de cambios existente para incluir el filtro.

Tipo de modificación de tabla

De forma predeterminada, los flujos de cambios incluyen todas las modificaciones de la tabla, como inserciones, actualizaciones y eliminaciones. Puedes filtrar una o más de estas modificaciones de la tabla el alcance de los flujos de cambios con las siguientes opciones de filtro disponibles:

  • exclude_insert: Excluye todas las modificaciones de la tabla INSERT.
  • exclude_update: Excluye todas las modificaciones de la tabla UPDATE.
  • exclude_delete: Excluye todas las modificaciones de la tabla DELETE.

El valor predeterminado de estos filtros es false. Para excluir un tipo específico de modificación de tabla, establece el filtro en true. Puedes establecer una o más filtros al mismo tiempo.

Puedes agregar un filtro para un tipo de modificación de tabla. cuando creas un flujo de cambios o modificar el filtro de un tipo de modificación de tabla para un flujo de cambios existente.

Leyendo flujos de cambios

Spanner ofrece varias formas de leer los datos de un flujo de cambios:

  • A través de Dataflow, con el conector SpannerIO de Apache Beam Esta es nuestra solución recomendada para la mayoría de las aplicaciones de flujo de cambios. Google también proporciona plantillas de Dataflow para casos de uso comunes.

  • de forma directa con la API de Spanner. Esto cambia y capacidades de las canalizaciones de Dataflow para obtener velocidad y flexibilidad.

  • A través del conector de Kafka basado en Debezium para los flujos de cambios de Spanner. Este conector transmite registros de cambio directamente a temas de Kafka.

Puedes proporcionar aislamiento parcial para las lecturas de flujos de cambios usando de lectura. Las lecturas dirigidas pueden ayudar a minimizar el impacto en las cargas de trabajo transaccionales tu base de datos. Puedes usar la API de Spanner para enrutar los cambios transmite lecturas a una región o un tipo de réplica específicos dentro de una multirregión de instancias administrados o una configuración regional personalizada regiones de solo lectura. Para obtener más información, consulta las lecturas dirigidas.

Usa Dataflow

Usar el conector de Apache Beam Spanner para compilar canalizaciones de Dataflow que lean de flujos de cambios. Después del configura el conector con detalles sobre un flujo de cambios en particular, obtiene automáticamente datos nuevos transformar registros en una única fuente PCollection listo para el procesamiento posterior mediante transformaciones posteriores en el Canalización de Dataflow.

Dataflow usa funciones analíticas para dividir las colecciones no delimitadas en componentes lógicos, o ventanas. Como resultado, Dataflow proporciona de transmisión casi en tiempo real cuando de los flujos de cambios.

Google proporciona plantillas que te permiten compilar con rapidez Canalizaciones de Dataflow para casos de uso comunes de flujos de cambios incluido el envío de todos los cambios de datos de un flujo a un de BigQuery o copiarlos a un bucket de Cloud Storage.

Para obtener una descripción general más detallada de cómo los flujos de cambios y Dataflow para trabajar juntos, consulta Crea conexiones de flujos de cambios con Dataflow.

Usar la API

Como alternativa al uso de Dataflow para crear flujos de cambios por lotes, puedes escribir código que use el API de Spanner para leer directamente los registros de un flujo de cambios. Esto te permite leer los registros de cambios de datos de la misma manera que que hace el conector SpannerIO, que cambia la abstracción que proporciona en intercambiar por las latencias más bajas posibles cuando se lee el flujo de cambios de datos no estructurados.

Para obtener más información, consulta Cómo consultar flujos de cambios de cambios. Para obtener información más detallada debate sobre cómo consultar flujos de cambios e interpretar los registros que se muestran, consulta Cambia transmisiones, particiones, registros y consultas.

Usa el conector de Kafka

El conector de Kafka exporta directamente los registros de flujos de cambios en un tema de Kafka. Abstrae los detalles de la consulta de flujos de cambios mediante la API de Spanner.

Para obtener más información sobre cómo funcionan los flujos de cambios y el conector de Kafka consulta Crea conexiones de flujos de cambios con el conector de Kafka.

Límites

Existen varios límites para los flujos de cambios, incluida la cantidad máxima de flujos de cambios que puede tener una base de datos y la cantidad máxima de flujos que pueden ver una sola columna. Para ver una lista completa, consulta Flujo de cambios límites.

Permisos

Las transmisiones de cambios utilizan lo siguiente:

  • Crear, actualizar o descartar flujos de cambios requiere spanner.databases.updateDdl.

  • La lectura de los datos de un flujo de cambios requiere spanner.databases.select.

Si usas el conector SpannerIO, el propietario de la El trabajo de Dataflow que lee datos de flujos de cambios requiere permisos de IAM, ya sea en la base de datos de tu aplicación o en una la base de datos de metadatos, Consulta Crea una base de datos de metadatos.

¿Qué sigue?