SQLite:一个伪装成数据库的语言
|
admin
2025年1月6日 20:59
本文热度 49
|
SQLite是一个嵌入式的数据库,具有体积小、运行快、跨平台等优点,更关键的是,SQLite只有13万行左右。而传统的大型关系型数据库如Mysql、Oracle,代码行数超100多万行。
SQLite从2000年第一个版本发布到现在,已经运行在数亿设备上了,从本地应用、小型桌面应用,到移动设备应用(如 iOS、Android 应用),甚至在每一台电脑,在每一个浏览器之中都有它的身影。为什么说SQLite是一个伪装成一门编程语言的数据库呢?
说来话长
大概在1999年,软件工程师D. Richard Hipp正在为美国海军开发一款使用在导弹驱逐舰上的软件,数据库使用的是Informix。
Informix是一款功能强大的数据库,但有个十分恼火的问题是,Informix经常会崩溃连不上。不过军队里的长官可不知道什么tcp/ip协议、数据库等知识,只看到软件弹出的错误对话框,而这个对话框正是Hipp开发的。
作为一个拥有专业素的软件工程师,一个想法便在Hipp脑海中产生:既然Informix那么不稳定,那干脆把它替换掉吧。于是,在2000年1月,Hipp开始和同事讨论关于开发一个简单的嵌入式的数据库。Hipp想法很简单,作为一个运行在性能不高的机器上的程序,Informix数据库体积太大、无法安装,而且它是一个单独运行的进程,为什么不能直接从磁盘上存取数据呢?
故事转折
可是问题来了,Hipp并没有开发过数据库,甚至都不懂B树,需要用到的时候还得去翻看 The Art of Computer Programming(计算机程序设计艺术)。
不过好在Hipp有开发编译器的经验。
在Hipp看来,一条SQL的执行跟一条编程语言的执行的本质是一样的,都是对预定义的语法规则进行解释并执行。两者的区别是,编程语言最终是由计算机硬件执行,而SQL最终是由控制磁盘的程序去执行。说干就干,Hipp先构建了一个SQL的解析器,接着把SQL语句转成了bytecode,最后构建一个bytecode执行器完成相关数据的操作。不过Hipp并没有把它立即运行在舰载机程序上,而是先发布到网上,验证自己的想法和测试代码。B-Tree模块:由B-Tree、页缓冲和操作系统接口组成。它们操作的是数据页,这些页具有相同的大小,就像一个个集装箱。B-Tree的主要功能就是索引,维护着页与页之间的关系,以便快速找到所需的数据。页缓冲主要作用是提高B-Tree与磁盘间的传递效率,我们知道,磁盘操作是计算机系统中操作最慢的事。
耳熟能详
后来的故事大家都耳熟能详,大家看到一个数据库居然能运行在性能非常弱的掌机上,都大为惊叹。一些大公司注意到了SQLite,首先是摩托罗拉,签订了第一笔8万美元的功能增强商业订单。接着巨头 AOL(美国在线)也打来了电话,要把SQLite放到CD里使用。甚至诺基亚也过来了,他们需要把 SQLite 放到 symbian os(塞班系统)。不过最后让SQLite发言光大的,还是安卓,你在各类 app 里都能见到 .db 结尾的文件,就是它的数据。
阅读原文:原文链接
该文章在 2025/1/7 11:39:56 编辑过