传统行业去O上云,为什么选择PostgreSQL替换ORACLE

“去O”,是近些年来一直很火的一个话题。作为传统大型商业数据库的典型代表Oracle,在国内众多领域使用非常广泛。在金融、电信、交通、医疗、制造业、能源等诸多领域均有大量使用,几乎覆盖了国计民生的方方面面。阿里作为始作俑者,最早实现了”去IOE”(去掉IBM的小型机、Oracle数据库、EMC存储设备) ,并且取得了很好的效果,要知道一台IBM小型机500万,两台小型机所需的存储300万,Oracle一年的基本质保几十万等等……一笔笔巨额账单让无数企业要么头疼不已,要么望洋兴叹。

拿什么替换

替换ORACLE,就是用开源数据库进行替换,开源一定是一个大趋势,可以快速构建生态,培养群体,收割大客户,闭源始终是一个黑盒,就像瞎子走夜路暗中摸索一样。开源的数据库代表包括蒸蒸日上各种大肆宣传的TiDB、腾讯的TBase、华为的openGuass等,阿里也深谙之道,也将PolarDB、Oceanbase开源(最早曾经开源过一阵子,后来又闭源了)。现阶段的热词是什么?Mpp、Lake-house湖仓一体化、超融合等,大有不谈分布式数据库就有点Out的感觉了,通过分布式解决集中式数据库存在的水平扩展与容灾高可用两个问题,不管规模、成本以及合理性,统统上分布式数据库。但分布式对于绝大多数人来说,除了要实现的那一套复杂的CAP、Base理论,再加上一系列节点的通过高速内联网络和一系列的一致性协议进行交互通信,机制复杂,看似美好,实则还有很多的路要走。笔者有幸也有过一阵子的分布式数据库经验,其中利弊自己还是十分清楚的。那么对于传统事务性数据库的代表,最典型的便是MySQL和PostgreSQL。

MySQL主要用户群体集中在互联网公司,是开源数据库领域市场占有率最高的。2009年,随着SUN公司被Oracle以76亿美元收购(SUN公司在此之前曾以10亿美金收购MySQL AB公司),自此MySQL也被Oracel公司纳入自己麾下。而PostgreSQL,起源于伯克利大学,正宗学院派,代码 (ANSI C) 严谨,注释详细,可读性强,拥有30余年的历史,并且荣获2017、2018、2020年的“全球年度数据库”冠军称号。MySQL和PostgreSQL二者基本瓜分了开源事务型数据库的市场

但是在MySQL被Oracle收购以后,越来越多的人对于MySQL的前景表示了担忧,对于开源的MySQL,或多或少对于Oracle自家的数据库产品产生冲击,这个开源免费的MySQL 对于Oracle更多的是包袱而不是资产。比如淘宝就从Oracle转成了MySQL,一些大型互联网公司也在推行去IOE,甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险,如Percona 和 MariaDB,但是相当于脱离了主干分支,自给自足。

PostgreSQL就不一样了,如果说99%的开源数据库都是被商业公司控制的,那么PostgreSQL就是那 1%,PostgreSQL的协议是类BSD 许可,可以随意分发、闭源或开源,可以被用于商业目的或其他场合,也就是说你不打着PostgreSQL的名号出去招摇撞骗,拉个双眼皮敷个面膜拿出去卖,没人管你的。

PostgreSQL是一个纯社区的数据库,基本上每3个月推出一个补丁版本,这意味着已知的Bug很快会被修复,有需求也会及时得到响应。虽然看似发版很快,但是关注commiters的讨论邮件可以发现,一个功能往往需要讨论许久,经过反反复复的验证之后,才会上,是十分严谨的。另外commiters遍布全国,由全世界超过1000名贡献者所维护。它提供了单个完整功能的版本,官方统一开发,统一维护,社区版有所有功能,还有来自于独立厂商的商业支持,比如EDB (enterprisedb)、postgrespro等,不像MySQL有标准版、企业版、经典版、社区版、开发版、web版等,MySQL由于历史原因,分裂为三个分支版本,MariaDB分支、Percona分支 、Oracle官方分支,发展到目前为止各个分支基本互相不兼容Oracle官方分支还有版本之分,分为标准版、企业版、经典版、社区版。

为什么去"O"得用PostgreSQL?

Oracle和PostgreSQL在架构上是十分相近的,包括进程架构、共享缓冲池等。从功能上说,PostgreSQL可以与Oracle数据库媲美。Oracle数据库是目前功能最强大的商业数据库,PostgreSQL则是功能最强大的开源数据库。从Oracle转型到PostgreSQL比MySQL转型到PostgreSQL容易太多了,笔者就多次见到从MySQL转型过来的,在PostgreSQL下面建了多个database然后又吐槽居然不能跨库访问的,还得用什么dblink,因为PostgreSQL里面的schema的概念对应MySQL的database。

