10

我需要为表格格式的一些简单数据创建存储文件格式,尝试使用 HDF5,但由于一些问题几乎放弃了,我想重新检查嵌入式数据库的使用,看看它们是否是对于我的应用程序来说足够快。

是否有信誉良好的嵌入式 Java 数据库可以选择将数据存储在一个文件中?我知道的唯一一个是 SQLite(可用的 Java 绑定)。我尝试了 H2 和 HSQLDB,但它们似乎开箱即用地创建了多个文件,我非常希望在一个文件中拥有一个数据库。

编辑:相当快的性能很重要。对象存储不是;出于性能考虑,我只需要存储整数和 BLOB。(+ 一些字符串,但对性能没有影响)

编辑 2:存储数据效率对于较大的数据集很重要,因此 XML 已淘汰。

4

10 回答 10

5

亚硝酸盐数据库 http://www.dizitart.org/nitrite-database.html

NOsql 对象(NO2 aka Nitrite)数据库是一个开源的 nosql 嵌入式文档存储,用 Java 编写,带有类似 MongoDB 的 API。它支持内存中和基于单个文件的持久存储。

于 2017-11-24T15:43:33.727 回答
4

如果您使用带有 PAGE_STORE 选项的最新 H2 构建,H2 仅使用一个文件。这是一项新功能,因此可能并不可靠。

于 2009-07-21T18:28:32.217 回答
3

如果您只需要读取权限,那么 H2 能够从 zip 文件中读取数据库文件

同样,如果您不需要持久性,则可以使用仅内存版本的 H2。

如果您需要读/写访问和持久性,那么您可能对标准 SQL 类型的数据库不走运,因为这些数据库几乎都统一地分别维护索引和数据文件。

于 2009-07-21T18:24:12.880 回答
2

一旦我使用了将其数据保存到文件中的对象数据库。它有一个Java 和一个.NET 接口。你可能想检查一下。它被称为db4o

于 2009-07-21T17:03:02.967 回答
2

Chronicle Map是一个嵌入式纯 Java 数据库。

  • 它将数据存储在一个文件中,即

    ChronicleMap<Integer, String> map = ChronicleMap
        .of(Integer.class, String.class)
        .averageValue("my-value")
        .entries(10_000)
        .createPersistedTo(databaseFile);
    
  • Chronicle Map 已经成熟(现在几个月没有报告严重的存储错误,而它正在积极使用中)。

  • 独立的基准测试表明,Chronicle Map 是Java中速度最快内存效率最高的键值对存储。

您的用例的主要缺点是 Chronicle Map 仅支持简单的键值模型,但可以在其之上构建更复杂的解决方案。

免责声明:我是 Chronicle Map 的开发者。

于 2016-07-08T11:58:25.587 回答
1

如果您正在寻找可能与另一个程序一起提供的小型快速数据库,我会检查Apache Derby我不知道您将如何定义嵌入式数据库,但我在某些项目中将其用作可以检查的调试数据库源代码,可在每台开发人员机器上即时使用。

于 2009-07-21T17:06:10.930 回答
1

这不是 SQL 引擎,但如果您将PrevaylerXStream一起使用,您可以轻松地创建包含所有数据的单个 XML 文件。(Prevayler 称其为快照文件。)

尽管它不是基于 SQL 的,因此需要一点麻烦,但它自包含的性质使开发(尤其是良好的测试)变得更加容易。此外,它非常快速和可靠。

于 2009-07-21T17:12:04.990 回答
1

您可能想查看jdbm - 我们在多个项目中使用它,而且速度非常快。如果您将它用于 ACID 类型的应用程序,它确实使用 2 个文件(一个数据库文件和一个日志文件),但如果您不需要固体 ACID,您可以直接删除直接数据库访问(无日志文件)。

JDBM 将很容易地支持整数和 blob(任何你想要的),而且速度非常快。它并不是真正为并发而设计的,因此如果您有多个线程,则必须自己管理锁定,但是如果您正在寻找一个简单、可靠的嵌入式数据库,那么它是一个不错的选择。

于 2009-07-22T03:19:45.317 回答
0

既然您提到了 sqlite,我假设您不介意本地数据库(只要有良好的 java 绑定可用)。 Firebird可以很好地与 java 配合使用,并且默认情况下会进行单个文件存储。

如果您没有单个文件的要求,H2 和 HSQLDB 都是很好的选择。

于 2009-07-21T17:06:49.103 回答
0

我认为现在我将继续使用 HDF5 进行持久数据存储,并结合 H2 或其他一些数据库进行内存索引。我无法让 SQLite 将 BLOB 与我拥有的 Java 驱动程序一起使用,也无法让嵌入式 Firebird 启动并运行,而且我还不相信 H2 与 PAGE_STORE。

于 2009-07-21T18:48:34.250 回答