MySQL、PostgreSQL和MS SQL Server的终极对比

发表时间: 2022-06-17 12:50

数据库是所有软件应用的基础,几乎所有的程序开发都需要一个或多个数据库,无论是Web应用系统、企业管理系统、嵌入式系统或实时系统,还是人工智能(Artifical intelligence)、机器学习(machine learning)、超级计算机(HPC)、区块链(Blockchain)、物联网(IoT)等等。数据库技术发展到今天,成熟的产品越来越多,如何选择适合学习或生产环境的数据库系统,并不是一件很容易的事。

随着微服务、云服务、分布式应用、全球扩展、半结构化数据、大数据、快数据等需求的兴起,传统的数据库系统需要与NoSQL、NewSQL和这类数据库相结合,才能满足客户和市场的要求。

下图是主流数据库的市场占有率(用户群体)统计图:

下图是常见数据库引擎排名:

本文对当前常见的三款数据库系统mySQL/PostgreSQL/MS SQL Server进行比较全面的比较,为数据库学习者和软件开发人员提供参考;比较内容主要包括以下几个方面:

  • 是否开源/免费,以及适用的操作系统
  • 主要功能的特征
  • 适用场景
  • 用户群体
  • 发展趋势
  • 个人使用经验

注:没有选入Oracle,因为Oracle价格昂贵,初学者接触不到,其使用者群体也不是很大;在2000年以前,Oracle是大型软件数据库系统的主要选择。

MySQL

MySQL是一款开源的关系数据库管理系统(RDBMS),由两位工程师Michael Widenius和David Axmark于1995年开发,并且很快在业内和社区流行。MySQL具有企业级的功能,且免费开源,有灵活的社区许可证,也可升级为商用许可证。

主要特点

  • 基于SQL标准开发的一款开源免费的数据库系统,可适用绝大多数操作系统,现在有社区版和企业版;
  • 提供ACID事务保证,从数据库的CAP原理(一致性、可用性和分区容错性)而言,其具备即时一致性;
  • 横向分表功能,因而具有可用性高、数据吞吐量大和延时小的特点;
  • 使用MySQL Cluster,可实现多个ACID事务;
  • 多种模式的数据库,支持结构化数据(SQL)和半结构化数据(JSON)
  • 主要用于嵌入式系统、小型系统和前端开发

适用的场景

  • 处理结构化数据,且具有ACID事务保证
  • 横向可扩展是关键需求,特别是写操作的数据量大
  • 多主ACID事务是基本需求
  • 数据安全要求高
  • 对OLTP和OLTP工作负载有均衡要求

不适用的场景

  • 不适合事务量非常多的情况,要求使用分布式SQL
  • 不适合数据关系紧密的情况,如社交媒体
  • 不适合处理半结构化数据,如JSON、XML等
  • 不适合数据保护等级高的情况

个人经验

MySQL在procedure方面相对稚嫩,在健壮性、稳定性和成熟度方面总体还不及PostgreSQL和MS SQL Server;

发展趋势

MySQL经过二十多年的发展和应用,现在尽管还拥有非常大的用户群体,但其上升势头已经不再,并呈现出下降的趋势。如下图:

PostgreSQL

PostgreSQL是加州大学贝克利开发的一款现代数据库系统,在上世纪起始年代开发之初,只是一个教学项目(Ingres),后来发展成为完整的关系数据库管理系统(Post-Ingres)。经过30多年的发展,PostgreSQL成为使用最多的数据库系统之一,并且在现代数据库管理系统方面有很多创新。

主要特点

  • 基于SQL标准开发的开源免费的RDMBS,可适用于绝大多数操作系统;
  • 扩展工具包众多,具有多种高级功能;
  • 提供ACID事务保证,从数据库的CAP原理(一致性、可用性和分区容错性)而言,其作为单一服务器使用时具备即时一致性;
  • Citus Data 是PostgreSQL的一个扩展包,能提供更深入的分布式SQL功能;
  • 提供了更高级的部分索引、布隆过滤等,即非阻塞方式创建索引
  • 其具有丰富的功能和多种模式数据库,支持结构化数据(SQL)和半结构化数据(JSON、XML)、键-值和空间数据
  • PostGIS的功能非常强大,GIS DB扩展能力可用于任何类型的数据库
  • 除了提供的pgplsql编程语言之外,还可使用其他几种编程语言进行数据库编程,如Python, C/C++

