其实这个问题没有唯一答案,得根据实际情况进行选择(这是正确的废话),这就是要遵从用户的应用目标和硬件资源的成本限定进行选择。在所有开源数据库中,MySQL、MariadDB、PostgresQL这三者最为著名、最为流行。每个数据库都有其深厚的发展渊源,具体的我就不再重复说了,有关这方面的内容,网上多的是,比我说还更精彩,大家自行搜索品读即可。在此我主要介绍一下自己的实际应用中的体会和感想。
先说MySQL,原本是一个自由的开源数据库,最后高价皈依于ORACLE门下,成为一个商用数据库,由此,我不再认为它是一个值得称道的免费开源的数据库了,尽管它的版本不断提升,功能和性能也在进步,但我始终认为,它已经不是自由世界的成员了,所以,在所有的应用项目中,MySQL已经不在我的考虑之列了,属于不选择项,所以行文到此也没必要继续谈它了。那么,我们就谈谈它被ORACLE招安之后的另外一个走向自由世界的分支MariaDB,这个分支一开始的很多代码是基于MySQL6.0改编的,所以,它既可以视为MySQL的变种,也可视为MySQL的替代品。随着时间的推进,这两个都有了各自更深入的发展,MariaDB与MySQL虽然有一定的血缘关系,但目前这种关系早就出了五服了,只能算是很浅的亲缘关系了。
MariaDB在数据库引擎方面做了巨大的改进,在保留了没有事务能力的MyISAM的同时,又开发了自身专有的事务引擎Maria、PBXT、XtraDB、FederatedX,并且在对外接口方面,保持了对MySQL的兼容,从而保证了那些MySQL世界里的向往自由的人顺利、安全的切换到MariadDB的世界。经过3年多的过渡和演变,在2012年,MariaDB一改MySQL的遗风,将新推的版本号,直接从5.5跳到10.0.0,这预示着它将彻底与MySQL分道扬镳、独树一帜,作为一个完全独立、成熟可靠的数据库为用户提供服务。因此,在很多项目中,MariaDB已经成为开源数据库必选项。那么仅仅只能选它吗?不是这样的,神通广大的开源世界,怎么可能只有MariaDB这个一家开源数据库大神呢?肯定还有很多啊,但与其能够比肩、分庭抗礼的数据库中,有那么一家极其闪亮,它就是PostgresQL数据库。
PostgresSQL是比MySQL更老牌的免费开源关系数据库,但在发展过程中,走过一段低谷,进入沉默期,看似就是学术上教学用的数据库,根本就不适合在生产环境下使用,把玩一下倒是可以。此时,MySQL正以其获得互联网用户的青睐而风头无二。但毕竟PostgresQL是科班出身的底子,经过一段的沉寂和打磨之后,忽然异军突起,凭借其自身所蕴含的强大科学算法、引擎、复杂事务处理的能力,一举赢得用户的青睐,用户数量发生的飞跃的增长,在开源数据库领域,占据了难以超越的优势地位。随着资本的投入扶持,PostgresQL一路扶摇直上,开疆扩土,把能力扩展到专用的空间地理信息数据库领域、非关系数据库领域(NSQL),几乎为所有数据存储场景提供了一个完整又规范的实现方案和工具,具备了超强的抗异常能力、稳定性、可靠性。在大数据时代,越来越凸显其内在的功力和应用价值。
纵使千千言万万语也道不尽每个数据库的特色和功能,在此谨作为一个非常概要的感性描述,最终还是要在实践中选择其一来使用。在此,我给出以下参考:
MySQL:除非有强行规定使用的要求,能不用尽量不用,不再赘述。
MariaDB:以多线程模式运行,所以资源占用比进程模式要节省一些。由于其可以针对特定场景灵活的选择引擎,所以,它可把控系统的资源占用幅度,既可以将其设置为非事务模式,也可以将其设置为事务模式。如果资金预算投入非常有限,那么,使用MariaDB是一个最佳选择,它可以根据购买的硬件资源的性能,灵活的调整运行模式,以便最大化的利用算力、内存空间、存储、带宽等。它能建立一个非常高效的多主集群,也就是每个主机都具备相同的能力,地位和能力不分高下,各自都能独立处理增删改查等操作,使整个集群能更好的实现并发和负载均衡,避免的主备模式的资源空闲,也减少故障切换的中断过程。
PostgresQL:以多进程模式运行,所以资源占用比线程模式要多一些。有人把它称作“穷人的ORACLE”,足以看出这个开源数据库 ,达到了足以与商业数据库ORACLE媲美的程度。甚至在某些方面已经强于ORACLE很多(不小心碰瓷商业数据库了,有点扯远了),比如gin索引、jsonb数据类型、更严格的SQL规范限制等。它没提供众多的可选引擎,一种引擎打天下,免去了用户的权衡过程,能用就用,不用就拉倒,反正就这样了。如果资金预算投入比较充沛,对系统的稳定性和可靠性有更好的要求、对商业数据的准确度和计算复杂度有更严格的要求、有很多不确定的非结构化商业数据、有严格的业务数据锁定一致性更新的要求、需要用到很多种编程语言扩展后台业务逻辑,那么,使用PostgresQL是一个最佳选择。虽然它使用起来耗费的资源会比MariaDB多些,但他的承载能力、容错能力、正确保证能力都会更加靠谱些。我对其唯一深感不足的地方,就是它没有像MariaDB那样,具有多主集群的能力,只支持主从模式,从而不能够并行读写,不能充分的实现负载均衡,很难参与云构建的IAAS部分,作为PAAS层级的平台支撑更为合适。
以上是我一家的使用心得,更多的细节难以在一片短文中全部囊括,在此抛砖引玉,以付君鉴,如有启思,鄙人不胜荣幸。若有此方面的建设需求,请来信勾兑,相互扶持。




