无法在Java Edition中更改Berkeley DB数据库类型?

时间:2011-01-12 22:22:25

标签: database berkeley-db berkeley-db-je

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

2 个答案:

答案 0 :(得分:10)

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

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

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

  1. Hash对于拥有庞大数据集和极少量可用内存缓存的用户尤其有用。在此特定方案中,B树可能需要多个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 vs B-Tree访问方法的更多信息,请参阅BDB参考手册(选择访问方法)的第2章。
  6. 我希望这有用。

    问候,

    戴夫

答案 1 :(得分:0)

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

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