正文
但他根据自己先前的编译器构建经验制定了一项清晰的计划:如果把每一条 SQL 语句视为一个程序,那自己的任务就是把这些程序编译成某种可执行的代码。
因此,Richard 编写了一套能够实际运行查询的字节码引擎,之后又编写了一款编译器,用于将 SQL 转换成相应的字节码。就这样,SQLite 诞生了。
可惜它并没有在 Richard 当时从事的战舰项目上发挥作用,因为那个项目被关闭了。后来项目重启,Richard 尝试把 SQLite 引入其中进行测试。不过遗憾的是客户坚持使用 Informix。“倒是可以理解,但 Informix 在开发方面的使用感受真的很差。”Richard 说道。
为了不浪费,Richard 把它放在了互联网上,于是有更多人开始使用。“当时还没有 Twitter 之类的东西,但已经有帖子说‘哇,我在自己的 Palm Pilot PDA 设备上运行 SQL 数据库啦!’不开玩笑,这样的事情当时确实吸引到很多人的关注,这也激励着我继续做研究和开发。”Richard 表示。
“其实我只是在到处借鉴”
“我最早开始编写 SQLite 的时候,曾经到处搜寻,想要看看有没有关于如何编写 SQL 数据库引擎的参考资料。可我什么都没找到,所以只能边做边学边发明。这是个完全由自己摸索出来的路径。”Richard 说道。
大部分理论都是由麻省理工学院、哈佛大学、剑桥大学或者伯克利大学的研究小组提出的,而如果大家没上过这些学校,就很可能完全没听说过这些理论,更没有靠谱的方式能够查询相关资料。
但奇怪的是,如果回头看看 Postgres 使用的火山模型和 SQLite 曾经使用的字节码模型,就会发现大家都不约而同选择了类似的方向。这些方案虽然从宏观来讲起点各不相同,但大家在如何提高速度表现方面却意见统一,所以 Richard 认为这也是对理论的一种印证,两条独立的开发路径得出了同样的答案。
例如,Richard 就从来没听说过覆盖索引。只是在一场位于德国的 PHP 大会上,他见到了 MySQL 初创团队成员之一的 David Axmark,Axmark 解释了 MySQL 是如何实现覆盖索引的。Richard 想,“哇哦,这个想法简直天才!”于是在回途的飞机上就开始为 SQLite 编写覆盖索引。
“其实我只是在到处借鉴。”Richard 说道,人们会分享自己的心得,有人会主动找他:
之后它就成了 SQLite 的一部分。这就是边做边学边发明的好处。
SQLite,“三战”成名
SQLite 开发出来的头一两年,Richard 忙于推进他的数据库项目。突然,有一天他接到了当时科技巨头摩托罗拉打来的电话。
“你好,我们正在设计一款新的手机操作系统,而且打算将 SQLite 纳入其中。你能为我们提供支持吗?”