Derby内存db:在select into语句时内存耗尽



在一个项目中,我必须对一些大型表使用derby。为了获得一些性能,我从三个不同的表中选择文档id到一个大表中,以便查找文档类型。

一个非常简单的查询:

"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"

当我在"正常"模式下运行它时,在我的硬盘驱动器上使用derby,它需要大约1分钟来处理,并且我最终在DB中有大约650万行(巨大,我知道…)

无论如何,数据库对我来说仍然很慢,所以我试图在内存中运行所有内容。不幸的是,即使有4GB的堆大小(我硬盘驱动器上的完整DB从未超过1GB),操作也会很快导致"java/lang/OutOfMemoryError"。

我真的没有看到任何替代或变通方法来解决这个问题。Derby不支持物化视图,在Java中这样做(SELECT、interinterresultset、INSERT)将花费数小时……

您也不能"块化"语句,因为Derby似乎不支持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

相关内容

最新更新