Если вам нравится читать статьи на 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 с определяемым пользователем обработчиком, например…