[翻译]PostgreSQL比MySQL/MariaDB的优势

Posted leekale

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[翻译]PostgreSQL比MySQL/MariaDB的优势相关的知识,希望对你有一定的参考价值。

近十年来很多开发者和专业人士mysql和PostgreSQL进行了比较,大部分人认为后者性能更优。PostgreSQL的支持者认为它的标准支持和ACID[1]性都超过了MySQL。MySQL还流行的原因在于还有很多Linux的Web程序安装包里带着它,但是自从拥有MySQL版权和商标的Sun被Oracle收购后,人们都在担心MySQL不会像以前那样开放了。同时PostgreSQL不仅快,而且支持JSON,使他成为少数的支持NoSQL的关系型数据库。(小道消息:MySQL的作者Monty WideniusMySQL分支建立了和MySQL完全兼容而且不被Oracle拥有的MariaDB。)

 

MySQL/MariaDB的当前版本是5.7.6,而PostgreSQL版本是9.4.1。

ANSI标准:

MySQL比其早期版本在标准方面更加支持(MySQL说:如果用户喜欢,他们可以支持非标准),但是PostgreSQL从一开始就支持,而MySQL之后才加入。

平局

ACID特性

PostpreSQL有一个存储引擎,MySQL有9个。然而只有两个被广泛使用:MyISAM,InnoDB。MyISAM是最开始的引擎,速度很快但是不支持事务;InnoDB支持事务,而且速度更快,是默认引擎。MySQL的InnoDB引擎和PostgreSQL都完全拥有ACID特性,没有什么区别。

平局

表锁

MyISAM使用表锁来获得更快的速度。当大量读操作时性能表现良好,但是写操作会把整个表锁死,等待写入完成。InnoDB引擎和PostgreSQL使用的是行级锁,又打平。

平局

子查询不确定性

子查询一直以来是MySQL“臭名昭彰”的问题:两层或两层以上子查询效率极低,虽然5.6.5已经有了很大改进,但是PostpreSQL在联合查询表现更加突出,特别是MySQL不支持Full Outer Joins

PostgreSQL胜

支持JSON和NoSQL

PostgreSQL新增功能,支持使用NoSQL和储存JSON。数据储存比传统关系型数据库更加灵活。

PostgreSQL胜

 

PostgreSQL其他优势:

更好的许可

PostgrePost拥有MIT-style证书,允许你做任何事情,包括开/闭源的商业用途。而MySQL客户端库为GPL证书,意味着你必须像Oracle支付商业费用,或者提供程序源码。(网站使用MYSQL时候会是个小麻烦;MariaDB使用GPL2证书,并且为MySQL客户端提供限制更少的LGPL证书)

更好的数据完整性

PostgreSQL默认对插入和更新的数据严格检查,而MySQL只有开启了(STRICT_ALL_TABLES/STRICT_TRANS_TAQBLES)才会进行严格检查。

数据库扩展开发

两个数据库都允许扩展开发。MySQL提供有C系列语言的API接口。你甚至可以在MySQL5.7.3之后在InnoDB表中做全文检索。PostgreSQL也有同样的功能,但是支持更多的语言,包括C/C++,Java,.Net,Perl,Python,Ruby,Tcl,ODBC等,甚至可以在单独进程(后台)中运行用户提供的代码。

PostgreSQL在系统目录中提供了关系型数据库的数据库、表、行/列的数据类型、方法、访问方法等信息。用户可以修改系统目录表来扩展数据库。

结论

虽然我已经用了十多年两种数据库,而且MySQL已经有很大的提升,但是不得不承认对PostgreSQL的偏爱。PostgreSQL更好用的许可证,自定义数据类型,表继承,规律的系统和数据库事件。

 

 

[1] ACID:指数据库事务正确执行的四个基本要素:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

SQL:Structured Query Language结构化查询语句

以上是关于[翻译]PostgreSQL比MySQL/MariaDB的优势的主要内容,如果未能解决你的问题,请参考以下文章

如何将 PostgreSQL“merge_db”(又名 upsert)函数翻译成 MySQL

是啥让 PostgreSQL 比 MySQL 更先进? [关闭]

更强的压缩比!PostgreSQL开始支持Zstd

Postgresql 函数执行的时间比相同的查询长得多

SELECT DISTINCT 在我的 PostgreSQL 表上比预期的要慢

postgresql查出来的字段长度为啥比实际字段多了4