SQLite01-入门

文章目录

SQLite01-入门

1、简介

(1)数据库基础
(2)介绍
  • 官网地址:https://www.sqlite.org/
  • 源码地址:https://github.com/sqlite/sqlite
  • SQLite 是一个轻量级、嵌入式、无服务器的关系型数据库引擎,以 C 语言库的形式实现。它将整个数据库(包括表、索引和数据)存储在单个磁盘文件中,无需独立服务进程
(3)核心特点
  • 零配置:无需安装或管理后台服务,直接访问磁盘文件即可使用。
  • 跨平台兼容:支持 Windows、Linux、macOS、Android、iOS 等系统。
  • 轻量高效:库文件体积小(可低于 600KB),内存占用低,适合资源受限环境。
  • ACID 事务支持:确保数据的原子性、一致性、隔离性和持久性。
  • 开源免费:代码属于公共领域,可商用且无授权限制。
(4)典型应用场景
  • 嵌入式设备:工业控制器、医疗仪器等,依赖其低资源消耗和独立性。
  • 移动应用:Android/iOS 默认集成,用于本地存储(如用户配置、缓存)。
  • 桌面软件:替代文件操作(如 fopen()),管理小型数据。
  • 小型 Web 应用:个人博客或低频访问系统,简化部署。
(5)局限性
  • 并发性能弱:基于文件锁机制,高并发写入时效率较低。
  • 功能精简:
    • 不支持 FULL OUTER JOINALTER TABLE DROP COLUMN 等高级 SQL 语法。
    • 视图只读,不可通过视图修改数据。
  • 存储容量上限:单库理论支持 2TB,但超大规模数据性能受限。
(6)开发支持
  • 多语言接口:提供 C/C++、Python、Java、PHP 等 API。
  • 命令行工具:内置 CLI 客户端,支持直接执行 SQL 管理。

2、发展历程

(1)诞生背景(1999-2000年)
  • 灵感来源
    SQLite的创始人D. Richard Hipp在参与美国海军导弹驱逐舰项目时,发现传统数据库(如Informix)在嵌入式场景中过于臃肿,安装和维护成本高昂。这促使他设计一个轻量级、无服务器的数据库解决方案。
  • 初版发布
    2000年8月,SQLite 1.0正式发布,采用GNU数据库管理器(GDBM)作为初始存储引擎,核心目标是实现零配置、单文件存储。其名称"SQLite"既指轻量化(Light),也暗含与创始人女儿"My"的关联。
(2)技术突破期(2000-2004年)
  • 架构革新(V2-V3版本)
    • 2001年V2版:支持多线程并发,但稳定性不足。
    • 2004年V3版:彻底重构B-Tree存储引擎,引入ACID事务支持和跨平台兼容性,性能提升10倍以上,支持TB级数据存储。此版本成为SQLite被广泛采用的基础。
  • 开源与标准化
    • 代码采用公共领域授权(无版权限制),允许任何个人或企业免费商用。同时兼容SQL-92标准,提供C/C++、Python等多语言接口。
(3)成熟与生态扩展期(2004-2020年)
  • 关键版本迭代
    • 2006年V3.3.0:支持全文搜索(FTS3模块),增强数据处理能力。
    • 2010年V3.6.0:引入预写日志(WAL)模式,显著提升多进程并发写入性能。
    • 2014年V3.8.0:新增JSON1扩展,适应现代Web应用的数据交换需求。
  • 行业渗透
    • 移动端:成为Android和iOS的默认内置数据库,支撑本地存储(如通讯录、应用缓存)。
    • 嵌入式设备:应用于工业控制器、医疗仪器等低资源环境,全球装机量超万亿级。
(4)持续演进与现代应用(2020年至今)
  • 新特性与优化
    • 2023年V3.42.0:增强窗口函数支持,提升复杂查询效率。
    • 2025年V3.45.0:优化JSONB二进制存储格式,减少解析开销。
  • 未来方向
    • 安全强化:探索数据加密与隐私保护机制。
    • 云适配:研究分布式扩展方案,突破单文件存储限制。
