数据库是所有软件应用的基础,几乎所有的程序开发都需要一个或多个数据库,无论是Web应用系统、企业管理系统、嵌入式系统或实时系统,还是人工智能(Artifical intelligence)、机器学习(machine learning)、超级计算机(HPC)、区块链(Blockchain)、物联网(IoT)等等。数据库技术发展到今天,成熟的产品越来越多,如何选择适合学习或生产环境的数据库系统,并不是一件很容易的事。
随着微服务、云服务、分布式应用、全球扩展、半结构化数据、大数据、快数据等需求的兴起,传统的数据库系统需要与NoSQL、NewSQL和这类数据库相结合,才能满足客户和市场的要求。
下图是主流数据库的市场占有率(用户群体)统计图:
下图是常见数据库引擎排名:
本文对当前常见的三款数据库系统mySQL/PostgreSQL/MS SQL Server进行比较全面的比较,为数据库学习者和软件开发人员提供参考;比较内容主要包括以下几个方面:
注:没有选入Oracle,因为Oracle价格昂贵,初学者接触不到,其使用者群体也不是很大;在2000年以前,Oracle是大型软件数据库系统的主要选择。
MySQL是一款开源的关系数据库管理系统(RDBMS),由两位工程师Michael Widenius和David Axmark于1995年开发,并且很快在业内和社区流行。MySQL具有企业级的功能,且免费开源,有灵活的社区许可证,也可升级为商用许可证。
主要特点
适用的场景
不适用的场景
个人经验
MySQL在procedure方面相对稚嫩,在健壮性、稳定性和成熟度方面总体还不及PostgreSQL和MS SQL Server;
发展趋势
MySQL经过二十多年的发展和应用,现在尽管还拥有非常大的用户群体,但其上升势头已经不再,并呈现出下降的趋势。如下图:
PostgreSQL是加州大学贝克利开发的一款现代数据库系统,在上世纪起始年代开发之初,只是一个教学项目(Ingres),后来发展成为完整的关系数据库管理系统(Post-Ingres)。经过30多年的发展,PostgreSQL成为使用最多的数据库系统之一,并且在现代数据库管理系统方面有很多创新。
主要特点
适用的场景
不适用的场景
个人经验
PostgreSQL中提供各种功能的扩展工具包一般的运行时间都在100s左右;在时间序列、数据表切分和地理系统方面支持非并行数据处理;可以选择不同的数据类型建立不同的索引。
发展趋势
PostgreSQL一直在数据库的高级功能和创新方面贡献很大,在其30多年的发展和应用过程中,用户群体稳步扩大,如下图:
微软于1988年并购了Ashton-Tate和Sybase,创建了自己的关系数据库系统 Sybase SQL Server,次年发布了Microsoft SQL Sever的第一版。尽管多年的发展,MS SQL server尽管在功能方面没什么创新,但是仍然通过升级和改造打造出了一款成熟的数据库系统,并获得了很大的用户群体,成为在windows操作系统上运行的中型数据库系统的主流商业产品。
主要特点
适用的场景
不适用的场景
个人经验
对于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会更好。
说明:文中的个人经验,仅仅是自己的经验体会,有个人主观性,仅供批判!