推荐快速且可扩展的持久地图-Java
-
20-09-2019 - |
题
我需要一个磁盘支持的地图结构才能在Java应用中使用。它必须具有以下标准:
- 能够存储数百万记录(甚至数十亿)
- 快速查找 - 地图上的大多数操作将简单地查看是否已经存在。这是最重要的标准。对于经常使用的密钥,应该有有效的内存缓存机制。
- 持久,但不需要交易,可能会失败。 IE很乐意定期与磁盘同步,并且不需要交易。
- 能够存储简单的原始类型 - 但我不需要存储串行的对象。
- 它不需要分发,即将全部运行在一台计算机上。
- 易于设置并免费使用。
- 无需关系查询
记录键将是字符串或隆起。如上所述,读取将比写入要频繁得多,大多数读取将仅仅是检查是否存在密钥(即无需读取关联的键数据)。每个记录将仅更新一次,并且未删除记录。
我目前使用BDB JE,但正在寻找其他选择。
更新
从那以后,通过减少对辅助键的依赖性来提高我现有的BDB设置的查询性能。一些查询需要在两个辅助键上加入,然后将它们组合成一个复合键,我在查找中删除了一定程度的间接键,从而加快了速度。
其他提示
您可能想调查 OrientDB.
您可以尝试使用Java Chronicles http://openhft.net/products/chronicle-map/纪事地图是一张高性能,外部,钥匙值,在内存中,持续存在的数据存储。它像标准Java地图一样工作
Sqlite这样做。我写了一个用Java使用的包装器: http://zentus.com/sqlitejdbc
正如我在评论中提到的那样,我成功地使用了千兆字节的数据和数亿行的表格。如果您正确考虑索引,那就很快了。
唯一的痛苦是JDBC界面。与简单的哈希图相比,它很笨拙。我通常最终为特定项目编写JDBC-Wrapper,这可能加起来很多样板代码。
jboss(树)缓存 是一个不错的选择。您可以从JBOSS独立使用它。非常健壮,表现和灵活。
我认为 冬眠碎片 可以轻松满足您的所有要求。
不隶属于 StackOverflow