Postgres与Firebird的比较

25

我计划在下一个开发项目中使用Firebird或Postgres,因为它们都采用类似BSD的许可证。

我在这里找到了一篇很好的两种数据库的比较文章,但是这篇文章已经过去四年多了,现在两种数据库已经有了很大改进。

请问是否有人可以更新比较表格,使其适用于当前版本的Firebird和Postgres?或者是否有其他网站提供了较好的最新比较文章呢?


请查看此链接:https://dev59.com/k0nSa4cB1Zd3GeqPKg__ - Hugues Van Landeghem
8个回答

31

在选择像RDBMS这样的技术时,不能仅仅基于功能列表对比,而是要回答以下问题:

  • 是否足够可靠满足您的需求?
  • 是否适用于您的所有需求?
  • 展望/支持/发展/文档情况如何?

对我来说,FB不是一个好的选择。我可以举两个例子:

  • 我在表上写了约束。用户向表中添加一些字符串。一段时间后,用户试图添加一个字符串,但FB却在约束上出错了。怎么了?这个新字符串肯定符合约束条件。问题在于添加在它之前的最后一个字符串!那个字符串是一段时间前添加的,是错误的,迄今为止它在数据库中,谁知道现在有多少错误的数据在数据库中。非常糟糕。FB以错误的方式实现了约束。
  • 我编写了存储过程(SP)。FB将其存储在数据库中,FB可以运行它,并正常选择数据。没有任何警告。然后备份完成,没有错误。只有在恢复时,FB才会抱怨SP出现问题,你现在没有可恢复的备份副本了。

我还可以再举两到三个例子,但这已足够让我说:不,FB不是我的选择,它不是RDBMS,它是一种玩具。

而且他们的文档很糟糕。实际上,每个版本都没有实际的参考资料。当人们在论坛中问:发布XX版有哪些函数的完整列表?标准答案是:从上一个官方Interbase版本中取出一个列表,然后从所有后续版本的“发布说明”中添加(删除)函数。

而且他们有奇怪的支持/开发策略。他们关注的是对他们来说有趣的深层技术问题,而不是真正关键或令用户烦恼的问题。


19

我长期使用Firebird,但不建议以任何方式使用它。它们有许多根本性问题,而Postgres则没有。仅举一个例子,他们仍然没有'alter view'命令,要更改视图必须删除并重新创建它及其依赖的所有视图。这是FB的众多问题之一。根本不能正确比较这些数据库引擎。我曾经遇到过许多情况,即使在正常工作负载下,甚至没有断电,Firebird数据库也会损坏。如果你还在考虑是否使用Firebird,请不要使用它!如果你已经选择了FB,那么以后你会记得我的话的 :)


2
Firebird将拥有ALTER VIEW功能 http://www.firebirdsql.org/rlsnotesh/rlsnotes25.html#rnfb25-new。我对你的数据库损坏感到非常惊讶! - Hugues Van Landeghem
3
"alter view" 将在2.5版本中推出,目前处于测试阶段。但我从1.5开始就一直使用Firebird,对这个缺陷感到非常愤怒。2.0版本未能解决此问题。在我的1500个安装实例中,数据库每天都会发生损坏。 - Alexey Sviridov
1
你提交问题到Firebird跟踪器了吗?这真是令人惊讶。 - Hugues Van Landeghem
1
2Hugues:我编写了一个POS终端软件,现在我已经有大约1500个安装了这个软件的客户。所有这些安装都在我的公司之外,所以我无法直接访问他们的硬件,并且不能花费太多时间进行详细的调试。只有每天2-3个令人烦恼的来自客户的电话。gfix可以解决问题,但并不完美,所以我将迁移到mysql。公正地说,我从5.5开始就使用Interbase,然后是6.0,然后是yaffil,并且以前从未遇到过这个问题。但现在它只是噩梦,我需要告诉所有现在选择DB引擎的人这个不好的经历。 - Alexey Sviridov
3
像这样的答案很容易过时。从 FireBird 2.5 开始就支持 ALTER VIEW 语句了。这个答案应该是:"目前 (FireBird v2.0),FireBird 不适合生产使用..." - Yuval
显示剩余2条评论

12
我可以对Firebird发表评论。自第一次比较以来有以下变化:

多线程架构可用? 是的(超级服务器)

