我在过去使用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