SQLite:一个伪装成数据库的语言

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执行器完成相关数据的操作。
SQLite:一个伪装成数据库的语言
不过Hipp并没有把它立即运行在舰载机程序上,而是先发布到网上,验证自己的想法和测试代码。
B-Tree模块:由B-Tree、页缓冲和操作系统接口组成。它们操作的是数据页,这些页具有相同的大小,就像一个个集装箱。B-Tree的主要功能就是索引,维护着页与页之间的关系,以便快速找到所需的数据。页缓冲主要作用是提高B-Tree与磁盘间的传递效率,我们知道,磁盘操作是计算机系统中操作最慢的事。           

耳熟能详

后来的故事大家都耳熟能详,大家看到一个数据库居然能运行在性能非常弱的掌机上,都大为惊叹。
一些大公司注意到了SQLite,首先是摩托罗拉,签订了第一笔8万美元的功能增强商业订单。接着巨头 AOL(美国在线)也打来了电话,要把SQLite放到CD里使用。甚至诺基亚也过来了,他们需要把 SQLite 放到 symbian os(塞班系统)。
不过最后让SQLite发言光大的,还是安卓,你在各类 app 里都能见到 .db 结尾的文件,就是它的数据。
很快,SQLite就像病毒一样,无处不在。

功能特性

  • ACID事务 
  • 零配置 – 无需安装和管理配置
  • 储存在单一磁盘文件中的一个完整的数据库
  • 数据库文件可以在不同字节顺序的机器间自由的共享
  • 支持数据库大小至2TB
  • 源码完全的开源, 你可以用于任何用途, 包括出售它
  • 支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等
SQLite虽然很小巧,但功能齐全,支持的SQL语句不会逊色于其他开源数据库。

本内容转载自 零点码起,版权归来源作者所有,本站只做内容展示参考使用,内容观点不代表欣文网立场。如有侵权,联系邮箱(xinenw@qq.com)删除!

(0)
上一篇 2025年2月5日 02:37
下一篇 2025年2月5日 03:03

相关推荐

  • 《风口区块链》第一章在风口上起舞:认识区块链

    第一章在风口上起舞:认识区块链 “站在风口,猪都能飞起来”,小米创始人雷军的这一句话风靡了整个网络。大家心潮澎湃,奋力追逐着新的风口。这个时代什么最火?毫无疑问,是一夜间红遍大江南北的区块链! 区块链作为一个短时间在网络和现实中迅速蹿红的词汇,对于普通人而言,首先它是陌生的,抽象的,与平日里所熟知的事物存在区别。有的人将其视为一个巨大的商机或机会,也有的人对…

    2024年3月30日
    2.7K0
  • NETworkManager 一款强大的网络管理工具

    NETworkManager是一款功能强大的网络管理与问题排除工具。可以帮助广大研究人员轻松管理目标网络系统并排除网络疑难问题。 利用NETworkManager 可以方便的管理网络和解决网络问题。支持查看和配置网络接口、扫描 wlan 网络、捕获 lldp 或 cdp 包、执行 IP 或端口扫描、对主机执行 ping 操作,以及使用跟踪路由或 DNS 查找…

    2024年10月4日 编程代码
    4070
  • Kali Linux 2024.3 发布 新功能看这里!

    不久之前,Kali Linux 2024.3发布。本次更新重点放在了软件更新和优化上。根据官方文档,在此版本中Python环境默认为Python 3.11在下个版本中,将会以Python 3.12为默认版本。 新增工具 和以往一样,每次更新kali会更新或增加几款工具。本次为大家新增11款工具。分别如下: goshs 基于Go 编写,允许使用自签名证书或用户…

    2024年10月6日
    3760
  • 建议大家尽早开始搭建个人知识库

    点击上方“IT技术小屋” 关注我吧!   前言:当信息过载遭遇AI革命 97.3%的人正在经历「数据肥胖症」 每天人均接收信息量高达34GB,但有效转化率不足0.7%。斯坦福研究显示:那些能驾驭AI的5%精英群体,知识复用效率是常人的23倍。 真正的危机不是AI替代人类,而是人类沦为AI的数据附庸 我们正站在认知革命的临界点: 初级思…

    2025年2月26日 编程代码
    1580
  • 没想到学会这个canvas库,竟能做这么多项目

    大家好,我是一名前端工程师,也是开源图片编辑器vue-fabric-editor项目的作者,2024年5月从北京辞职,我便开始了自己的轻创业之路,接触了不同的客户和业务场景,回顾这半年,没想到学会fabric.js这个Canvas库,竟能做这么多项目。 如果你打算学习一个Canvas库或者做图片设计、定制设计相关的工具,我建议你学习一下fabric.js 这…

    2025年2月5日
    1170

联系我们

在线咨询: QQ交谈

邮件A:xinenw@qq.com

邮箱B:xinenw@163.com

工作时间:周一至周五,8:30-23:30;周六周日10:30-18:30;节假日休息

关注微信