另外PostgreSQL是严格的学院派数据库,支持严格的ACID,稳如老狗,一个打十个。

MySQL更加适合业务逻辑相对简单、数据可靠性要求较低的互联网场景(比如google、facebook、alibaba),基本上MySQL能做的PostgreSQL都能做。

PostgreSQL的优点有哪些

支持SQL2016大部分特性,至少实现了SQL2011标准中要求的179项主要功能中的160项,这几乎超过了任何其他数据库引擎。支持多种语言,C、C++、Perl、Python、Java、Tcl以及PHP等功能丰富,利用内核代码中的Hook,可以在不修改数据库内核代码的情况下,自主添加任意功能,如杀手锏GIS、pg_hint_plan等等社区活跃,生态友好,国内外基于PostgreSQL有很多优秀的产品,这些商业主体会集成和发扬,并反哺社区,让PostgreSQL更好用,如pglogical,小于v10的版本得用这个插件实现逻辑复制,后来v10引入的原生逻辑复制基本上将这个插件引入了内核,只不过pglogical有更强大的复制冲突处理能力。FDW机制可以让你可以在同一个PostgreSQL中像操作本地表一样访问其他数据源,如Hadoop、MySQL、Oracle、MongoDB、ES等,且不会占用PostgreSQL的过多资源。与PostgreSQl配合的开源软件很多,有很多分布式集群软件,如pgpool、pgcluster、slony、plploxy、citus等等,很容易做读写分离、负载均衡、数据水平拆分等方案全栈数据库,流式处理Pipelinedb、时序数据库TimescaleDB、空间数据PostGIS、分布式citus、pgxl、yugabyte、图数据ADG、NoSQL Json、JsonB、Hstore等协议友好,采用类BSD协议,是无数国产数据库厂商的衣食父母,基于PostgreSQL开发的国产数据库太多了如人大金仓、瀚高、优炫等等,为什么?协议友好啊,前阵子央采(中央国家机关2021年数据库软件协议供货采购项目征集公告发布)数据库,可以看一下,遍地都是PostgreSQL的影子完全开源,注释清晰,代码质量高,对于不懂coding的,只要有一点C语言基础,都可以很容易看懂相关源码,比如如下的关于异步IO effective_io_concurrency 的源代码,Issue prefetch requests for the number of buffers indicated by prefetch_count,直接看个注释就大概知道了意思。10.PostgreSQL不仅仅是SQL数据库,还能高效处理图结构, 轻松实现 "朋友的朋友的朋友",任意字段组合查询 - ERP、电商、网站、手机APP等业务场景 (gin, bloom索引)、网格化、矢量化地图 - 地理类应用、LBS社交、导航等业务场景 (杀手锏PostGIS)、相似内容搜索、去重 - 互联网、数据公司、搜索引擎等业务场景、用户群体搜索、根据标签圈人 - 电商、广告投放 等业务场景、高并发更新少量记录 - 电商、票务系统 等业务场景 (咨询锁),详见德哥的 《数据库选型十八摸 之 PostgreSQL - 致 架构师、开发者》

11.每年一个大版本发布,大版本发布的第二年就可以上生产环境,每个版本基本都会引入重量级特性,如9.6引入了并行,10引入了逻辑复制和声明式分区,11引入了JIT即时编译和procedure等等。MySQL的大版本发布一般是2年~3年

12.强大的并行能力,MySQL 8.0.14才引入了并行,并且还是个Demo,只能实现并行的扫描,并不能并行的计划,PostgreSQL9.6就引入了并行,前阵子已经发布到了v14,支持多种并行扫描,如并行query、seqscan、nestloop join、aggregate、merje join、hash join等等,充分榨干你的服务器资源。

13.PostgreSQL的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。

PostgreSQL的缺点有哪些

当然,数据库都是有缺点的,简单罗列了几点,不过这些问题对于经验尚浅的人来说可能比较头疼,资深一点的话就也不是太大问题。有些其实可以叫做 “特性” 而非缺点,只不过被无限放大变成了某些人嘴中的 "缺点"

