作者 | Richard Hipp

编译 | 马超

出品 | CSDN(ID:CSDNnews)

如果说有什么事物能够使男程序员心中的父爱完全觉醒,那我想一定是投身于自己创建的开源项目中去了。在和熊谱翔、黄东旭等储多开源大神的接触中,我可以明显感到他们对于自身开源项目的那份执着与热爱。虽然说贝佐斯、盖茨等IT巨头创始人都能在公司走上正轨后卸任CEO,完成华丽转身,但是为了维护自己的开源项目,程序员们往往都是从一而终,从不始乱终弃。

不过这也带来了一个衍生的问题,那就是开源项目尤其是由初创团队建立的开源项目到底如何赚钱,怎么保持持续活力?我们看到之前Linux的创始人林纳斯就吐槽说现在的社区几乎靠他们这一代年过50的老年程序员维系,年轻人似乎不喜欢内核编程,甚至还有不少大学及企业只热衷于在内核中“注水”去刷KPI,真不知道再过20年Linux会路向何方,可见即使是顶级的开源项目也有着自己的隐忧,更遑论其它小众的开源项目了。

还有一个现象也特别值得我们注意,那就是很多开源项目承担了巨大的责任,不过其营收却非常惨淡。熟悉信息安全方面的读者肯定知道,很多安全检测所找到的漏洞都来自于开源项目 OpenSSL,这个实现SSL安全加密的C代码库,承载了全球17%的加密流量,不过令人震惊的是这个项目每年却仅能收到2000美元的捐款。

