选择pgsql还是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工具连接和图层展示等操作;

下图是用QGIS从pgsql读取数据并展示图层:

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完全可以胜任。

(0)

相关推荐