Java 在一次向数据库插入一百万条记录之前,我应该采取什么措施?
我有一个java代码,它解析网站的内容,并将html表的每一行插入到我的oracle数据库中。该网站有大约70000个我想要解析的页面,每个页面都有一个非常简单的URL循环,例如:Java 在一次向数据库插入一百万条记录之前,我应该采取什么措施?,java,oracle,jdbc,Java,Oracle,Jdbc,我有一个java代码,它解析网站的内容,并将html表的每一行插入到我的oracle数据库中。该网站有大约70000个我想要解析的页面,每个页面都有一个非常简单的URL循环,例如: http://website.com/contents?id=1 因此,当我将Id更改为2时,它基本上进入下一页。每个页面平均有14-15行html表格 我还创建了一个日志文件(通过java.util.logging.Logger)来查看插入是否有问题 我一直尝试到第ID10页(大约150条记录),它没有出现问题,
http://website.com/contents?id=1
因此,当我将Id更改为2时,它基本上进入下一页。每个页面平均有14-15行html表格
我还创建了一个日志文件(通过java.util.logging.Logger)来查看插入是否有问题
我一直尝试到第ID10页(大约150条记录),它没有出现问题,但还没有尝试到70000页(1000.000条记录)。我在家里的电脑上和oracle express edition上进行此操作。在尝试一次插入1.00万条记录之前,我应该考虑什么?
,Oracle XE版有大小限制。如果插入超过该大小,则无法添加行
对于多个会话的大量插入,您可以增加tableFREELISTS
size。如果不需要生成REDO
,可以使用APPEND
hint
如果应用程序可以这样做,则可以将数据导出到平面文件中,然后运行Sql*Loader将所有数据一次性导入表中。您可以通过编程方式完成此操作你应该考虑测试一下,看看会发生什么。几乎可以肯定的是,它会为您的用例做一些无人能预测的事情。瓶颈不是将插入操作插入Oracle DB,而是接收和解析HTML页面。在Oracle方面,您应该确保Oracle每隔10000行左右提交一次更改,尝试在一个事务中插入所有行很可能会淹没您的SGA并回滚该事务。插入一百万行几乎不算多。不要这样做。任何像样的硬件都应该能够应对这种情况。不要每10000行提交一次。最后提交一次。频繁的提交会使Oracle变慢而不是变快。@YaronIdan:这是个错误的建议。“是的,它会让你慢下来,没错,它会让你慢下来--使你运行得慢下来,不会节省任何资源,事实上,它会消耗更多的资源(你会生成更多的重做)”