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 с использованием новых колоночных технологий. Он обеспечивает эффективный и надежный процесс миграции, минимизируя время простоя и сохраняя целостность данных между двумя активно работающими серверами.