Derby与PostgreSQL性能比较

13

我们目前正在研究是否将我们的PostgreSQL数据库切换到内嵌的Derby数据库。两者都将使用Glassfish 3作为我们的数据层。有人有什么意见或知识可以帮助我们决定吗?

谢谢!

编辑:我们目前正在编写一些性能测试。寻找更多基于经验/第一手知识的答案。


2
我的预测是:经过适当调整的PostgreSQL在除了最琐碎的查询之外,都会比Derby更加出色。为什么你想要远离PostgreSQL?你是否花时间来适当地调整你的数据库? - intgr
7个回答

19
我知道我晚了发布答案,但我想确保没有人在未来使用Derby作为任何生产级数据库而犯错。我提前道歉因为我的回答会很消极 - 我试图在一个简短的问答中捕捉整个工程团队的不良感受。
我们使用Derby在许多小规模客户部署中的经验使我们严重怀疑它除了测试环境之外还有什么用处。我们遇到过的一些问题包括:
-由于锁升级导致的死锁 - 这是最大的问题,并且每隔一周或两周就会发生在一个客户身上
-中断的I/O会导致Derby在Solaris上完全失败(可能在其他平台上不是问题) - 我们不得不构建一个shim来保护它免受这些故障的影响
-不能处理MySQL/PostgreSQL轻松处理的复杂查询
-错误的事务日志实现导致表损坏,需要我们导出数据库,然后重新导入它(不能只删除损坏的表),并且在此过程中我们仍然会丢失该表 - 谢天谢地我们有备份
-没有LIMIT语法
-针对复杂查询的性能较低
-针对大型数据集的性能较低
由于它是嵌入式的,Derby更像是与SQLite竞争,而不是与PostgreSQL竞争。后者是一种极其成熟的生产级数据库,被世界上一些最大的网站用来存储多PB级别的数据集。如果您想准备增长并且不想陷入调试其他人的数据库代码的困境,我建议不要使用Derby。我没有使用SQLite的任何经验,但我不能想象它比Derby对我们来说更不可靠,而仍然像它那样受欢迎。
事实上,我们正在转向PortgreSQL。

2
这条评论显得非常偏颇。我完全没有遇到过这样的经历。我已经将其作为生产数据库使用了几年,没有出现任何上述问题。但是我的经验也是有偏见的。你可以自行判断。此外,Derby实现了SQL ISO标准的LIMIT: https://en.wikipedia.org/wiki/Select_(SQL)#FETCH_FIRST_clause - noblemaster

7
Derby在性能方面仍然相对较慢,但是......无论您的Java应用程序去哪里,您的数据库服务器都会跟随,完全独立于平台。您甚至不需要考虑安装一个DB服务器,因为您的Java应用程序已经被复制到了这个位置。
我曾经使用过Java的MySQL,但是拥有一个嵌入式实现的数据库服务器直接坐落在我的Java应用程序中,这是惊人的、前所未有的生产力、自由和灵活性。
对我来说,无论何时何地,在任何平台上始终包含一个DB服务器就是天堂!!!

3

3

我没有直接将Postgresql和Derby进行比较。然而,在不同情况下使用了两者后,我发现Derby非常可靠。但是,您需要注意Derby的配置以确保它适合您的应用程序需求。


2
+1. 确实,其最大的优势在于坚如磐石的可靠性、低内存占用和部署弹性(嵌入式、网络服务器、嵌入式+网络服务器)。 - Unai Vivi
1
我知道Postgresql是一个更成熟的数据库。然而,我一直在使用Derby来处理重型数据库应用程序,并且从性能、大小和可靠性方面似乎找不到任何限制。 - donlys

1

这与问题有什么关系? - Unai Vivi

1

Derby源代码分发本身包含了许多性能测试套件,这些套件被Derby开发人员用于进行自己的性能测试。因此,如果您需要性能测试的示例或想要额外的测试,可以考虑使用它们。请在Derby源代码分发中的子目录java/testing/org/apache/derbyTesting/perf中查找。


0

我不确定你所说的Derby是嵌入式的意思。当然,这是一种选择,但你也可以将其安装为独立的服务器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接