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

Database 无法在Java Edition中更改Berkeley DB数据库类型?,database,berkeley-db,berkeley-db-je,Database,Berkeley Db,Berkeley Db Je,我希望将BDB的Java Edition 4.1.7的数据库类型从BTree更改为Hash。核心版本有DatabaseType.HASH、DatabaseType.RECNO和DatabaseType.Queue,这些在Java版本中不受支持。如果是这样的话,有什么理由放弃这些吗?David Segleau,伯克利DB的产品管理总监。一般来说,我们建议人们在网上提问。您将在那里找到一个由活跃的Berkeley DB应用程序开发人员组成的大型社区 是的,Berkeley DB(C中的原始产品)有B

我希望将BDB的Java Edition 4.1.7的数据库类型从BTree更改为Hash。核心版本有DatabaseType.HASH、DatabaseType.RECNO和DatabaseType.Queue,这些在Java版本中不受支持。如果是这样的话,有什么理由放弃这些吗?

David Segleau,伯克利DB的产品管理总监。一般来说,我们建议人们在网上提问。您将在那里找到一个由活跃的Berkeley DB应用程序开发人员组成的大型社区

是的,Berkeley DB(C中的原始产品)有B-树、哈希、队列和Recno访问方法。Berkeley DB Java Edition仅支持B树。这样做的主要原因是,大约99%的用户使用B-Tree进行存储,而散列仅由一小部分应用程序使用

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

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

    问候,


    戴夫

    我也在努力理解同样的事情。我也很欣赏在berkeley db je中使用哈希的可能性,因为我在(1)场景中工作,所以在内存大小和数据集大小之间有一个特定的比率


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

    Recno只是一个带有数字键值的btree。Recno对于逻辑记录编号键的行为具有某些特定属性。有关更多信息,请参阅参考指南:。正如我提到的,大多数人使用B-树。如果您对使用Recno、Hash或Queue感兴趣,最好的选择是通过Java API使用Berkeley DB产品。如果您对使用Recno、Hash或Queue感兴趣,最好的选择是通过Java API使用Berkeley DB产品。Berkeley DB Java Edition从未支持哈希访问方法。目前没有计划将其添加到BDB JE。如果网站上有误导性的文字,我深表歉意。显然,访问时间取决于B树的深度和所需的I/O数量。如果索引和数据已经在内存中,B树的深度将几乎没有可测量的影响。这些任何其他产品和性能问题也可以在OTN上的Berkeley DB论坛上提出。BDB Java Edition论坛位于:。