Я использовал мост jdbc-odbc в Java, чтобы сделать это в прошлом, но производительность через 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 вместо записи строка за строкой.В 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