开源数据库选型

一: 关系型数据库发展现状
       在 DB-Engines 的排名上,Oracle 和 MySQL 两个产品长期霸占了前两名的位置,在最新的排名数据上(2017年6月),Oracle和MySQL分列第一和第二位,Microsoft SQL Server一直是唯一具有追随潜质的产品:
       

      针对排名前三的开源数据库:MySQL、PostgreSQL、MongoDB,受欢迎程度趋势如下:

        从趋势上看,MySQL 在开源数据库受欢迎程度榜单上稳居第一; 2014年以来,PostgreSQL、MongoDB呈持续增长态势,与MySQL差距仍然巨大。

二: 系统属性比较
       System Properties Comparison MySQL vs. MongoDB vs. PostgreSQL   

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

Relational DBMS 

Document store

Relational DBMS 

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
OS X
Solaris
Windows

Linux
OS X
Solaris
Windows

FreeBSD
HP-UX
Linux
NetBSD
OpenBSD
OS X
Solaris
Unix
Windows

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
JDBC
ODBC

proprietary protocol using JSON

native C library
streaming API for large objects
ADO.NET
JDBC
ODBC

Supported programming languages

Ada
C
C#
C++
D
Delphi
Eiffel
Erlang
Haskell
Java
JavaScript (Node.js)
Objective-C
OCaml
Perl
PHP
Python
Ruby
Scheme
Tcl

Actionscript 
C
C#
C++
Clojure 
ColdFusion 
D 
Dart 
Delphi 
Erlang
Go 
Groovy 
Haskell
Java
JavaScript
Lisp 
Lua 
MatLab 
Perl
PHP
PowerShell 
Prolog 
Python
R 
Ruby
Scala
Smalltalk 

.Net
C
C++
Delphi
Java 
Perl
PHP
Python
Tcl

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

Master-slave replication 

MapReduce 

no

yes

no

Consistency concepts 

Immediate Consistency

Eventual Consistency
Immediate 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
       鉴于MongoDB为非关系型数据库,且不支持事务,以下着重对比MySQL和PostgreSQL重点特性:

       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

 

原文地址:https://www.cnblogs.com/vadim/p/7077159.html