适用的场景

  • 处理结构化数据,对数据的完整性要求高,关键是要有ACID事务保证;
  • 符合分布式SQL的要求,可在全球范围内建起分布式数据库,用来处理数百万的事务量;
  • 要求使用先进的查询计划;
  • 可靠性高,具备灾难恢复能力,即PITR和Active Standbys(热备份)
  • 能处理地理空间数据。

不适用的场景

  • 处理多主ACID事务是必须的功能;
  • 处理半结构化数据,即用高级查询计划处理JSON数据;
  • 对数据库有OLTP和OLAP的均衡要求;

个人经验

PostgreSQL中提供各种功能的扩展工具包一般的运行时间都在100s左右;在时间序列、数据表切分和地理系统方面支持非并行数据处理;可以选择不同的数据类型建立不同的索引。

发展趋势

PostgreSQL一直在数据库的高级功能和创新方面贡献很大,在其30多年的发展和应用过程中,用户群体稳步扩大,如下图:

MS SQL Server

微软于1988年并购了Ashton-Tate和Sybase,创建了自己的关系数据库系统 Sybase SQL Server,次年发布了Microsoft SQL Sever的第一版。尽管多年的发展,MS SQL server尽管在功能方面没什么创新,但是仍然通过升级和改造打造出了一款成熟的数据库系统,并获得了很大的用户群体,成为在windows操作系统上运行的中型数据库系统的主流商业产品。

主要特点

  • 有知识产权和使用许可证的数据库系统,分为Developer版和Express版(免费)、标准版和企业版(商用版);
  • 提供ACID事务保证,从数据库的CAP原理(一致性、可用性和分区容错性)而言,其作为单一服务器使用时具备即时一致性;
  • 支持服务器端编程,可以使用T-SQL、.Net、R、Python和Java编程语言;
  • 多模式数据库,支持结构化数据(SQL)、半结构化数据(JSON)和空间数据
  • 支持本地和云端部署。

适用的场景

  • 处理有ACID事务保证的结构化数据(SQL);
  • 开发平台与微软的其他产品可以很好的对接;
  • Azure Cloud优先使用;
  • 使用该数据库的公司,可以转换到云端。

不适用的场景

  • 数据库系统预算少;
  • 处理多主ACID事务是必须的功能;
  • 处理半结构化数据(如JSON),需要高级查询操作;
  • 要求使用分布式数据库;
  • 需要处理数据库负载均衡

个人经验

对于MS SQL Server来说,最值得说的就是Transact SQL,其独有的 t-sql 是构建在标准SQL之上的,比SQL的功能更强大;对于复杂的大规模数据操作,或者在错误操作发生时利用触发器和规则等机制锁定数据库(这样的应用场景下,用PostgreSQL也可以做到),那T-SQL是不错的选择;在数据导入和导出方面,PostgreSQL相对不是很方便 ,MS SQL Server比 mySQL要好用,mySQL又比PostgreSQL方便。另外,在查询数据表时,查询执行的背后机制都使用了use sys.table,只是在查询语句中不用写出来。

MS SQL Server在GIS方面,不仅运行速度比PostgreSQL慢很多,而且在健壮性和功能方面与PostGIS的差距也很大。

发展趋势

MS SQL Server是一款发展时间长、性能稳定的数据库系统,但其在创新方面乏善可陈,近年来的发展也呈现出下降趋势,如下图:

以上是对三款常用的数据库系统所做的比较,至于用户如何选择,看自己的实际情况。个人认为,如果是初学者或前端开发者,不关心数据库的能力,可以选择MySQL;如果用于生产环境,要考虑资金预算和目标环境,可以选择PostgreSQL或MS SQL Server;当然,同样的生产环境下,选择MS SQL Server会更好。

说明:文中的个人经验,仅仅是自己的经验体会,有个人主观性,仅供批判!