sql >> Database teknologi >  >> RDS >> Mysql

SQL Server til MySQL dataoverførsel

Jeg brugte jdbc-odbc-broen i Java til at gøre netop dette tidligere, men ydeevnen gennem ODBC er ikke fantastisk. Jeg vil foreslå at se på noget som http://jtds.sourceforge.net/ som er en ren Java-driver, som du kan slippe ind i et simpelt Groovy-script som følgende:

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
}

Følgende præstationstal giver dig en fornemmelse af, hvordan den kan fungere:http://jtds.sourceforge.net /benchTest.html

Du kan finde nogle ydeevnefordele ved at dumpe data til et mysql dumpfil-format og bruge mysql loaddata i stedet for at skrive række for række. MySQL har nogle væsentlige præstationsforbedringer for store datasæt, hvis du indlæser infiler og gør ting som atomtabel-swaps.

Vi bruger sådan noget til hurtigt at indlæse store datafiler i mysql fra et system til et andet f.eks. Dette er den hurtigste mekanisme til at indlæse data i mysql. Men realtid række for række kan være en simpel løkke at lave i groovy + en eller anden tabel for at holde styr på, hvilken række der var blevet flyttet.

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


  1. hvordan man skubber Google Analytics-data ind i mysql-tabeller

  2. Sådan finder du ud af størrelsen på indekser i MySQL

  3. UTF-8 problemer med PHP/MySQL

  4. Om forfriskende objekter i sqlalchemy-session