过去,我使用 Java 中的 jdbc-odbc 桥来完成此操作,但通过 ODBC 的性能并不好。我建议看看类似的东西http://jtds.sourceforge.net/ 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 http://jtds.sourceforge.net/benchTest.html
您可能会发现将数据转储为 mysql 转储文件格式并使用 mysql loaddata 而不是逐行写入具有一些性能优势。如果您加载 infile 并执行诸如原子表交换之类的操作,MySQL 对于大型数据集会有一些显着的性能改进。
我们使用类似的方法将大型数据文件从一个系统快速加载到 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