(5)版本变更日志
  • SQLite 的官方主页 https://www.sqlite.org 提供了详细的发布历史和每个版本的发布说明。你可以访问 Change Log 页面查看所有版本的变更记录,或者访问 Release History 页面查看按时间顺序排列的版本历史。
  • 版本号的含义:版本号通常由三个部分组成:主版本号.次版本号.修订版本号,例如 3.42.0
    • 主版本号 (Major Version):
      • 当 SQLite 做出不兼容的 API 或 ABI(应用程序二进制接口)更改时,主版本号会增加。例如,从 2.x 到 3.x 是一次重大升级,涉及了数据库文件格式的变更。
    • 次版本号 (Minor Version):
      • 次版本号表示添加了新的功能或特性,但保持向后兼容。也就是说,新版本可以读取旧版本创建的数据库文件,并且 API 和 ABI 仍然兼容。
    • 修订版本号 (Patch Version):
      • 修订版本号表示对现有功能的错误修复和小的改进。这些更新通常是安全的,不会引入新的功能,也不会破坏现有的功能。

3、体系架构

(1)模块化架构分层
  • SQLite采用分层设计,由编译器、虚拟机与后端存储三大子系统构成,各层独立协作。
  • 接口层(Interface)
    • 提供C语言API,支持Python/Java/PHP等语言扩展调用
    • 核心接口:sqlite3_open()(连接数据库)、sqlite3_exec()(执行SQL)、sqlite3_prepare()(预处理语句)
  • 编译器(Compiler)
    • 分词器(Tokenizer):将SQL字符串拆解为语法标记(Tokens)
    • 解析器(Parser):基于Lemon LALR(1) 生成器,构建语法树(Syntax Tree)
      • 优化点:Tokenzier主动调用Parser,避免YACC/BISON的滞后性问题
    • 代码生成器(Code Generator):将语法树转为虚拟机器码(VDBE字节码)
      • 按SQL类型分工:select.c处理查询,insert.c处理插入,where.c优化条件过滤
(2)虚拟机(VDBE)------ 执行引擎核心
  • 虚拟数据库引擎(VDBE) 解释执行编译器生成的字节码,模拟CPU处理流程。
  • 指令集特性
    • 128个操作码(Opcodes),专为数据库操作设计(如OpenCursor打开游标)
    • 基于栈式存储:中间结果暂存于内存栈,指令操作数≤3个
  • 关键模块
    • vdbe.c:虚拟机主执行逻辑
    • vdbeaux.c:辅助函数(如字节码组装)
    • vdbemem.c:管理Mem对象(存储整数、文本等数据类型)
  • 💡 例:SELECT * FROM table → 生成OpenRead(打开表)、Next(遍历行)等指令序列
(3)后端存储(Back-End)------ 数据持久化引擎
  • 负责磁盘数据管理,包含两级关键组件:
  • B-tree索引引擎
    • 文件位置:btree.c
    • 功能:管理表/索引的树形结构,实现O(log n)复杂度检索
    • 特性:每个表/索引独立B-tree,全库存于单一磁盘文件
  • 页缓存(Pager)
    • 文件位置:pager.c
    • 核心职责:
      • 缓冲磁盘页(默认1KB/页,可配置512B~64KB)
      • 实现ACID事务:通过预写日志(WAL模式)和回滚日志保证原子性
      • 锁机制:文件锁控制并发写入(高并发场景性能受限的主因)
(4)关键协作流程(以写入为例)
(5)架构特性与局限
  • 优势
    • 单文件设计:零部署依赖,跨平台兼容
    • 轻量化:核心库<600KB,内存占用低
  • 局限
    • 并发瓶颈:文件锁机制限制多进程写入
    • 功能裁剪:
      • 不支持存储过程、FULL OUTER JOIN
      • 视图只读(不可通过视图修改数据)
相关推荐
老邓计算机毕设2 小时前
SSM校园服装租赁系统864e2(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·校园服装租赁系统
曹牧2 小时前
Oracle:硬解析
数据库·oracle
请你喝好果汁6412 小时前
cellchat
数据库·oracle
小宇的天下2 小时前
Calibre eqDRC(方程化 DRC)核心技术解析与实战指南(14-1)
数据库·windows·microsoft
傻啦嘿哟2 小时前
Python自动整理音乐文件:按艺术家和专辑分类歌曲
数据库·python·分类
酸菜牛肉汤面2 小时前
16、事物的四大特性(ACID)介绍一下?
数据库·oracle
FourAu2 小时前
更改mysql在电脑中的存储位置
数据库·mysql
AI题库3 小时前
PostgreSQL 18 从新手到大师:实战指南 - 2.4 备份与恢复策略
数据库·postgresql·oracle·数据库备份
晴天¥3 小时前
Oracle中的概要文件
运维·数据库·oracle