Java嵌入式数据库比较[关闭]


99

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

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

谢谢。


不知道您要做什么,就不可能回答这个问题。我建议更新与你的项目,规模信息的问题,你会多少表,你认为有多少记录等
奥特洛程序员



5
纳粹关闭了这样的好问题是令人讨厌的。当然,有些含糊的问题并不适合,但这无疑是最合适的。“合适”是指对社区有用,而不是根据某些法律定义。
调谐的'17

Answers:



35

我几乎将Apache Derby用于所有嵌入式数据库需求。您还可以使用基于Derby的Sun的Java DB,但最新版本的Derby较新。它支持商业本机数据库支持的许多选项,但体积更小且易于嵌入。我有一些数据库表,记录超过一百万,没有任何问题。

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


如果不是因为存在如此多的错误而最近一次更新是在几年前,Derby将会很棒。
霍利

2
@Hooli我无法证明这些错误,但是“ ...最近的更新是几年前”是不正确的。相对于您发表评论的时间(2016年8月):发布时间不到一年(201510月),发布时间不到2个月(2016年10月),发布时间仅一年后(2017年10月-最新))。
Slaw

更新此评论,以防其他人在搜索中遇到此主题。Derby的最新发布是在2019年3月。这是他们的网站信息: db.apache.org/derby
JavaJd

@Chris Dail您是否使用derby作为普通数据库,内存或某些高速缓存中的百万条记录?
Shreyans jain

30

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



14

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

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

我同意可能需要花费一些时间来适应这种新型数据库,但是请查阅DB40教程以了解使用DB 的难易程度!

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


2
谢谢。DB4O对于这么小的项目看起来不错,但是我相信在应用程序外部浏览和编辑数据的能力非常重要。处理新版本的类也容易吗?(例如,添加/删除的字段)
Hosam Aly

正如我在编辑中所说的,有一个工具可以在应用程序外部浏览和编辑数据库。正如Fabian所说,这些类的较新版本是自动生成的。
Wookai

感谢更新。拥有浏览工具对我来说非常重要,非常感谢。
Hosam Aly

12

Java DB(Sun的Apache Derby发行版)现已 JDK 6中提供!

我一直想做类似Jason Cohen的事情,并且一直认为这似乎是JDK发行版中最简单的方法(上周的应用程序现在是我的要求)。也许我只是那样懒。


你也许是对的!我们要求还必须在Java 1.5下运行,因此这不是我们的选择。
杰森·科恩

...我的意思是您认为这是最简单的方法,而不是懒惰。:-P
杰森·科恩

Java DB仅随JDK的Sun / Oracle实现一起提供。不是Java的标准部分。
罗勒·布尔克

7

我们在生产中使用HSQLDB作为应用程序的“无配置”选项。它使人们可以进行试用,而无需建立真实的数据库。

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

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

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


7

neo4j是:

嵌入式的,基于磁盘的,完全事务性的Java持久性引擎,该引擎存储以图而不是表结构化的数据

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



5

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


5

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

我听说过的最好的(不是第一手经验)是berkleyDB。但是,除非您将其开源,否则由于许可问题,您将需要花费一臂之力...请参阅此http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html有关详细信息。

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


哦,我不知道伯克利不是关系数据库!非常感谢!
Hosam Aly

并不意味着它不好。但是我怀疑它可能对您的个人用途来说太好了。另外,看看sqlite。我认为它具有Java绑定,但找不到它。
CHII


4

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

如果您使用的是关系数据库和SQL,那么上面的内容就不太难了(使用JDBC等)。确保您有很多周围的测试,以便在数据库之间进行切换时,可以确定应用程序的功能保持不变。

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


3

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

因此,如果您打算在数据库语句中使用数据类型转换,请考虑使用嵌入式数据库,这为时已晚。

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


3

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

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

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


3

我想我这篇文章有些迟(很晚;-)),但是我想添加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

祝一切顺利,克里斯


3

如果我是对的,那么H2来自编写HSQLDB的人。如果您信任他们网站上的基准,那就更好了。另外,有一种观念认为太阳社区跳入德比的速度太快了。


2
与DerbyDB有关的过早的derby概念是什么?到期?
simgineer's

2

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


谢谢。DB4O对于这么小的项目看起来不错,但是我相信在应用程序外部浏览和编辑数据的能力非常重要。处理新版本的类也容易吗?(例如,添加/删除的字段)
Hosam Aly

是的,它自动支持某些重构,您可以在这里找到更多有关它的信息:ibm.com/developerworks/java/library/j-db4o3.html
Fabian Steeg,2009年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.