Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Hibernate将csv文件导入MySQL数据库_Java_Mysql_Hibernate_Csv_Groovy - Fatal编程技术网

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

Java 使用Hibernate将csv文件导入MySQL数据库,java,mysql,hibernate,csv,groovy,Java,Mysql,Hibernate,Csv,Groovy,我正在尝试将csv文件导入MySQL数据库,我在groovy中创建了一个脚本,用于使用Hibernate实现这一点。问题是,csv文件相当大,大约有4800万行。我正在打开一个会话并为每一行提交一个事务,但后来我发现这需要很长时间。按照运行脚本一天后添加到数据库的行的速度,导出所有内容需要一个多月的时间。所以,我想,也许,瓶颈在于打开一个会话并提交每行的事务。。。然后我决定只打开一个会话,读取每一行,为每一行实例化一个实体,将其保存在会话中,在读取所有4800万行并将4800万个实体存储在会话中

我正在尝试将csv文件导入MySQL数据库,我在groovy中创建了一个脚本,用于使用Hibernate实现这一点。问题是,csv文件相当大,大约有4800万行。我正在打开一个会话并为每一行提交一个事务,但后来我发现这需要很长时间。按照运行脚本一天后添加到数据库的行的速度,导出所有内容需要一个多月的时间。所以,我想,也许,瓶颈在于打开一个会话并提交每行的事务。。。然后我决定只打开一个会话,读取每一行,为每一行实例化一个实体,将其保存在会话中,在读取所有4800万行并将4800万个实体存储在会话中之后,用所有这些实例提交一个事务。那也不行。有没有办法以更快的方式将这个csv文件导入mysql数据库?还是真的需要这么长时间?

我建议您不要使用Java,而是使用加载数据填充'c:/tmp/discounters.csv'


请参见

我建议您不要使用Java,而是使用加载数据填充'c:/tmp/discounters.csv'


请参见

我发现了与您的问题解决方案相关的非常有趣的链接。也许它会有用

我发现了一个非常有趣的链接,它与您的问题的解决方案有关。也许它会有用
在脚本中休眠?你一定是在开玩笑

我会坚持使用groovy.sql.sql,因为它使用简单灵活,并且不会像hibernate那样在映射或会话刷新方面有负担

您的脚本可能如下所示:

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()

在脚本中休眠?你一定是在开玩笑

我会坚持使用groovy.sql.sql,因为它使用简单灵活,并且不会像hibernate那样在映射或会话刷新方面有负担

您的脚本可能如下所示:

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()

你的意思是导入?是从mysql导出还是导入mysql?我不知道如何使用hibernate,但你可以通过加载数据填充轻松地将csv文件导入mysql谢谢,我的意思是导入它工作了,导入4800万行大约需要3小时19分钟。非常感谢大家。你的意思是导入吗?是从mysql导出还是导入到mysql?我不知道如何使用hibernate,但你可以通过加载数据填充轻松地将csv文件导入到mysql。谢谢,我的意思是导入成功了,导入4800万行大约需要3小时19分钟。非常感谢大家。你能把链接的内容带到你的答案中,以确保将来能防止死链接吗?谢谢在这个答案中没有使用Hibernate。你能把链接的内容带到你的答案中,以确保将来能防止死链接吗?谢谢在这个回答中没有使用Hibernate。