Mysql出现在1994年,现在属于甲骨文。现在,创始人发布了一个新的免费开源数据库MariaDB。现在mysql是开源关系数据库领域应用最广泛的。官员们表示,世界上许多最大、发展最快的组织都在使用mysql。
Pgsql,又称PostgresSQL,出现于1986年,并正式标榜自己是世界上最先进、最先进的开源关系数据库。
pgsql和mysql简介:
一些pgsql的粉丝说它堪比oracle,可靠性是pgsql的最高优先级,数据一致性和完整性也是pgsql的高优先级特性。
Mysql和pgsql都出现在一些高流量的网站上,可以在大型分布式系统中使用,支持事务,并支持全文索引。
现在mysql已经支持嵌入式应用,而pgsql仍然坚持传统的B/S架构。
Mysql可以快速读取和查询,但在复杂功能和数据完整性检查方面不尽如人意。
Pgsql是一个用于事务型企业应用程序的严肃且功能齐全的数据库,它支持强ACID特性,并将进行大量的数据完整性检查。
mysql上的MyISAM存储引擎速度很快,因为它执行的数据完整性检查很少。对于敏感数据和读写要求高的数据,支持ACID的InnoDB是更好的选择。相反,pgsql是一个只有一个完全集成的存储引擎的数据库。
mysql和pgsql都是高度可配置的,可以通过参数调整性能来调整查询和事务特性。它们都支持通过扩展添加附加功能。
Pgsql可靠性更好,稳定性强,更擅长保护数据安全,是社区项目,不会落入商业厂商的牢笼;
Mysql更受欢迎,学习资料更多,用户更熟练,所以很多企业选择mysql。
pgsql相比mysql的优势:
pgsql存储过程的功能支持优于mysql,并且具有本地缓存执行计划的能力。
Pgsql对表连接的支持更加完备,优化器的功能更加完备,支持的索引类型众多,复杂查询能力强。
pgsql的主备复制属于物理复制,支持异步、同步和半同步复制。基于binlog的mysql逻辑复制是异步复制。pgsql数据的一致性更可靠,复制性能更高,对主机性能的影响更小。
Pgsql支持json数据类型,但mysql不支持。mysql字符类型有长度限制,而pgsql的文本类型无限长,所以可以使用xml xpath。如果使用pgsql,mongodb将保存文档数据库。
Pgsql是完全免费开源的,但是mysql属于oracle之后,开源程度就不如以前了。
Pgsql多年来在GIS领域一直处于主导地位,几何类型丰富,支持极其丰富的空间功能,能够建立R树、GIST树等空间索引。instagram是因为pgsql的空间数据库对postgis的扩展远远好于mysql的my spatial。
Pgsql具有极强的sql编程能力,丰富的统计函数和统计语法支持,可以用多种语言编写存储过程,对R有很好的支持,这一点与mysql相差甚远。腾讯内部数据存储主要使用mysql,但数据分析主要使用hadoop pgsql;
Pgsql有多种集群架构可供选择,plproxy可以支持语句级镜像或分片,slony可以进行字段级同步设置,而待机可以搭建WAL文件级或流式读写分离集群,方便调整同步频率和集群策略,操作简单。
Pgsql支持拓扑、pgrouting等强大便捷的GIS扩展。例如,pgrouting可用于计算路径规划;
Pgsql数据库便于QGIS等GIS工具连接和显示图层。
下图显示了使用QGIS从pgsql读取数据并显示图层:
outiaoimg.com/large/pgc-image/f44dc3b37cdc4eea8733adfbe9ec2efd" alt="选择pgsql还是mysql">
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完全可以胜任。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/45190.html