2011-08-15 11 views
9

Próbuję przesyłać zbiorcze dane na stałej i ciągłej podstawie bazy danych SQL Server do bazy danych MYSQL. Chciałem użyć replikacji SSMS programu SQL Server, ale najwyraźniej jest to tylko dla SQL Server do połączenia Oracle lub IBM DB2. Aktualnie używamy SSIS do transformacji danych i przekazania ich do tymczasowej lokalizacji w bazie danych MYSQL, gdzie jest ona kopiowana. Chciałbym najszybszy sposób przesyłania danych i jestem komplikacji kilka metod.Serwer SQL do transferu danych MySQL

Mam nowy sposób Mam zamiar przekształcić dane, które na pewno rozwiążą większość problemów czasu, ale chcę się upewnić, że nie napotkasz problemów czasu w przyszłości. Skonfigurowałem połączony serwer, który używa sterownika ODYS MYSQL do rozmowy między SQL Server i MYSQL. Wydaje się to BARDZO wolne. Mam trochę kodu, który również używa sterownika ODBC Microsoftu, ale jest tak mało używany, że nie mogę ocenić wydajności. Czy ktoś wie o błyskawicznym szybkim sposobie komunikacji między tymi dwiema bazami danych? Badałem dostawców danych MYSQL, którzy wydają się komunikować z warstwą OleDB. Nie jestem zbyt pewny w co wierzyć i w którą stronę kierować się, jakie pomysły?

Odpowiedz

1

Użyłem mostu jdbc-odbc w Javie, aby zrobić to samo w przeszłości, ale wydajność przez ODBC nie jest świetna. Proponuję patrząc na coś podobnego http://jtds.sourceforge.net/ który jest czysty sterownik Java, które można upuszczać w prosty Groovy skryptu jak poniżej:

import groovy.sql.Sql 
sql = Sql.newInstance('jdbc:jtds:sqlserver://serverName/dbName-CLASS;domain=domainName',  
'username', 'password', 'net.sourceforge.jtds.jdbc.Driver') 
sql.eachRow('select * from tableName') { 
    println "$it.id -- ${it.firstName} --" 
    // probably write to mysql connection here or write to file, compress, transfer, load 
} 

następujące numery wydajności daje wyczucie, jak może to wykonać: http://jtds.sourceforge.net/benchTest.html

Możesz znaleźć zalety związane z wydajnością, przesyłając dane do formatu mysql dumpfile i używając mysql loaddata, zamiast pisać wiersz po wierszu. MySQL ma kilka znaczących ulepszeń wydajnościowych dla dużych zbiorów danych, jeśli ładujesz pliki typu "infile" i robisz takie rzeczy jak zamiany tabel atomowych.

Używamy czegoś takiego, aby szybko załadować duże pliki danych do mysql z jednego systemu do drugiego, np. Jest to najszybszy mechanizm do załadowania danych do mysql. Ale w czasie rzeczywistym rząd po wierszu może być prostą pętlą do zrobienia w groovy + stolik, aby śledzić, który wiersz został przeniesiony.

mysql>

select * from table into outfile 'tablename.dat'; 
myisamchk --keys-used=0 -rq '/data/mysql/schema_name/tablename' 
load data infile 'tablename.dat' into table tablename; 
myisamchk -rq /data/mysql/schema_name/tablename 
flush tables; 
exit; 

rm „tablename.dat

1

Najlepszym sposobem, w jaki znalazłem transfer danych SQL (jeśli dysponujesz przestrzenią) jest zrzut SQL w jednym języku, a następnie użycie narzędzia do konwersji (skryptu perl, oba są przeważające) do konwersji zrzutu SQL od MSSQL do MySQL. Zobacz moją odpowiedź na pytanie o konwerter, który może Cię zainteresować: this.

0

Użyliśmy sterownika ado.net dla mysql in ssis z dużym sukcesem. Zasadniczo zainstaluj sterownik na komputerze z zainstalowanymi usługami integracyjnymi, zrestartuj stawki i powinien pojawić się na liście sterowników podczas tworzenia menedżera połączeń ado.net.

Co do replikacji, co dokładnie próbujesz osiągnąć?

Jeśli monitorujesz zmiany, traktuj je jako powoli zmieniający się typ 1 (terminologia hurtowni danych, ale ta sama zasada obowiązuje). Wstaw nowe rekordy, zaktualizuj zmienione rekordy.

Jeśli interesują Cię tylko nowe rekordy i nie planujesz aktualizacji wcześniej wczytanych danych, wypróbuj strategię ładowania przyrostowego. Wstaw rekordy, gdzie source.id> max (destination.id).

Po przetestowaniu pakietu zaplanuj pracę w agencie serwera sql, aby uruchomić pakiet co x minut.

0

Cou może również wypróbować następujące rzeczy.

Próbowałem tego dłużej i to zadziałało. Ale nie zalecam ci tego. Jaki jest prawdziwy problem, co próbujesz zrobić? Nie można uzyskać połączenia MSSQL DB, na przykład z systemu Linux?

Powiązane problemy