微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – Derby in-memory db:select into – 语句内存不足

我必须在项目中使用带有一些大表的derby.为了获得一些性能,我将从三个不同的表中选择文档ID到一个巨大的表中以查找doc类型.

基本上是一个非常简单的查询

"INSERT INTO DOC_TYPES SELECT DOC_ID, 1 FROM TYPE_A_DOCUMENT"
"INSERT INTO DOC_TYPES SELECT DOC_ID, 2 FROM TYPE_B_DOCUMENT"
"INSERT INTO DOC_TYPES SELECT DOC_ID, 3 FROM TYPE_C_DOCUMENT"

当我在“正常”模式下运行时,在我的硬盘驱动器上使用德比,处理大约需要1分钟,我最终在数据库中有大约650万行(很大,我知道……)

无论如何,数据库仍然可以减慢我的口味,所以我试图在内存中运行所有内容.不幸的是,即使有4GB的堆大小(我的硬盘驱动器上的完整数据库永远不会超过1GB),在“java / lang / OutOfMemoryError”中操作结果也相当快.

我真的没有看到任何替代方法或变通方法解决这个问题. Derby不支持物化视图,在Java中执行此操作(SELECT,interate resultset,INSERT)需要数小时…

你也不能“大肆宣传”这句话,因为德比似乎不支持LIMIT.

有什么建议/想法吗?

问候,
迈克尔

解决方法:

您可以尝试通过modulo id创建块,将模运算的第二个值设置为您需要的块数(n).并从0开始重复比较..(n-1)

INSERT INTO DOC_TYPES SELECT DOC_ID, 1 FROM TYPE_A_DOCUMENT WHERE DOC_ID % 2 = 0
INSERT INTO DOC_TYPES SELECT DOC_ID, 1 FROM TYPE_A_DOCUMENT WHERE DOC_ID % 2 = 1

并为每个插入提交事务.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