一、postgresql与mysql区别?
postgsreql与mysql的区别有:在pgsql上的功能实现比mysql严谨,对表的连接支持更加完整;pgsql的优化器功能完整,支持索引类型多,而mysql的优化器比较简单,适用于简单的查询操作
二、postgresql和mysql的区别?
1 架构对比
MySQL:多线程
PostgreSQL:多进程
多线程架构和多进程架构之间没有绝对的好坏,例如oracle在unix上是多进程架构,在windows上是多线程架构。
PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。
pgsql对于numa架构的支持比mysql强一些,比MYSQL对于读的性能更好一些,pgsql提交可以完全异步,而mysql的内存表不够实用(因为表锁的原因)
2 对存储过程及事务的支持能力
1) MySQL对于无事务的MyISAM表,采用表锁定,一个长时间运行的查询很可能会长时间地阻碍对表的更新,而PostgreSQL不存在这样的问题。
2) PostgreSQL支持存储过程,要比MySQL好,具备本地缓存执行计划的能力;
3) MySQL 4.0.2-alpha开始支持事务的概念,保留无事务的表类型, 为用户提供了更多的选择。
3 稳定性及性能
1)高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(5.5版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)
2) PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。
3) mysql的innodb引擎,可以充分优化利用系统所有内存,超大内存下PG对内存使用的不那么充分(需要根据内存情况合理配置)。从测试结果上看,mysql 5.5的性能提升很大,单机性能强于pgsql,5.6应该会强更多。
4 高可用性
MySQL可以适应24/7运行。在绝大多数情况下,你不需要为MySQL运行任何清除程序。PostgreSQL目前仍不完全适应24/7运行,这是因为你必须每隔一段时间运行一次VACUUM。
innodb的基于回滚段实现的MVCC机制,相对PG新老数据一起存放的基于XID的MVCC机制,是占优的。新老数据一起存放,需要定时触 发VACUUM,会带来多余的IO和数据库对象加锁开销,引起数据库整体的并发能力下降。而且VACUUM清理不及时,还可能会引发数据膨胀;
5 数据同步方式
1)mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。
2) mysql的同步是基于binlog复制,类似oracle golden gate,是基于stream的复制,做到同步很困难,这种方式更加适合异地复制;pgsql的复制基于wal,可以做到同步复制。同时,pgsql还提供stream复制。
3) MySQL的复制可以用多级从库,但是在9.2之前,PGSQL不能用从库带从库。
4) PG的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。
7 权限控制对比
MySQL允许你定义一整套的不同的数据级、表级和列级的权限,允许你指定基于主机的权限;
MySQL的MERGE表提供了一个独特管理多个表的方法。myisampack可以对只读表进行压缩,此后仍然可以直接访问该表中的行。
7 SQL语句支持能力
1) PG有极其强悍的 SQL 编程能力(9.x 图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,比如分析函数(ORACLE的叫法,PG里叫window函数);
2) 支持用多种语言来写存储过程,对于R的支持也很好。这一点上MYSQL就差的很远,很多分析功能都不支持。腾讯内部数据存储主要是MYSQL,但是数据分析主要是HADOOP+PGSQL(听李元佳说过,但是没有验证过)。
3) pgsql对表名大小的处理,只有在SQL语句中,表名加双引号,才区分大小写。
4)在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨;
5)对表连接支持较完整,优化器的功能较完整,支持的索引类型很多,复杂查询能力较强;
6) MySQL采用索引组织表,这种存储方式非常适合基于主键匹配的查询、删改操作,但是对表结构设计存在约束;
7) MySQL的Join操作的性能非常的差,只支持Nest Join,所以一旦数据量大,性能就非常的差。PostgreSQL除了支持nest join外,还支持hash join和 sort merge join;PostgreSQL支持正则表达式查找,MySQL不支持;
8 数据类型支持能力
PostgreSQL可以更方便地使用UDF(用户定义函数)进行扩展。
1)有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型, 因此PG 多年来在 GIS 领域处于优势地位。相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。
MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON,其空间索引只能在存储引擎为MYISAM的表中创建,用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间索引。创建空间索引的列,必须将其声明为NOT NULL。不同的存储引擎有差别。
MyISAM和InnoDB都支持spatial extensions,但差别在于:如果使用MyISAM,可以建立spatial index,而InnoDB是不支持的。
2) pgsql对json支持比较好,还有很逆天的fdw]功能,就是把别的数据库的表当自己的用;
3) pgsql的字段类型支持的多,有很多mysql没有的类型,但是实际中有时候用到。
4) 一般关系型数据库的字符串有限定长度8k左右,无限长 TEXT 类型的功能受限,只能作为外部大数据访问。而 PG 的 TEXT 类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库都可以省了。
5) postgresql有grouping sets函数,也是迫使我抛弃mysql第一原因。做报表后台计算,olap/oltp之类的这个函数简直是刚性需求。没有grouping sets函数,我感觉做报表后台计算,简直惨不忍睹。
当然pgsql还有挺多很好用的窗口函数之类,用起来真心爽。mysql做数据报表计算后台最大缺点就是没有grouping sets和一些窗口函数,替代方案很麻烦而且效率低,做很多统计数据各种表连接、外连接等等一大堆,不同数据库之间数据的利用计算。
8) PG支持R-trees这样可扩展的索引类型,可以更方便地处理一些特殊数据。
9)PG可以使用函数和条件索引,使得数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。
9 入库过程容错能力
大批量数据入库,PostgresSQL要求所有数据必须完全满足要求,有一条错误,整个数据入库过程失败;MySQL无此问题。比如,每天1000万行数据,就因为一条打印的不完整,PostgreSQL会直接报错,导致一条也导入不进去。
1000万里面有一行将数字类型的等级打印成了字符串的东西,那么pgsql会非让你找出这一条删掉,然后才能将剩下的数据导入进去。mysql就完全没有这个问题,比如mysql level字段定义的int类型,几千万中有一条数据没注意打印成字符串,mysql会自己给你转成0存储的,不会有任何报错。
10 表组织方式
1) pgsql用继承的方法实现分区表,让分区表的使用不方便且性能差,这点比不上mysql。
2) PG主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量;
3) MySQL分区表的实现要优于PG的基于继承表的分区实现,主要体现在分区个数达到上千上万后的处理性能差异较大。
11 开发接口
对于web应用来说,mysql 5.6 的内置MC API功能很好用,PGSQL差一些。
PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的操作,这个和PGSQL的MVCC实现有关系。
12 维护团队
MySQL的背后是一个成熟的商业公司,使得MySQL的开发过程更为慎重;
PostgreSQL的背后是一个庞大的志愿开发组, PostgreSQL的反应更为迅速。这样的两种背景直接导致了各自固有的优点和缺点。
对于一个严肃的商业应用来说,事务的支持是不可或缺的。对于一个严肃的商业应用来说,作为数据库本身,有众多的商业逻辑的存在,此时使用存储过程可以在较少地增加数据库服务器的负担的前提下,对这样的商业逻辑进行封装,并可以利用数据库服务器本身的内在机制对存储过程的执行进行优化。此外存储过程的存在也避免了在网络上大量的原始的SQL语句的传输,这样的优势是显而易见的。
用统一的SQL,去访问其他关系数据库,其他NoSQL数据库,HBase,甚至是各种格式的文件,操作系统信息,在线数据集。
三、mysql和postgresql的区别?
1 架构对比
MySQL:多线程
PostgreSQL:多进程
多线程架构和多进程架构之间没有绝对的好坏,例如oracle在unix上是多进程架构,在windows上是多线程架构。
PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。
pgsql对于numa架构的支持比mysql强一些,比MYSQL对于读的性能更好一些,pgsql提交可以完全异步,而mysql的内存表不够实用(因为表锁的原因)
2 对存储过程及事务的支持能力
1) MySQL对于无事务的MyISAM表,采用表锁定,一个长时间运行的查询很可能会长时间地阻碍对表的更新,而PostgreSQL不存在这样的问题。
2) PostgreSQL支持存储过程,要比MySQL好,具备本地缓存执行计划的能力;
3) MySQL 4.0.2-alpha开始支持事务的概念,保留无事务的表类型, 为用户提供了更多的选择。
3 稳定性及性能
1)高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(5.5版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)
2) PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。
3) mysql的innodb引擎,可以充分优化利用系统所有内存,超大内存下PG对内存使用的不那么充分(需要根据内存情况合理配置)。从测试结果上看,mysql 5.5的性能提升很大,单机性能强于pgsql,5.6应该会强更多。
四、如何看待8.9开源技术直播大战:MySQL Vs PostgreSQL?
2023-08-09 晚上,开源中国举办了一场 《MySQL 和 PostgreSQL,谁是世界第一?》的主题辩论活动,我作为 PostgreSQL 方代表参与。本来准备了一些数据与资料,想着来一场建设性的交流,擦出些思想火花。却不想这场直播在姜某人的胡搅蛮缠下变成了一场闹剧与大笑话,我感到遗憾 —— 浪费了观众们的时间。
微信公众号原文 | 在线直播地址
这场辩论的缘由要追溯到上个月我写的这篇文章:《PostgreSQL:世界上最成功的数据库》。姜某立即针锋相对的回应了一篇《MySQL:这个星球最成功的数据库》。可惜文中充斥着大量事实性错误,谎言与诡辩,扣大帽子和人身攻讦。其人在直播中更是变本加厉:在事实数据和技术理论都辩不过的情况下,使出了无赖一般的撒泼手段。在技术讨论中对于数据上的挑战视而不见,却把我的个人简历搜出来诘问,诉诸人身,口吐芬芳,扣大帽子,实在难绷。侮辱了活动嘉宾,浪费了观众时间,更是中国互联网行业与MySQL 社区的耻辱。
与这样的人对垒,即使赢下了辩论也让人有吃苍蝇的感觉。但我秉持这样一种理念:你不能把世界让给那些你所厌恶的人。所以即使恶臭难当,我也要捏着鼻子上来干,为 PostgreSQL 正名。他选择了不体面,那我就用数据与事实来帮他体面。
更新:
辩论完后,姜的公众号还特意发了篇文章:《这个前阿里 P5 架构师,竟然说 OceanBase 打榜 TPC-C 是傻X行为》来继续人身攻击,因此在这里更新一些回应:
这个标题虽想嘲讽我,但我确实曾经是P5架构师。以及我确实认为 TPC-C 打榜是 SB 行为,实际上我的观点是:在现代硬件环境下,我认为这些《分布式数据库是伪需求》。
更新:关于个人履历
姜在直播中浪费大量时间来质疑我代表 PostgreSQL 社区的资格,且不说在一场技术主题辩论中不谈技术道理先搞起排资论辈是多么可笑的一件事,排资论辈时还要拿别人刚毕业的 P5 履历来说是就更滑稽了。直播中,姜还“因为我用英文简历”给我扣上“不是中国人不爱国”这种大帽子:说起来,我乃中国护照无境外永居,一个拿绿卡的人给别人扣这种帽子真的很搞笑。
即使真比履历来,我也一点儿都不怵。在阿里期间我曾在友盟 FinPlus 担任Tech Leader,和另外一位产品经理与算法工程师一起搞起了这个内部创业项目,从 16 年到现在每年1个亿营收,是友盟营收的扛把子。就是在这个项目里,我选型了 PostgreSQL + Go,从阿里这个 Java 与 MySQL 的大本营中独自杀出了一条血路。我本科毕业3年时间拿下苹果 ICT4 = P8+,毕业7年30岁不到自己出来创业当CEO。姜想用 P5架构师这个来羞辱我,我就当它在给我打广告了。
实际上我最有代表性的工作经历既不是在阿里也不是在苹果,而是在探探 —— 这个北欧风、小而美的创业公司,与一票瑞典 Old School 工程师,各领域顶尖人才共事的几年。这里在技术水平与品味上吊打一系列所谓的“互联网大厂”。450万数据库 QPS,一两万核的 PostgreSQL 数据库集群,几百TB 不重复的 OLTP 数据,这样的PostgreSQL 部署规模与负载水平,在当时放在全中国排进前三不成问题。
无论是在阿里,探探,还是苹果,我的工作始终紧密围绕着 PostgreSQL。而现在我更是选择成为 PostgreSQL 方向的创业者,为全球 PostgreSQL用户与中国的数据库事业做出自己的贡献。我为全球 PostgreSQL 生态贡献了一个最强开源监控系统 Pigsty ,在 OSSRank 中 PostgreSQL 生态项目中排名第39;我为社区维护打造了一个开源免费,开箱即用的 PostgreSQL 数据库发行版,一次性用户在解决使用 PostgreSQL 会遇到的各种问题,帮助用户用好 PostgreSQL,各种行业,互联网/自动驾驶/金融/航天/部队/外企都有用户。
除此之外,我还是一名独立开源贡献者:我翻译过 《设计数据密集型应用》 与 《PostgreSQL指南:内幕探索》 两本书,前者是互联网应用开发的经典名著,后着是 PostgreSQL 数据库内核原理剖析,我也在各种大会与论坛上分享了大量原创新颖的 PostgreSQL 相关案例。在 Github Star Ranking 上,我以 21951 总 Star 在全球开发者中排名 523。
我本人是 PostgreSQL 中文社区的开源技术委员,经过社区主席与委员们的支持与同意,代表 PostgreSQL 中文社区参加本次活动。反观姜,直播一上来就强调自己不代表公司与MySQL社区,只代表个人。既然它不能代表 MySQL 社区,又来参加这个活动作甚?反而还倒打一耙质疑我能不能代表 PostgreSQL 社区,这就是以己度人了。
一粉顶十黑,我不知道姜为 MySQL 生态做了什么贡献,但它四处恶意攻击诋毁其他数据库引战的行为,早就引发了包括不只是 PostgreSQL 社区的强烈反感,毫无疑问是 MySQL 社区乃至整个中国互联网技术界的声誉负资产。可惜,这次它恐怕踢到铁板上了。德哥这样的翩翩君子难防它这样的龌龊小人,但我们这一代就是要豪迈,敢同恶鬼争高下,不向霸王让寸分,舍得一身臊,也要让它这种技术界的害群之马现现眼。
更新:关于打榜SB行为
我确实认为 TPC-C 打榜是一种 SB (sysbench)行为。TPC-C 已经是30年前的老东西了,在 OB 打榜前已经有快10年没人来玩了,没有办法有效反映当下数据库性能需求,技术参考价值比 sysbench 并发-延迟曲线都差远了。TPC-C 这是一个可以靠堆机器来近乎无限刷高数字的评测。OB 和 TDSQL 这两个数据库花了几个亿放了个大炮仗,给国外评测委员会滋滋送钱,放卫星吹亩产万斤的牛逼,请问这不是 SB 行为是什么?这才是让“国产数据库”蒙羞。
我不仅认为这种行打榜行为本身是 SB 行为,我认为随着硬件性能指数增长,在当下,这类分布式数据库本身已经成为伪需求了!参见拙作:《分布式数据库是伪需求吗?》。
关于 TPC-C 打榜这种事,专家们本来是看破不说破,但心里都门儿清,下面是一些有趣的评论,我后面也会写一篇专门的文章来揭开这里的画皮,敬请期待。
更新:MySQL 事务机制缺陷
姜的驳文中唯一与技术搭边的,就是这个 MySQL 事务原子性缺陷问题了。
在这个例子中,我们使用 MySQL/InnoDB 最新版本(8.1仍存在),默认配置,开启一个事务执行两条 DML 语句。第一条成功,第二条失败,最终执行 COMMIT,结果竟然是部分成功的中间状态(一条成功一条失败)。
ACID 原子性的定义特征是:能够在错误时中止事务,丢弃该事务进行的所有写入变更的能力。简而言之:All or Nothing。在这个例子中,第二条语句失败后执行 COMMIT 后最终的结果是“中间状态”。毫无疑问是破坏了事务的原子性。
这个问题,至少在两年前《为什么说PostgreSQL前途无量?》中,我就抛出来了。当时引发了 PostgreSQL 与 MySQL 社区的震惊与大讨论,最后MySQL 社区嘴硬认为这是一个 Feature 。理由是这个行为可以通过修改参数来改变。但不管 MySQL 方如何辩解都无法改变这一事实 : MySQL 在默认情况下,允许用户做出这种违背原子性的蠢事。
要求用户自己显式决定处理 COMMIT / ROLLBACK,等于把这一责任推卸到了开发者身上。如果这是一个 Bug 那还好,只要修复了就行。如果这是一个 Feature,那就是 Stupid by Design:默认允许用户做蠢事,除非显式配置。
PostgreSQL 或者任何一个头脑正常的软件,它的设计原则都应当是:默认不允许用户进行导致数据错漏丢的蠢事,除非用户显式声明。一个基础核心软件,是不应该为了任何“便利”/迎合菜鸟开发者的理由,去在正确性上妥协的。考虑到小白用户特别喜欢 MySQL (初学者中使用率占58%),那么这种原子性上的设计缺陷,以及隔离等级上的实现缺陷(《并发异常那些事》),就更说不过去了。
StackOverflow 问卷说了什么?
2023 年 StackOverflow 调研结果新鲜出炉, 来自185个国家与地区的9万名开发者给出了高质量的反馈。在今年的调研中,PostgreSQL 在数据库全部三项调研指标(流行度,喜爱度,需求度)上获得无可争议的全能冠军,成为真正意义上“最成功”的数据库 —— "PostgreSQL is the Linux of Database!"
当我们说一个数据库“成功”时,究竟在说什么?评价一个数据库有许多标准:功能、质量、安全、性能、成本,但没有哪种可以普世泛用。不过 Succeed 既代表成功,又代表继承,所以成功与“后继有人”相通。对一项技术而言,用户的规模、喜好、需求决定了生态的繁荣程度,唯有这种最终存在意义上的神意裁决 —— 才能让所有人心服口服。而连续进行7年的 StackOverflow 年度开发者调研为我们窥见技术发展流行趋势打开了一扇窗户。
PostgreSQL现在是全世界最流行的数据库
PostgreSQL是开发者最喜爱欣赏的数据库!
PostgreSQL是用户需求最为强烈的数据库!
过去7年SO调研数据展示地址:Public Demo | Github Repo: dbrank
流行度代表过去,喜爱度代表现在,需求度代表将来,这三个指标很好地反映了一项技术的生命力。存量与增量,时与势都站在 PostgreSQL 一侧,恐怕在几年内恐怕都不会有任何能挑战 PostgreSQL 地位的竞争对手。
关于 StackOverflow 问卷数据的解析,还请参考拙作:《PostgreSQL:世界上最成功的数据库》
分析这份问卷调查结果,特别是关于 PostgreSQL 与 MySQL 的数据,我们不难得出以下结论:
- PostgreSQL 流行度持续上升,正在崛起,势不可挡。
- MySQL 流行度持续下降,正在过气,持续衰落。
- 从全球来看, MySQL 的流行度已经被 PostgreSQL 超越了。
StackOverflow 问卷能否代表全球?
姜某开门见山,一顶大帽子先上来。作者认为这个调查问卷没有涉及中国市场,所以不足以称 “全球”。
由于众所周知的原因,中国用户在国际社区参与度偏低。例如,StackOverflow 2023 调研的国别用户画像中,中国开发者仅占总数的 0.75%,排名第 28 ,显然与一个“开发者大国”的身份不相符。
不过在全球范围内的流行度, PostgreSQL 升 MySQL 降的结论,并不会因为中国开发者参与度偏低而有改变:而只要这个趋势是确定的,那么结论3,这个交叉点的发生就是必然的:Soon or Later。根据现有数据,这个流行度的交叉已经在今年发生了。但是我们可以深入探索一下这个问题:如果中国开发者按照应有的比例参与了这一次全球问卷调查,结果又会有什么不一样呢?
要用中国开发者校正全球调研数据,我们要确定两件事:未参与调研的中国开发者应当占多大的权重比例,以及这些未参与调研的中国开发者中,MySQL 与 PostgreSQL 的使用率各自是多少。
根据 Github 用户统计,中国开发者约全球开发者总数 10% (1千万 of 1亿) ,根据 新华网 报道,2022年中国数据库市场占全球 7.2%。考虑到 StackOverflow 2023调研已包括 0.75% 的中国开发者,综合以上三方面考虑,可初步将未纳入统计的中国开发者比例定为 8%。
因为没有其他权威数据可供参考,我们合理假设中国市场开发者中,使用 MySQL or PG 任一数据库的开发者比例与全球相同 ( (41.1 + 45.6) / 2 = 43.35),而两者的比例分布与 百度热搜 给出的半年指数(pgsql:mysql = 1260:5283)成正比,则根据假设可估算得:
中国 PostgreSQL 使用率约为:2 * 43.35 * 1260 / (1260 + 5283) = 16.7% ,中国 MySQL 使用率约为:2 * 43.35 * 5283 / (1260 + 5283) = 70% 。
按照加权算法,今年中国修正后的全球数据库流行度,仍然是 PostgreSQL 高于 MySQL:
PostgreSQL: 16.7 * 0.074 + 45.6 * 0.926 = 43.46%
MySQL: 70 * 0.074 + 41.1 * 0.926 = 43.24%
可以看出,即使经过“未参与的中国开发者”的估算校正,全球开发者中 PostgreSQL 与 MySQL 的流行度关系依然没有发生质变。我们即使退一万步说,所有参数都使用最利于 MySQL 的估算,最多也就是将这个转折点推迟几个月的时间。至于算上未纳入调研的中国开发者后,PostgreSQL 到底什么时候超越 MySQL 成为全球最流行的数据库,今年年初或是明年年中那已经不重要了。
菜鸟都在哪儿呢?
作者又提出,StackOverflow 答问卷的大概率都是菜鸟。我相信他一定没有完整阅读 StackOverflow 2023 开发者调研的完整报告,否则不会出现这种基础的事实性错误。
StackOverflow 在 Developer Profile 中完整给出了参与调查人口的画像。其中概率最大的用户群体是具有 5-9 年(专业)编程经验的开发者,国内大致属 P7 层次,怎么也称不上是刚入门的初级码农与学生。事实上本次调研中无论是学生,还是初学码农的比例都是清楚给出的:学生的比例只有 2.6% ,而初学者的比例为 5.6% ,无论如何也称不上是 “大概率”。
对于数据库调研,Stacok Overflow 还给出了一个有趣维度:专家与初学者。总体中,专业开发者占 94.4%,菜鸟占 5.6% 。我们可以清楚看出 PostgreSQL 更受专家欢迎(使用率:49.1% vs 40.6%),而菜鸟会更偏爱 MySQL (使用率:58.4% vs 25.5%)。
在 “Worked with & want to work” 一节中,我们还可以看出:对于菜鸟来说,唯一显著的数据库间流动正是从 MySQL 流向 PostgreSQL 的。这意味着很多菜鸟开发者在成长为专业开发者的过程中,从 MySQL 迁移到了 PostgreSQL。
综上所述,StackOverflow 调研的主体是专业的开发者,而且在专业开发者中, PostgreSQL 要比 MySQL 更受欢迎的多 —— 在专业开发者中,PostgreSQL 的流行度在去年就已经超越 MySQL 了。
搜索引擎指数更权威?
在文章的第一部分,作者又对 StackOverflow 问卷调研的可信度提出质疑,理由是有一个 “更为权威” 的数据库排行榜:DB-Engine 。而在 DB-Engine 排行榜上, MySQL (2nd)比 PostgreSQL(4th) 更高。
所谓 “最权威” 的数据库排行榜 DB-Engine 属于综合性热搜指数,将 Google, Bing, Google Trends,StackOverflow,DBA Stack Exchange,Indeed, Simply Hired,LinkdedIn,Twitter 上的间接数据合成了一个热搜指数。
在统计分析中有许多种数据收集方法,不同的方法有不同的可信度与说服力。当你没有其他数据可以参考时,DB-Engine 可以作为一个参考。但想要推翻问卷调查的结论,必须使用具有更高可信度/说服力的数据,而不是一种可信度/说服力更低的数据。
StackOverflow 年度调查属于对全世界开发者的一次抽样调查,使用问卷调研的形式,具有中~高程度的可信度与说服力。对于数据库流行度、喜爱度、需求度这样的问题,普查、实验、大数据这些方法成本过于高昂(无限趋近于不可能),可行的数据收集方式也就是 问卷调研,案例研究,搜索引擎 这几种。
StackOverflow 作为全球开发者密集的大本营,已经连续进行了7年的开发者年度调研。2023 年参与者更是达到了 9 万,这是一个非常惊人,也足够具有代表性的样本数量。(作为参照,Github的 Octoverse 年度调研也只有1万出头的样本)。称其为最为权威的全球开发者问卷调研恐怕也没有问题。
Stack Overflow 作为一种问卷调研/样本调研的第一手数据收集方式,在可信度与说服力上是显著强于任何搜索引擎趋势分析的。
搜索引擎热搜数据具有一些局限性:首先:指数可以比较准确地揭示一个关键词本身的流行度趋势变化,但横向可比较性没有那么强。其次:你无法区分用户搜索的目的,究竟是因为喜爱支持,还是遇到了糟心的问题需要解决,最后:PostgreSQL 至少具有5种变体名称:pg, psql, pgsql, postgres, postgresql , 在 SEO 上相比 MySQL 天生处于劣势。
尽管如此,我们依然能够从 DB-Engine 中看出 PostgreSQL 流行度持续上升,MySQL流行度持续下降的趋势。实际上,排行榜 Top10 的数据库除了 PostgreSQL,热度全都在下降。而 Top20 的数据库热度再抛除两个大数据分析产品 Snowflake 与 Databricks 也全都在下降。可以说 PostgreSQL 是数据库领域一枝独秀的存在!
尽管从 DB-Engine 热度榜上来看,PostgreSQL 的热度仍然不及 MySQL,按过去三年的趋势回归的交叉点大约在 2031-05 ,没有支持我们的结论3(已经发生);但好在这个问题本身已经被说服力更强的问卷调查回答过了,那么说服力更弱的热度榜也无法推翻这一点。
综上所述:DB-Engine 同样证明了 PG升 MySQL 降的趋势,但无法推翻问卷调查得到的精准的流行度对比结论。
搜索引擎趋势上的洞察
姜接着根据“搜索引擎数据”提出:全球 MySQL 流行度是 PostgreSQL 的 3 倍,在中国 MySQL 流行度是 PG 的 6 ~ 7 倍。我们上面已经说过了,搜索引擎热搜的数据无法推翻具有更强效力的问卷调研,但这不妨碍我们来看一看这些搜索引擎数据又能为我们带来什么新的洞察?
首先来看 Google Trends,搜索 PostgreSQL 与 MySQL 两个关键词,可惜 MySQL 没有“主题”类目,PostgreSQL 没有 “软件” 类目。我们按照下面的配置拉取最近 30 天的热搜数据。
可以看到,全球 MySQL:PgSQL 热度 = 57:77,约1.35倍,多1/3是有多,多3倍,这就属于夸张了一个数量级了。
让我们把时间拉长到最大的 2004 年至今来看一看,可以看出 MySQL 从 2004 年迄今,有着非常明显的一个热度衰减。而PostgreSQL 从大约从 2014 年,开始有了一个蓬勃的增长。(当然和 MySQL 都在疫情三年被砸掉一个坑)。
接下来让我们看一看按照国家区分的 PostgreSQL vs MySQL 搜索引擎指数相对比例,这里我们拉取最近一个月的数据 看看当下最新的情况:可以看到,并不像原作者说的:“PostgreSQL 相对流行度最高的国家是中国,美国仅排名第67“,事实是, PostgreSQL 相对流行度最高的国家是 哈萨克斯坦与俄罗斯,美国排名第18(PostgreSQL:MySQL = 53:47 ,PG更高),而中国,则是 PostgreSQL 相对流行度最低的国家! 二不像是作者所说:中国是 PG 最流行的国家,这种事情用健全直觉判断都知道是不可能的。
全球搜索引擎数据,依然支撑我们 PostgreSQL 流行度不断增长,MySQL 流行度不断衰减的判断。当然,与 DB-Engine 一样,全球的热搜指数目前仍然是 MySQL 略高一筹,但依然无法推翻问卷调查得到的精准的流行度对比结论。当然,这也不妨碍我们继续看一看,有哪些国家,PostgreSQL 直接连热搜指数都干翻 MySQL 了。
哪些国家 PostgreSQL 更流行?
首先,让我们来看看旧世界霸主两极 —— 美国与俄罗斯的情况。有趣的是,拉取这两个国家的热搜指数,PostgreSQL 都已经超过了 MySQL。
在美国的数据中,PostgreSQL:MySQL = 69:61,PG 热度约是 MySQL 的 1.13 倍,在俄罗斯的数据中则更为离谱,PostgreSQL:MySQL 达到了 70:22 ,也就是 3.18 倍!而中国的数据相反:过去30天,MySQL 热度是 PostgreSQL 的 4.8 倍。
作为一个参考对照,我还特意检查了俄罗斯国民搜索引擎 Yandex,与中国国民搜索引擎百度指数的数据,结果基本上与 Google Trends 对应地区的指数吻合。
当我们下载 Google Trends 按地区划分的30天相对热度数据,并绘制在柱状图上,不难发现,越是发达国家,PostgreSQL 相对 MySQL 的使用率越高!例如,左侧是 PostgreSQL 相对热度最高的国家,右侧是 MySQL 相对热度最高的国家,发达国家用绿色标出,发展中/不发达国家用红色标出。这里可以看到,原作者特意强调的“韩国”,恰好是 MySQL 使用率 Top 国家中最显眼的,唯一一个发达国家特例。
如果我们定量分析,PG - MySQL 热度差值与发达国家这个变量之间的相关性,会发现两者的相关系数高达 r = 0.6 ,踩在了强相关的门槛上。
越是发达国家,PostgreSQL 的相对搜索热度就越高;虽然相关未必因果,但不禁让人对着里面的原因感兴趣。这可倒真是应了 PostgreSQL Slogan 那句:世界上最先进的开源关系型数据库。
中国特色
在 Google Trends 上,中国则有些特殊:像是热度图向右偏移了10年左右的样子。MySQL 在中国的热度在 2014 - 2015 年达峰 (也许与阿里上市有关),随即进入衰退通道。与全球走势保持 10 年左右的滞后关系。
在百度指数上,也能观察到类似的起伏,此外,相比 Google 中国地区热搜趋势,还有额外5年的滞后性。
当年苏联点错了科技树,走了真空管计算机而不是晶体管集成电路的路线,错过了信息时代浪潮,当引以为戒。押宝过时的数据库技术虽然不至于像点错芯片科技树那样伤筋动骨,但也是巨大的人力物力财力智力浪费,不可不察也。
作为一个佐证,华为作为民族企业标杆,战略眼光是没得说的。在10年前就很明智的选择基于 PostgreSQL 9.2 进行分叉,打造自己“自主可控” 的 openGauss 数据库,不带正眼瞧 MySQL 一眼,就已经很能说明许多问题了。
MySQL 的用户都流失到哪儿去了?
原作者承认 MySQL 的流行度在下降,但将其归因为生态百花齐放,而不是因为 PostgreSQL 的冲击替代。
毕竟,MySQL 树大招风:前有狼后有虎,上有野爹下有逆子:在严谨的事务处理和数据分析上,MySQL被同为开源关系型数据库的 PostgreSQL 甩开几条街;而在糙猛快的敏捷方法论上,MySQL又不如新兴 NoSQL。同时,MySQL上有养父 Oracle 的压制,中有 MariaDB 分家,下有诸如 TiDB,OB 之类的兼容性新数据库分羹。那么,到底是谁起了主要作用呢?
从定性分析的角度,PostgreSQL 是 MySQL 最大的竞争对手,在 DB-Engine 上排名前 20 的数据库中,唯有 PostgreSQL 保持正增长 (刨除两个大数据的),有能力吃下这块蛋糕。但具体 MySQL 用户流失到哪儿,还是要靠定量分析才有说服力:
如果我们将 StackOverflow 过去6年间,MySQL 流行度的下降值与 PostgreSQL 流行度的上升值画到一张 XY 散点图上,会发现两者具有极强的负相关性,相关系数 r = -0.96。特别是,如果我们将 MySQL 和 PgSQL 的流行度相加,几乎可以看到一条水平线,我们可以合理推断,这是由于此消彼长,MySQL 用户大量转移至 PostgreSQL 导致的。
MySQL 百花齐放?
作者认为 MySQL 流行度下降是因为百花齐放导致的。
MySQL 跟其他数据库比较的时候也许可以提一嘴这个事,唯独和 PostgreSQL 不行。在百花齐放,生态繁荣这一项上,没有数据库可以比得过 PostgreSQL。在 Database of Database 排行榜中,PostgreSQL 有着最多的协议兼容数据库,最多的衍生数据库产品,甚至在“嵌入”使用中也能排名第四。
无论是全球的数据库谱系图,还是中国国产数据库谱系图,PostgreSQL 的生态都要比 MySQL 繁荣的太多太多。
在中国市场,如果把基于 PostgreSQL 的 “国产数据库” 算上,恐怕 MySQL 更是要吃不了兜着走。
PostgreSQL 营收是 MySQL 0.1% ?
作者认为,在中国公有云数据库市场中 PG 的营收仅有 MySQL 的 0.1% ~ 0.3% ,我对这个数据提出质疑。
根据 AWS RDS 团队给出的数据,他们全球 PostgreSQL 与 MySQL 的实例数量目前是 1:1 ,考虑到 MySQL 小型实例偏多,PostgreSQL 在营收上还占优势。中国公有云行业可以参考标杆阿里云 RDS 团队的数据:PostgreSQL 与MySQL的营收比例约为 1:5 ,基本与Google中国地区指数与百度指数相吻合。关于公有云 RDS PostgreSQL vs MySQL 的份额并没有公开披露,都属于内部数据,但欢迎大家向相关团队求证。
原作者在腾讯数据库团队任过职,可能会有关于腾讯云数据库的内部信息。因此,如果他给出一个 10:1 ~ 3:1 之的数据,我可能会采信。但 1000:1 和 1000:3 的营收比例数字显然是荒谬的。当然我们并不排除这种可能性:某家云厂商实在是不懂 PostgreSQL 以至于做的 RDS 太烂根本卖不动。
大型互联网/科技公司使用 PostgreSQL 或衍生发行版承载核心业务实在是太多了。例如我所任职的阿里,探探,苹果。其他知名企业包括:去哪儿网,平安银行,邮储银行,12306,Momenta,高德,菜鸟,丰田,NEC…… 等等等等,我所服务接触的航天/部队/警务/水利/国土/气象等与地理信息密切相关的行业中,更是 PostgreSQL 的基本盘。
BSD是流氓协议??
作者最后对 BSD 协议开炮,认为 BSD 协议是流氓协议,而且 “本质上 PG 也 是由美国公司控制的开源数据库”。
这里存在一些基本的事实错误,例如, PostgreSQL 使用的并非是 BSD 协议,而是专门的 PostgreSQL 协议,只是 BSD-like 而不是 BSD,这是其一。第二,作者恐怕是对开源协议有什么误解:BSD 协议仍需要尊重代码作者的著作权,需要包含版权声明 —— 我不知道是什么样的环境让作者形成了这种认知。
不同于 MySQL,由 Oracle 所控制拥有;PostgreSQL 是社区驱动的开源项目,并没有一个商业公司控制,也并没有哪一个国家控制;而且它的全球总部在加拿大不在美国,即使是来自被制裁的俄罗斯公司 Postgres Pro ,也依然活跃在 PG 社区中。作者的 这个 “也” 字以己度人,倒是非常好地指出了 MySQL 确实是由美国公司(还是一家领头参与制裁,带有显著敌意的公司)所控制的开源数据库,而这一点对于信创国产化的中国市场来说是致命的。
Fin
原作者的这篇情绪文本不值一驳,充满着事实错误,诡辩话术,情绪输出与人身攻击,作为 MySQL 社区的头脸人物代表,可谓是体面尽失,与之对擂实属掉份。
但正如人们说的:“你不应该把世界让给那些你讨厌的人”。所以我还是选择撰此文回应,用实打实的事实与数据说话来正本清源,匡扶正义,为 PostgreSQL 正名。
至于孰对孰错,那就交由读者评说啦。
参考阅读
References
[1] MySQL 和 PostgreSQL,谁是世界第一?: https://www.modb.pro/video/8261?slink [2] PostgreSQL:世界上最成功的数据库: http://mp.weixin.qq.com/s?__biz=MzU5ODAyNTM5Ng==&mid=2247485685&idx=1&sn=688f6d6d0f4128d7f77d710f04ff9024&chksm=fe4b3d2ec93cb438665b7e0d554511674091b2e486a70b8a3eb7e2c7a53681fb9834a08cb3c3&scene=21#wechat_redirect [3] 分布式数据库是伪需求: https://zhuanlan.zhihu.com/p/622866832 [4] 拿绿卡: https://www.zhihu.com/question/339863115/answer/1278663114 [5] 履历: http://vonng.com/en/ [6] Pigsty: https://pigsty.cc/ [7] PostgreSQL 生态项目: https://ossrank.com/cat/368-postgresql-extension?page=2 [8] PostgreSQL 数据库发行版: http://mp.weixin.qq.com/s?__biz=MzU5ODAyNTM5Ng==&mid=2247485518&idx=1&sn=3d5f3c753facc829b2300a15df50d237&chksm=fe4b3d95c93cb4833b8e80433cff46a893f939154be60a2a24ee96598f96b32271301abfda1f&scene=21#wechat_redirect [9] 设计数据密集型应用: http://ddia.vonng.com/ [10] PostgreSQL指南:内幕探索: https://pg-internal.vonng.com/#/ [11] Github Star Ranking: https://gitstar-ranking.com/Vonng [12] TPC-C 打榜: https://www.tpc.org/tpcc/results/tpcc_results5.asp [13] 几个亿: https://www.tpc.org/tpcc/results/tpcc_result_detail5.asp?id=123032401&lang= [14] 分布式数据库是伪需求吗?: https://zhuanlan.zhihu.com/p/622866832 [15] 为什么说PostgreSQL前途无量?: http://mp.weixin.qq.com/s?__biz=MzU5ODAyNTM5Ng==&mid=2247484591&idx=1&sn=a6ab13d93bfa26fca969ba163b01e1d5&chksm=fe4b3174c93cb862899cbce4b9063ed009bfe735df16bce6b246042e897d494648473eea3cea&scene=21#wechat_redirect [16] 并发异常那些事: https://zhuanlan.zhihu.com/p/38217080 [17] Public Demo: http://demo.pigsty.cc/d/sf-db-survey/stackoverflow-survey?orgId=1 [18] Github Repo: dbrank: https://github.com/Vonng/dbrank [19] PostgreSQL:世界上最成功的数据库: http://mp.weixin.qq.com/s?__biz=MzU5ODAyNTM5Ng==&mid=2247485685&idx=1&sn=688f6d6d0f4128d7f77d710f04ff9024&chksm=fe4b3d2ec93cb438665b7e0d554511674091b2e486a70b8a3eb7e2c7a53681fb9834a08cb3c3&scene=21#wechat_redirect [20] 国别用户画像: https://survey.stackoverflow.co/2023/?utm_source=so-owned&utm_medium=blog&utm_campaign=dev-survey-results-2023&utm_content=survey-results#key-territories-all-countries [21] 百度热搜: https://index.baidu.com/v2/main/index.html#/trend/postgresql?words=postgresql,MySQL [22] 估算校正: http://demo.pigsty.cc/d/sf-db-survey/stackoverflow-survey?orgId=1&viewPanel=57 [23] Developer Profile: https://survey.stackoverflow.co/2023/?utm_source=so-owned&utm_medium=blog&utm_campaign=dev-survey-results-2023&utm_content=survey-results#years-coding [24] 学生的比例: https://survey.stackoverflow.co/2023/?utm_source=so-owned&utm_medium=blog&utm_campaign=dev-survey-results-2023&utm_content=survey-results#years-of-professional-coding-experience-by-developer-type [25] 初学者: https://survey.stackoverflow.co/2023/?utm_source=so-owned&utm_medium=blog&utm_campaign=dev-survey-results-2023&utm_content=survey-results#learning-how-to-code [26] Worked with & want to work: https://survey.stackoverflow.co/2023/?utm_source=so-owned&utm_medium=blog&utm_campaign=dev-survey-results-2023&utm_content=survey-results#worked-with-vs-want-to-work-with-database-worked-want-learn [27] DB-Engine: https://db-engines.com/en/ranking [28] 时间拉长到最大的 2004 年至今来看一看: https://trends.google.com/trends/explore?date=all&q=%2Fm%2F05ynw,MySQL&hl=zh-CN [29] Yandex: https://wordstat.yandex.com/ [30] 百度指数: https://index.baidu.com/v2/main/index.html#/trend/postgresql?words=postgresql,mysql [31] 柱状图: http://demo.pigsty.cc/d/sf-db-survey/stackoverflow-survey?orgId=1&viewPanel=81 [32] Database of Database 排行榜: https://dbdb.io/stats [33] 全球的数据库谱系图: https://hpi.de/fileadmin/user_upload/fachgebiete/naumann/projekte/RDBMSGenealogy/RDBMS_Genealogy_V6.pdf [34] 直播预告:MySQL vs PostgreSQL: http://mp.weixin.qq.com/s?__biz=MzU5ODAyNTM5Ng==&mid=2247485873&idx=1&sn=731322e649c212eefc3e382efb31ae99&chksm=fe4b3c6ac93cb57c712471ed8cd54c3603937d0793bfd2518221749861a40140b64edb17550d&scene=21#wechat_redirect [35] 向量是PG中新的JSON: http://mp.weixin.qq.com/s?__biz=MzU5ODAyNTM5Ng==&mid=2247485865&idx=1&sn=de418406c771122d98bb52ef4adb9e58&chksm=fe4b3c72c93cb5646cd07998603bef9aadd56b125db383f14584fa5ffdd74809b12660e1fc9d&scene=21#wechat_redirect [36] PostgreSQL:世界上最成功的数据库: http://mp.weixin.qq.com/s?__biz=MzU5ODAyNTM5Ng==&mid=2247485685&idx=1&sn=688f6d6d0f4128d7f77d710f04ff9024&chksm=fe4b3d2ec93cb438665b7e0d554511674091b2e486a70b8a3eb7e2c7a53681fb9834a08cb3c3&scene=21#wechat_redirect [37] PostgreSQL 到底有多强?: http://mp.weixin.qq.com/s?__biz=MzU5ODAyNTM5Ng==&mid=2247485240&idx=1&sn=9052f03ae2ef21d9e21037fd7a1fa7fe&chksm=fe4b32e3c93cbbf522616346c1afd49e1e6edbb0898694df224fe2134a69c0c4562aab35587a&scene=21#wechat_redirect [38] 为什么PostgreSQL是最成功的数据库?: http://mp.weixin.qq.com/s?__biz=MzU5ODAyNTM5Ng==&mid=2247485216&idx=1&sn=1b59c7dda5f347145c2f39d2679a274d&chksm=fe4b32fbc93cbbed574358a3bcf127dd2e4f458638b46efaee1a885a5702a66a5d9ca18e3f90&scene=21#wechat_redirect [39] StackOverflow 2022数据库年度调查: http://mp.weixin.qq.com/s?__biz=MzU5ODAyNTM5Ng==&mid=2247485170&idx=1&sn=657c75be06557df26e4521ce64178f14&chksm=fe4b3329c93cba3f840283c9df0e836e96a410f540e34ac9b1b68ca4d6247d5f31c94e2a41f4&scene=21#wechat_redirect [40] Why PostgreSQL Rocks!: http://mp.weixin.qq.com/s?__biz=MzU5ODAyNTM5Ng==&mid=2247484604&idx=1&sn=357b3381e7636709fa9e5e06894b7273&chksm=fe4b3167c93cb8719b7c6b048fd300a7773c73319ba0c119359f4f8a6684cd969434c5abbdfd&scene=21#wechat_redirect [41] 为什么说PostgreSQL前途无量?: http://mp.weixin.qq.com/s?__biz=MzU5ODAyNTM5Ng==&mid=2247484591&idx=1&sn=a6ab13d93bfa26fca969ba163b01e1d5&chksm=fe4b3174c93cb862899cbce4b9063ed009bfe735df16bce6b246042e897d494648473eea3cea&scene=21#wechat_redirect [42] PostgreSQL 好处都有啥?: http://mp.weixin.qq.com/s?__biz=MzU5ODAyNTM5Ng==&mid=2247483706&idx=1&sn=b842684b41ac6dde8310448ae0a81a76&chksm=fe4b34e1c93cbdf7dcfcdae5f3ddc38bc422989421266dcda957fa2b596e361815624c92b3ec&scene=21#wechat_redirect [43] 更好的开源RDS替代:Pigsty: http://mp.weixin.qq.com/s?__biz=MzU5ODAyNTM5Ng==&mid=2247485518&idx=1&sn=3d5f3c753facc829b2300a15df50d237&chksm=fe4b3d95c93cb4833b8e80433cff46a893f939154be60a2a24ee96598f96b32271301abfda1f&scene=21#wechat_redirect [44] StackOverflow 7年调研数据跟踪: http://demo.pigsty.cc/d/sf-db-survey [45] PostgreSQL 社区状态调查报告 2022: https://www.timescale.com/state-of-postgres/2022
五、用MySQL好还是用Postgresql好?
两个都挺好。
MySql用的最广泛,而Postgresql号称最好的开源数据库,这两个数据库我在项目上都有使用,在写代码的时候其实感觉不出什么差别来。
但是MySQL数据库是云服务商支持的最好的数据库,因为应用最广泛,如果要直接买云数据库,那首选还是MySQL吧。比如我买了阿里云的Postgresql数据库,但是竟然还不支持日志功能,导致我们公司在过等级保护时这个成了丢分项,而MySQL的各种功能在云服务器上支持都相当齐全了,阿里自己用的最多的也是MySQL,各种解决方案都有。
所以如果是自建数据库,两种都可以,如果是云数据库,建议还是选MySQL。
再补充一点,现在用Postgres的还是少,许多程序员都不知道,当初给我们公司做等保三级审核的都不知道,大多数人还是对mysql的认知度更高。
六、postgresql php7.0
深入了解 PostgreSQL 与 PHP7.0 的整合
在当今互联网时代,数据库与服务器端语言之间的完美整合至关重要。而在众多数据库管理系统(DBMS)中,PostgreSQL 与 PHP7.0 的组合备受开发者青睐。本文将深入探讨这两者之间的无缝整合,以及如何最大化它们的优势。
PostgreSQL 简介
PostgreSQL,简称 Postgres,是一种强大的开源对象关系型数据库管理系统。它具有高度的扩展性、可靠性和稳定性,是许多企业和网站的首选数据库解决方案。PostgreSQL 支持复杂的查询和事务处理,同时具有强大的数据完整性和安全性功能。
PHP7.0 简介
PHP7.0 是 PHP 语言的一个重要版本,拥有更高的性能和更少的内存消耗。PHP7.0 带来了许多新特性和改进,使得 PHP 成为开发 Web 应用程序的首选语言之一。PHP7.0 的速度比以往任何版本都要快,使得网站在响应时间和性能方面有了明显提升。
PostgreSQL 与 PHP7.0 的整合优势
PostgreSQL 与 PHP7.0 的整合具有许多优势,使开发人员能够更轻松地构建功能强大的 Web 应用程序。以下是一些整合优势的关键点:
- 高性能:PostgreSQL 数据库与 PHP7.0 的结合,能够实现高效的数据处理和检索,提供用户快速的响应速度。
- 安全性:PostgreSQL 提供了强大的安全功能,与 PHP7.0 的安全机制相结合,能够有效保护用户数据的安全性。
- 稳定性:PostgreSQL 和 PHP7.0 都是经过广泛测试和验证的软件,组合在一起可以保证系统的稳定性和可靠性。
- 灵活性:PostgreSQL 支持复杂的数据结构和查询,与 PHP7.0 的灵活性相结合,可以满足各种不同的应用需求。
如何在 PHP7.0 中连接 PostgreSQL 数据库
要在 PHP7.0 中连接 PostgreSQL 数据库,首先需要确保服务器上已经安装了 PostgreSQL 扩展。接下来,可以使用以下代码示例在 PHP7.0 中连接到 PostgreSQL 数据库:
<?php // 配置连接参数 $host = "localhost"; $port = "5432"; $dbname = "mydatabase"; $user = "myuser"; $password = "mypassword"; // 连接到 PostgreSQL 数据库 $conn = pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password"); if (!$conn) { echo "连接数据库失败"; exit; } // 查询数据库示例 $result = pg_query($conn, "SELECT * FROM mytable"); while ($row = pg_fetch_assoc($result)) { echo "ID: " . $row['id'] . ",名称: " . $row['name'] . "<br>"; } // 关闭数据库连接 pg_close($conn); ?>通过以上代码示例,可以轻松地在 PHP7.0 中连接到 PostgreSQL 数据库并执行查询操作。这为开发人员提供了便捷而高效的数据库操作方式。
优化 PostgreSQL 与 PHP7.0 的整合
为了最大化 PostgreSQL 与 PHP7.0 的整合优势,开发人员可以采取一些优化措施,以提高系统的性能和稳定性。以下是一些建议:
- 合理设计数据库结构:在使用 PostgreSQL 时,合理设计数据库表结构、索引和约束,有助于提高查询效率和数据完整性。
- 使用预处理语句:在 PHP7.0 中使用 PostgreSQL 的预处理语句,可以有效防止 SQL 注入攻击,提高系统的安全性。
- 定期优化数据库:定期对 PostgreSQL 数据库进行优化和维护,清理无用数据和索引,可以提升系统的性能。
- 使用缓存技术:结合 PHP7.0 的缓存技术,如 Memcached 或 Redis,可以减轻数据库的负担,提高系统的响应速度。
结论
PostgreSQL 与 PHP7.0 的整合为开发人员提供了强大的数据库操作能力和高效的服务器端开发环境。通过充分利用它们之间的优势,开发人员可以构建性能卓越、安全可靠的 Web 应用程序。希望本文对你了解 PostgreSQL 与 PHP7.0 的整合有所帮助,祝愿你在开发过程中取得成功!
七、php 还是python 连接mysql?
这两种语言都可以用来连接mysql数据库
八、MySQL与PostgreSQL比较,哪个数据库更好?
这是一个很抽象的问题,没有一个确定的答案。取决于您的特定使用场景,性能、功能和偏好,MySQL和PostgreSQL都可以是更好的选择。
MySQL最适合于具有性能和复杂性需求的Web应用程序,它也可以在具有低延迟要求的高可用性环境中使用。根据技术和功能,MySQL非常受欢迎,有很多可用的插件和附加组件可以让您自定义更容易。
PostgreSQL也可以用于Web应用程序,它具有可扩展性、可靠性和灵活性,适合大型应用程序。它也支持复杂的查询,支持多种开发语言,具有更多的系统功能。由于它有更多的标准功能和支持,因此在大多数场景下效率更高。
总的来说,哪个数据库更好取决于您的应用程序的特性和需求,建议在使用前测试这两种数据库,以找到最符合您需求的解决方案。
九、PHP为何无法启动mysql服务?
PHP无法启动MySQL服务可能是因为以下一些常见原因:
1. MySQL服务没有启动:在使用PHP连接MySQL时,需要先启动MySQL服务,如果MySQL服务没有启动,那么PHP无法连接MySQL数据库。可以在命令行中使用 `service mysql start` 命令启动MySQL服务。
2. PHP没有安装MySQL扩展:PHP需要安装MySQL扩展,才能够连接MySQL数据库。可以使用 `php -m` 命令查看当前安装的PHP扩展,如果没有mysql扩展,则需要安装mysql扩展。
3. MySQL服务端口被占用:如果MySQL服务端口被其他程序占用,那么MySQL服务就无法启动。可以使用 `netstat -anp | grep 3306` 命令查看3306端口是否被占用,如果是,则需要停止占用该端口的程序。
4. MySQL配置文件错误:如果MySQL的配置文件有错误,那么MySQL服务也无法启动。可以使用 `mysql -u root -p` 命令登录MySQL数据库,查看MySQL是否能够正常工作。
5. MySQL用户名或密码错误:如果MySQL的用户名或密码错误,那么PHP无法连接MySQL数据库。可以在MySQL命令行中使用 `SELECT User, Host FROM mysql.user;` 命令查看当前用户列表和对应的主机地址,以及使用 `SELECT user,authentication_string,plugin,host FROM mysql.user;` 命令查看当前用户的密码和认证方式。
这些是PHP无法启动MySQL服务的一些常见原因,如果您遇到了其他问题,可以提供更多详细信息,以便更好地帮助您解决问题。
十、PHP+MySQL能做什么?
PHP+MySQL是今天用的最多的动态结合技术,是网站程序员开发应用软件系统的主流技术。
可以做一个小网站PHP+MYSQL
PHP随着发展是好几个名字的缩写,定义为PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛的运用。主要用于WEB开发,是开源的脚本语言。 MySQL是一个小型关系型数据库管理系统。 目前Internet上流行的网站构架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库,PHP作为服务器端脚本解释器。
- 相关评论
- 我要评论
-