Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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代码中频繁提交insert到数据库是一种好做法吗?_Java_Excel_Oracle_Optimization_Commit - Fatal编程技术网

在java代码中频繁提交insert到数据库是一种好做法吗?

在java代码中频繁提交insert到数据库是一种好做法吗?,java,excel,oracle,optimization,commit,Java,Excel,Oracle,Optimization,Commit,我的java代码读取excel文件并将数据从中写入(插入)oracle数据库 例如,我需要读取2000行excel文件中的一些类似单元格,我的代码读取它,插入到数据库,然后执行提交 前大约1000行插入速度非常快,但另1000行插入时间非常长 可能是因为缺乏记忆 所以,我认为在将数据加载到数据库时要频繁地进行提交(例如,每读取50行后进行提交) 这样做是一种良好的做法,还是有其他方法可以解决此问题?提交用于数据库中的原子操作。你不能因为喜欢就把它们扔来扔去。每个事务通常(取决于隔离级别,但假设串

我的java代码读取excel文件并将数据从中写入(插入)oracle数据库

例如,我需要读取2000行excel文件中的一些类似单元格,我的代码读取它,插入到数据库,然后执行提交

前大约1000行插入速度非常快,但另1000行插入时间非常长

可能是因为缺乏记忆

所以,我认为在将数据加载到数据库时要频繁地进行提交(例如,每读取50行后进行提交)

这样做是一种良好的做法,还是有其他方法可以解决此问题?

提交用于数据库中的原子操作。你不能因为喜欢就把它们扔来扔去。每个事务通常(取决于隔离级别,但假设串行隔离)是一个不同的、全有或无的操作

如果您不知道是什么原因导致数据库事务花费了“很长时间”,您应该阅读日志或与知道如何诊断“减速”原因并进行补救的人交谈。最可能的原因是配置不好

底线是,人们的事务作为一个事务插入100000行甚至数百万行,而不会引起问题。通常,出于性能原因,最好不要经常提交。

提交用于数据库中的原子操作。你不能因为喜欢就把它们扔来扔去。每个事务通常(取决于隔离级别,但假设串行隔离)是一个不同的、全有或无的操作

如果您不知道是什么原因导致数据库事务花费了“很长时间”,您应该阅读日志或与知道如何诊断“减速”原因并进行补救的人交谈。最可能的原因是配置不好


底线是,人们的事务作为一个事务插入100000行甚至数百万行,而不会引起问题。一般来说,出于性能原因,最好不要经常提交。

数据库必须始终保持一致,即如果数据一致,即使程序随后崩溃,也只能提交

(如果您不需要这种一致性,那么为什么要使用DB?)


PS:内存不会那么快用完。

数据库必须始终保持一致,即如果数据一致,即使程序随后崩溃,也只能提交

(如果您不需要这种一致性,那么为什么要使用DB?)


PS:你不会那么快就失去记忆。

为什么你认为记忆是个问题?现代数据库每秒可以轻松插入数千条记录,而无需费力。恐怕瓶颈更可能是您的代码。Oracle具有用于从CSV文件加载数据的内置实用程序。您是否考虑过使用SQL加载器或外部表?请阅读。答案是否定的。如果你的应用程序中存在内存泄漏,请找到它并采取纠正措施。@APC-谢谢,我不知道还有什么原因,因为第一行插入了一秒钟,但稍后会插入几分钟。我的应用程序应该完成这项工作,我使用ApachePOI读取excel文件和PreparedStatement将数据写入数据库。也许你是对的,问题在于读取excel而不是将数据插入数据库。@OldProgrammer-谢谢,我意识到频繁提交是不好的。为什么你认为内存是个问题?现代数据库每秒可以轻松插入数千条记录,而无需费力。恐怕瓶颈更可能是您的代码。Oracle具有用于从CSV文件加载数据的内置实用程序。您是否考虑过使用SQL加载器或外部表?请阅读。答案是否定的。如果你的应用程序中存在内存泄漏,请找到它并采取纠正措施。@APC-谢谢,我不知道还有什么原因,因为第一行插入了一秒钟,但稍后会插入几分钟。我的应用程序应该完成这项工作,我使用ApachePOI读取excel文件和PreparedStatement将数据写入数据库。也许你是对的,问题在于读取excel而不是将数据插入数据库。@OldProgrammer-谢谢,我意识到频繁提交是不好的谢谢,但很抱歉,我不完全理解你的意思,什么是“数据一致”?他的意思是,如果要将相关数据插入表T1、T2和T3,在插入所有相关数据之前,不要执行提交;换句话说,不要插入T1数据和commit,然后插入T2数据和另一个commit,然后插入T3数据和另一个commit。祝你好运。或者对你来说更重要的是:万一发生崩溃,你可以写一半的excel表格吗?如果没有,那么你就不应该承诺。您的2000行是关于什么,看看数据库设置和日志,并可能增加内存。当缓冲区填满时,数据的物理写入或传输也可能导致速度减慢,而最初的高速只是一种错觉。@maaartinus-谢谢,在我的情况下,写入所有文件并不重要(但重要的是,最终用户需要知道故障),但是根据这篇文章中的建议,我必须在别处寻找原因,这是正确的谢谢,但很抱歉,我不完全理解你的意思,什么是“数据一致”?他的意思是,如果要将相关数据插入表T1、T2和T3,在插入所有相关数据之前,不要执行提交;换句话说,不要插入T1数据和commit,然后插入T2数据和另一个commit,然后插入T3数据和另一个commit。祝你好运。或者对你来说更重要的是:万一发生崩溃,你可以写一半的excel表格吗?如果没有,那么你就不应该承诺。您的2000行是关于什么,看看数据库设置和日志,并可能增加内存。经济放缓还可能来自数据的物理传输