我打算开发一个小型(Java)应用程序来管理我的财务状况。我相信我需要使用嵌入式数据库,但我对此问题没有经验。我试着看some of the available products,但我无法决定哪一个更适合我。 H2,HSQLDB,Derby和Berkeley DB似乎是不错的候选人,但我仍然看不出他们如何相互比较。感谢您帮助我们比较它们并帮助我决定使用哪一个。
我打算在我的应用程序中使用Hibernate(除非你建议使用DBMS提供的API),但我也希望能够使用SQL浏览工具轻松编辑数据库(修改模式和更改数据)。 / p>
谢谢。
答案 0 :(得分:55)
无论
或
您使用哪一个取决于您,具体取决于您需要多少性能和多少稳定性。
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作为我们应用程序的“无配置”选项。它允许人们在没有设置真实数据库的麻烦的情况下进行试用。
但是我们不支持正常使用。原因有几个:
对于至少(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转换是一种痛苦。
因此,如果您计划在数据库语句中使用数据类型转换,请考虑使用其他嵌入式数据库,我学得太晚了。
答案 14 :(得分:3)
我想这篇文章有点晚了(很晚;-)),但我想添加Perst,一个面向Java和.NET的开源,面向对象的嵌入式数据库。供您考虑。 Perst是一个用于Java的开源/双许可嵌入式数据库。该发行版与谷歌的Android平台兼容,还包括Perst Lite for Java ME。我们甚至构建了一个Android基准测试并制作了关于这个主题的白皮书......你可以看看这里:http://www.mcobject.com/index.cfm?fuseaction=download&pageid=581§ionid=133
一切顺利, 克里斯
答案 15 :(得分:3)
如果我是正确的,H2来自编写HSQLDB的同一个人。如果你信任他们网站上的基准测试,它会好很多。此外,还有一些观点认为太阳社区太快进入德比。
答案 16 :(得分:2)
我个人赞成HSQLDB,但主要是因为它是我尝试的第一个。
据说H2更快,并且提供了更好的GUI前端(顺便说一句,它是通用的,适用于任何JDBC驱动程序)。至少HSQLDB,H2和Derby提供了非常适合开发的服务器模式,因为您可以同时使用您的应用程序和某些工具访问数据库(嵌入模式通常不允许)。
答案 17 :(得分:2)
我意识到你提到过SQL浏览,但是你问题中的其他内容让我建议你也考虑DB4O,a great, simple object DB。