gpt4 book ai didi

java - Derby 内存数据库 : running out of memory on select into - statements

转载 作者:搜寻专家 更新时间:2023-11-01 03:11:47 25 4
gpt4 key购买 nike

我必须在项目中使用带有一些大表的 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 分钟,最终我在数据库中有大约 650 万行(我知道这很大......)

无论如何,数据库对我来说仍然很慢,所以我试图在内存中运行所有内容。不幸的是,即使有 4GB 的堆大小(我的硬盘上的完整数据库从未超过 1GB),操作结果在“java/lang/OutOfMemoryError”中相当快。

我真的没有看到任何替代方法或变通方法来解决这个问题。 Derby 不支持物化 View ,在 Java 中执行此操作(SELECT、interate resultset、INSERT)将花费数小时...

您也不能“分块”声明,因为 Derby 似乎不支持 LIMIT。

有什么建议/想法吗?

问候,迈克尔

最佳答案

您可以尝试通过取模 id 创建 block ,将取模操作的第二个值设置为您需要的 block 数 (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

并为每个插入提交事务。

关于java - Derby 内存数据库 : running out of memory on select into - statements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8507075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com