Репликация MSSQL в иные СУБД

Написал скрипт на питоне, который через ODBC драйвер реплицирует данные в ClickHouse (включая DDL). Однако оказалось, что алгоритм приложения для работы с БД вставляет палки в колеса. А именно производит апдейты записей, а так же удаление первичных ключей. Забрав все эти данные, происходит коллизии т.к в кликхаус идет дублирование записей с разными ключами 50% которых уже отсутствует в MSSQL. Очень сильно мешает тот факт, что реплицируемая таблица имеет более 17кк строк.

В связи с этим вопрос, если нет возможности отложенной репликации и данные должны забираться каждые 10 минут, то как быть?

Я пришел к выводу, что необходимо парсить лист транзакций.

Спустя несколько часов изучения темы и адаптации найденного скрипта (первая версия не работала на MSSQL 2017-2019), я получил такой вот запрос.

К сожалению, он очень дорогой и на 100 записей требуется порядка 10 секунд. На 1к записей требуется 15+ минут.

Можно ли имея данный скрипт и описание, как читать лог транзакций, и решение на MSSQL перебросить нагрузку на python? Если да, то как? У меня пока не вышло распарсить hex в питоне. Пример hex:

0x3000410001000000B90400001000000000000000406700004D004D0000000000CB8900004A15001E004AD0E1AA37C27449B4D593524773771800000000359500001000000003005D008500BD003100340034003100370038003000370061006400760065006E0074007500720065002D0077006F0072006B0073005C006700750079003100500072006F00640075006300740069006F006E00200054006500630068006E0069006300690061006E0020002D0020005700430036003000

Описание структуры hex:

  • 2 Byte : Status Bits
  • 2 Bytes: Offset to find number of columns
  • X Bytes:Fixed Length Columns
  • 2 Bytes: Total Number of Columns in the data row
  • 1 Bit per column, Rounded up: Nullability Bitmap
  • 2 Bytes:Number of Variable Length Columns within the data row
  • 2 Bytes per variable length column : Row Offset marking the end of each variable length column
  • X Bytes:Variable Length Columns

Если лог транзакций очень сильные дебри, то буду рад любым идеям, как избавиться от коллизий при репликации. И да, самое важное, оперативная память ограничена 2гб. Держать в памяти много данных не выйдет.

Заранее спасибо!


Ответы (1 шт):

Автор решения: Terramora

Решением стало CDC.

Указывается таблица, которая отслеживается на предмет изменения данных. Аналог транзакционного листа, но сразу в человеческой форме.

→ Ссылка