将心比心像笔者这样经常写文章的程序员也会极力维护自己的文字,虽然也有梦想建立一个开源项目,但是开源到底意味着什么我却根本没有能力思考清楚,不过最近我在无意听到一个名为CoRecursive的播客,并在其中听到了Richard Hipp亲身介绍SQLite成长过程中,初创人员口述的心路历程颇令人触动,Richard在访谈中所做的表述非常真实坦率,接下来就对原文(https://corecursive.com/066-sqlite-with-richard-hipp/)进行了简译,与大家共享SQLite不为人知的故事。

无处不在的Sqlite

SQLite目前正在成为世界的核心基础设施,变得无处不在。SQLite存在于网络浏览器中,存在于手机中,存在于汽车中,甚至存在于飞机中。Sqlite几乎垄断了社交软件,不管是iMessages还是微信、WhatsApp,消息存储引擎都是SQLite,哪怕只是在计算机上简单的查找*.db文件,你也会惊讶于为什么电脑中会存在这么多的Sqlite 数据库,它是世界上装机最多的数据库,没有之一。从Richard 的分享中我们看到,SQLite的诞生最早源于他对Informix的失望。

目前的信息系统像是一艘大且复杂的巨轮,假如行驶过程中出现管道破裂,那么船员通过关闭管道一侧的阀门来隔离损坏,随后还需要打开其他地方的阀门以将工作流体恢复到下游的其他系统中,这样操作的话它们就不会造成重大损失。但想找到这些阀门却越来越复杂,拆了东墙补西墙的情况笔笔皆是。像Informix这样的传统数据库和这样一艘巨轮的情况非常相似,虽然程序员按照操作手册去维护系统可以解决问题,但是手册却越来越厚,查阅手册所需要的时间更是越来越长。

P or NP这是个问题

一般咱们程序员在设计系统时,往往都会在性能可以接受的情况下,先寻求快速的近似解,而不会考虑做极致的优化,虽然程序员们试图编写代码来解决问题,但却很少真正深入的分析问题。

在创立SQLite之前,Richard正在领导一个致力于极致技术优化的团队,但他们使用的数据库产品Informix却没有获得团队的一致认可。一旦数据库宕机,应用程序就无法运行,由于一般的应用开发者对数据库服务器没有太多控制权,但却对应用的可用性承担绝对责任,因此经常有程序员因为数据的问题而背锅。

Richard的团队开始用原认知来分析这样的问题,他们一连问了三个问题,为什么我们需要专门的服务器?为什么不直接从磁盘中读取数据?为什么不能尽量减轻数据库服务的依赖项?环顾四周,Richard发现几乎每个数据库产品都附带了一个庞大的产品线,一个个近似解堆砌的结果就是变得异常的低效臃肿。这也让Richard萌生了自己写一个轻量级数据库的想法。

初版本的诞生

2000 年的时候,网民们大多还只能选择用电话拨号的方式上网,即使在美国家庭拥有宽带普及率也就只有1%。Richard在创立SQLite之初并没有谷歌等神器来帮忙,只能靠自己动手丰衣足食。在最初的版本中,Richard将每个SQL语句视为一个程序,他们实际上构建了一个编译器,将SQL语句转化成了可执行的汇编代码,这其实就是最早的SQLite了。后来Richard的团队将SQLite发布在互联网上,出乎他们的意料,很多人开始使用这个并不成熟的轻量级数据库产品,并给出了热情洋溢的评价与反馈,可能恰恰就是这些最初的鼓励,SQLite正式开启了开源之路。

从摩托罗拉到诺基亚-Sqlite连获大单

在SQLite诞生一年以后,Richard接到了摩托罗拉的电话,当时摩托罗拉正在设计一个新的手机操作系统,他们希望SQLite成为其手机上的数据库引擎。收到邀请后,Richard立刻给出了肯定的答复。

经过团队内部的协商,Richard最终给出了8万美元的报价。虽然按照实际的工作量来说,这钱不多,但对于当时那个正在开源方面苦苦找寻方向的初创团队来讲,第一桶金的价值根本无法用金钱衡量。

在顺利完成摩托罗拉的项目之后,美国在线(AOL)也开始与Richard接触,美国在线与Richard一道,完成了CD当中的数据库需求。

接下来是诺基亚的Symbian OS团队,在诺基亚的选型中,SQLite打败了其它10个数据库引擎,成为了最终的胜出者。后续在接连得到Mozilla和Adobe的支持后,他们和Symbian共同组成了SQLite联盟,这也为SQLite后续发展壮大添砖加瓦。

当然SQLite能有今天的成就,最关键的一点在于他们在移动互联网上的眼光非常超前,早在2005年,Richard就开始与Android的开发人员进行了沟通,要知道3年之后Android被谷歌以4亿美元收购后才真正在业界扬名。不仅如此他们还为黑莓与IPhone,Windows Mobile都进行了适配工作,这种押注赛道而非单品的风格也值得我们学习。

可能是由于同性相吸,在全面进行了验证工作后,SQLite团队选择全力支持同样也是开源项目的Android,因为Richard的团队完全可以在Android的Linux环境下用GDB调试SQLite,这个吸引力太大了。

升华-航空标准的严格测试

在经历了一段颇为顺利的发展期之后,Richard和他的团队开始四处吹嘘 SQLite是一款不存在任何错误可能性的数据库,不过在为航天公司罗克韦尔柯林斯工作的时候,Richard开始明白消费级电子与航空技术对于基础软件的要求,完全不可同日而语。

罗克韦尔柯林斯向Richard介绍了 DO-178B 标准的概念,由于笔者并没有在网上查到这项航空产品质量标准的原文,所以下面就只能引用访谈原文中的大多介绍了,与许多质量标准不同,DO-178B可读性很强,虽然也有一些官话套话,但只要遵守这个标准就可以真正提高软件的质量,虽然这是一本要花费几百美元却还很薄的书,但Richard认为这笔钱花得很值,达到航空标准的关键在于100% 的 MCDC 测试覆盖率。

按照笔者的理解MCDC实际是一个形式化验证的过程,有点类似于操作系统SEL4的概念,这个验证标准不但要覆盖所有的分支,还要覆盖达到分支前所有可达的路径,比如代码执行到第4个分支之前可以有1-2-3、3-2-1、3-1-2等等可达路径,那么验证就要100% 覆盖上述所有执行路径,而且这个覆盖还要以汇编语言为基准进行。

Richard的团队用了整整一年996的代价,完成了数十亿个测试用例,才最终完成MCDC的工作。不过完成了这项工作后,SQLite也升级了,没有重大错误不再是一句空谈的口号。

第一性构建原则

个人认为SQLite能够成功最重要的原因还是在于,Richard团队使用第一性来构建产品,随着产品的不断迭代,Richard总是自己动手去实现算法,而不是从网上照搬原有的解决方案。就如Richard所说,在实际工作中,学校里学习的数据结构知识可能早就忘光了,不过在SQLite用到B+树的时候,Richard直接抄起《The Art of Computer Programming》,翻到搜索的章节,找到B+树的伪代码,学习相关思想然后动手实现,光是这份执着就值得我们学习。

给开源开发者的建议

现在的SQLite已经是一个可以自我生长的完整生态了,Richard 的数据库是世界上使用最多的数据库,从某些方面来说,它是SQLite甚至是部署最广泛的软件模块。

最初的SQLite仅仅源于一个不需要实体服务器,直接与磁盘交互的疯狂想法,如果你当时去问任何数据库方面的专家,得到的结论都会是这种方案永远行不通。不过幸运的是,Richard当时不认识任何专家,后来自己还成了专家,可以说开源最需要的是对梦想的执着,而不是理性的分析,这也是对我最大的启发。

原文:https://corecursive.com/066-sqlite-with-richard-hipp/

声明:本文由CSDN编译,转载请注明来源。

开发者必备的知识图谱来啦!60+专家,13个技术领域,CSDN 《IT 人才成长路线图》重磅来袭!直接扫码或微信搜索「CSDN」公众号,后台回复关键词「路线图」,即可获取完整路线图!

从摩托罗拉、诺基亚再到航空领域应用,这款开源数据库的成功如何成就天才程序员?...相关推荐

  1. 【飞控理论】【惯性导航基础】什么是欧拉角?为什么会有欧拉角?欧拉角在航空领域的运用?

    目录 1.什么是欧拉角 2.为什么会有欧拉角? 3.欧拉角在航空领域的运用? 3.1.欧拉角的顺序问题 3.2.运载体坐标系和世界坐标系 1.什么是欧拉角 假设坐标系从 OXY 绕 Z 轴负方向逆时针 ...

  2. 春节机票销售大增!航空领域哪些业务风险要注意?

    目录 航空领域常见的业务风险 2022年航空业务风险趋势分析 航空领域业务风险欺诈分析 如何防范航空业务风险 针对恶意网络爬虫 针对仿冒登录与内控风险 安全技术 春节旅游与出行数据陆续出炉.中国民航局 ...

  3. 【对讲机的那点事】无线电在航空领域发生紧急情况的应用措施

    在前文中我们聊到了航空领域使用无线电对讲机的专业术语,今天小编带你一起来看看在发生意外紧急情况下无线电在航空领域的应用: 1.遇险或紧急通话的第一次通话时,以"MAYDAY"开始表 ...

  4. 2021-06-08 自动排单软件在航空领域的运用

    自动排单软件航空电子产品的解决方案能够以低成本.按时交付满足项目的所有技术要求和性能要求,在不久的将来,航空航天行业有望在大部分细分市场实现持续发展,这意味着整个业界越来越依赖航空电子设备和软件提供商 ...

  5. 再破AI领域融资纪录 这家公司拿下软银9.4亿美元投资

    [网易智能讯 2月12日消息]北京时间2月11日晚, 硅谷机器人公司Nuro宣布,已经完成来自软银愿景基金的9.4亿美元融资.到目前为止,Nuro完成了来自软银.高榕资本.Greylock Partn ...

  6. 在操作系统、芯片领域跌倒的中国程序员,如何崛起?

    今年年初,中兴事件的缺芯之痛,让国人无不为之悲愤:14亿元平均全国一人一元的罚款,更是让人心痛不已.究其关键,是因中美科技仍存差距,更因美国始终紧紧攥着科技行业的核心技术. 那么,已经成为世界第二大经 ...

  7. 程序员门槛再被“神器”降低:只要会英文,就能写代码!

    近日,OpenAI带着他们最新.最神自动编码神器Codex霸榜各大科技媒体头条,我们知道OpenAI是微软投资的通用人工智能平台,而GitHub是微软旗下的代码托管平台,这样微软出算力.OpenAI出 ...

  8. 谷歌CEO:没有这项能力,再牛的程序员也不要!

    究竟是编程能力重要还是学习能力重要,一直是困扰企业的一个难题. 你是需要一个立即能解决问题的老司机,还是要一个未来无限的潜力股,确实也很令人头疼.不过关于这个问题,谷歌 CEO 给出了一个答案. 那就 ...

  9. Java开发四年的程序员想再学习一门语言,该选着C还是Python呢?

    首先,对于已经从事Java开发工作四年的同学来说,如果想再开一门编程语言,应该结合自己的发展规划来选择C或者是Python,如果未来想进入大数据.人工智能领域发展,选择Python会更方便一些,而且P ...

最新文章

  1. CF797E. Array Queries
  2. 自学python能赚钱吗-学习Python多久能找到工作?老男孩Python开发培训
  3. BC:带你温习并解读《中国区块链技术和应用发展白皮书》—区块链技术发展路线图
  4. java面向对象编程考试题,202514HJava面向对象编程答案试题题目及答案,期末考试题库,章节测验答案...
  5. springmvc 注解总结
  6. 反射小应用之DataTable和ListT互操作
  7. 【bzoj2555】Substring【后缀平衡树入门】
  8. 数据结构与算法--2.数组的定位排序
  9. 【原型设计】第四节:Axure RP9 交面交互的使用说明 01 打开链接交互效果
  10. 远程同步修改云服务器上的文件
  11. Windows下MYSQL数据库BOOT密码的修改方法
  12. “越南QQ”——Zing Chat试玩
  13. 《Oracle 11g 数据库基础教程》读书笔记:
  14. 将经纬度转换为以度为单位的xy坐标
  15. JSCORE06(达)
  16. 我的java语法基础篇刷题2
  17. TCSVT2021:一种结合全局和局部细粒度特征的行人再识别方法
  18. Vue动态渲染echarts图表
  19. 达梦DM装完数据库,bin下面没有disql文件是怎么回事?
  20. 在2012年01月20号这一天,2345浏览器的V1.3版本出世了,又修复什么Bug?

热门文章

  1. 关于我在1024程序员节还在焊板子这件事儿
  2. 分享一个stm32的OLED驱动,实现图像平移滚动滑动,esp8266-wifi物联网远程开关天气,开源代码电路原理图
  3. Linux下通过jstat命令查看jvm的GC情况
  4. Centos7静默安装Weblogic12C
  5. 2017 ACM暑期多校联合训练 - Team 3 1008 HDU 6063 RXD and math (莫比乌斯函数)...
  6. oracle,mysql常用基本操作 字段属性
  7. [转]MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  8. c语言:猴子吃桃问题
  9. Learning SQL--多表查询
  10. C++【EasyX】俄罗斯方块