我打算开发一个小型(Java)应用程序来管理我的财务。我相信我需要使用嵌入式数据库,但是我没有关于此问题的经验。我试图查看一些可用的产品,但是我无法确定哪种产品更适合我。H2,HSQLDB,Derby和Berkeley DB似乎是不错的选择,但我仍然看不到它们之间的比较。感谢您的比较,并帮助我决定使用哪个。
我打算将Hibernate用于我的应用程序(除非您建议使用DBMS提供的API),但我也希望能够使用SQL浏览工具(修改架构和更改数据)轻松地编辑数据库。
谢谢。
我打算开发一个小型(Java)应用程序来管理我的财务。我相信我需要使用嵌入式数据库,但是我没有关于此问题的经验。我试图查看一些可用的产品,但是我无法确定哪种产品更适合我。H2,HSQLDB,Derby和Berkeley DB似乎是不错的选择,但我仍然看不到它们之间的比较。感谢您的比较,并帮助我决定使用哪个。
我打算将Hibernate用于我的应用程序(除非您建议使用DBMS提供的API),但我也希望能够使用SQL浏览工具(修改架构和更改数据)轻松地编辑数据库。
谢谢。
Answers:
要么
要么
您要使用哪一个取决于您,取决于所需的性能和稳定性。
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,其性能要比Derby好得多。阅读http://www.h2database.com/html/performance.html了解更多信息。
HSQLDB是一个很好的候选对象(事实上,它在OpenOffice中使用可能会让某些人信服),但是对于这么小的个人应用程序,为什么不使用对象数据库(而不是经典的关系数据库)?
我在一个项目中使用了DB4O,对此我感到非常满意。面向对象,您不需要整个Hibernate层,并且可以直接插入/更新/删除/查询对象!而且,您无需担心模式,您可以直接使用对象,而DB4O会完成其余工作!
我同意可能需要花费一些时间来适应这种新型数据库,但是请查阅DB40教程以了解使用DB 的难易程度!
编辑:如评论中所述,DB4O自动处理这些类的较新版本。此外,还可以在此处找到用于在应用程序外部浏览和更新数据库的工具:http : //code.google.com/p/db4o-om/
我们在生产中使用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有关详细信息。
ps。如果您不知道,berkleyDB不是关系数据库。
自从早期版本发布以来,性能已变得更好。许可模式也不错。我特别喜欢可用于查询对象的选项。通过示例查询非常强大且易于习惯。
您将使用什么标准来评估这些标准?如果您尚不知道,则无需立即决定。尽力使您的应用程序与数据库实现无关,提供适当的包装器,数据访问对象等,并在您掌握所有事实并做出决定时做出此决定。
如果您使用的是关系数据库和SQL,那么上面的内容就不太难了(使用JDBC等)。确保您有很多周围的测试,以便在数据库之间进行切换时,可以确定应用程序的功能保持不变。
我前段时间也遇到过同样的问题。我不知道要使用哪个数据库,所以我的第一个解决方案使用了Derby(或HSQLDB?),后来我确定了哪里后就可以切换到HSQLDB(或Derby?不记得哪个解决方案起作用了)。我遇到了问题(与性能有关),哪种解决方案对我真正有效。
我使用过Derby,但我真的很讨厌它的数据类型转换功能,尤其是日期/时间功能。(数字类型)<-> Varchar转换很痛苦。
因此,如果您打算在数据库语句中使用数据类型转换,请考虑使用嵌入式数据库,这为时已晚。
我个人更喜欢HSQLDB,但主要是因为它是我尝试的第一个。
据说H2速度更快,并且提供了更好的GUI前端(顺便说一句,它是通用的,可与任何JDBC驱动程序一起使用)。
至少HSQLDB,H2和Derby提供了非常适合开发的服务器模式,因为您可以同时使用应用程序和某些工具访问DB(通常不允许使用嵌入式模式)。
我想我这篇文章有些迟(很晚;-)),但是我想添加Perst,这是一个开放源码的Java&.NET面向对象的嵌入式数据库。供您考虑。Perst是Java的开源/双许可证嵌入式数据库。该发行版与Google的Android平台兼容,还包括Perst Lite for Java ME。我们甚至已经建立了Android基准测试并就该主题制作了白皮书...您可以在此处查看:http : //www.mcobject.com/index.cfm ?fuseaction=download&pageid=581§ionid=133
祝一切顺利,克里斯
如果我是对的,那么H2来自编写HSQLDB的人。如果您信任他们网站上的基准,那就更好了。另外,有一种观念认为太阳社区跳入德比的速度太快了。
我意识到您提到了SQL浏览,但是问题中的其他所有内容使我想建议您也考虑DB4O,它是一个很棒的简单对象DB。