Java Berkeley DB 读取性能与 100M 文档

Posted

技术标签:

【中文标题】Java Berkeley DB 读取性能与 100M 文档【英文标题】:Java Berkeley DB read performance w/ 100M documents 【发布时间】:2011-04-04 15:51:47 【问题描述】:

我想知道 Berkeley DB JE 是否适合存储 100M 文档的简单键/值对。

我需要在 BDB 上获取

提前致谢

【问题讨论】:

你要扔什么样的硬件? 100 兆字节的文档,还是 1 亿个文档? “文档”有多大? 如果你能把所有的数据都保存在内存中,应该没问题。 1 亿份文档。字符串 20 maxlen 作为键,字符串 20 maxlen 作为值。 Intel i5、6Gb RAM、7.2k rpm SATA 硬盘。 这样你就可以将几乎所有的数据存储在内存中。我希望你应该得到 【参考方案1】:

为什么不使用 Apache Lucene - 一个开源信息检索引擎?我会使用 lucene 来保存索引:文档 ID 的关键字。您现在可以向 lucene 发布一个关键字(或一组关键字),获取文档的 id,并从 Berkley DB 检索文档。

【讨论】:

此方法用于在 Solr 集群上定位服务器分片。由于我们无法知道(不查询整个集群)给定文档的当前位置,我们正在使用基于 BDB 开发的整个分片/文档索引。 好的。您能否在问题中提供更多信息,以便更容易解决您的问题?根据我的经验——免责声明:我不是在生产系统上工作,而是在研究/原型开发中工作——让数据库来完成 IR 引擎的工作并不是一个好主意。【参考方案2】:

您可能想在Berkeley DB Java Edition discussion forum 上讨论您的性能要求。主要问题最终将是“您需要执行多少 I/O 才能获取数据?”如果答案是“无”,那么 75 毫秒的响应时间就是小菜一碟。如果答案是“很多”,那么这将取决于有多少“很多”以及磁盘驱动器的速度。

BDB JE FAQ page 上有一些出色的快速参考。特别是,this one 可能会立即使用。基本上,您希望调整缓存大小,以便至少所有索引节点都适合内存。如果索引节点适合内存,那么您最多只能执行一次 I/O 来获取数据(叶节点),除非它已经在缓存中。

【讨论】:

以上是关于Java Berkeley DB 读取性能与 100M 文档的主要内容,如果未能解决你的问题,请参考以下文章

如何读取现有的 jdb 文件 java berkeley db

berkeley db java中的多个键

Berkeley DB为啥又叫做db4

Berkeley DB:锁定记录而不读取它

从 Java 中的另一个类访问 berkeley db

Berkeley DB 读取数据失败