[忽软忽硬] 21. 占有率世界第一的数据库软件:SQLite

我好久没更新电台了,今天来一发。我在网上乱逛的时候,不小心看到一个叫telegram的群里,有个群友转发了一个twitter的链接,这个推友的ID叫@leyafo,大家有兴趣的话可以去关注他,我也不知道他喜不喜欢别人去关注他,我是守法公民,没有twitter账户,所以,不守法的听众可以去twitter上关注一下,可以与胡西进共用一个平台 🙂

这个推友讲的就是SQLite的事情,转这个链接的人,说我曾经也讲过SQLite,在电台的207期,我确实讲了一点SQLite,当时主要是推荐一本当年我读研究生时候读的书叫《SQLite Database System Design and Implementation》,这本书并不是我主动读的,而是导师觉得我代码水平实在是太菜了,教了一辈子书,就没见过这么菜的学生,就让我读SQLite的源代码,然后还要写读代码的感受,说实在的,我读研究生的时候,只是学过《数据结构》,至于什么是B树,我心里还是有点B数的,就是我其实不懂这东西,考试又不考。后来被导师逼迫,终于知道了原来B树是用在数据库中的,

SQLite的源码里注释超级多,如果你也有不得不读的原因,我觉得还是比较容易读下去的,里面最难的部分就是B树。由于我研究生毕业已经15年了,早就把B树又还给老师了,所以接下来,我只能靠残存的一点记忆来讲一下B树,如果你非常想搞懂,还是要找一本数据结构来看看。

先来说一个翻译的问题,国内这里翻译有问题,在数据结构上,B树写成这样B-树,中间有个小横杠“-”,为什么有这个小横杠呢?因为外国人发明的,B-Tree,其中这个B代表的单词叫Banlance,结果到了国内也加了这个小横杠,所有很多人把B树念成B减树,如果只有这么个事情的话,还没什么问题,因为还有一种树叫B+树,国外的名字叫B+ 空格Tree,结果到了国内,有些不严谨的人会写成B+没有空格树:B+树,这样就有了两种树,B-树与B+树,更搞的是,加减有了,那乘除呢?还真有,还有一种树叫B*树,国外的书上一般写成B*-Tree,国内写作B*Tree,感觉加减乘除都要凑齐了。而且B树是面试的重灾区,虽然90%的面试者估计也搞不懂什么叫B树,但是很多人就是要求去面试的人手写B树的算法。我心里有点B数,关于B树,我只记得这些了。接下来,我来介绍一下SQLite

SQLite的作者本人也不会B树,作者的名字叫Dwayne Richard Hipp,他本人在最初的时候也是不会B树的,他录了一期电台,在一个程序员的电台,名字叫CORECURSIVE,这个Podcast,我以前在我的节目中推荐过,其实我推荐过好几个电台,主要是英文的,这样一来可以装逼,二来可以学英语。我经常推荐大家有事没事学点英语,搞得我好像是英文培训老师一样。再加上现在的大环境,你推荐别人学英语,就是文化不自信。不过,我这么久没更新Podcast,我基本上还是每天有空就听Podcast的,英语这个东西啊,就算你一开始完全听不懂,但是慢慢的,就能听懂一些了,只是不知道单词怎么写,我真不骗大家,不信你找一些你喜欢的Podcast没事就听,听个两三年,就知道我不是说谎了,我给大家举个例子吧。

在很多年前,我的英语比现在要烂得多,那时候我就听Podcast,基本上听半个小时,可能也就听懂个十个八个的单词,在某一天的时候,我听到了一单词,大概的音叫Burpee,我肯定不知道这个单词是什么意思,但是在那段时间,好几个Podcast都在说这个东西,因为人类么,都是跟风,Burpee,因为是听的,我也不知道怎么拼,也就没法查字典。在某一天的时候,我突然就意识到这是一项运动,并且大概知道了这个运动是怎么个玩法。后来我就搜了一下,真的跟我想的差不多,但是比我想的要简单一些 🙂

