Tôi đã sử dụng cầu nối jdbc-odbc trong Java để thực hiện điều này trước đây, nhưng hiệu suất thông qua ODBC không tốt. Tôi khuyên bạn nên xem một cái gì đó như http://jtds.sourceforge.net/ là một trình điều khiển Java thuần túy mà bạn có thể đưa vào một tập lệnh Groovy đơn giản như sau:
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
}
Các con số hiệu suất sau cho bạn cảm nhận về cách nó có thể hoạt động: http://jtds.sourceforge.net /benchTest.html
Bạn có thể tìm thấy một số lợi thế về hiệu suất để kết xuất dữ liệu sang định dạng tệp kết xuất mysql và sử dụng dữ liệu tải mysql thay vì ghi từng hàng một. MySQL có một số cải tiến hiệu suất đáng kể cho các tập dữ liệu lớn nếu bạn tải tệp infile và thực hiện những việc như hoán đổi bảng nguyên tử.
Chúng tôi sử dụng một cái gì đó như thế này để nhanh chóng tải các tệp dữ liệu lớn vào mysql từ hệ thống này sang hệ thống khác, ví dụ:Đây là cơ chế nhanh nhất để tải dữ liệu vào mysql. Nhưng theo thời gian thực từng hàng có thể là một vòng lặp đơn giản để thực hiện trong bảng Groovy + một số để theo dõi xem hàng nào đã được di chuyển.
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