postgresql与mysql哪个性能更好?常用数据库MySQLPostgreSQL
postgresql与mysql哪个性能更好?常用数据库MySQLPostgreSQL适用的场景主要特点本文对当前常见的三款数据库系统mySQL/PostgreSQL/MS SQL Server进行比较全面的比较,为数据库学习者和软件开发人员提供参考;比较内容主要包括以下几个方面:注:没有选入Oracle,因为Oracle价格昂贵,初学者接触不到,其使用者群体也不是很大;在2000年以前,Oracle是大型软件数据库系统的主要选择。MySQL是一款开源的关系数据库管理系统(RDBMS),由两位工程师Michael Widenius和David Axmark于1995年开发,并且很快在业内和社区流行。MySQL具有企业级的功能,且免费开源,有灵活的社区许可证,也可升级为商用许可证。
数据库是所有软件应用的基础,几乎所有的程序开发都需要一个或多个数据库,无论是Web应用系统、企业管理系统、嵌入式系统或实时系统,还是人工智能(Artifical intelligence)、机器学习(machine learning)、超级计算机(HPC)、区块链(Blockchain)、物联网(IoT)等等。数据库技术发展到今天,成熟的产品越来越多,如何选择适合学习或生产环境的数据库系统,并不是一件很容易的事。
随着微服务、云服务、分布式应用、全球扩展、半结构化数据、大数据、快数据等需求的兴起,传统的数据库系统需要与NoSQL、NewSQL和这类数据库相结合,才能满足客户和市场的要求。
下图是主流数据库的市场占有率(用户群体)统计图:
下图是常见数据库引擎排名:
本文对当前常见的三款数据库系统mySQL/PostgreSQL/MS SQL Server进行比较全面的比较,为数据库学习者和软件开发人员提供参考;比较内容主要包括以下几个方面:
- 是否开源/免费,以及适用的操作系统
- 主要功能的特征
- 适用场景
- 用户群体
- 发展趋势
- 个人使用经验
注:没有选入Oracle,因为Oracle价格昂贵,初学者接触不到,其使用者群体也不是很大;在2000年以前,Oracle是大型软件数据库系统的主要选择。
MySQLMySQL是一款开源的关系数据库管理系统(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经过二十多年的发展和应用,现在尽管还拥有非常大的用户群体,但其上升势头已经不再,并呈现出下降的趋势。如下图:
PostgreSQLPostgreSQL是加州大学贝克利开发的一款现代数据库系统,在上世纪起始年代开发之初,只是一个教学项目(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会更好。
说明:文中的个人经验,仅仅是自己的经验体会,有个人主观性,仅供批判!