Ovaj projekat omogućava migraciju podataka sa jednog tipa baze podataka ( MySQL ) na drugi tip baze podataka ( PostgreSQL ).
Projekat je organizovan kao modularni Python paket koji omogućava lako dodavanje novih tipova migracija:
transfer_db1_to_db2/
├── ARCHITECTURE.md
├── EXTENDING.md
├── README.md
├── base.py # ⭐ Zajedničke apstraktne bazne klase
└── mysql_to_postgresql_pkg/ # MySQL → PostgreSQL implementacija
├── __init__.py
├── config.py # Konfiguracija iz env varijabli
├── mysql_fetcher.py # MySQL data fetcher
├── postgres_writer.py # PostgreSQL writer
├── requirements.txt
├── mysql_postgres_mapping.py # Mapiranje tipova
├── mysql_to_postgresql_manager.py # Migration manager
├── runner.py # CLI entry point za MySQL → PostgreSQL
├── setup.py
└── scenarios/ # Migration scenariji
├── __init__.py
├── create_tables_scenario.py
├── full_migration_scenario.py
├── single_table_scenario.py
└── delta_sync_scenario.pyNapomena: base.py je na root nivou kako bi bio dostupan za sve tipove migracija (npr. budući mssql_to_postgresql_pkg, csv_to_postgresql_pkg, itd.)
- Opcija 1: Instalacija kao paket
pip install -e .- Opcija 2: Instalacija zavisnosti
pip install -r requirements.txtPostavite environment varijable za konekciju na baze:
-
MySQL:
MYSQL_HOST(default: localhost)MYSQL_PORT(default: 3306)MYSQL_USER(default: root)MYSQL_PASSWORDMYSQL_DATABASE
-
PostgreSQL:
POSTGRES_HOST(default: localhost)POSTGRES_PORT(default: 5432)POSTGRES_USER(default: postgres)POSTGRES_PASSWORDPOSTGRES_DB
export MYSQL_HOST=127.0.0.1
export MYSQL_USER=root
export MYSQL_PASSWORD=secret
export MYSQL_DATABASE=mydb
export POSTGRES_HOST=127.0.0.1
export POSTGRES_USER=postgres
export POSTGRES_PASSWORD=secret
export POSTGRES_DB=mydb_pg- Pregled konfiguracije (bez konekcije na bazu)
python runner.py --config-preview- Dry run (simulacija bez izvršenja)
python runner.py full --dry-run --threads 8- Kreiranje tabela u PostgreSQL
python runner.py create-tables- Potpuna migracija svih tabela
python runner.py full --threads 8- Migracija jedne tabele
python runner.py single --table users --threads 4- Delta sinhronizacija (migracija samo novih redova)
python runner.py delta --table orders --id-column order_id --threads 4- Upotreba kao Python Paket
from mysql_to_postgresql_pkg import MySQLtoPostgreSQLMigrationManager
from mysql_to_postgresql_pkg.scenarios import FullMigrationScenario
# Kreiranje migration manager-a
manager = MySQLtoPostgreSQLMigrationManager(batch_size=10000, threads=4)
# Ili korišćenje scenario klasa
scenario = FullMigrationScenario(threads=8)
scenario.run()-
Paralelna Migracija
Koristite
--threadsopciju za paralelno procesiranje:python runner.py full --threads 16
-
Prilagođavanje Batch Veličine
Batch veličina se može podesiti u kodu:
manager = MySQLtoPostgreSQLMigrationManager(batch_size=50000, threads=8)
- ✅ Automatsko mapiranje MySQL -> PostgreSQL tipova
- ✅ Podrška za indekse, primarne i strane ključeve
- ✅ Paralelna migracija sa thread pool-om
- ✅ Delta sinhronizacija (migracija samo novih podataka)
- ✅ Dry-run mod za testiranje
- ✅ CLI interfejs sa多nim opcijama
- ✅ Modularni scenario sistem
MigrationManager: Apstraktna bazna klasa za sve tipove migracijaDataFetcher: Apstraktna klasa za izvore podatakaDataWriter: Apstraktna klasa za ciljeve podataka
MySQLFetcher: Implementacija za čitanje iz MySQL-aPostgresWriter: Implementacija za pisanje u PostgreSQLMySQLtoPostgreSQLMigrationManager: Glavni manager za migraciju
Scenario klase omogućavaju različite tipove migracija:
CreateTablesScenario: Samo kreira tabeleFullMigrationScenario: Potpuna migracijaSingleTableScenario: Jedna tabelaDeltaSyncScenario: Samo novi podaci
Paket je dizajniran da bude lako proširiv. base.py sadrži apstraktne klase koje možete nasleđivati:
-
Kreiraj novi direktorijum:
mkdir mssql_to_postgresql_pkg
-
Implementiraj DataFetcher za MSSQL:
# mssql_to_postgresql_pkg/mssql_fetcher.py from base import DataFetcher import pymssql class MSSQLFetcher(DataFetcher): def connect(self): return pymssql.connect(...) # ... implementacija ostalih metoda
-
Reuse postojećeg PostgreSQLWriter-a ili kreiraj novi
-
Kreiraj MigrationManager:
# mssql_to_postgresql_pkg/mssql_to_postgresql_manager.py from base import MigrationManager from mssql_to_postgresql_pkg.mssql_fetcher import MSSQLFetcher from mysql_to_postgresql_pkg.postgres_writer import PostgresWriter class MSSQLtoPostgreSQLMigrationManager(MigrationManager): # ... implementacija
-
Kreiraj runner za MSSQL:
# mssql_runner.py from mssql_to_postgresql_pkg import MSSQLtoPostgreSQLMigrationManager
- Novi izvori: CSV, Excel, MongoDB, API, MSSQL, Oracle
- Novi ciljevi: Parquet, ClickHouse, BigQuery, Snowflake
- Novi scenariji: Incremental sync, CDC, Data validation
- Za velike tabele koristite više thread-ova
- Testirajte prvo sa
--dry-run - Podesite
batch_sizeprema veličini RAM-a - Koristite
delta syncza inkrementalne update-e
- Dodavanje automatskih testova
- Podrška za više izvora i ciljeva podataka
- Web UI za monitoring migracija
- Logovanje i izveštavanje napretka