Berkeley DB(JE)许可可能是交易杀手。我有一个Java应用程序发送给一小部分客户,但因为它是一个桌面应用程序,我的价格不能支持单个实例许可。
是否有推荐的Java替代Berkeley DB?商业或其他方面(良好的键值存储实现可能非常重要,我更愿意推迟其他地方的维护)。我需要的不仅仅是一个哈希存储,因为我需要迭代后续的关键子集,基本的哈希存储将是O(m * n)搜索,我希望在桌面计算机上存储大约为50-60GiB。您可以推荐的任何可以将其后备存储保存在单个文件中的任何人的好处?
答案 0 :(得分:9)
你一定要尝试JDBM2,它会做你想要的:
另外:
<强>更新强>
该项目现已发展为MapDB http://www.mapdb.org
答案 1 :(得分:5)
我认为SQLite正是你想要的:免费(公共领域),单一文件数据库,零配置,小尺寸,快速,跨平台等。这是一个list of wrappers ,有一节针对Java。请查看sqlite4java并阅读有关Java + SQLite here的更多信息。
答案 2 :(得分:3)
它不是一个单独的文件,但是如果你想要嵌入式数据库,我建议Java DB(Apache Derby的重新命名版本,我在之前的工作中使用了它,结果非常好。)< / p>
另外,两者都是完全免费的。
编辑:阅读其他评论,另一个注释:Java DB / Derby是100%Java。
答案 3 :(得分:2)
---看到文件大小后编辑---
50到60个GiB文件!您似乎必须知道您的数据库引擎没有立即将所有内容加载到内存中,并且非常有效地处理/清理卸载的数据后备块。
我不知道Cloudscape是否能胜任这项任务,如果不是,我也不会感到惊讶。
---原帖如下---
Cloudscape通常符合要求。它比伯克利数据库更多,但它获得了足够的牵引力,即使有一些JDK产品也可以分发。
答案 4 :(得分:2)
考虑ehcache。我向here展示了一个将它包装为java.util.Map的类。您可以轻松地将列表或其他数据结构存储为您的值,从而避免您关注的O(m * n)问题。 ehcache是Apache 2.0许可证,Terracotta提供商业企业版本。开源版本允许您将缓存溢出到磁盘,如果您选择不驱逐缓存条目,它实际上是一个持久的键值存储。
答案 5 :(得分:2)
JavaDB又名Derby又名Cloudscape将是一个不错的选择;它是一个纯Java SQL数据库,它包含在JRE中,因此您不必随附代码或要求用户单独安装它。
(它实际上并没有包含在一些Linux软件包管理器提供的JRE中,但是它将是一个单独的软件包,安装起来很简单)
然而,德比的表现相当差。另一种选择是H2 - 同样是一个纯Java SQL数据库,它将数据库存储在一个文件中,redistributable license下有一个〜1MB的jar,但是considerably faster and lighter than Derby。 / p>
我很高兴地将H2用于许多小项目。 JBoss非常喜欢它们bundled it in AS7。设置非常简单,绝对值得一试。
答案 6 :(得分:2)
Persistit是新的挑战者。它是一个快速,持久和事务性的Java B + Tree库。
我担心不能保证它仍然可以保留。支持Persistit的Akiban最近被FoundationDB收购。后者没有提供有关未来的任何信息。
答案 7 :(得分:1)
我只想指出,如果你不需要sql / jdbc,H2的存储后端也可以用作键值存储引擎:
答案 8 :(得分:0)
它是一个成熟的SQL / JDBC数据库,但它轻巧而快速
答案 9 :(得分:0)