我在過去使用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轉儲文件格式並使用mysql loaddata代替逐行寫入的性能優勢。如果您加載infile和執行諸如原子表交換之類的操作,MySQL對於大型數據集有一些顯着的性能改進。
我們使用類似這樣的方法將大型數據文件快速加載到從一個系統到另一個系統的mysql中,例如這是將數據加載到mysql的最快機制。但是,實時逐行可能是一個簡單的循環,可以在groovy +某個表中跟蹤哪些行已被移動。
的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