我再来推荐几个我经常听的Podcast吧,采访SQLite作者的这个叫CORECURSIVE,主要是讲编程的故事,比我做的好一百倍。还有The Changelog,也基本上是与编程相关的,还有Indie Hackers,这个叫独立程序员吧,就是讲一个程序员如何在家里一个月赚了几万美元,几十万美元,类似的故事,听多了很眼红就是了,我记得有一期讲的是一个程序员做了一个类似于替代Photoshop的程序,JavaScript的,直接加载到浏览器里用,每个月服务费是20美元,加个广告条,广告收入是20万吧,好像是欧洲的一个程序员,当时我还用了一下,javascript写的,哎,眼红。再推荐个我喜欢学英语的,叫All Ears English,两个女的做的Podcast,原则是connection not perfection,我很喜欢这个原则,语言么,不就是为了connection么?有些听众就喜欢嘲笑我的口音,我又不是为了perfection,如果想听没口音的,可以去听白岩松啊,不会真的有人想听没口音的吧,不会吧,不会吧?还有,想了解美国的一些事情,可以听This American Life和Planet Money,这两个节目有广本,你听不懂可以去官网下载文本。如果你喜欢足球,尤其是英超,可以听Premier Skills English,这个也有文本,还有课后题。目前我经常听的可能就是这几个吧,如果大家都听了,就会觉得我录这个电台,都是从人家那里听来的故事,然后用我的方言讲出来。

关于这个SQLite的故事,大家可以去看看前面我说的叫@leyafo的推友,他翻译了一下,我如果再念一遍人家的,也不好,是吧,如果大家想听英语,可以听原版的CORECURSIVE上的第66期,对SQLite的作者进行的访谈,那期节目的名字叫The Untold Story of SQLite。我稍微总结一下那期节目吧,大家听听就好,我发现了一个问题,这些牛人也是普通人,他们会美化自己的经历,以达到故事的效果,我以前在电台讲过,我导师跟我说的一句话:“只要一个人上过三次电视,他就是个骗子。”,现在我把这句话修改一下,“只要一个人发过三次朋友圈,他就是个骗子”,这个骗,有些是要突出自己的强大。大家一定不要相信上过三次电视的人讲的话,也不要相信发过三次朋友圈,发过三次推文,录过三次Podcast的人播主讲的话,要自己动动脑子。SQLite的作者也很喜欢录Podcast,除了刚刚讲的这一期,他还上过Changelog,我上面推荐了这个电台,第201期,也是讲的SQLite,还有OReilly什么的都请他讲这个故事……大家可记得迪士尼本人是如何讲米老鼠的么?如果没有100个版本,那也得有十几个版本,总之,迪士尼成功了,他有资格胡乱说他如何创作的米老鼠,实际情况,谁也不知道。光我知道的米老鼠的版本就有好几个,可能真实的情况是,米老鼠与迪士尼没什么关系,根本不是他设计的,而是一个叫伊沃克斯的人设计的,连米奇这个名字,也有不同的说法,迪士尼一会是说是他想的,一会儿说是他老婆想的,一会儿说是一个叫米奇的演员想出来的,总之,按不同的场景需要来演绎相同的故事。

我的电台做了快300期了,我得出的最重要的结论就是:人一定要取得成功,只要取得了成功,就可以胡说八道,反正怎么说,都有听众相信你的话。

无独有偶,SQLite的版本,在发展细节上也有不少出入,跟UNIX,Linux,Apple差不多,当事人都没有办法讲清楚,再说,随着时间的推移,当事人可能也忘记了,只能再演绎一个故事,这也不算说谎吧。就像是有人问你,你20年前写这个东西是为什么?如果有听众问我,你当初录电台是为什么?我可能也得现编个故事。大家可能不知道,我录电台的时候,根本就不是录编程相关的,而是录与足球相关的,后来慢慢的录成了软件编程相关的。我当时录了4-5期,就发到一个足球群里让别人听。

SQLite的故事版本相对来说还是比较准确的,尤其是比苹果,Unix这些故事,大体的内容是一个叫Richard的家伙,在海军找了一份工作,这个和HP的创始人之一差不多,在美国海军找了一份工作,HP的创始人做雷达什么的,如果大家听过我电台节目很多期的话,会发现美国海军真NB,很多项目,包括第一台计算机ABC,阿塔纳索夫的计算机什么的,都与海军啊,农业部什么的有关,这个SQLite的家伙的工作是在海军做武器控制系统,无奈,美国海军的设备太烂了,主要是数据库不行。当时用的数据库是IBM的informix,今天IBM的数据库系统还是叫这个名字,当年那个系统,肯定与今天的不一样。

