2

我正在寻找将 BDB 的 Java 版 4.1.7 的数据库类型从 BTree 更改为 Hash。核心版本有 DatabaseType.HASH、DatabaseType.RECNO 和 DatabaseType.Queue——Java 版不支持这些吗?如果是这样,有理由放弃这些吗?

4

2 回答 2

11

此处为 Berkeley DB 产品管理总监 David Segleau。通常,我们建议人们在Berkeley DB 论坛上提问。您会在那里找到一个由活跃的 Berkeley DB 应用程序开发人员组成的大型社区。

是的,Berkeley DB(C 中的原始产品)具有 B-Tree、Hash、Queue 和 Recno 访问方法。Berkeley DB Java 版仅支持 B-Tree。主要原因是我们大约 99% 的用户使用 B-Tree 进行存储,而 Hash 仅由一小部分应用程序使用。

围绕这个主题的一些有用的技术花絮:

  1. 哈希对于拥有庞大数据集和非常少量可用内存缓存的人特别有用。在这个特定的场景中,B-Tree 可能需要多个 I/O 来获取内部索引页面(不适合缓存)然后获取记录。哈希通常可以通过单个 I/O 访问数据记录。
  2. 如果您想按顺序访问数据或允许重复数据,散列通常没有帮助,因为散列索引中没有隐含的排序。
  3. 大多数应用程序都有足够的可用内存缓存来保存 B 树的内部节点以及最常访问的数据记录。在这个更常见的场景中,B-tree 和 Hash 将具有几乎相同的性能。
  4. 在过去的一年中,Berkeley DB Java 版团队一直在与使用超大数据集(在 250GB - 低 TB 范围内)的客户和应用程序开发人员密切合作。特别是,他们一直专注于如何最大限度地提高缓存效率、改进缓存驱逐算法以及最大限度地减少 Java 垃圾收集的影响。我们发现 BDB JE 4.1 在缓存管理和效率方面的表现要好得多,尤其是对于超出可用缓存的数据集。有关此更改的更多信息,请参阅 Berkeley DB 下载页面上的 BDB JE 4.1.7 更改日志。
  5. 有关 Berkeley DB 中 Hash 与 B-Tree 访问方法的更多信息,请参阅 BDB 参考手册(选择访问方法)的第 2 章。

我希望这会有所帮助。

问候,

戴夫

于 2011-01-14T20:34:14.583 回答
1

我也试图理解同样的事情。当我在(1)场景中工作时,我也很欣赏在 berkeley db je 中使用 Hash 的可能性,因此内存大小和数据集大小之间存在特定的比率。

有什么选择吗?你打算在未来把它放回去吗?berkeley db je 在 oracle.com 上的网站说访问时间是恒定的,与数据集大小无关。如果你使用 BTrees,这个说法是错误的。

于 2011-01-27T23:14:13.037 回答