102

我打算开发一个小型(Java)应用程序来管理我的财务。我相信我需要使用嵌入式数据库,但我对这个问题没有经验。我试图查看一些可用的产品,但我无法决定哪一种更适合我。H2HSQLDBDerbyBerkeley DB似乎是不错的候选者,但我仍然看不出它们之间的比较。感谢您帮助比较它们并帮助我决定使用哪一个。

我打算将 Hibernate 用于我的应用程序(除非您建议使用 DBMS 提供的 API),但我也希望能够使用 SQL 浏览工具(修改模式和更改数据)轻松编辑数据库。

谢谢你。

4

18 回答 18

61

任何一个

  • HSQLDB - 由 OpenOffice 使用,经过测试且稳定。它很容易使用。如果你想编辑你的数据库数据,你可以打开文件并编辑插入语句。

或者

  • H2 - 据说更快(由最初设计 hsqldb 的开发人员提供)

您使用哪一个取决于您,这取决于您需要多少性能和多少稳定性。

H2的开发者已经提出了一个很好的性能评估:
http ://www.h2database.com/html/performance.html

于 2009-01-20T22:12:47.680 回答
35

我使用Apache Derby来满足我几乎所有的嵌入式数据库需求。您也可以使用基于 Derby 的 Sun 的 Java DB,但 Derby 的最新版本要新得多。它支持商业、本地数据库支持的许多选项,但更小且更易于嵌入。我有一些数据库表,其中包含超过一百万条记录,没有问题。

大约 3 年前,我曾经使用过 HSQLDB 和 Hypersonic。当时它有一些主要的性能问题,由于这些问题,我从它切换到了 Derby。即使在 Apache 的孵化器中,Derby 也很稳定。

于 2008-09-11T19:03:59.330 回答
31

我需要在我的一个项目中使用 Java 嵌入式数据库,并且我做了很多研究来了解每个数据库的优缺点。我写了一篇博客,列出了流行的嵌入式 Java 数据库(H2、HSQLDB、Derby、ObjectDB、Neo4j、OrientDB)的优缺点,你可以看看。我选择了 H2,因为我认为它最适合我的要求。博客链接:http ://sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html 希望对您有所帮助!

于 2013-02-03T22:57:52.307 回答
22

我会选择H2,性能比德比要好得多。阅读http://www.h2database.com/html/performance.html了解更多信息。

于 2009-02-25T15:57:33.317 回答
14

HSQLDB是一个很好的候选者(它在 OpenOffice 中使用的事实可能会让你们中的一些人信服),但是对于这么小的个人应用程序,为什么不使用对象数据库(而不是经典的关系数据库)呢?

我在我的一个项目中使用了 DB4O,我对它非常满意。面向对象,不需要整个 Hibernate 层,可以直接插入/更新/删除/查询对象!此外,您无需担心模式,您可以直接使用对象,其余的由 DB4O 完成!

我同意可能需要一些时间来适应这种新类型的数据库,但请查看DB40 教程,了解它使使用数据库变得多么容易!

编辑:正如评论中所说,DB4O 自动处理较新版本的类。此外,在应用程序之外浏览和更新数据库的工具可在此处获得:http ://code.google.com/p/db4o-om/

于 2009-01-20T20:49:55.803 回答
12

Java DB(Sun 的 Apache Derby 发行版)现在JDK 6 中发布!

我一直想做像 Jason Cohen 这样的事情,并且一直认为这看起来像是 JDK 发行版中最简单的方法(上周是我的应用程序的要求)。或者也许我只是这样懒惰。

于 2008-09-11T17:33:14.463 回答
7

我们在生产中使用 HSQLDB 作为我们应用程序的“无配置”选项。它允许人们在没有设置真实数据库的麻烦的情况下进行试用。

但是我们支持正常使用。原因有几个:

  1. 与数据大小成比例地减慢。
  2. 难以在我们的应用程序之外访问(例如自定义报告)。
  3. 事务/磁盘同步很难正确处理,因此很容易丢失数据。

至少对于(2)和(3),有一些方法可以解决它,但很难;例如安装 MySQL 要容易得多。

于 2008-09-11T17:26:52.853 回答
7

neo4j是:

一个嵌入式的、基于磁盘的、完全事务性的 Java 持久性引擎,它以图形而不是表的形式存储数据

