Oracle与PostgreSQL。 为什么选择Oracle可能是一个明智的决定

没有经验的读者在中心上阅读了大量有关成功从Oracle迁移到PostgreSQL的文章,可能会给人以PostgreSQL并不比Oracle更差甚至更好的印象。 选择是显而易见的。 最终以数十亿美元向甲骨文支付数十万美元的公司正在浪费自己的钱。 但我会尽力向您保证,无论在哪里,在哪里,在大型公司中,他们都知道如何数钱。 他们的决定绝不是错误的。

本文的目的是引起试图在版本化模式下工作的关系数据库之间做出选择的读者的怀疑。 为什么要使用完全版本控制模式? 这里的选择并不大,但是在阻塞程序中有值得竞争的竞争对手,选择的难度更大(针对小型数据库的DB2免费版本的价格是多少?)

我不是Oracle数据库专家,尽管我已经使用这个数据库很多年了,不仅是它。 我所能做的就是利用其优势并获得最佳性能。 而且,我不是PostgreSQL专家(我从未在生产中使用过它)。

阅读有关成功迁移的文章-我知道这些公司甚至都不需要Oracle,或者最初选择的数据库不正确。 他们只使用了该数据库功能的一小部分。 只有这样,他们才能对迁移做出决定并加以实施。 简而言之,如果您使用此数据库的全部功能,则永远不会有迁移的欲望,因为它类似于从头开始编写应用程序。

最后,让我们讨论一下Oracle提供的性能优势,根据这些信息,您将自己找到答案。

  1. 分区(8i) 。 分区-使数据量增长而对整体性能几乎没有影响。 一个不错且重要的好处是索引分区。 PostgreSQL分区只会出现在版本10中。 在此之前,继承(INHERITS)是一个肮脏的技巧。 每个版本的Oracle中的分区功能都在增加。
  2. 合并(8i) 。 是的,是的,与MSSQL相同(2008年)并且在PostgreSQL 11中甚至都不存在。Merge与单操作相比,速度提高了十倍。 是的,我知道PostgreSQL支持子查询,您可以通过Insert select和棘手的更新来实现所有功能。 但这远非如此。
  3. RESULT_CACHE(选择) (11克)。 在Oracle中,这项技术相对较新。 如果您明智地使用此技术,它可以使数十倍或数百倍的收益。 最主要的是学习如何聪明地使用它。
  4. 选项INMEMORY12 )在PostgreSQL中没有类似物。 某些查询实际增长了数百倍。
  5. 优化器+查询调整 。 从11g开始,在EM中几乎变成了单击“下一步”->“下一步”。 PostgreSQL与此相对更复杂,并且总体上缺乏EM的类似物是相当不舒服的。

    PL / SQL。 是的,我知道PostgreSQL中的各种语言。 但是Oracle一直在以性能为中心不断改进该语言。
    • 编译 。 Bycode在保存期间发生(在PostgreSQL中,在会话的第一个调用中,在第一次执行时+查询计划在第一次执行中)。 从10g开始,Oracle可以编译为本机代码。
    • 本机整数 -大大加快了数字处理的速度。 PostgreSQL可以使用其他更合适的语言(翻译器)。 在Oracle中,这也可以使用Java和C解决。
    • 切换PL / SQL的“上下文”。 Oracle非常关注优化该指标,并在各个版本之间进行改进。 为了减少延迟,需要使用BULK COLLECT和FORALL等来切换“上下文”。

      考虑到PostgreSQL语言的状态,此任务在此阶段根本不重要。
    • 结果缓存(功能) (11g)正确使用后,整个应用程序的响应能力可以提高几倍,而无需花费很多精力。 在某些查询上数十次。

就像他们说的那样,细节在于细节,而Oracle则更好地制定了这些细节。 Oracle永不停止为每个版本着迷。 在Oracle之后转移到哪个数据库都没有关系-您将始终有这种感觉:哦,该死,在Oracle中已经存在了很长时间,在Oracle中则更好。

我几乎可以肯定的是,使用相同的硬件并使用PostgreSQL和Oracle的所有功能,您可以花更少的精力在ORACLE上获得更好的性能。

PS决不应将本文视为PR数据库Oracle。

我很了解,在PostgreSQL中总会有一些更好的事情。 但通常,Oracle在此段数据库中的编号为1。

我特别没有涉及与管理相关的事情。 试想一下,您可以将日期文件从磁盘转移到磁盘,或者将“损坏的块”恢复为“联机”状态。 您可以在不停止数据库的情况下过渡到新服务器。 这些不是新功能。 在Oracle,那里的一切都更好,而且我不是数据库管理员。

以前,直到版本10为止,几乎总是需要管理员。 现在对管理员的需求已大大降低,尽管现在对管理员的要求更高。 也许在版本15中,“ admin”数据库的概念已成为历史:)

是的,Pl / SQL比其他语言更周到,尽管当然不是C#:)。 是的,这纯粹是个人的。

好吧,我没有谈及对速度有很大帮助的事情。

PSS是的,我几乎不记得所有的可能性。 只有那些位于“表面”上的内容,因此添加注释。 我将包括在upd中。

Source: https://habr.com/ru/post/zh-CN422669/


All Articles