【发布时间】:2010-12-04 22:47:48
【问题描述】:
我需要一个磁盘支持的 Map 结构才能在 Java 应用程序中使用。它必须具有以下条件:
- 能够存储数百万条记录(甚至数十亿条)
- 快速查找 - Map 上的大多数操作只是查看键是否已存在。这和上面的 1 是最重要的标准。应该有一个有效的内存缓存机制,用于频繁使用的键。
- 持久,但不需要是事务性的,可以忍受一些失败。即乐于定期与磁盘同步,并且不需要事务性。
- 能够存储简单的原始类型 - 但我不需要存储序列化对象。
- 它不需要分布式,即在一台机器上运行。
- 设置简单且免费使用。
- 不需要关系查询
记录键将是字符串或长整数。如上所述,读取将比写入频繁得多,并且大多数读取将只是检查密钥是否存在(即不需要读取与密钥相关的数据)。每条记录只更新一次,记录不会被删除。
我目前使用 Bdb JE,但正在寻找其他选择。
更新
通过减少对辅助键的依赖,提高了我现有 BDB 设置的查询性能。有些查询需要连接两个辅助键,通过将它们组合成一个复合键,我在查找中删除了一个间接级别,这可以很好地加快速度。
【问题讨论】:
-
我正在考虑的一个选项是改变我使用现有 BDB 实现的方式。目前,我的所有记录都有一个大型数据库。但是,我应该能够将数据划分为多个集合,并且每个集合有一个数据库 - 如果我知道在任何时间点我只需要访问某些集合,那么我可以关闭那些我不使用的集合,这应该有助于 bdb 对我更有效地管理数据。
-
我用过 bdb je。根据您的标准,它非常适合。但是,我对它的脆弱性感到非常失望,并且不建议将其用于生产用途。 java 进程中的任何问题都会导致 bdb 子系统需要重新启动,blech!
-
我不确定您所说的 BDB JE 的“脆弱性”是什么意思。 BDB JE 可扩展到 TB 级数据,我一直在生产系统中使用它。这是一项很棒的技术。
标签: java map berkeley-db persistent berkeley-db-je