我还没有机会尝试它——但它看起来很有希望。请注意,这不是 SQL 数据库 - 您的对象图是为您保留的 - 因此它可能不适合您现有的应用程序。

于 2008-09-12T11:03:14.720 回答
6

可以在这里找到很好的比较工具:http ://www.jpab.org/All/All/All.html

还要注意头对头 DBMS/JPA 比较

于 2013-11-13T22:16:10.157 回答
5

大多数事情已经说了,但我可以补充一点,我在一些我喜欢的项目中使用了 HSQL、Derby 和 Berkely DB,它们都工作得很好。所以我认为诚实并不重要。值得一提的是,HSQL 将自己保存为带有 SQL 语句的文本文件,这非常好。让您在开发时快速进行测试和设置数据变得非常容易。如果需要,还可以进行快速编辑。猜猜如果您还需要更改,您可以轻松地将所有这些转移到任何数据库:)

于 2009-01-20T22:41:32.663 回答
5

HSQLDB 可能会导致大型应用程序出现问题,它不是那么稳定。

我听过的最好的(但不是第一手经验)是berkleyDB。但是,除非您将其开源,否则由于许可的原因,使用它会花费您一条胳膊和一条腿……请参阅此http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html详情。

附言。如果您不知道,berkleyDB 不是关系数据库。

于 2009-01-21T10:00:50.920 回答
4

我是.Net 和 Java 的 DB4O 的忠实粉丝。

自早期版本以来,性能已经变得更好。许可模式也不错。我特别喜欢可用于查询对象的选项。示例查询非常强大且易于使用。

于 2008-09-11T17:26:43.650 回答
4

您将使用什么标准来评估这些?如果你还不知道,那么你现在不需要决定。尽量使您的应用程序与数据库实现无关 - 提供适当的包装器、数据访问对象等,并在您掌握所有事实并且必须做出决定时做出此决定。

如果您使用的是关系数据库和 SQL,那么上面的内容应该不会太难(使用 JDBC 等)。确保您有大量的周边测试,以便当您想要在数据库之间切换时,您可以确定您的应用程序的功能保持不变。

前段时间我遇到了同样的问题。我不知道要使用哪个数据库,所以我的第一个解决方案使用了 Derby(或 HSQLDB?),后来我能够切换到 HSQLDB(或 Derby ?不记得哪个解决方案有效)一旦我确定了哪里我遇到了问题(与性能有关),哪种解决方案真正适合我。

于 2009-01-20T22:23:33.527 回答
3

我用过 Derby,我真的很讨厌它的数据类型转换函数,尤其是日期/时间函数。(数字类型)<--> Varchar 转换很痛苦。

因此,如果您计划在 DB 语句中使用数据类型转换,请考虑使用其他嵌入式 DB,我学得太晚了。

最新的 Derby 版本数据类型转换

于 2008-09-12T10:19:01.440 回答
3

我个人喜欢 HSQLDB,但主要是因为它是我第一次尝试。

据说 H2 速度更快,并提供了更好的 GUI 前端(顺便说一下,它是通用的,可以与任何 JDBC 驱动程序一起使用)。

至少 HSQLDB、H2 和 Derby 提供了非常适合开发的服务器模式,因为您可以同时使用应用程序和某些工具访问数据库(嵌入式模式通常不允许)。

于 2009-01-20T20:39:47.510 回答
3

我想我有点晚了(晚了很多;-))到这篇文章,但我想添加 Perst,一个开源的、面向对象的 Java 和 .NET 嵌入式数据库。供您考虑。Perst 是一个用于 Java 的开源/双重许可嵌入式数据库。该发行版与 Google 的 Android 平台兼容,还包括用于 Java ME 的 Perst Lite。我们甚至构建了一个 Android 基准测试并制作了一份关于该主题的白皮书……您可以在这里查看:http ://www.mcobject.com/index.cfm?fuseaction=download&pageid=581§ionid=133

一切顺利,克里斯

于 2009-09-15T14:05:23.917 回答
3

如果我是正确的,H2 来自编写 HSQLDB 的同一个人。如果您信任他们网站上的基准,它会好很多。此外,还有一些观点认为太阳社区过快地加入了德比。

于 2010-11-02T03:43:18.640 回答
2

我意识到您提到了 SQL 浏览,但是您问题中的所有其他内容都让我想建议您也考虑DB4O,这是一个很棒的简单对象 DB

于 2009-01-20T20:35:47.847 回答