Ich habe in der Vergangenheit die jdbc-odbc-Brücke in Java verwendet, um genau dies zu tun, aber die Leistung über ODBC ist nicht großartig. Ich würde vorschlagen, sich so etwas wie http://jtds.sourceforge.net/ anzusehen Dies ist ein reiner Java-Treiber, den Sie in ein einfaches Groovy-Skript wie das folgende einfügen können:
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
}
Die folgenden Leistungszahlen geben Ihnen einen Eindruck davon, wie es funktionieren könnte:http://jtds.sourceforge.net /benchTest.html
Möglicherweise finden Sie einige Leistungsvorteile, wenn Sie Daten in ein mysql-Dumpfile-Format ausgeben und mysql loaddata verwenden, anstatt Zeile für Zeile zu schreiben. MySQL hat einige signifikante Leistungsverbesserungen für große Datensätze, wenn Sie Infiles laden und Dinge wie atomare Tabellenaustausche durchführen.
Wir verwenden so etwas, um schnell große Datendateien in MySQL von einem System auf ein anderes zu laden, z. Dies ist der schnellste Mechanismus, um Daten in mysql zu laden. Aber Zeile für Zeile in Echtzeit könnte eine einfache Schleife in Groovy + einer Tabelle sein, um zu verfolgen, welche Zeile verschoben wurde.
mysql> select * from table into outfile 'tablename.dat';
shell> myisamchk --keys-used=0 -rq '/data/mysql/schema_name/tablename'
mysql> load data infile 'tablename.dat' into table tablename;
shell> myisamchk -rq /data/mysql/schema_name/tablename
mysql> flush tables;
mysql> exit;
shell> rm tablename.dat