Если вам нравится читать статьи на Medium и вы заинтересованы в том, чтобы стать участником, я буду рад поделиться с вами своей реферальной ссылкой!
Сбор измененных данных (CDC) — это метод отслеживания изменений в базе данных, позволяющий разработчикам фиксировать вставки, обновления и удаления, применяемые к строкам. Это неотъемлемая часть интеграции данных и задач обработки в реальном времени. В этой статье мы обсудим, как мы можем разработать собственный инструмент CDC на Golang для нескольких баз данных, таких как PostgreSQL, Oracle, MySQL, MongoDB и SQL Server.
PostgreSQL
Для PostgreSQL мы можем использовать библиотеку pglogrepl
(github.com/jackc/pglogrepl
). Эта библиотека предоставляет низкоуровневый API для логического декодирования и протокола потоковой репликации в PostgreSQL. Он позволяет читать журналы упреждающей записи (WAL) PostgreSQL, которые представляют собой журналы, в которых хранятся все изменения в базе данных. Читая и расшифровывая эти журналы, мы можем отслеживать изменения в базе данных. Декодирование может выполняться либо в плагине, либо на уровне потребителя, в зависимости от плагина декодирования, используемого в PostgreSQL.
Оракул
Создание инструмента CDC для Oracle немного сложнее. В Oracle есть встроенный инструмент под названием «LogMiner», который позволяет запрашивать онлайн и архивные файлы журналов повторного выполнения через интерфейс SQL. Основным источником данных будет представление V$LOGMNR_CONTENTS
, которое представляет собой представление данных журнала повторов после их обработки LogMiner.
Нашему инструменту CDC нужно будет периодически запрашивать это представление и анализировать поля SQL_REDO
и SQL_UNDO
, чтобы понять, какие изменения были внесены в базу данных. Это требует понимания синтаксиса Oracle SQL и, возможно, работы с различными версиями Oracle, поскольку синтаксис может меняться.
MySQL
MySQL можно обрабатывать с помощью библиотеки go-mysql
(github.com/go-mysql-org/go-mysql/canal
). Этот пакет предоставляет платформу для синхронизации binlog из MySQL в другие системы. Он поддерживает синхронизацию binlog из MySQL с определяемым пользователем обработчиком, например…