无知者无谓之王垠的新数据库
无知者无谓之王垠的新数据库
点击上方蓝字关注
1
最近一篇文章在我的朋友圈里流传起来:
王垠回国商业计划:新型数据库、智商税、城市设计和家居设计顾问、非技术书籍。写这篇文章的是当之无愧的网红王垠。说起来这位网红前辈的很多文章我都拜读过,在我开始写公众号之前我就拜读过。这其中就包括了他写得言之有物的关于编程语言的文章,还有他写得颇为胡说八道的关于数据库领域的文章。
曾经有人问过我对王垠怎么看。最初的时候我对他的印象不错。这种不错主要还是体现在他对编程语言领域有着很深刻的理解。而这正是国内计算机教育最为欠缺的领域之一。我是工作很多年之后才越来越意识到编程语言本身的重要性。
后来我发现无知者无畏这句话真的很适用于他。一个人的眼睛里只有编程语言,那么这个世界是不是只有编程语言了呢?图灵奖获得者呕心沥血发明的东西在王垠眼中如果只是故弄玄虚的话,我想这人的确也是应该去医院好好检查一下了。
2
我还是集中在他的新型数据库那一段吧。这里引用一下他的原文:
A 计划(新型数据库)
我现在最感兴趣的一件事情,也是技术难度最高的一件事,就是设计和制造一个全新的数据库系统(DBMS)。在我一直以来的博文里,我已经明确的显示出了对数据库这个领域的风气,以及很多数据库产品的不满。数据库是非常重要,有巨大经济价值,却又被搞得最乱,忽悠最多的一个领域。
从最早的关系式模型和理论,到 SQL,到 NoSQL,到 NewSQL,大数据,图数据库…… 这个领域发明出各种吓人的名词,各种新的查询语言,却没有从根本性的认识到他们在解决什么问题。Berkeley DB 一类的系统上百万行代码,结果到最后发现它解决的问题,其实可以用几千行代码解决,而且速度还要快很多。这说明什么问题?这说明这个领域的人根本不知道他们在做什么,他们缺乏对于计算和语言最本质的理解。
经过一段时间的摸索,我已经窥探到数据库系统里各种概念的本质。实际上的问题,恐怕比几十年来很多人想象的要简单和容易很多。再加上之前从头构造 B+ 树等关键数据结构的经验,这使得我在这个领域如虎添翼。号称当今世界最快的某数据库,里面的 B+ 树代码居然是从别人那里拷贝过来改成的,而且混乱复杂不堪。从我的 B+ 树设计出发,再加上对数据库里面各种概念(比如事务)的重新理解,我将会构造一个极其简单而高效的底层数据库系统。
在此之上,结合我对程序语言和编译器的深刻理解,这个数据库将拥有一个极其简单而强大的查询系统,用以解决远程访问和多机构架的需求。这个数据库不是 SQL,也不是 NoSQL,也不是什么 NewSQL。它只是把数据库还原到它本来应该是的样子,恰到好处的解决问题。
谈到分布式数据库,我不得不指出,分布式系统也是一个很混乱的领域。其中充满了各种像 Paxos 一类糊涂而没人讲得清楚的理论。Paxos 的论文被评委拒了三次才投稿成功。按照我的标准,这种故意把问题搞复杂的论文,根本就不应该让他发表。我非常的不欣赏这篇论文里面所谓的“幽默”,一点都不好笑,还把问题弄复杂了。
最近有人发表了 Raft,才稍微好一点,然而里面还是遗留了许多不必要的复杂性和 Paxos 留下来的历史思想包袱(像状态机一类的东西)。我的另一个目标就是消化和转换这类分布式系统理论,使得它们大大简化,用以扩展底层数据库,而得到分布式的扩展和可靠性保障。
这是一个相当大规模的计划,包括了大量的研究和实现工作,所以可能会花不少时间。当然,最后的代码应该不会很长。我的目标,是建立起一家可以跟 Oracle 匹敌的数据库公司,统一和简化互联网领域和其它新兴领域的数据库应用,并且蚕食银行等传统领域的数据库市场。
我已经跟一些数据库领域的内行进行了关于数据库本质的探讨,我也欢迎对此感兴趣的其它人士跟我讨论。
3
正好今年VLDB的讲座里面也有对数据库领域这几十年如一日来的一些反思。所以我想正好就着这篇无知者无谓的文章来聊聊一些重要的看法。
数据库领域确实是计算机里一个相对比较自成体系的领域。自成体系的意思是计算机里面有做理论的,在数据库领域也能找到做理论研究的。计算机里有做系统开发的,数据库领域里面也有系统开发的。计算机里有做编程语言的,数据库系统里也有做编程语言的。简而言之,整个计算机领域里面有的研究方向,大体上在数据库领域也能看到有相似的研究方向。所以从传统关系数据库的整个研究到开发来讲,其实整套体系复杂,自成一体。一个对于关系数据库一无所知的人,如果想要在这个领域做一点有意义的事情,能够在这个领域里做点有意义的事情,不砸上几年是不现实的。因为需要学的东西实在是很多。
那么,一个问题来了。到底是如王垠所说的,数据库这个东西很简单,是数据库领域的人把这个东西故弄玄虚的搞得那么复杂呢?还是这个东西本来就那么复杂呢?关系数据库发展近40年,这个问题回答起来复杂。然而最简单的一点,关系数据库实实在在的改变了世界,使得企业级应用得以普及开来,并且成为了一个极其巨大的商业市场。这一切的成就,恐怕很难简单的以整个数据库的人故弄玄虚一言以蔽之。
4
王垠是编程语言出身的,他发表的若干篇编程语言相关的文章展现了他对这个领域有很多的见地。所以我们首先从编程语言的角度来看看数据库。这里我引用王垠这篇文章以及一两年前发表的关于他对数据库领域的看法的文章的观点。
关系数据库这个东西被设计出来,就是为了解决特定的事情。所以本来也就没指望这个东西是一个很通用的解法。王垠对SQL的不满之一体现在SQL这个语言是一个高度的表达想要干什么,但是不需要去表达怎么干的语言。这种语言和人工智能里面Prolog的意图很类似。在王垠的另外一篇批评数据库的文章里引用了Prolog的失败作为例子,并且举例如何用SQL实现Dijkstra的最短路径算法来展现SQL的拙劣。
应该说,SQL最初的意图的确是希望让用户来表达要干什么,而不是怎么干。至于怎么干则由专门的查询优化模块来负责。当然SQL作为一个语言,有很多的有待商榷的地方。这个理念本身也受到了很多挑战。这个挑战主要在于查询优化到底能做的多好。所以才有了DBA,有了Oracle数据库这种有很多可以调的参数等等。总体来说,这个模式的有点也是相对明显的,对于小白来说,数据库是一个很好入门的东西。这个模式的问题,数据库领域的人其实也在检讨。所以近期的发展,比如说SparkSQL的编程模式,已然不是纯粹的表达意图的语言了。
正如同我很尊敬王垠的编程语言的见地的同时,我也觉得王垠让SQL去写Dijkstra智能说是个笑话了。我相信有人这样用,但是SQL这个东西在很大程度上,不是为了解决这种问题而设计的。
5
如果说我对王垠的编程语言的理解还多少有一些尊敬的话,我特别想说一句,这个世界上并非只有编程语言。数据库软件,更多的是一个系统的实现。当我们讨论系统的时候,王垠的无知者无畏就体现的非常的淋漓尽致。
如果有谁告诉我数据库无非是个B+树的实现和一些数据结构的话,我特别有想揍这个人一顿的冲动。只有没有写过数据库系统的人,才会认为一些数据结构是数据库的主要组成部分。实际上我们可以毫不犹豫的说,即使我完全不用B+树,依然可以构建一个数据库。而数据需要担心的从内存到硬盘,从缓存到日志,方方面面的系统问题,其复杂程度,远不是一个编程语言就是一切的人眼睛里那个简单的东西。这也是为什么数据库系统入门不容易。如果不是因为开源社区有MySQL和PostgressSQL的话,很多公司从无到有想搭一个可用的数据库,我觉得几年下去,不一定能做出什么。
6
王垠对分布式系统的理解,更是让我非常的无语。分布式系统,尤其是现实里面高度可用的分布式系统,如果是那么简单的话,我除了说无知者无畏,不知道能说什么了。
很多大牛都说过,分布式系统的一致性问题是分布式系统里面最重要的问题。Paxos协议作为解决分布式系统的一致性问题的重要发明,Lamport这个图灵奖获得者的贡献,在王网红眼里就是故弄玄虚。我想王网红估计是从来都没有真正开发过大型分布式系统的经验吧。如果有的话,就不会这样信口开河胡说八道了。有谁敢说对发明Paxos的图灵奖获得者不尊重,那自己先拿一个图灵奖再说。
至于Raft的出现,的确是很大程度上简化了分布式系统一致性问题。但是,这是斯坦福大学一个PhD的工作。一个PhD工作这么多年,唯一的事情是解决Paxos从理论到实践的距离。我其实一点也不怀疑这个世界会继续进步,更加简化的协议会出现。分布式系统一致性问题会更容易被解决。但是我想一个花费斯坦福大学博士很多年才提出来的协议,实在不是一个屡次求学却一个博士学位都拿不下来的王垠可以随意去质疑的。
6
至于最后的那个建立和Oracle匹敌的公司,那我想除了贻笑大方,不知道说什么了。国内已经喊着去IOE的口号喊了很多年了,IBM的小型机和EMC的存储都轻易取代了。但是I,O,E这三者本来就不是等量齐观的。Oracle的数据库,迄今为止所代表的通用数据库可用性的高度,有无数公司挑战过,没有一个成功的。我很难想象一个只是在编程语言领域有些见解,从未有过任何大型系统开发经验的人的豪言壮语超越Oracle,该是多么的无知者无畏。
任何一个在数据库领域工作足够久的人,对Oracle这个公司在数据库领域所取得的成就,应该有很深刻的理解。举例来说,阿里巴巴集团的OceanBase一直以来都是高举着去IOE的大旗,并且有过近10年开发经验的队伍。以我的接触,即使这样一个队伍,也只能说在某些领域某些应用上可以取代Oracle,要想在通用性上取得Oracle今天能取得的地位,其路漫漫,每个人都懂的。至于王垠的新数据库的豪言壮语,当个笑话看比较好。
打赏专用二维码
欢迎加小密圈
飞总聊IT
IT八卦,大数据风云,职场风波
长按二维码订阅
合作垂询:feizongitworld@gmail.com