2011-01-12 120 views
1

我正在寻找将BDB的Java版本4.1.7的数据库类型从BTree更改为哈希。核心版本有DatabaseType.HASH,DatabaseType.RECNO和DatabaseType.Queue-这些在Java版本中不受支持。如果是的话,是否有理由放弃这些?无法更改Java版中的Berkeley DB数据库类型?

回答

10

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

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

围绕这个话题的一些有用的技术小窍门:

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

我希望这有帮助。

问候,

戴夫

+0

戴夫,怎么样recno? – bmargulies 2011-03-28 14:46:46

+0

Recno只是一个带有数字键值的btree。 Recno具有逻辑记录编号键行为的某些特定属性。有关更多信息,请参阅参考指南:http://bit.ly/f7Kh2P。正如我所提到的,大多数人使用B树。如果您对使用Recno,Hash或Queue感兴趣,最好的选择是通过Java API使用Berkeley DB产品。 – dsegleau 2011-04-05 03:22:09

0

我也想了解同样的事情。我也很喜欢在(1)场景中使用Hash的可能性,因此在内存大小和数据集大小之间有一个特定的比例。

有没有这方面的选择?你打算在未来把它放回去吗? bergley db je在oracle.com上的站点说,访问时间是独立于数据集大小的常数。如果你使用BTrees,这种说法是错误的。