32位的事务ID,对于写入负载高的库,会经常面临事务ID回卷的问题,openGuass很棒改成了64位,妈妈再也不用担心事务号了缺少Hints功能,需要引入pg_hint_plans插件,并且开发团队多年来一直拒绝支持Planner hints,可能也出于安全考虑吧(强行解释一波)没有原生的进程池,对于大量短连接的场景,需要借助外部工具如pgbouncer、pgagroal等MVCC的实现方式,必须要引入饱受诟病的vacuum,经验不足还会经常导致表膨胀没有原生成熟的TDE和压缩方案(Toast需要超过1/4 block才行,可以通过toast_tuple_target参数修改),不过最新的v14引入了lz4压缩,相信后面会有越来越多的压缩算法

6.复制槽不支持Failover,意味着假如发生了Failover,消费信息会丢失,对于严格的金融场景,这个可能比较头疼,这也是目前限制逻辑复制发展的一大重要因素

7.权限设计有点过于复杂化了,包括角色、用户(这二者基本没有区别,除了一个登录权限),另外还搞了一个schema,和SQL Server比较像,database -> schema - >object,假如你有database的权限而没有schema的权限,一样是不行的,对于转型过来的可能很不适应。对于MySQL,模式与数据库同义。甚至可以用create schema来创建数据库,效果和create database一样。对于Oracle,schema与数据库用户密切相关

如何高效学习PostgreSQL

那么如何高效学习PostgreSQL呢?对于刚入门的小白,建议先从书本学起,看书,有些好书值得回味2遍以上,这里分享一下个人的看书历程

PostgreSQL的发展势头是很猛烈的,国内包括平安、去哪儿、斯凯网络等PG大户,国外如日本电报电话公司、Skype、Instagram、Gitlab,主流的云服务提供商如亚马逊、阿里云、腾讯云、华为云也都提供了PostgreSQL的云数据库服务。另外还有国家政策扶持啊!

总之2021学什么?不用我多说了吧。

