我使用 Berkeley DB (BDB) 作为 JMS 队列的持久存储。当我使用队列中的条目时,底层 BDB 文件不会立即收缩,但最终会收缩。我遇到了 BDB 文件在文件系统上占用大量空间而检索性能下降的问题。
我的条目大小变化很大,但在持久队列中有 400,000 条大约 32kb 的消息并不少见。
我想了解 BDB 如何管理文件,以便我可以限制文件大小/检索性能的条目数。或者,我可以排除 BDB 作为我的持久存储机制。
我可能正在搜索错误的术语,但没有在Oracle 文档或The Berkeley DB Book中找到我要查找的内容。如果 BDB 不希望我弄乱它的内部结构,我不会感到惊讶,但如果(至少)没有关于它如何处理其内部结构的概述,我会感到惊讶。
基本上,哲学似乎是,如果它会再次增长,那么在压缩数据库上投入太多精力是不值得的。BDB 引擎的工作方式使得很难真正回收具有大量插入/更新活动的工作负载上的任何释放空间,我认为 JMS 持久性很可能就是这样的工作负载。当然,这种理念的好处是,在新消息爆发时,数据库不需要分配更多页面,而是可以以最有效的方式直接将数据写入现有页面。但是,如果对检索性能的影响很大,那么 BDB 可能确实不是您工作负载的正确选择。
我想知道 Oracle 论坛中这些帖子中提供的答案是否为这个谜团提供了任何线索(引用来自第二个链接)。
了解压缩和数据库文件大小
Berkeley DB 数据库文件大小不断增长