Java Berkeley DB具有100M文档的读取性能

Java Berkeley DB具有100M文档的读取性能,java,berkeley-db,berkeley-db-je,Java,Berkeley Db,Berkeley Db Je,我想知道Berkeley DB JE是否适合为1亿个文档存储一个简单的键/值对 我需要实现为什么不使用ApacheLucene——一个开源信息检索引擎?我会使用lucene来保存索引:文档ID的关键字。现在,您可以将一个关键字(或一组关键字)发布到lucene,获取文档id,然后从Berkley DB检索文档。您可能希望在上讨论您的性能要求。主要的问题是“为了获取数据,您需要执行多少I/O?”如果答案是“无”,那么75毫秒的响应时间就是小菜一碟。如果答案是“多”,那么它将取决于“多”的数量和磁盘

我想知道Berkeley DB JE是否适合为1亿个文档存储一个简单的键/值对


我需要实现为什么不使用ApacheLucene——一个开源信息检索引擎?我会使用lucene来保存索引:文档ID的关键字。现在,您可以将一个关键字(或一组关键字)发布到lucene,获取文档id,然后从Berkley DB检索文档。

您可能希望在上讨论您的性能要求。主要的问题是“为了获取数据,您需要执行多少I/O?”如果答案是“无”,那么75毫秒的响应时间就是小菜一碟。如果答案是“多”,那么它将取决于“多”的数量和磁盘驱动器的速度


网上有一些很好的快速参考资料。特别是,可以立即使用。基本上,您希望调整缓存的大小,以便至少所有索引节点都适合内存。如果索引节点适合内存,那么您最多需要进行一次I/O才能访问数据(叶节点),除非它已经在缓存中

你在扔什么样的硬件?100兆字节的文档,还是1亿个文档?“文档”有多大?如果你能将所有数据都保存在内存中,你就不会有问题。1亿个文档。字符串20 maxlen作为键,字符串20 maxlen作为值。英特尔i5,6Gb内存,7.2k rpm SATA硬盘。因此,您可以将几乎所有数据存储在内存中。我想您应该知道,这种方法用于定位Solr集群上的服务器碎片。由于我们无法知道(不需要查询整个集群)给定文档的当前位置,我们正在使用在BDB.Ok上开发的整个碎片/文档索引。您能否在问题中提供更多信息,以便更容易解决您的问题?根据我的经验——免责声明:我并没有在生产系统上工作,而是在研究/原型开发中工作——制作数据库来完成IR引擎的工作不是一个好主意。