由于当时海军的数据库太差,Richard就自己写一个,这个数据库就是后来的SQLite。后来越来越多的公司采用,故事有点像Linux的发展,但是又和Linux有非常大的不同。SQLite的许可协议与Linux的不管是GPLv2和GPLv3没有任何关系,如果有人说他给SQLite贡献过代码,那基本上就是在吹牛,因为SQLite不接受别人贡献代码,与我们常人理解的开源不太一样。SQLite的背后有很多大公司支持,这些大公司主要是给钱,但是谁也没资格拥有SQLite,SQLite属于全人类,谁都可以使用,谁也别想独占。

目前我们手机中,无论是android还是iOS,每台手机里都有SQLite,所以说SQLite是世界上占有率最高的数据库,一点毛病没有。我经常使用Ruby On Rails开发一些应用,默认使用的就是SQLite,我每次都用默认的。

SQLite能取得占有率上的成功,我认为技术是非常少的一部分,论技术,肯定有比SQLite厉害的。之所以这么成功,我觉得至少一多半的原因是各大公司竞争的结果,再厉害的公司,也不可能独占市场,比如某个公司推出一个数据库,其它公司是不太敢用的,万一你搞点事情,我不就被你给卡脖子了么?因此,只能出现类似SQLite这样的公有领域的软件,就像C语言,Python什么的,大家都用,但是大家都不能只靠它赚钱,否则那就再做一个软件出来替代它。

大家都用过Android手机,Android手机是开源的么?是开源的。但是只开源了一部分,严格来说“Android开源的部分”叫AOSP,这是Android的基础。还有一部分是不开源的,就是在中国用不了但是在外国严重依赖的那些服务,比如Google的PlayStore,YouTube,Gmail,Google搜索,也就是我们想用,必须要在手机上安装三件套+科学上网才能用的部分。

对Google公司来说,Android胜利固然好,但是如果Android胜利了,Google又没法从中赚钱,比如某公司利用Google开源的Android,换个皮肤,跟Google一样了,那只能算是Android的胜利,可不算Google的胜利。因此,Google要控制手机厂商,如果你要造手机,并且要使用Google的服务,只能跟我Google玩,其它厂商就不行。(中国大陆除外,因为Google在中国大陆没服务)

这就是开放手机联盟,有没有人违反呢?有的,比如很早之间,阿里做了一个Aliyun OS,要授权给其它厂商,比如授权给了宏碁(qi)公司,Google就来了,只能二选一,要么跟我玩,要么跟Aliyun OS玩,然后Aliyun OS就死了。当然了,如果阿里出自己的手机,问题不大,可惜,又有几家厂商能出自己的手机+操作系统,并且还能一直玩成功呢?不就是只有苹果一家么?其它的厂家,要么软件被Google搞,要么硬件被高通什么的搞,要么软件硬件同时被搞。前段时间好像有一家公司说要组建一个什么联盟,全中国的手机厂商联合起来,不要用Google的Android了,来用咱们中国人的操作系统。当时我就觉得,再怎么说,这些中国的手机厂商哪个不是人精中的人精,你那种口号,骗骗中国的百姓也就算了,还想骗这些心狠手辣的割韭菜专家,你以为就你会割韭菜啊,我不会割韭菜,这不是逗么……于是,这些厂家,马上组织人力物力,加入该联盟,要让中国人用上中国的操作系统,这种方法就是只有魔鬼才能打败魔鬼,口号喊的震天响,最后,没有一家厂商敢用。再怎么说,Google就算不道德,但是底线还是有的,有些公司,那是动态底线,你要是被绑定了,那就只有死而后已了。当然,能在中国开公司的,哪有傻子啊,大家都吆喝了一阵,吸引一下眼球,也算做个广告。

开源这个事情啊,想玩成功还真就不是这么容易。当然了,如果把SQLite的开源代码拿回来,修改一下,搞个拥有自主知识产权的项目,申请一笔国家基金,只要有人脉,我觉得成功的几率还是很大的。

0 0 投票数
文章评分
订阅评论
提醒

5 评论
最旧
最新 最多投票
内联反馈
查看所有评论
Tao
2 年 前

Telegram群链接可以发一下吗

tractor
2 年 前

栋哥好久都没更新了,挺想念你的文章的

栋哥铁粉
2 年 前

栋哥是我们心中的大神

alan
1 年 前

太透彻了

5
0
希望看到您的想法,请您发表评论x
滚动至顶部