Ik heb hiervoor in het verleden de jdbc-odbc-brug in Java gebruikt, maar de prestaties via ODBC zijn niet geweldig. Ik raad je aan te kijken naar iets als http://jtds.sourceforge.net/ wat een puur Java-stuurprogramma is dat u in een eenvoudig Groovy-script kunt plaatsen, zoals het volgende:
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
}
De volgende prestatiecijfers geven u een idee van hoe het zou kunnen presteren:http://jtds.sourceforge.net /benchTest.html
Mogelijk vindt u enkele prestatievoordelen bij het dumpen van gegevens naar een mysql-dumpfile-indeling en het gebruik van mysql-laadgegevens in plaats van rij voor rij te schrijven. MySQL heeft een aantal significante prestatieverbeteringen voor grote datasets als je infile's laadt en dingen doet als atomic table swaps.
We gebruiken zoiets om snel grote databestanden in mysql te laden van het ene systeem naar het andere, b.v. Dit is het snelste mechanisme om gegevens in mysql te laden. Maar realtime rij voor rij kan een eenvoudige lus zijn om te doen in groovy + een tabel om bij te houden welke rij is verplaatst.
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