原文地址:https://www.toutiao.com/article/6980180761374835212/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读773次,点赞6次,收藏9次。【代码】c# json字符串转Oracle的insert into的小程序。
文章浏览阅读8.7k次,点赞2次,收藏17次。此现象一般定位到远端的监听服务来找问题,在远端查看监听服务状态(具体看下面的解决方案会详细呈现),服务是否开启,另外查看监听端点概要是否存在host未指向到计算名的,如无直接进入监听配置文件listener.ora内添加指向即可。2、查看监听服务状态 lsnrctl status,右边为远端端点状态,未添加host指向到计算名;1、本地及远端安装好Oracle并配置好连接,Oracle服务和监听已启动;1、远程Oracle数据库:Oracle11g R2。或者进入下述服务手动重启。,再进行远程连接即可。_ora-12541:tns:无监听程序
文章浏览阅读2.8k次。mysql脚本转化为oracle脚本_mysql建表语句转oracle
文章浏览阅读2.2k次。cx_Oracle报错:cx_Oracle DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library_cx_oracle.databaseerror: dpi-1047: cannot locate a 64-bit oracle client libr
文章浏览阅读1.1k次,点赞38次,收藏35次。本文深入探讨了Oracle数据库的核心要素,包括体系结构、存储结构以及各类参数。通过解析Oracle数据库的体系结构,读者可以深入了解其内部组成和工作原理。存储结构部分介绍了数据在Oracle中的存储方式,从表空间到数据文件的层层逻辑。最后,我们深入探讨了Oracle数据库中各类参数的作用和配置方法,帮助读者更好地理解和优化数据库性能。本文旨在帮助读者全面理解Oracle数据库的运作机制,为其在实践中的应用提供基础和指导。
文章浏览阅读1.5k次。默认自动收集统计信息的时间为晚上10点(周一到周五,4个小时),早上6点(周六,周日,20个小时)由于平时默认每天只收集4小时,时间有点短了,改成每天可收集8小时。oracle 18c中默认是打开的。查看当前自动收集统计信息的时间。_oracle自动收集统计信息
文章浏览阅读929次,点赞18次,收藏20次。只有assm(Automatic Shared Memory Management)模式可以使用大页,需要关闭amm(Memory Manager Process)HugePages_Free: 306 (空闲306页,已使用306-306=0页)防止oracle使用的内存交换,所以设置的大小与oracle配置的sga、pga相关。HugePages_Rsvd: 0 (操作系统承诺给oracle预留的页数)HugePages_Total: 306 (总共306页)_oracle11g 大页
文章浏览阅读801次。例如:10046:0,1,4,8,12。默认redo日志有三个,大小为50M,循环覆盖使用。redo log再覆盖之前,会被归档,形成归档日志。答:不同事件,不同级别。trace的不同级别?_oracle 日志
文章浏览阅读4.2k次,点赞84次,收藏77次。主要讲解MySQL中SQL的DDL语句,其中包括对数据库和表的一系列操作。_sql ddl 新增字段 mysql
文章浏览阅读1.1k次。ON DEMAND:仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;ON COMMIT:一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。Method =>'C',物化视图有三种刷新方式:COMPLETE、FAST和FORCE。物化视图会占用空间,一半可用于大量数据查询时,减缓主表的查询压力使用。例如创建一个物化视图,让对接单位查询。_oracle物化视图定时刷新
文章浏览阅读713次,点赞21次,收藏18次。1.背景介绍在当今的大数据时代,数据量越来越大,传统的关系型数据库已经无法满足业务需求。因此,NoSQL数据库技术迅速崛起,成为企业和开发者的首选。Oracle NoSQL Database是Oracle公司推出的一款分布式NoSQL数据库产品,具有高性能、高可用性和易于扩展等特点。在本文中,我们将深入了解Oracle NoSQL Database的集成与开发者工具,帮助您更好地掌握这款产品的...
文章浏览阅读2.5k次,点赞2次,收藏4次。今天遇见一个问题需要将字段中包含中文字符串的筛选出来。_oracle查询包含中文字符
文章浏览阅读802次。arcmap 在oracle删除表重新创建提示表名存在解决放啊
文章浏览阅读4.3k次,点赞2次,收藏4次。Oracle连接数据库提示 ORA-12638:身份证明检索失败_ora-12638
文章浏览阅读3.4k次,点赞6次,收藏25次。etc/profile是一个全局配置文件,所有用户登录都会使用该文件构建用户环境。与windows配置环境变量是一个道理。选择Linux系统,找到适合自己系统的安装包,我的是CentOS 8 x64。接下来需要登陆Oracle账户才能下载,无账户的可以自己注册一个。Linux中export 命令用于设置或显示环境变量。模式,利用上下键到文档最后,添加以下代码。出现如图所示版本号字样,则说明安装成功。点击下载,勾选1,点击2。记住完整路径用于后面配置。找到Java并点击进去。往下翻,找到Java8。_linux安装jdk1.8
文章浏览阅读2.4w次,点赞26次,收藏109次。JDK 是的简称,也就是 Java 开发工具包。JDK 是整个 Java 的核心,其中JDK包含了 Java 运行环境(Java Runtime Envirnment,简称 JRE),Java 工具(比如 javac、java、javap 等等),以及 Java 基础类库(比如 rt.jar)。最主流的 JDK 是Oracle公司发布的 JDK,除了 Oracle JDK(商业化,更稳定)之外,还有很多公司和组织开发了属于自己的 JDK,比较有名的有IBM JDK(更适合 IBM) 和OpenJDK。_jdk安装教程
文章浏览阅读7.5w次。出现 “java.sql.SQLNonTransientConnectionException:Could not create connection to database server” 的错误通常是由于无法连接到数据库服务器引起的。_java.sql.sqlnontransientconnectionexception: could not create connection to
文章浏览阅读849次,点赞7次,收藏10次。在ClickHouse中创建用户、数据库并进行权限分配是一个重要的管理任务,它涉及到安全性和访问控制。下面是一个基本的指南来帮助你完成这些操作:1. 创建数据库首先,需要创建一个数据库。使用以下命令:CREATE DATABASE IF NOT EXISTS your_database_name;将 your_database_name 替换为你想要的数据库名。2. 创建用户接下来,创建一个新用户。使用以下命令:CREATE USER your_username IDENTIFIED WIT_在clickhouse中如何创建用户 赋权
文章浏览阅读1.2k次,点赞53次,收藏39次。本文是一篇关于Oracle数据库安装和使用的博文摘要。作者以轻松幽默的笔调介绍了自己在实验中掌握的Oracle数据库基本操作,包括使用组件查看命令、配置数据库监听器等。作者也分享了在实验中遇到的一些有趣问题,如SQL语句缺少分号导致的意外错误。此外,作者还强调了登录sys用户和启动实例加载数据库的注意事项,并鼓励读者面对挑战时保持乐观,不断提升自己的能力。整体风格风趣严谨,引人入胜。
文章浏览阅读820次,点赞17次,收藏16次。KingbaseES、xml、dbms_xmlgen、SETSKIPROWS、人大金仓、KingbaseES兼容Oracle包dbms_xmlgen的功能是通过SQL查询将关系表中数据转化为XML文档。转化方式一共有两种:(1)通过查询字符串直接转化。(2)通过上下文句柄转化。对于通过查询字符串直接转化的方式,无法跳过若干行进行查询,只能直接将表格中的所有数据转化为XML文档。