開源數據庫選型


一:  關系型數據庫發展現狀
        在 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM