Java嵌入式数据库比较

时间:2009-01-20 20:17:09

标签: java database comparison embedded-database

我打算开发一个小型(Java)应用程序来管理我的财务状况。我相信我需要使用嵌入式数据库,但我对此问题没有经验。我试着看some of the available products,但我无法决定哪一个更适合我。 H2HSQLDBDerbyBerkeley DB似乎是不错的候选人,但我仍然看不出他们如何相互比较。感谢您帮助我们比较它们并帮助我决定使用哪一个。

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

谢谢。

18 个答案:

答案 0 :(得分:55)

无论

  • HSQLDB - 由OpenOffice使用,经过测试且稳定。它易于使用。如果要编辑db-data,只需打开文件并编辑insert语句即可。

  • H2 - 据说更快(由开发人员,最初也设计了hsqldb)

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

H2的开发人员进行了很好的绩效评估:
http://www.h2database.com/html/performance.html

答案 1 :(得分:34)

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

我大约3年前曾经使用HSQLDB和Hypersonic。它当时有一些主要的性能问题,由于这些问题,我从它切换到Derby。即使在阿帕奇的孵化器中,德比一直很稳健。

答案 2 :(得分:28)

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

答案 3 :(得分:21)

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

答案 4 :(得分:14)

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

我在我的一个项目中使用了DB4O,我对它非常满意。面向对象,你不需要整个Hibernate层,可以直接插入/更新/删除/查询对象!而且,您不需要担心架构,您可以直接使用对象,DB4O可以完成剩下的工作!

我同意可能需要一些时间来习惯这种新型数据库,但请查看DB40 tutorial以了解使用数据库的难易程度!

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

答案 5 :(得分:12)

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

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

答案 6 :(得分:7)

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

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

  1. 与数据大小成比例减慢。
  2. 很难在我们的应用外访问(例如,自定义报告)。
  3. 交易/磁盘同步很难正确,因此很容易丢失数据。
  4. 对于至少(2)和(3),有很多方法,但很难;例如,它更容易安装MySQL。

答案 7 :(得分:7)

neo4j是:

  

嵌入式,基于磁盘的完全事务性Java持久性引擎,用于存储以图形而非表格形式构建的数据

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

答案 8 :(得分:5)

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

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

答案 9 :(得分:4)

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

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

前段时间我遇到了同样的问题。我不知道要使用哪个数据库,所以我的第一个解决方案使用了Derby(或HSQLDB?),之后我确定切换到HSQLDB(或Derby?不记得哪个解决方案有效)我有问题(与绩效有关)以及哪种解决方案对我有用。

答案 10 :(得分:4)

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

答案 11 :(得分:4)

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

我听过的最好的(不是第一手经验)是berkleyDB。但是,除非你开源,否则由于许可而需要花费你的一条腿和一条腿...详情请见http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html

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

答案 12 :(得分:4)

我是DB4O for both .Net and Java的粉丝。

自早期发布以来,性能已经变得更好。许可模式也不是太糟糕。我特别喜欢可用于查询对象的选项。通过示例查询非常强大且易于习惯。

答案 13 :(得分:3)

我使用过Derby,我真的很讨厌它的数据类型转换功能,特别是日期/时间功能。 (号码类型)< - > Varchar转换是一种痛苦。

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

Latest Derby Version data type conversions

答案 14 :(得分:3)

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

一切顺利, 克里斯

答案 15 :(得分:3)

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

答案 16 :(得分:2)

我个人赞成HSQLDB,但主要是因为它是我尝试的第一个。

据说H2更快,并且提供了更好的GUI前端(顺便说一句,它是通用的,适用于任何JDBC驱动程序)。

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

答案 17 :(得分:2)

我意识到你提到过SQL浏览,但是你问题中的其他内容让我建议你也考虑DB4Oa great, simple object DB