13

我们现在正在研究是否将我们的 postgresql 数据库切换到嵌入式 Derby 数据库。两者都将使用 glassfish 3 作为我们的数据层。有人有任何意见或知识可以帮助我们做出决定吗?

谢谢!

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

4

7 回答 7

18

我知道我在这里发布答案很晚,但我想确保将来没有人会在任何生产质量数据库上使用 Derby。对于这个答案有多消极,我提前道歉 - 我试图在一个简短的问答答案中捕捉整个工程团队的不良感受。

我们在许多小型客户部署中使用 Derby 的经验使我们严重怀疑它对除测试环境之外的任何东西有多大用处。我们遇到的一些问题:

  • 锁升级导致的死锁 - 这是最大的死锁,大约每周或每两周发生一次,发生在一位客户身上
  • 中断的 I/O 导致 Derby 在 Solaris 上彻底失败(在其他平台上可能不是问题) - 我们必须构建一个 shim 来保护它免受这些故障的影响
  • 无法处理 MySQL/PostgreSQL 可以轻松处理的复杂查询
  • 错误的事务日志实现导致表损坏,需要我们导出数据库然后重新导入它(不能只是删除损坏的表),我们仍然在此过程中丢失了表 - 谢天谢地,我们有备份
  • 没有LIMIT语法
  • 复杂查询的低性能
  • 大型数据集的低性能

由于它是嵌入式的,Derby 更像是 SQLite 的竞争对手,而不是 PostgreSQL,后者是一个非常成熟的生产质量数据库,被世界上一些最大的网站用来存储数 PB 的数据集。如果您想为增长做好准备并且不想在调试别人的数据库代码时被抓到,我建议不要使用 Derby。我对 SQLite 没有任何经验,但我无法想象它比 Derby 对我们来说更不可靠,并且仍然像它一样受欢迎。

事实上,我们现在正在移植到 PostgreSQL。

于 2013-06-11T22:12:42.030 回答
7

Derby 的性能仍然相对较慢,但是……无论您的 Java 应用程序走到哪里,您的数据库服务器走到哪里,都完全独立于平台。您甚至不需要考虑在您的 Java 应用程序被复制到的位置安装数据库服务器。

我在 Java 中使用 MySQL,但是在我的 Java 应用程序中嵌入数据库服务器的实现是惊人的和前所未有的生产力、自由和灵活性。

对我来说,无论何时何地在任何平台上始终包含一个数据库服务器就是天堂!

于 2011-03-24T22:57:40.547 回答
3

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

于 2010-01-26T18:14:27.773 回答
3

在查看 H2 数据库统计站点时,值得阅读后续讨论,与 H2 结论相比,该讨论支持 Derby。 http://groups.google.com/group/h2-database/browse_thread/thread/55a7558563248148?pli=1

于 2010-10-14T14:20:32.163 回答
1

有许多性能测试套件作为 Derby 源代码分发本身的一部分包含在内;Derby 开发人员使用它们来进行自己的 Derby 性能测试。因此,如果您需要性能测试示例,或者需要其他示例,您可以考虑使用这些示例。查看 Derby 源代码分发中名为 java/testing/org/apache/derbyTesting/perf 的子目录。

于 2010-01-26T19:11:37.203 回答
1

来自 H2 数据库站点的一些统计数据: http ://www.h2database.com/html/performance.html

于 2010-01-26T18:02:17.627 回答
0

我不确定你的意思是嵌入德比。当然这是一个选项,但您也可以将其安装为单独的服务器。

于 2021-01-25T01:04:33.087 回答