经常听到一些话,比如“数据库把基本功能搞稳定就行了,弄那么多没用的功能干啥?”,实际上数据库厂商开发那么多功能出来,也不是闲着没事干随便消遣的。功能意味着用户的需求,Oracle的功能可能你只用过不到10%,但是为什么Oracle还要做那么多复杂的功能呢?因为其他客户有这方面的需求。
这些年一直存在着哪种数据库最好的争论,是简单的,专注于数据存储的,还是面向复杂计算的;是单一功能的 还是多模态的;是专注于关键交易的还是HTAP的?以前也有数据库业内的人问我对多模数据库怎么看,他们在讨论数据库里要不要加入多模的能力。当时我从我目前的一些客户的需求分析了一下,认为多模数据库只会增加数据库的复杂度,影响RDBMS核心的稳定性,甚至限制数据库核心的功能,对用户来说价值并不大。
现在想想,当时的考虑还是过于简单了,实际上上面的问题都是相同的一个问题。如果不搞清楚数据库是做啥用的,这个问题很容易得到错误的答案。今天我给数据库一个非学术化的定义:“数据库是一种简化数据处理的IT基础设施”。“简化”两个字的含义十分广泛,因此从这个定义上看,一切能够简化数据处理的能力,数据库都可以拥有。
说到简化处理,不同的企业对于简化数据处理的能力要求是不同的,互联网企业拥有强大的研发队伍,优秀的自有数据处理算法。他们一般不太需要数据库提供强大的数据处理能力,因此数据库内置的一些数据处理的能力对他们来说并不一定是必须的,甚至可能过于简陋了。而对于传统企业来说,可能研发人员连算个标准差都得查资料找例子,这些功能如果能在数据库里内置了,肯定是有价值的。对于一些互联网企业的研发队伍来说,数据库就是个存数据的容器而已,用MySQL这样的简简单单的数据库就够好了;而对于一些传统行业的研发团队来说,数据库的能力越强越好,最好什么业务都能通过一条SQL来解决掉。
这些年里,很多互联网行业的数据库专家带着极深的行业眼光来看自己不熟悉的传统行业的问题,就难免得出错误的结论了。而这些年互联网企业为了自己的商业目的,拼命地输出技术。这种不一定适合于传统行业,但是对于传统企业十分有诱惑力的观点又迎合了很多传统行业IT部门领导的想法,因此这些观点现在很吃香,也很流行。
基于上述原因,我们今天不讨论互联网行业亦或是研发能力极强的某些行业或者企业对数据库功能的需求,来讨论数据库的功能对于普通的企业应用的意义。这些企业不仅仅是想部署一套存储数据的IT基础设施,而是需要一个处理数据的IT基础设施。因此数据的写入、业务分析、批处理统计、数据分析与汇总、数据复制与共享、跨系统数据计算,等等等等,这些常见的能力都是研发队伍所需要的。这对于数据库厂商来说,提出了很高的要求,除了把数据库核心做好,还要花大量的精力去做大量的技术难度不高,但是复杂度极高,工作量极大的外围能力的研发。如果不能把这些功能搞好,那么用户用起来就不爽,研发的成本也会增加。
把功能做全了,数据库厂商只是迈出了第一步,对于大多数研发能力不强的企业来说,其应用系统的质量也是很差的。我从事系统优化工作二十多年,这二十多年里见过各种水平的企业编写的软件系统,其中不乏一些世界级的大厂。不过从一个做优化的人的角度来说,这些应用写得都够烂的。这实际上也很正常,超高质量的应用系统所需要的成本是完全不同的,没有企业愿意多花几倍的价钱去购买一套十分优秀的定制化软件系统。即使有用户愿意多花钱,实际上也是花了冤枉钱,多花几倍的钱买不来与其花的钱所对应质量的定制化软件,因为能写出这种水平代码的队伍太稀缺了,都被用在干更有价值的事情上了。
因此数据库产品还要能够经受住这些“烂系统”的考验,确保不会被极端的SQL把数据库搞宕,最好还能够快速的执行完那些很烂的SQL。总之,能让那些开发能力一般的研发人员随意使用数据库,是数据库作为一种简化数据处理的IT基础设施必须完成的使命。要做到这一点并不容易,Oracle花了几十年才完成的任务,我们相拥三五年就完成,想想也不太现实。
在数据处理上,用户的需求也是在不断地推陈出新的。最初我们只需要处理简单的数据行,后来我们又要处理LOB等大型字段,空间信息、矢量数据、时序数据、实时数据等等的处理需求也越来越复杂,DB4AI也会成为未来的刚需。用户不断的在给数据库厂商出着新的考题,数据库产品的技术发展又出现新的推动力,我想未来这些年,无论是传统数据库厂商还是新兴数据库厂商,在数据库作为数据处理核心引擎这个概念上,会得到认同。这是对20年前去IOE时“数据库只是存储数据的IT基础设施,让业务处理回归应用本身”这种思路的一种否定。
虽然作为一个常年做系统优化工作的人来说,我很希望研发人员都能够尽可能把业务处理逻辑放到应用中去,数据库只是承担数据存储的工作。不过如果如此,那么对于码农的技术要求就太高了,软件研发成本也将大幅增加,很多企业的IT无法承受如此高的成本。对于大多数传统行业的IT来说,快速,低成本地支撑业务的高速发展是其主要任务,尽可能让数据库多做点数据处理的事情,让研发人员做的事情变得简单一些,可能是很多企业的最 佳研发模式。