跳转到内容

SQLite:修订间差异

轻之舟百科,让知识轻装启航
云云​(留言 | 贡献)
小无编辑摘要
IdleTap-bot​(留言 | 贡献)
由旧格式Infobox转换为新参数格式(label/data),修复空信息框(由IdleTap-bot执行)
 
第1行: 第1行:
{{Infobox
{{Infobox
| 标题 = SQLite
| title = SQLite
| 内容 =  
 
{{!}}-
| label1 = 开发者
! 开发者
| data1 = D. Richard Hipp
{{!}} D. Richard Hipp
 
{{!}}-
| label2 = 首次发布
! 首次发布
| data2 = 2000年8月
{{!}} 2000年8月
 
{{!}}-
| label3 = 稳定版本
! 稳定版本
| data3 = 3.x(持续更新)
{{!}} 3.x(持续更新)
 
{{!}}-
| label4 = 编程语言
! 编程语言
| data4 = ANSI-C
{{!}} ANSI-C
 
{{!}}-
| label5 = 操作系统
! 操作系统
| data5 = 跨平台
{{!}} 跨平台
 
{{!}}-
| label6 = 类型
! 类型
| data6 = 嵌入式关系数据库引擎
{{!}} 嵌入式关系数据库引擎
 
{{!}}-
| label7 = 许可证
! 许可证
| data7 = [[公有领域]]
{{!}} [[公有领域]]
 
{{!}}-
| label8 = 官方网站
! 官方网站
| data8 = https://sqlite.org
{{!}} https://sqlite.org
}}
}}



2026年8月11日 (二) 10:30的最新版本

SQLite
开发者D. Richard Hipp
首次发布2000年8月
稳定版本3.x(持续更新)
编程语言ANSI-C
操作系统跨平台
类型嵌入式关系数据库引擎
许可证公有领域
官方网站https://sqlite.org

SQLite是一个嵌入式关系数据库引擎,以自包含(self-contained)、无服务器(serverless)、零配置(zero-configuration)及事务性(transactional)为设计特征。[1] 由美国开发者D. Richard Hipp于2000年创建,其源代码处于公有领域,可自由用于任何目的。[2] 整个数据库存储于单个跨平台磁盘文件中,应用程序通过链接SQLite库直接读写该文件,无需独立的服务器进程或管理配置。[1] 据官方估计,全球活跃的SQLite数据库数量超过一万亿个,使其成为历史上部署最广泛的数据库引擎。[3]

SQLite诞生于2000年春季,创始人D. Richard Hipp当时受雇于General Dynamics,为美国海军导弹驱逐舰项目开发软件。[4] 项目最初使用HP-UX系统与IBM Informix数据库,但数据库服务器频繁故障导致应用程序崩溃,促使Hipp思考"为什么我们需要一个服务器?"[3] 这一疑问催生了SQLite的设计理念:一个无需安装、无需管理、直接嵌入应用程序的数据库引擎。

2000年8月,SQLite 1.0正式发布,最初基于GNU Database Manager(gdbm)构建。[5] 随后SQLite 2.0以自定义B树实现替代gdbm,并加入事务支持。2004年6月,SQLite 3.0.2 beta发布,引入了动态类型系统、UTF-8/UTF-16支持及更灵活的数据库模式,奠定了现代SQLite的架构基础。[5]

2006年,SQLite被纳入Android操作系统;2007年,被纳入Apple iOS。[6] 此后,SQLite迅速渗透至各类计算平台。2011年,Hipp宣布计划为SQLite添加UNQL接口,并开发文档型数据库UNQLite。[5]

SQLite的源代码由Hipp及其小型团队通过Fossil分布式版本控制系统维护,不接受外部贡献,以确保代码完全处于公有领域。[2] Hipp将SQLite测试至航空软件标准,实现了100%分支覆盖率,此后Android等平台的bug报告显著减少。[3]

技术特性

[编辑 | 编辑源代码]

无服务器架构

[编辑 | 编辑源代码]

与传统客户端/服务器数据库不同,SQLite没有独立的服务器进程。[7] 应用程序通过函数调用直接与数据库文件交互,在同一进程内完成数据读写,避免了进程间通信的开销。[1] 任何能够访问磁盘的程序均可使用SQLite数据库,无需安装、配置或启动服务。

零配置

[编辑 | 编辑源代码]

SQLite无需安装程序、配置文件或管理权限。不存在需要创建的数据库实例,也无需分配用户访问权限或进行恢复操作。[1] 系统崩溃或断电后无需人工干预即可自动恢复。这一特性使其特别适合嵌入式系统、移动应用及需要简化部署流程的场景。

单文件存储

[编辑 | 编辑源代码]

完整的SQLite数据库——包括表、索引、触发器、视图及数据本身——存储于单个跨平台磁盘文件中。[8] 该文件格式可在32位与64位系统之间、大端序与小端序架构之间自由复制。数据库文件大小仅受限于底层文件系统,理论上限约140TB。[8]

事务与并发

[编辑 | 编辑源代码]

SQLite支持完全兼容ACID(原子性、一致性、隔离性、持久性)的事务,即使在系统崩溃或断电后也能保证数据完整性。[1] 其采用数据库级锁定机制,在事务开始时锁定整个数据库文件。在嵌入式数据库中,SQLite是唯一允许多个应用程序同时访问同一数据库的实现。[7]

体积与性能

[编辑 | 编辑源代码]

SQLite核心库体积小巧,完整配置下不足400KiB,省略可选功能后可降至250KiB以下。[1] 引擎以ANSI-C编写,不依赖外部库,可直接编译为单一源文件嵌入其他项目。[8] 尽管体积极小,SQLite实现了SQL92标准的大部分功能,包括子查询、事务、触发器及视图等。

应用领域

[编辑 | 编辑源代码]

SQLite的部署范围极为广泛。它内置于Android、iOS、macOS、Windows 10及主流Linux发行版中,亦是Chrome、Firefox、Safari等浏览器的组成部分。[8] 此外,Skype、iTunes、Dropbox、TurboTax、QuickBooks及Adobe Photoshop Lightroom等应用均采用SQLite作为本地数据存储方案。[6] 在编程语言层面,PHP、Python及Tcl/Tk的标准库均包含SQLite绑定。

在嵌入式与物联网领域,SQLite被用于汽车多媒体系统、机顶盒、智能电视及航空电子系统(如Airbus A350)。[3] 其作为应用文件格式的角色亦日益重要,例如OGC GeoPackage地理数据格式即基于SQLite构建,质谱数据格式mzDB亦采用其作为基础。[8]

与客户端/服务器数据库的比较

[编辑 | 编辑源代码]

SQLite与MySQL、PostgreSQL、Oracle等客户端/服务器数据库的设计目标不同。后者旨在实现企业级数据的共享存储,支持高并发、多用户及复杂查询优化;SQLite则专注于为单个应用程序提供本地数据存储,强调零管理开销与嵌入式部署。[8]

在客户端/服务器架构中,独立的服务器进程可提供更强的内存隔离与更精细的并发控制;SQLite的无服务器设计则消除了安装、配置与维护服务器的负担,但在高写入并发场景下性能受限。[7] 因此,SQLite适用于移动应用、桌面软件、嵌入式设备及中小型网站,而传统客户端/服务器数据库更适合高并发Web服务、数据仓库及企业级应用。

参考文献

[编辑 | 编辑源代码]