JBo*_*one 9 mysql sql-server oledb connection odbc
我正在尝试将基于SQL Server数据库的常量和连续的批量数据传输到MYSQL数据库.我想使用SQL Server的SSMS复制,但这显然只适用于SQL Server到Oracle或IBM DB2连接.目前,我们正在使用SSIS转换数据并将其推送到MYSQL数据库的临时位置,在该位置复制数据.我想以最快的方式传输数据和复杂的几种方法.
我有一种新方法,我计划转换数据,我相信这将解决大多数时间问题,但我想确保我们将来不会遇到时间问题.我已经设置了一个链接服务器,它使用MYSQL ODBC驱动程序在SQL Server和MYSQL之间进行通信.这看起来非常慢.我有一些代码也使用Microsoft的ODBC驱动程序,但使用得太少,我无法衡量性能.有谁知道在这两个数据库之间快速通信的方式?我一直在研究MYSQL的数据提供程序,它们似乎与OleDB层进行通信.我不太确定该相信什么,以及哪种方式可以引导任何想法?
小智 1
过去我使用 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
}
Run Code Online (Sandbox Code Playgroud)
以下性能数据可让您了解其性能: 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
Run Code Online (Sandbox Code Playgroud)