6

Berkeley DB (JE) 许可可能会成为交易杀手。我有一个面向一小部分客户的 Java 应用程序,但由于它是一个桌面应用程序,我的价格不能支持单个实例许可。

Berkeley DB 是否有推荐的 Java 替代品? 商业或其他(良好的键值存储实现可以变得不平凡,我更喜欢将维护推迟到其他地方)。我需要的不仅仅是一个哈希存储,因为我需要遍历后续的关键子集,而基本哈希存储将 O(m*n) 进行搜索,我希望该存储在台式机上约为 50-60GiB。您可以推荐将其后备存储保存在单个文件中的任何人的额外好处?

4

10 回答 10

9

您绝对应该尝试JDBM2,它可以满足您的需求:

  • 磁盘支持的 HashMaps/TreeMaps,因此您可以遍历键。
  • 阿帕奇 2 许可证

此外:

  • 快速,占地面积小
  • 事务性的
  • 独立 jar 只有 145 KB。
  • 简单使用
  • 可扩展到 1e9 条记录
  • 使用 Java 序列化,没有 ORM 映射

更新

该项目现已演变为 MapDB http://www.mapdb.org

于 2012-02-26T15:38:12.277 回答
5

我认为SQLite正是您想要的:免费(公共域)、单文件数据库、零配置、小占用空间、快速、跨平台等。这是一个包装器列表,还有一个 Java 部分。查看sqlite4java并在此处阅读有关 Java + SQLite的更多信息。

于 2011-02-17T17:51:39.827 回答
3

它不会是单个文件,但如果您想要嵌入式数据库,我建议使用Java DBApache Derby的更名版本,我在之前的工作中使用过,效果很好)。

另外,两者都是完全免费的。

编辑:阅读其他评论,另请注意:Java DB/Derby 是 100% Java。

于 2011-02-17T17:53:07.530 回答
2

---看到文件大小后编辑---

50 到 60 GiB 文件!似乎您必须知道您的数据库引擎并没有一次将所有这些加载到内存中,并且在处理/清除卸载的数据支持块方面非常有效。

我不知道 Cloudscape 是否能胜任这项任务,如果不是,我也不会感到惊讶。

---原帖如下---

Cloudscape 通常符合要求。它比 Berkeley DB 多一点,但它获得了足够的吸引力,甚至可以通过一些 JDK 产品进行分发。

于 2011-02-17T17:51:22.693 回答
2

Persistit 是新的挑战者。它是一个快速、持久和事务性的 Java B+Tree 库。

恐怕不能保证它仍然会被维护。支持 Persistit 的公司 Akiban 最近被 FoundationDB 收购。后者没有提供任何关于未来的信息。

https://github.com/akiban/persistit

于 2013-07-31T08:26:27.300 回答
2

考虑ehcache。我在这里展示了一个将其包装为 java.util.Map 的类。您可以轻松地将列表或其他数据结构存储为您的值,避免您关心的 O(m*n) 问题。ehcache 是 Apache 2.0 许可证,Terracotta 提供商业企业版本。开源版本将允许您将缓存溢出到磁盘,如果您选择不驱逐缓存条目,它实际上是一个持久的键值存储。

于 2011-02-17T18:05:58.727 回答
2

JavaDB aka Derby aka Cloudscape 将是一个不错的选择;它是一个纯 Java SQL 数据库,并且包含在 JRE 中,因此您不必将它与代码一起发布或要求用户单独安装它。

(它实际上并没有包含在一些 Linux 包管理器提供的 JRE 中,但是会有一个单独的包,安装起来很简单)

然而,德比的表现相当差。另一种选择是H2 - 再次,一个纯 Java SQL 数据库,将数据库存储在单个文件中,在可再发行许可下具有约 1MB 的 jar ,但它比 Derby 快得多且更轻

我很高兴地将 H2 用于许多小型项目。JBoss 非常喜欢它,他们将它捆绑在 AS7 中。设置起来很简单,绝对值得一试。

于 2012-09-30T10:57:06.020 回答
1

我只想指出,如果不需要sql/jdbc,H2的存储后端也可以作为key-value存储引擎:

http://www.h2database.com/html/mvstore.html

于 2015-10-22T11:35:45.003 回答
0

H2 http://www.h2database.com/

它是一个成熟的 SQL/JDBC 数据库,但它轻量且快速

于 2014-03-18T08:10:57.740 回答
0

看看LMDBJava,Java 与LMDB的绑定,这是目前排序最快的 ACID 键值存储。

于 2017-03-19T00:11:16.373 回答