我疯了吗?将已建立的产品从HSQLDB切换到Apache Derby

Car*_*rlG 22 java derby hsqldb embedded-database

我有一个已建立的软件产品,它使用HSQLDB作为其内部设置数据库.客户项目存储在此数据库中.多年来,HSQLDB已经为我们提供了相当好的服务,但它有一些稳定性/腐败问题,我们必须围绕这些问题进行编码,即便如此,我们也似乎无法完全保护自己.

我正在考虑更改内部数据库.从开发的角度来看,这样做会相当痛苦,但是向客户解释损坏的数据库(和丢失的数据)并不好玩.

所以我的问题是:有没有人有足够的经验来衡量Apache Derby的长期稳定性?我发现谷歌的一篇帖子抱怨德比不稳定,但是从2006年开始,所以我觉得它在过去的4年里得到了改善.或者,是否存在我可以使用的另一个纯Java嵌入式(进程中)数据库(商业或开源).性能对我来说不是很重要.稳定是王道.断电时的数据完整性,良好的BLOB支持和热备份都是必须的.

请不要建议不是基于SQL的关系数据库.我正在尝试改造现有产品,而不是从头开始,谢谢.

Tho*_*ler 19

对于每个数据库引擎,都存在一定的损坏风险.我是H2数据库的主要作者,我也有关于数据库损坏的报告.测试可以减少错误的可能性,但不幸的是,几乎不可能保证某些软件"无bug".

至于三个Java数据库HSQLDB,Apache Derby和H2,我真的不能说哪个是最稳定的.我只能说H2.我认为对于大多数操作来说,H2现在稳定了.有许多测试用例专门测试数据库是否已损坏.这包括自动测试功率损耗(使用圣诞灯计时器).通过电源故障测试我发现稳定性还取决于文件系统:有时我得到'CRC错误'消息意味着操作系统无法读取文件(它是Windows).在那种情况下,你无能为力.

对于关键任务数据,无论如何我都不会依赖于稳定的软件.定期创建备份并测试它们非常重要.某些数据库有多种方式来创建备份.例如,H2具有在线备份功能,以及编写SQL脚本文件的功能.另一种方法是使用复制或群集.H2支持简单的集群模式,我相信Derby支持复制.

  • 我尝试了所有三个数据库的内存模式(它们都支持),但 H2 确实比 hsqldb 快,而 hsqldb 比 derby 快。但是如果h2可以支持某种模式,我可以在混合(Hydrid)模式下使用内存表和hsqldb中的某种缓存表,我会选择h2。否则,也许 hsqldb,h2 都可以。因为当数据变大时,这确实是一个有吸引力的功能+1 (2认同)

Bry*_*ton 12

我将Derby 24/7作为支持构建自动化和测试管理系统的内部数据库运行了4年.它被全球团队使用,从未崩溃,丢失数据或损坏我的记录.我们停止使用它的唯一原因是因为我们的公司被另一家公司收购而且更高级别的决定被宣布.德比坚固,可靠,值得您考虑.


Pas*_*ent 7

有没有人有足够的经验来衡量Apache Derby的长期稳定性?(......)

Derby,来自IBM Cloudscape(现在也由Sun作为JavaDB发布)是一个符合ACID标准的数据库,可以支持大量并发用户,运行嵌入式或服务器模式,并且知道可靠且生产就绪.它没有HSQLDB那么快(Derby使用持久操作),但它很强大.不过,你应该对它进行自己的测试.

也可以看看


fre*_*edt 7

此搜索显示HSQLDB Users邮件列表中包含字符串"corrupt"的215个帖子. http://search.gmane.org/?query=corrupt&author=&group=gmane.comp.java.hsqldb.user&sort=date&DEFAULTOP=and&xP=Zcorrupt&xFILTERS=Gcomp.java.hsqldb.user---A

此搜索显示Derby Users邮件列表中包含相同字符串的264个帖子. http://search.gmane.org/?query=corrupt&author=&group=gmane.comp.apache.db.derby.user&sort=date&DEFAULTOP=and&xP=Zcorrupt&xFILTERS=Gcomp.apache.db.derby.user---A

这个显示Derby Dev邮件列表中的1003个帖子,其中包含相同的字符串 http://search.gmane.org/?query=corrupt&author=&group=gmane.comp.apache.db.derby.devel&sort=date&DEFAULTOP=and&xP=Zcorrupt&xFILTERS=Gcomp .apache.db.derby.devel ---一

查看一些帖子,尽管数据库开发人员付出了最大的努力,但仍然显示了数据库损坏的可能或真实情况.

HSQLDB有自己的数据库损坏问题,但多年来有所改进.在最新版本中,已采用预防措施和修复措施来防止过去几年中报告的所有问题.

然而,新的高架存储功能被证明有一个逻辑错误,导致更新后"丢失".现在正在修复此问题,需要更广泛的测试来支持修复.

多年来像CarlG这样的用户在Derby和HSQLDB的bug修复工作中帮了很多忙.

Fred Toussi,HSQLDB项目

  • @Jako db.derby.devel包含大量自动生成的提交和错误跟踪器等消息.在这种情况下,比率并不重要. (2认同)

Una*_*ivi 7

自 2009 年以来,我一直在我的许多项目中使用 Apache Derby,其中一些项目需要 24/7 运行和数百万行。

从未发生过任何数据损坏事件。坚如磐石、快速。

我一直选择它作为我的 RDBMS 选择,除非有充分的理由不跳出来。


小智 4

尝试研究H2。它是由最初制作 HSQLDB 的人创建的,但是是从头开始构建的,因此不使用任何 HSQLDB 代码。不确定它的稳定性与 HSQL 相比如何,因为我已经很久没有使用 HSQL 并且目前我只将 H2 用于短期数据库。我个人发现 H2 比 Derby 更容易上手,但也许这是因为 H2 有一个备忘单网页。

可以重新编码以使用抽象层,然后运行测试以将 H2 和 Derby 与您发现的问题进行比较。

在项目管理方面,您的路线图是否有主要版本即将推出?这可能是一个相当合适的时机,以这种方式彻底剖析,我不会说你疯了,因为它可能会消除许多难以管理的变通办法。如果您想在没有充分警告和备份的情况下进行可能影响实时系统的更改,那么您可能会发疯。