繁体   English   中英

使用Hibernate将CSV文件导入MySQL数据库

[英]Importing a csv file to a MySQL database using Hibernate

我试图将一个csv文件导入到MySQL数据库中,并且我在groovy中创建了一个脚本来使用Hibernate做到这一点。 问题是,csv文件非常大,大约有4800万行。 我正在打开一个会话并为每一行提交一个事务,但是后来我发现这将花费很长时间。 根据一天运行脚本后添加到数据库中的行的速度,导出所有内容将花费一个多月的时间。 因此,我认为瓶颈可能在于打开一个会话并为每一行提交一个事务……然后,我决定只打开一个会话,读取每一行,为每一行实例化一个实体,然后将其保存在会话中,并在读取了所有4,800万行并在会话中存储了4,800万个实体后,使用所有这些实例提交一项事务。 好吧,那也不起作用。 有什么方法可以以更快的方式将此csv文件导入mysql数据库? 还是真的需要那么长时间?

我建议您不要使用Java并使用LOAD DATA INFILE 'c:/tmp/discounts.csv' ...

参见http://www.mysqltutorial.org/import-csv-file-mysql-table/

在脚本中休眠? 你一定在开玩笑! :)

我会坚持使用groovy.sql.Sql ,因为它使用起来简单,灵活,并且没有映射或会话刷新的休眠负担。

您的脚本可能如下所示:

Sql db = new Sql(...)
int flushCounter = 0
new File( 'my.csv' ).splitEachLine( /;/ ){ parts -> // or a full-blown csv-parser here
  db.executeInsert 'insert into mytable (id,a,b,c) values (null,?,?,?)', parts 
  flushCounter++
  if( 0 == flushCounter % 1000 ) db.commit() // flush each 1000 records
}
db.commit()
db.close()

我发现与您的问题的解决方案非常有趣的链接。 也许会很有用http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM