Репликация 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 шт):
Решением стало CDC.
Указывается таблица, которая отслеживается на предмет изменения данных. Аналог транзакционного листа, но сразу в человеческой форме.