实际上,经典服务器是可扩展性更好的服务器类型。从Firebird 2.5开始,还有一种架构称为SuperClassic。我在这里写了一个关于它们之间区别的小文章:SuperServer、ClassicServer或SuperClassic?

将事务信息存储在与数据相同的文件中?是的(红色显示)

我不明白为什么要把这个写成红色。Firebird使用谨慎的写入方式确保数据库结构始终保持一致。

临时表?否

在Firebird 2.1中可用。请查看发布说明

是否具有丰富的内置函数?否

Firebird 2.1也改进了这个问题。请查看发布说明

多种身份验证方法(如LDAP)?否

虽然没有LDAP支持,但Firebird 2.1允许Windows身份验证。请查看发布说明

创建用户定义类型?否

我不确定作者在这里指的是什么,但Firebird一直有领域(domains)。

需要备份/还原才能压缩?是的(红色显示)

有争议。数据库空间可以被重用,我很难想象在生产环境中需要缩小数据库。

在查询中使用POSIX正则表达式吗?不

Firebird 2.5支持正则表达式。发布说明

数据库监控吗?不

是的,Firebird 2.1通过系统表支持数据库监控。Firebird 2.5添加了对跟踪工具的支持。
我知道至少有一个非常好用的Firebird数据库监控工具。 ;)

能够查询其他本地或远程服务器上的数据库吗?不

Firebird 2.5可以查询远程数据库。发布说明


2
2.5 beta,2.5 beta,2.5 beta... 2.5版本已经开发了一年多,但如果我现在需要生产数据库引擎怎么办?我建议那些已经选择Firebird的人使用mysql 5.x。 - Alexey Sviridov
1
@Alexey:当然可以,使用Falcon!这是MySQL AB三年前告诉我的:P - Hugues Van Landeghem
所有这些与MySQL的比较...不是因为企业许可证成本吗?那么为什么要回到MySQL呢? - itsols

3

3
据我所知,你引用的页面中,Postgres列中的每个编号仍然是编号,虽然通过仅在数据库中对所有表授予选择权限,可以有效地获得只读数据库。但是,自8.2以来,有许多新功能,其中一些 来自8.4
  1. 窗口函数
  2. 公共表达式和递归查询
  3. 函数的默认和可变参数
  4. 并行还原
  5. 列权限
  6. 每个数据库的区域设置

...以及 一些来自8.3

  1. 全文搜索已整合到核心数据库系统中
  2. 支持SQL/XML标准,包括新的运算符和XML数据类型
  3. 枚举数据类型(ENUM)
  4. 复合类型的数组
  5. 通用唯一标识符(UUID)数据类型
  6. 增加对NULL排序的控制,可将其排在最前或最后
  7. 可更新的游标
  8. 现在可以按函数设置服务器配置参数
  9. 用户定义类型现在可以有类型修饰符

......我不知道Firebird是否具备这些功能。


1
对于那些使用Firebird的人,我建议阅读Firebird 2.1 Release Notes以了解关于在Linux上运行旧版Firebird版本时出现的数据库损坏问题。
简而言之,这与Linux中的一个错误有关。对于旧版Firebird,解决方法是使用sync选项挂载受影响的文件系统。该问题已在FB2.1中得到修复。

3
数据库编程人员长时间未发现(或未处理)一个重要平台上的问题,这表明他们进行的可靠性测试不够充分。虽然这是一个Linux的bug,责任已经转移,但这是一个100%可靠的bug,它总是以相同的方式工作。在可靠性测试中应该能够发现它。 - intgr

1
文件系统备份是否可行? 是的(必须停止Postmaster)。
这不是真的。自8.1版本以来(如果我记得正确),可以激活WAL归档,然后创建基于文件系统的备份而无需关闭任何内容。在文档中查找有关PITR(时间点恢复)的更多信息。

1

一个重要的事情是部署:

  • Firebird在Linux上与ext3不兼容,应该使用XFS或类似的文件系统。
  • 据我所知,PostgreSQL仍然无法在Windows服务器上运行。

15
自从8.2版(2006年)开始,PostgreSQL已成为Windows的本地应用程序(不再使用丑陋的IPC hack),并提供了本地安装程序(.msi)。 - Steve Schnepp
我对Linux ext3一无所知,但是看到了这个链接:http://www.ibphoenix.com/main.nfs?a=ibphoenix&s=1263592178:795353&page=ibp_file_linux_firebird - Hugues Van Landeghem

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