H.1. columnar_migrator#

H.1. columnar_migrator

H.1. columnar_migrator #

H.1.1. Обзор #

Этот скрипт облегчает миграцию данных из базы данных Tantor SE с установленным расширением Citus Columnar (версия 15) в базу данных Tantor SE с установленным расширением Hydra Columnar (версия 16). Он обеспечивает совместимость и целостность данных в процессе миграции, учитывая изменения в структурах метаданных между двумя колоночными расширениями.

H.1.1.1. Назначение #

Основные цели этого скрипта:

  • Для адаптации структур колоночных таблиц и связанной с ними метаданных из Citus в формат Hydra.

  • Для эффективной передачи больших наборов данных с использованием пакетной и параллельной обработки с целью минимизации времени простоя.

  • Для поддержания целостности и согласованности данных на протяжении всего процесса миграции.

H.1.1.2. Описание #

Скрипт написан на Python и использует asyncpg для асинхронных операций с базой данных, что повышает производительность при масштабных передачах данных. В нем реализовано подробное ведение журнала для прозрачности и устранения неполадок. Подход к миграции включает генерацию соответствующих DDL-команд для новой среды базы данных и использование параллелизма для более быстрой репликации данных.

H.1.1.3. Ключевые особенности #

  • Управление параллелизмом: использует семафоры для ограничения количества одновременных задач передачи данных.

  • Пакетная обработка: передаёт данные пакетами для эффективной работы с большими наборами данных.

  • Обработка повторного подключения: обеспечивает беспрерывную передачу данных после перебоев соединения.

  • Проверка количества строк: сравнивает количество строк между исходными и целевыми таблицами после передачи данных для обеспечения целостности данных.

  • Пользовательские запросы для существующих таблиц: проверяет наличие существующих таблиц в целевой базе данных и при необходимости предлагает пользователю удалить их.

H.1.2. Требования #

Чтобы обеспечить плавное выполнение этого скрипта миграции, должны быть выполнены следующие требования:

  • Python 3.7 или новее.

  • Библиотека asyncpg установлена для облегчения асинхронных операций с базой данных.

Установите необходимую библиотеку Python с помощью pip:

pip install asyncpg colorlog

Убедитесь, что оба экземпляра Tantor SE — исходный и целевой — доступны, а у пользователя есть необходимые права для выполнения команд и работы с данными.

H.1.3. Использование #

H.1.3.1. Флаги ввода #

Скрипт принимает различные аргументы командной строки для указания конфигураций исходной и целевой баз данных:

  • --source-db-host: Имя хоста или IP-адрес исходной базы данных (по умолчанию: localhost).

  • --source-db-port: Номер порта для исходной базы данных (обязательно).

  • --source-db-name: Имя исходной базы данных (по умолчанию: postgres).

  • --source-db-user: Имя пользователя для исходной базы данных (по умолчанию: postgres).

  • --source-db-password: Пароль для пользователя исходной базы данных (по умолчанию: пусто).

  • --target-db-host: Имя хоста или IP-адрес целевой базы данных (по умолчанию: localhost).

  • --target-db-port: Номер порта для целевой базы данных (обязательно).

  • --target-db-name: Имя целевой базы данных (по умолчанию: postgres).

  • --target-db-user: Имя пользователя для целевой базы данных (по умолчанию: postgres).

  • --target-db-password: Пароль для пользователя целевой базы данных (по умолчанию: пусто).

  • --batch-size: Количество строк в партии при передаче данных (по умолчанию: 100000).

  • --concurrency: Количество параллельных задач для параллельной передачи данных (по умолчанию: 2).

H.1.3.2. Пример команды #

Запустите миграцию, используя следующую команду:

python columnar_migrator.py /
--source-db-host 192.168.1.100 /
--source-db-port 5432 / 
--source-db-user admin /
--source-db-password securepass /
--target-db-host 192.168.1.101 /
--target-db-port 5433 /
--target-db-user admin /
--target-db-password securepass /
--batch-size 100000 /
--concurrency 4

H.1.4. Процесс выполнения #

  • Инициализация: Установите пул соединений для исходной и целевой баз данных. Проверьте наличие существующих таблиц в целевой базе данных и запросите у пользователя действия, если таковые найдены.

  • Выполнение DDL и копирование данных: Создайте необходимые расширения и выполните команды DDL для настройки схемы целевой базы данных. Запланируйте задачи передачи данных, используя семафор для ограничения параллелизма. Передавайте данные партиями, обрабатывая переподключение в случае потери соединения.

  • Обработка переподключения: Если соединение потеряно во время передачи, попытайтесь переподключиться и возобновить передачу.

  • Проверка количества строк: После переноса каждой таблицы сравните количество строк между исходной и целевой базами данных. Запишите результаты сравнения.

H.1.5. Детальный обзор #

H.1.5.1. Инициализация и конфигурация #

  • async def create_pools(source_db_config, target_db_config) — устанавливает пулы соединений для исходной и целевой баз данных.

  • async def check_existing_tables(conn, tables) — проверяет, существуют ли уже таблицы в целевой базе данных.

  • async def prompt_user_for_deletion(existing_tables) — запрашивает у пользователя подтверждение на удаление существующих таблиц.

  • async def drop_existing_tables(conn, tables) — удаляет существующие таблицы из целевой базы данных, если пользователь это подтверждает.

H.1.5.2. Основная функция выполнения #

async def execute_ddl_and_copy_data(target_db_config, ddl_commands, source_db_config, batch_size, concurrency) — создает пулы соединений и проверяет наличие существующих таблиц.

Выполняет DDL-команды для настройки схемы целевой базы данных. Управляет процессом передачи данных с использованием управления параллелизмом и пакетной обработки.

H.1.5.3. Передача данных и обработка переподключения #

async def transfer_data_copy_to_tables(source_pool, target_pool, obj, batch_size, task_id, total_rows) — передаёт данные пакетами.

Обрабатывает повторное подключение, если соединение потеряно, и возобновляет процесс передачи.

H.1.5.4. Логика повторного подключения #

async def reconnect_new(pool) — пытается переподключиться к базе данных несколько раз с задержкой между попытками.

H.1.6. Заключение #

Этот скрипт необходим для администраторов баз данных, обновляющих установки Tantor SE с использованием новых колоночных технологий. Он обеспечивает эффективный и надежный процесс миграции, минимизируя время простоя и сохраняя целостность данных между двумя активно работающими серверами.