zoukankan      html  css  js  c++  java
  • 开源数据库选型

    一: 关系型数据库发展现状
           在 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

     

  • 相关阅读:
    C# 简单的 Job 作业~
    反射反射,程序员的快乐+反射案例:打印和Excel导出
    设计模式:装饰模式(decorate)
    UML类图应该怎么看?
    WebApi 异步请求(HttpClient)
    设计模式:单一职责原则,开放封闭原则,依赖倒转原则,理氏代换原则
    【BOOM】一款有趣的Javascript动画效果
    【深入浅出jQuery】源码浅析2--奇技淫巧
    【深入浅出jQuery】源码浅析--整体架构
    【CSS进阶】原生JS getComputedStyle等方法解析
  • 原文地址:https://www.cnblogs.com/vadim/p/7077159.html
Copyright © 2011-2022 走看看