PostgreSQL创始人:MySQL衰退属必然
2009-12-13 17:39:00 阿炯

MySQL被称为是最受欢迎的开源数据库,如今它的前途因为Oracle与Sun并购交易存在不确定性而变得扑朔迷离,可能会导致大量用户流失。PostgreSQL创始人之一的Bruce Momjian在接受IT168记者采访时表示“MySQL衰退,这并不是一件很令人惊奇的事情。” Bruce Momjian认为MySQL衰退缘自2个方面的原因,其一,MySQL定位不明晰,其二MySQL不是一个纯粹的开源数据库。

Bruce Momjian进一步解释:“之所以说MySQL定位不明晰,是因为其初始目标定位在网络应用的用户层面上,而互联网企业要求的是一个快速反应时间和较小的用户量,但相对大用户来说,MySQL就有点捉襟见肘了。虽然MySQL非常努力去试图满足大客户的应用,想扩展企业级应用标准,但因为前期开发的框架不是很明晰,导致不是很成功,结果是我们看到的先是被Sun收购,又被Oracle并购。”

作为一个小型关系型数据库管理系统,MySQL的开发者为瑞典MySQLAB公司,并在2008年1月16日被Sun微系统公司以10亿美元的价格收购。

Bruce Momjian认为:“MySQL数据库是一个公司的一产品,是一个公司做了绝大部分开发的工作,所以MySQL不是完全意义上的开源数据库,这是个劣势,不能得到绝大多数人的支持,或让社区更多人参与进来。”

IDC的数据显示,2008年MySQL营收为4000万美元,市场份额为0.2%。MySQL每天下载量约为6万次,是当前应用最广泛的开源数据库,按照欧盟委员会的说法,其实际竞争力远高于按市场份额计算应有的水平。同时欧盟委员会还表示担忧:甲骨文收购开源软件数据库软件MySQL可能会消除重要的竞争对手和提高这种软件的价格。尽管Oracle承诺会保持MySQL的独立性,众多反对者还是担心,如果MySQL被最大的私有数据库厂商 Oracle收归麾下,可能遭到Oracle的抛弃甚至打压。


选择pgsql还是mysql

mysql出现在1994年,现在所有权归属oracle,创始人现在又发布了新的免费开源数据库MariaDB,现在开源关系型数据库领域,mysql使用确实是最广泛的,官方说许多世界上最大、发展最快的组织都在使用mysql。

pgsql又称PostgresSQL,出现在1986年,官方标榜自己是世界上最先进最高级的开源关系型数据库。

pgsql和mysql简介:

pgsql的一方面可以跟oracle相媲美,可靠性是pgsql的最高优先级,数据一致性与完整性也是pgsql的高优先级特性;

mysql和pgsql都出现在一些高流量的web站点上,都能用在大型分布式系统上,都支持事务,都支持全文索引;

mysql现在已经支持嵌入式应用,而pgsql依然坚守在传统B/S架构上;

mysql能够进行快速地读取和大量的查询操作,不过在复杂特性与数据完整性检查方面不太尽如人意;

pgsql是针对事务性企业级应用严肃、功能完善的数据库,支持强ACID特性,会做很多数据完整性检查;

mysql上myISAM存储引擎因为执行很少的数据完整性检查,所以速度快,对于敏感数据,对读写要求高的数据,支持ACID特性的InnoDB则是个更好的选择,相反pgsql是个只有单一存储引擎完全集成的数据库;

mysql与pgsql都是高可配置的,通过参数调整性能,也可以调整查询与事务特性,他们都支持通过扩展添加额外的功能;

pgsql可靠性更好,稳定性很强,在保护数据安全方面更擅长,并且是社区项目,不会陷入商业厂商牢笼之中;

mysql的普及更广一些,学习资料更多,熟练使用的人更多,所以选择mysql的企业很多。


pgsql相比mysql的优势:

pgsql存储过程的功能支持要比mysql好,具备本地缓存执行计划的能力;

pgsql对表连接支持更完整,优化器的功能更完整,支持的索引类型很多,复杂查询能力较强;

pgsql主备复制属于物理复制,支持异步、同步、半同步复制,mysql基于binlog的逻辑复制,是异步复制,pgsql数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小;

pgsql支持json数据类型,而mysql不支持,mysql字符型有长度限制,而pgsql的text类型无限长,可以使用xml xpath,用pgsql的话,mongodb这样文档数据库就省了;

pgsql是完全免费开源的,而mysql归属oracle后,开源程度大不如以前;

pgsql在GIS领域多年来处于优势地位,有丰富的几何类型,支持极其丰富的空间函数,可以建立R树、GIST树等空间索引,instagram就是因为pgsql的空间数据库扩展postgis远远强于mysql的my spatial而采用的pgsql;

pgsql有极其强悍的sql编程能力,有非常丰富的统计函数和统计语法支持,可用多种语言写存储过程,对R支持也非常好,这一点mysql就差的很远,腾讯内部数据存储主要用mysql,但是数据分析主要是hadoop+pgsql;

pgsql有多种集群架构可选择,plproxy可以支持语句级的镜像或分片,slony可以进行字段级的同步设置,standby可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单;

pgsql支持topology、pgrouting等功能强大、方便使用的GIS扩展,例如可以用pgrouting计算路径规划;

pgsql数据库方便QGIS等GIS工具连接和图层展示等操作;


mysql相比pgsql的优势:

mysql采用索引组织表,这种存储方式非常适合基于主键匹配的查询、删改操作,但是对表结构设计存在约束;

mysql的优化器较简单,系统表、运算符、数据类型的实现都很精简,非常适合简单的查询操作;

mysql分区表的实现要优于pgsql的基于继承表的分区实现,主要体现在分区个数达到上千上万后的处理性能差异较大;

mysql的存储引擎插件化机制,使得它的应用场景更加广泛,比如除了Innodb适合事务处理场景外,Myisam适合静态数据的查询场景;

mysql也支持空间索引,是用R树实现的空间索引,但空间函数等功能不如pgsql丰富,空间查询比pgsql慢;

pgsql更适合严格的企业应用场景,比如金融、电信、ERP、CRM等,mysql更适用业务逻辑相对简单、数据可靠性要求更低的互联网场景,比如google、facebook、淘宝等。

下图是redis、mongo、pgsql、mysql在一个空间查询场景下的性能对比:


pgsql支持的几种高级插件:
postgis提供丰富的空间数据类型和空间函数。
pgrouting 用来进行路径规划。
postgis_topology 用于管理点、线、面等拓扑对象。
postgis_sfcgal 用于实现3D相关算法。
fuzzystrmatch 字符串相似度计算。
address_standardizer 用于地址标准化。
pg_trgm 用于分词索引。

结论:
如果空间操作比较多,比较复杂,那就得选择pgsql;
如果对数据安全性和稳定性要求很高,pgsql是更好的选择;
如果业务场景没那么复杂,mysql完全可以胜任。


该文章最后由 阿炯 于 2021-10-24 22:29:09 更新,目前是第 2 版。