代码之家  ›  专栏  ›  技术社区  ›  fmsf

PostgreSQL MySQL Oracle差异

  •  6
  • fmsf  · 技术社区  · 17 年前

    我必须开始为数据库项目构建体系结构,但我真的不知道引擎之间的区别。

    有人能解释一下这三个引擎的优缺点吗?我们必须从中选择一个,我唯一知道的是:

    • MySQL和Postgres:
      • 是自由的,但不如甲骨文好
      • MySQL作为安全问题(这是真的吗?)
    • 神谕:
      • 世界上最好的数据库引擎
      • 昂贵的

    有人能消除他们之间的其他差异吗?这是一个中型/大型(我们考虑大约100到200张桌子)项目,预算很低,您会选择什么?还有更高的预算?

    4 回复  |  直到 7 年前
        1
  •  12
  •   Richard T    17 年前

    几年前,我不得不编写一个翻译引擎;您向它提供一组SQL,它将转换为当前连接的引擎的方言。我的引擎在Postgres(又称PostgreSQL)、Ingres、DB2、Informix、Sybase和Oracle-Oh以及Ants上工作。坦率地说,甲骨文是我最不喜欢的(更多内容见下文)。不幸的是,MySQL和SQL Server不在列表中(当时两者都不被认为是一个严重的RDBMS,但时代在变)。

    不考虑引擎的质量或性能,以及备份和恢复的容易程度,以下是主要的区别:

    • 数据类型
    • 限制
    • 伤残者
    • 保留词
    • 空语义(见下文)
    • 引号语义(单引号、双引号或二者之一)
    • 语句完成语义
    • 功能语义
    • 日期处理(包括常量关键字,如“now”和输入/输出函数格式)
    • 是否允许内联注释
    • 最大属性长度
    • 最大属性数
    • 连接语义/安全范式。

    在不影响所有转换数据的情况下,下面是一个数据类型lvarchar的示例:

    Oracle=varchar(%x)Sybase=Text DB2=“long varchar”Informix=lvarchar postgres=varchar(%x)Ants=varchar(%x)Ingres=varchar(%x,%y)

    在我看来,最大的问题是空处理;Oracle悄悄地将空输入字符串转换为空值。…在某个地方,很久以前,我读过一篇有人写的关于“空的十七个意思”的文章,真正的意义是空非常有价值,空字符串和空字符串之间的区别是有用的,而且是非常重要的!我认为甲骨文在这个问题上犯了一个巨大的错误;其他人都没有这种行为(我从未见过)。

    我第二个最不喜欢的是蚂蚁,因为与其他所有蚂蚁不同,它们执行了愚蠢的完美语法规则,这是其他人绝对不会执行的,尽管它们可能是唯一一家完全遵守标准的DB公司,但它们也是编写代码的一大麻烦。

    我最喜欢的是Postgres,它在现实世界中速度非常快,有很好的支持,并且是开源/免费的。

        2
  •  4
  •   tabdamage    17 年前

    不同的SQL实现之间的差异很大,至少在幕后是如此。这些板不足以把它们全部计算在内。

    如果你必须问,你也必须问自己,你是否有能力对这件事做出一个有效的、有根据的决定。

    A comparison von MYSQL and Postgres can be found here

    请注意,Oracle还提供了 Express (XE) edition ,功能减少,但可免费使用。 另外,如果你没有足够的知识开始学习,你将不得不学习自己,我会选择任何一个,并开始用它来学习。

        3
  •  3
  •   warren    17 年前

    参见维基百科上的比较表: http://en.wikipedia.org/wiki/Comparison_of_object-relational_database_management_systems &; http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems

    甲骨文可能是最好的,也可能不是最好的。它很贵,但这并不意味着最好。

    您看过DB2吗?赛贝斯?特拉塔斯?MS SQL?

        4
  •  2
  •   cherouvim    17 年前

    我认为在低预算的情况下,甲骨文是不可能的。 100-200个表并不大,通常模式中的表数量不是一个尺度度量。数据集和吞吐量是。

    你可以看看 http://www.mysqlperformanceblog.com/ (以及他们出色的书)来看看MySQL如何处理巨大的部署。

    一般来说,现在大多数RDBMSE可以在非常严重的应用程序中做任何您需要的事情。