以前は、Javaでjdbc-odbcブリッジを使用してこれを実行していましたが、ODBCを介したパフォーマンスはあまり良くありません。 http://jtds.sourceforge.net/ のようなものを見ることをお勧めします これは純粋なJavaドライバーであり、次のような単純なGroovyスクリプトにドロップできます。
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
}
次のパフォーマンス数値は、パフォーマンスの感触を示しています。 http://jtds.sourceforge.net /benchTest.html
データをmysqlダンプファイル形式にダンプし、行ごとに書き込む代わりにmysqlloaddataを使用することでパフォーマンス上の利点が得られる場合があります。 MySQLでは、infileをロードしたり、アトミックテーブルスワップなどを実行したりすると、大規模なデータセットのパフォーマンスが大幅に向上します。
このようなものを使用して、あるシステムから別のシステムに大きなデータファイルをmysqlにすばやくロードします。これは、データをmysqlにロードするための最速のメカニズムです。しかし、リアルタイムの行ごとは、groovy +いくつかのテーブルで実行して、どの行が移動されたかを追跡するための単純なループである可能性があります。
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