数据库选型都选点啥

昨天我聊了聊系统架构设计与对业务的理解的问题,可能有些朋友觉得这是一个没有争议的问题,谁设计架构的时候不是考虑了业务系统的特点的。实际上这么想就有点简单了,理解业务和了解业务是两个完全不同的概念,在软件工程里有客户需求和软件需求的区别,可能绝大多数研发团队把这二者合并了。客户需求到软件需求,其实也有一个工程化设计的过程,这个过程中,需要对客户的需求进行理解,提炼,优化,最后才能形成一个优秀的软件需求。如果为了节约研发成本,把这个环节忽略了或者合并了,其实对于软件的质量是贻害无穷的。

作为架构设计中的重要一环,数据库选型也是如此,如果我们对业务理解的不透彻,没有识别出业务中对数据库应用最为复杂的环节,那么当系统开发到一定时期,甚至系统上线后,就会发现一些很难解决的性能问题。2012年我们在给一个大型国企优化财务系统的时候,发现他们大量使用临时表做数据临时加工,每个票据处理都要创建数张表,使用后再删除,这导致系统的共享池问题十分严重,性能也受到很大的影响。我希望他们能够使用Oracle的全局临时表来替代,开发商的答复是,涉及的代码量太大了,做这个修改已经是不可能了。

回到数据库选型,也是如此,去年年初,某财务系统在数据库选型的时候,受到互联网企业的鼓励,选用了云平台上的RDS,把数据库从Oracle数据库迁移到了RDS FOR MYSQL。为了便于迁移,原有的以存储过程为核心的结构并未改变,只是存储过程从Oracle PL/SQL改造为RDS的MYSQL存储过程。今年9月份,这套系统开始小规模试运行了,通过试运行,他们发现存在很多的性能问题。于是在互联网公司的专家的帮助下,对数据库进行了分库分表的优化,暂时在小规模试运行中解决了当前的问题。不过下一个问题来了,按照试运行用户的规模,推算完全上线后的系统,大致需要将系统切分为100多个RDS数据库,同时每个数据库还需要采用至少一主一备的读写分离的模式,才能够满足系统全网上线的要求。

这两三百个RDS数据库实例一旦上线,怎么运维?一些数据聚合计算的要求如何满足,如果全部复制到数据中台后再做处理,企业的数据中台目前是T+1的,实时业务和准实时业务需求如何满足?这个问题让项目组陷入了困境,我想,在各方专家的帮助下,这个问题可能会解决,但是这套系统留下的病根,恐怕在系统上线后的数年内会给系统稳定运行带来巨大的挑战。这是一个架构设计与研发严重脱节的典型案例,项目组中不乏做了十多年财务系统的业务专家,但是他们在架构设计时的参与度不足,或者说他们对数据库架构的理解不够深刻,分不清RDS FOR MYSQL和Oracle数据库有啥区别,所以导致了这么大一个项目组在最初数据库选型的时候出现了巨大的问题。

既然数据库选型在项目建设中如此重要,那么在数据库选型的时候我们该注意什么呢?这实际上是一个十分难回答的问题,因为每个企业的规模,特点,技术能力,研发队伍,可用于数据库购买的资金量等都是不同的,因此这个问题没有标准答案。

对于资金投入比较敏感的中小型企业来说,可能选择开源数据库来替代已有的Oracle数据库是比较合适的选择。一方面是开源软件不需要购买许可证,另外一方面是开源社区的第三方支撑能力相对于一些国产数据库来说,还略微丰富一些,今后更容易购买到较为便宜的第三方服务。另外开源数据库的技术资料相对也开放一些,自己培养DBA时候的学习成本也低一些。根据业务的特点来选择合适的数据库是企业数据库选型的正确姿势。根据数据量、业务处理的复杂度、存储数据的类型、接口的复杂程度等特性,选择PG/MYSQL阵营的数据库,实际上这个选择对于你今后系统的运维与应用有很大的关系。如果你的系统的业务处理逻辑相对简单,研发人员习惯于在程序中处理复杂的业务逻辑而不是借助于SQL语句,那么经过分库分表等设计,一个大型系统使用MYSQL数据库也是十分适合的,今后的运维也相对比较简单。而如果你的很多复杂的业务逻辑都需要使用SQL或者存储过程实现,数据量也很大,那么可能选择PostgreSQL会比较适合。关于开源数据库选择哪个数据库,其实这方面我也写过好几篇文章,中间或多或少的提到了这些问题,有兴趣的朋友可以去查找一下以前我写过的关于数据库对比分析与选型的文章。

对于大型企业,选择数据库就十分复杂了,特别是有信创要求的企业,一般来说需要选择国产的商用数据库。这时候数据库选型就不完全是技术问题了,更多的要考虑的是一些商业上的问题。比如厂商的规模与服务能力,船大调头就难,一旦数据库选型完成,想要再换就河南了,如果你选择了一个数据库产品,几年后,这个厂商转型干别的去了,或者这个厂商的产品越来越水了,那么对于选择这个数据库产品的企业来说就是灾难。亦或你用了两年数据库产品后,发现这个厂商的服务支撑能力跟不上,业务系统四处起火,自己的自主运维能力又建设不起来,想想那个场景,可能很多企业的IT主管都会不寒而栗吧。

还有一种情况,就是企业也有一定的资金,不过技术能力也相对较弱,信创创新的压力也不大,不过IT系统的安全稳定高效运行压力较大。这种情况下,我想继续使用Oracle数据库,确保业务的平稳应该是最好的选择了。

另外要说的一点是,企业数据库选型,还是应该根据业务系统的特点,适当的数据放在合适的数据库中,并不是一个企业只选一个数据库是最好的。比如说一些日志,半结构化的数据,就没必要放在关系型数据库里,放到ES,MONGODB这样的数据库里可能更合适一些。十年前和腾讯的朋友交流,他们说QQ等的数据用MYSQL合适,不过数据集市他们还是首选PG,他们并没有因为企业创建之初就使用MYSQL而认为企业里必须用MYSQL,而是根据场景的特点而选择不同的数据库产品。

这两天刚刚出差回来,今早原本并不想动笔的,只是这两天总是在考虑数据库选型分析的事情,早上坐到办公室里突然有些感受,就记录了下来。实际上我每天写的一些东西,并不都是给大家看的,更多的时候是留着给我自己看的。人过五十,记忆力就不好了,有时候有些想法不记下来,过几天就忘了。把自己的想法和大家分享,是我的习惯,这些想法不是真理,只是个人的想法而已,任何一件事情,真理只有一个,是不可描述的。我们每个人说的,不过就是观点而已。

发表评论

登录后才能评论
网站客服
网站客服
申请收录 侵权处理
分享本页
返回顶部