我打算开发一个小型(Java)应用程序来管理我的财务。我相信我需要使用嵌入式数据库,但我对这个问题没有经验。我试图查看一些可用的产品,但我无法决定哪一种更适合我。H2、HSQLDB、Derby和Berkeley DB似乎是不错的候选者,但我仍然看不出它们之间的比较。感谢您帮助比较它们并帮助我决定使用哪一个。
我打算将 Hibernate 用于我的应用程序(除非您建议使用 DBMS 提供的 API),但我也希望能够使用 SQL 浏览工具(修改模式和更改数据)轻松编辑数据库。
谢谢你。
我打算开发一个小型(Java)应用程序来管理我的财务。我相信我需要使用嵌入式数据库,但我对这个问题没有经验。我试图查看一些可用的产品,但我无法决定哪一种更适合我。H2、HSQLDB、Derby和Berkeley DB似乎是不错的候选者,但我仍然看不出它们之间的比较。感谢您帮助比较它们并帮助我决定使用哪一个。
我打算将 Hibernate 用于我的应用程序(除非您建议使用 DBMS 提供的 API),但我也希望能够使用 SQL 浏览工具(修改模式和更改数据)轻松编辑数据库。
谢谢你。
任何一个
或者
您使用哪一个取决于您,这取决于您需要多少性能和多少稳定性。
H2的开发者已经提出了一个很好的性能评估:
http ://www.h2database.com/html/performance.html
我使用Apache Derby来满足我几乎所有的嵌入式数据库需求。您也可以使用基于 Derby 的 Sun 的 Java DB,但 Derby 的最新版本要新得多。它支持商业、本地数据库支持的许多选项,但更小且更易于嵌入。我有一些数据库表,其中包含超过一百万条记录,没有问题。
大约 3 年前,我曾经使用过 HSQLDB 和 Hypersonic。当时它有一些主要的性能问题,由于这些问题,我从它切换到了 Derby。即使在 Apache 的孵化器中,Derby 也很稳定。
我需要在我的一个项目中使用 Java 嵌入式数据库,并且我做了很多研究来了解每个数据库的优缺点。我写了一篇博客,列出了流行的嵌入式 Java 数据库(H2、HSQLDB、Derby、ObjectDB、Neo4j、OrientDB)的优缺点,你可以看看。我选择了 H2,因为我认为它最适合我的要求。博客链接:http ://sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html 希望对您有所帮助!
我会选择H2,性能比德比要好得多。阅读http://www.h2database.com/html/performance.html了解更多信息。
HSQLDB是一个很好的候选者(它在 OpenOffice 中使用的事实可能会让你们中的一些人信服),但是对于这么小的个人应用程序,为什么不使用对象数据库(而不是经典的关系数据库)呢?
我在我的一个项目中使用了 DB4O,我对它非常满意。面向对象,不需要整个 Hibernate 层,可以直接插入/更新/删除/查询对象!此外,您无需担心模式,您可以直接使用对象,其余的由 DB4O 完成!
我同意可能需要一些时间来适应这种新类型的数据库,但请查看DB40 教程,了解它使使用数据库变得多么容易!
编辑:正如评论中所说,DB4O 自动处理较新版本的类。此外,在应用程序之外浏览和更新数据库的工具可在此处获得:http ://code.google.com/p/db4o-om/
Java DB(Sun 的 Apache Derby 发行版)现在在JDK 6 中发布!
我一直想做像 Jason Cohen 这样的事情,并且一直认为这看起来像是 JDK 发行版中最简单的方法(上周是我的应用程序的要求)。或者也许我只是这样懒惰。
我们在生产中使用 HSQLDB 作为我们应用程序的“无配置”选项。它允许人们在没有设置真实数据库的麻烦的情况下进行试用。
但是我们不支持正常使用。原因有几个:
至少对于(2)和(3),有一些方法可以解决它,但很难;例如安装 MySQL 要容易得多。
neo4j是:
一个嵌入式的、基于磁盘的、完全事务性的 Java 持久性引擎,它以图形而不是表的形式存储数据
我还没有机会尝试它——但它看起来很有希望。请注意,这不是 SQL 数据库 - 您的对象图是为您保留的 - 因此它可能不适合您现有的应用程序。
可以在这里找到很好的比较工具:http ://www.jpab.org/All/All/All.html
还要注意头对头 DBMS/JPA 比较
大多数事情已经说了,但我可以补充一点,我在一些我喜欢的项目中使用了 HSQL、Derby 和 Berkely DB,它们都工作得很好。所以我认为诚实并不重要。值得一提的是,HSQL 将自己保存为带有 SQL 语句的文本文件,这非常好。让您在开发时快速进行测试和设置数据变得非常容易。如果需要,还可以进行快速编辑。猜猜如果您还需要更改,您可以轻松地将所有这些转移到任何数据库:)
HSQLDB 可能会导致大型应用程序出现问题,它不是那么稳定。
我听过的最好的(但不是第一手经验)是berkleyDB。但是,除非您将其开源,否则由于许可的原因,使用它会花费您一条胳膊和一条腿……请参阅此http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html详情。
附言。如果您不知道,berkleyDB 不是关系数据库。
我是.Net 和 Java 的 DB4O 的忠实粉丝。
自早期版本以来,性能已经变得更好。许可模式也不错。我特别喜欢可用于查询对象的选项。示例查询非常强大且易于使用。
您将使用什么标准来评估这些?如果你还不知道,那么你现在不需要决定。尽量使您的应用程序与数据库实现无关 - 提供适当的包装器、数据访问对象等,并在您掌握所有事实并且必须做出决定时做出此决定。
如果您使用的是关系数据库和 SQL,那么上面的内容应该不会太难(使用 JDBC 等)。确保您有大量的周边测试,以便当您想要在数据库之间切换时,您可以确定您的应用程序的功能保持不变。
前段时间我遇到了同样的问题。我不知道要使用哪个数据库,所以我的第一个解决方案使用了 Derby(或 HSQLDB?),后来我能够切换到 HSQLDB(或 Derby ?不记得哪个解决方案有效)一旦我确定了哪里我遇到了问题(与性能有关),哪种解决方案真正适合我。
我用过 Derby,我真的很讨厌它的数据类型转换函数,尤其是日期/时间函数。(数字类型)<--> Varchar 转换很痛苦。
因此,如果您计划在 DB 语句中使用数据类型转换,请考虑使用其他嵌入式 DB,我学得太晚了。
我个人喜欢 HSQLDB,但主要是因为它是我第一次尝试。
据说 H2 速度更快,并提供了更好的 GUI 前端(顺便说一下,它是通用的,可以与任何 JDBC 驱动程序一起使用)。
至少 HSQLDB、H2 和 Derby 提供了非常适合开发的服务器模式,因为您可以同时使用应用程序和某些工具访问数据库(嵌入式模式通常不允许)。
我想我有点晚了(晚了很多;-))到这篇文章,但我想添加 Perst,一个开源的、面向对象的 Java 和 .NET 嵌入式数据库。供您考虑。Perst 是一个用于 Java 的开源/双重许可嵌入式数据库。该发行版与 Google 的 Android 平台兼容,还包括用于 Java ME 的 Perst Lite。我们甚至构建了一个 Android 基准测试并制作了一份关于该主题的白皮书……您可以在这里查看:http ://www.mcobject.com/index.cfm?fuseaction=download&pageid=581§ionid=133
一切顺利,克里斯
如果我是正确的,H2 来自编写 HSQLDB 的同一个人。如果您信任他们网站上的基准,它会好很多。此外,还有一些观点认为太阳社区过快地加入了德比。
我意识到您提到了 SQL 浏览,但是您问题中的所有其他内容都让我想建议您也考虑DB4O,这是一个很棒的简单对象 DB。