针对排名前三的开源数据库:MySQL、PostgreSQL、MongoDB,受欢迎程度趋势如下:
从趋势上看,MySQL 在开源数据库受欢迎程度榜单上稳居第一; 2014年以来,PostgreSQL、MongoDB呈持续增长态势,与MySQL差距仍然巨大。
Name |
MySQL |
MongoDB |
PostgreSQL |
Description |
Widely used open source RDBMS |
One of the most popular document stores |
Based on the object relational DBMS Postgres |
Database model |
|||
Developer |
Oracle |
MongoDB, Inc |
PostgreSQL Global Development Group |
Initial release |
1995 |
2009 |
1989 |
Current release |
5.7.18, April 2017 |
3.4.5, June 2017 |
9.6.3, May 2017 |
License |
Open Source |
Open Source |
Open Source |
Cloud-based |
no |
no |
no |
Implementation language |
C and C++ |
C++ |
C |
Server operating systems |
FreeBSD |
Linux |
FreeBSD |
Data scheme |
yes |
schema-free |
yes |
Typing |
yes |
yes |
yes |
XML support |
yes |
yes |
|
Secondary indexes |
yes |
yes |
yes |
SQL |
yes |
no |
yes |
APIs and other access methods |
ADO.NET |
proprietary protocol using JSON |
native C library |
Supported programming languages |
Ada |
Actionscript |
.Net |
Server-side scripts |
yes |
JavaScript |
user defined functions |
Triggers |
yes |
no |
yes |
Partitioning methods |
horizontal partitioning, sharding with MySQL Cluster or MySQL Fabric |
Sharding |
no, but can be realized using table inheritance |
Replication methods |
Master-master replication |
Master-slave replication |
Master-slave replication |
MapReduce |
no |
yes |
no |
Consistency concepts |
Immediate Consistency |
Eventual Consistency |
Immediate Consistency |
Foreign keys |
yes |
no |
yes |
Transaction concepts |
ACID |
no |
ACID |
Concurrency |
yes |
yes |
yes |
Durability |
yes |
yes |
yes |
In-memory capabilities |
yes |
yes |
no |
User concepts |
Users with fine-grained authorization concept |
Access rights for users and roles |
fine grained access rights according to SQL-standard |
MySQL和PostgreSQL是目前主流的两个开源关系数据库,同样都是开源产品,MySQL长期以来被认为是更加快速但支持的特性较少;而PostgreSQL则提供了丰富的特性经常被描述为开源版的Oracle。
MySQL已经由于它的快速和易用变得非常流行,但PostgreSQL正得到越来越多来自Oracel或SQL Server背景的开发人员的追从。 但随着发展,MySQL已经加入了很多高级特性,PostgreSQL也大大提高了它的速度。
-
许可
MySQL分商业版和社区版,社区版为GPL许可,允许免费使用,但是如果你要分发你的代码,你可以选择开源,或者闭源,如果选择闭源则必须向ORACLE支付费用。
PostsgreSQL是类BSD许可,允许用户以任何目的免费使用。
-
社区分支
MySQL分支较多 ,除了Oracle官方的版本,比较流行的还有Percona Server和MariaDB等。
PostgreSQL只有一个开源主分支,代码托管在git.postgresql.org。另外,有一些公司发布了基于PostgreSQL增强的企业版产品,比如EnterpriseDB公司的EDB Postgres Advanced Server,富士通的Fujitsu Enterprise Postgres等。这些产品都是闭源的商业产品,不属于开源软件的范畴。
-
版本更新
MySQL的版本系列又分为开发版和General Availability (GA)版,只有GA版适合用于生产环境,目标是每18~24个月发布一个新发布系列的GA版本。
PostgreSQL主版本发布大约1年1次,维护周期为5年,小版本升级大约2个月1次
-
流行程度
MySQL显然更加流行,有观点认为,PostgreSQL之所远不如MySQL流行,是一些因素共同作用的结果:
互联网行业兴起时期(2000年前后),MySQL作为一个轻量快速易用的开源数据库正好适配的互联网的需求,因而被大量使用。
互联网巨头的示范作用进一步促进了MySQL的普及。
早期的PostgreSQL在性能和易用性不如MySQL
比如:
PostgreSQL直到8.0(2005-01-19)才推出Windows版本。
PostgreSQL 8.3(2008-02-04)之前的版本在性能和可维护上尚不如人意(比如没有HOT更新)。
PostgreSQL直到9.0(2010-09-20)才推出流复制功能。
-
架构与实现
多线程vs多进程
MySQL是多线程模型,PostgreSQL是多进程模型。
多线程相比多进程的优点:线程的创建删除和切换成本低
多线程相比多进程的缺点:代码更难理解,更容易出bug,也更难调试;多核CPU的利用效率不高,对NUMA架构支持不好。有测试表明在超过24个core的系统上,MySQL不能充分利用CPU的能力。
多引擎 vs FDW
MySQL的SQL层和存储层分离,支持多种存储引擎,例如InnoDB, MyISAM, NDB。PostgreSQL和绝大多数数据库一样是单存储引擎。
MySQL多引擎的优点: 数据库厂商只需开发存储引擎部分就能得到一个全新用途的数据库,比如NDB和TokuDB。用户可以根据不同场景灵活选择最合适的存储引擎,而不用改应用接口。
binlog复制 vs 流复制
MySQL的复制传输的是SQL层的binlog记录,binlog记录的是数据的逻辑变更(SQL语句或基于行的数据变更),属于逻辑复制;PostgreSQL的复制传输的是WAL记录,WAL记录的是数据块的变更,属于物理复制。
binlog复制的优点:支持不同版本MySQL间的复制、可以只复制部分数据、支持所有存储引擎
binlog复制的缺点:Slave回放binlog时需要把SQL再执行一次消耗的资源比较多,并且Master端的SQL执行是多线程而Salve端的SQL回放通常是单线程,因此容易导致主从延迟,但可通过group replication 及galera cluster架构实现数据强一致性。
PostgreSQL流复制的优点:强数据一致、Slave恢复消耗资源少,速度快,不容易出现主从延迟(尤其是同步复制时)、通过Logical Decoding也可实现逻辑复制
PostgreSQL流复制的缺点:目前只是提供了逻辑复制的基础设施,实际部署时需要进行定制,缺少现成的解决方案。
四: 技术支持
相较于PostgreSQL,Oracle为MySQL提供更为可靠的技术支持。运维方面,MySQL强大的现有市场和更多更活跃的社区使得招募MySQL