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 alto nivel de los flujos de cambios de Spanner: 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 cambios de datos 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 realizar análisis

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

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

Configuración del flujo de cambios

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

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. Una base de datos puede tener varios flujos de cambios, y una tabla o columna en particular puede tener varios flujos que la supervisan, dentro de límites.

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

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

Cómo supervisar tablas y columnas de forma implícita

Los flujos de cambios que supervisan una tabla completa supervisan implícitamente todas las columnas de esa tabla, incluso cuando se actualiza la definición de la tabla. 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. Del mismo modo, la transmisión de cambios deja de observar automáticamente las columnas que se eliminan de esa tabla.

Los flujos de cambios de todas las bases de datos funcionan de la misma manera. Observan de forma implícita cada columna de cada tabla, observan automáticamente cualquier tabla o columna que se agregue después de la creación del flujo de cambios y dejan de observar cualquier tabla o columna que se elimine.

Observar tablas y columnas de forma explícita

Si configuras una transmisión de cambios para observar solo columnas específicas en una tabla y, luego, agregas columnas a esa tabla, la transmisión de cambios no comenzará a observar esas columnas, a menos que vuelvas a configurarla para hacerlo.

El esquema de la base de datos trata los flujos de cambios como objetos dependientes de cualquier columna o tabla que supervisen de forma explícita. Antes de que puedas soltar cualquier columna o tabla de este tipo, debes quitarla de forma manual de la configuración de cualquier flujo de cambios que la supervise de forma explícita.

Tipos de cambios de datos que observan los flujos de cambios

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

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

Además, las transmisiones de cambios no supervisan los cambios de esquema ni los cambios de datos que resultan directamente de los cambios de esquema. Por ejemplo, un cambio observar 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. La escritura de cambios de datos y el registro de cambios de datos se escriben dentro de la misma transacción. Spanner coloca ambas operaciones de escritura en la misma ubicación para que las procese el mismo servidor, lo que minimiza el procesamiento de escritura. La transacción se se replican en las réplicas de la base de datos, y la someten al almacenamiento y los costos de replicación. Para obtener más información, consulta Precios de Spanner.

Contenido de un registro de cambios de 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 capturaron 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 un seguimiento, que puede ser solo las columnas modificadas o toda la fila del 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 hacen un seguimiento dependen del tipo de captura de valores que configura el usuario.

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

  • La marca de tiempo de confirmación

  • El ID de la transacción

  • El número de secuencia del registro

  • Es el tipo de captura de valor del registro de cambios de datos.

Para obtener un análisis más detallado 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 el DDL para 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 hará que todos los datos de cambios históricos anteriores al límite nuevo estén disponibles de inmediato y de forma permanente para los lectores de ese flujo de cambios.

Este período de retención de datos presenta una compensación: un período de retención más largo implica mayores demandas de almacenamiento en la base de datos del flujo.

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 valores para un flujo de cambios:

  • OLD_AND_NEW_VALUES: Captura los valores antiguos y nuevos de las columnas modificadas de una fila.

  • NEW_VALUES: Captura solo los valores nuevos de las columnas que no son clave, pero no los valores antiguos.

  • NEW_ROW: Captura todos los valores nuevos de las columnas observadas, tanto modificados como no modificados, cada vez que cambia alguna de esas columnas. No se capturan valores anteriores.

  • NEW_ROW_AND_OLD_VALUES: Captura todos los valores nuevos de las columnas modificadas y no modificadas, y los valores anteriores de las 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 datos de las tablas de Spanner de forma periódica. 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 para que excluya 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 tablas, como inserciones, actualizaciones y eliminaciones. Puedes filtrar una o más de estas modificaciones de tablas del alcance de tu flujo 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 para estos filtros es false. Para excluir un tipo específico de modificación de tabla, establece el filtro en true. Puedes establecer uno 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.

Cómo leer 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 uso del conector de Kafka basado en Debezium para los flujos de cambios de Spanner. Este conector transmite registros de cambios directamente a los temas de Kafka.

Puedes proporcionar aislamiento parcial para las lecturas de flujos de cambios usando de lectura. Las operaciones de lectura dirigidas pueden ayudar a minimizar el impacto en las cargas de trabajo transaccionales de 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 ilimitadas en componentes lógicos o ventanas. Como resultado, Dataflow proporciona una transmisión casi en tiempo real cuando se lee de los flujos de cambios.

Google proporciona plantillas que te permiten compilar rápidamente canalizaciones de Dataflow para casos de uso comunes de flujos de cambios, como enviar todos los cambios de datos de un flujo a un conjunto de datos de BigQuery o copiarlos en 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 registros de cambios de datos de la misma manera que lo hace el conector SpannerIO, lo que descarta la abstracción que proporciona a cambio de las latencias más bajas posibles cuando se leen datos de flujo de cambios.

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 envía directamente los registros del flujo de cambios a 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 Cómo compilar 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 que pueden ver una sola columna. Para ver una lista completa, consulta Flujo de cambios límites.

Permisos

Los flujos de cambios usan lo siguiente:

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

  • Para leer los datos de un flujo de cambios, se requiere spanner.databases.select.

Si usas el conector SpannerIO, el propietario del trabajo de Dataflow que lee datos de flujo de cambios requiere permisos de IAM adicionales, ya sea en la base de datos de tu aplicación o en una base de datos de metadatos independiente. Consulta Cómo crear una base de datos de metadatos.

¿Qué sigue?