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

2022-09-01 19:54:09

我有一个成熟的软件产品,它使用HSQLDB作为其内部设置数据库。客户项目存储在此数据库中。多年来,HSQLDB为我们提供了相当好的服务,但它有一些稳定性/腐败问题,我们不得不围绕这些问题进行编码,即使这样,我们似乎也无法完全保护自己免受它们的侵害。

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

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

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


答案 1

对于每个数据库引擎,都存在一定的损坏风险。我是H2数据库的主要作者,我也收到了有关数据库损坏的报告。测试可以降低错误的可能性,但不幸的是,几乎不可能保证某些软件“没有错误”。

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

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


答案 2

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


推荐