SQLite
SQLite 是一个自包含、无服务器、零配置的关系型数据库引擎。与传统的数据库服务器不同,SQLite 以一个简单的库的形式发布,你可以将它直接嵌入到应用程序中。本指南将介绍 SQLite 的核心概念,解释它为何深受开发者欢迎,说明它与其他数据库系统的区别,并展示如何在 Divooka 的可视化编程环境中利用它。
为什么选择 SQLite?
对许多编程新手来说,搭建一个客户端–服务器数据库(例如 MySQL、PostgreSQL)就像同时学习两样东西:编程和系统管理。SQLite 免除了这些额外负担:
- 零配置 无需安装或管理守护进程 —— 应用程序只需打开一个文件。
- 轻量且可移植 整个数据库存放在单个跨平台文件中(库代码通常只有几百 KB)。
- 广泛的语言支持 Python、JavaScript、C#、Java、Go、Rust 等语言都有对应的绑定 —— 因此你可以用已经掌握的语言开始查询数据。
凭借其简单性,SQLite 成为了世界上部署最广泛的数据库引擎,从移动应用、桌面软件到物联网设备和网页浏览器,处处都有它的身影。
核心架构
基于文件的存储
- 单个文件:定义、表、索引和数据全部存放在一个
.db(或.sqlite3)文件中。 - 跨平台:你可以在 Windows、macOS、Linux 和移动设备之间直接复制数据库文件,无需转换。
SQLite 基于文件的特性使数据库的备份和迁移变得极其简单。
无服务器且可嵌入
- 是库而非服务器:应用程序链接
libsqlite3并直接调用 C API(或更高层的封装)—— 不存在单独的“数据库进程”。 - 更低的延迟:读写操作在进程内完成,避免了客户端–服务器架构中的进程间通信开销。
动态类型(“清单类型”)
- 类型属于值而非列:列具有“类型亲和性”(例如
INTEGER、TEXT),但 SQLite 不会拒绝插入到INTEGER列中的字符串 —— 它会尝试进行转换。 - 可选的严格模式:在较新的版本中,如有需要,你可以声明
CREATE TABLE ... STRICT来强制执行传统的 SQL 类型检查。
并发模型
- 读写锁:多个读取者可以同时操作,但写入时会获取文件的排他锁。
- 预写日志(WAL):通过将更改追加到单独的日志中,实现并发读写,提高混合负载下的吞吐量。
与其他数据库的主要区别
| 方面 | SQLite | 客户端–服务器数据库 |
|---|---|---|
| 部署 | 嵌入一个库;打开本地文件 | 安装并维护单独的服务器 |
| 配置 | 零配置;由文件系统管理 | 需要用户帐户、端口等 |
| 进程架构 | 进程内库调用 | 通过网络协议进行进程间通信 |
| 类型 | 动态的清单类型 | 静态的、强制的列类型 |
| 并发 | 串行化写入(可选 WAL) | 通过服务器实现真正的并发写入 |
| 备份 | 复制文件或使用在线备份 API | 使用转储工具或复制 |
实际用例
- 桌面和移动应用 存储用户设置、偏好设置和离线数据,而无需捆绑完整的数据库服务器。
- 嵌入式和物联网设备 由于占用空间极小,固件和边缘计算模块通常依赖 SQLite 进行本地数据持久化。
- 原型设计与测试 为实验和单元测试快速搭建一个关系型存储 —— 无需任何初始化脚本。
- 高可用读取 需要大量并发读操作的应用程序(例如分析仪表板)可以受益于 SQLite 的低延迟访问。
- 基于文件的数据交换
在团队或工具(例如 GIS 软件、数据科学笔记本)之间共享一个
.db文件,就像共享 CSV 一样简单。
Divooka 中的 SQLite
在 Divooka 的可视化编程语言中,SQLite 扮演以下角色:
- 内存数据引擎:对你在画布上处理的数据运行查询 —— 可以把它看作无需磁盘 I/O 的临时表。
- 持久化存储:Divooka Explore 预装了 SQLite,因此你无需任何额外配置即可保存和加载数据 —— 只需为数据库指定一个文件路径即可。
- 简单的 Web 界面:O'ista Web 框架提供了在线托管 SQLite 并带身份验证的功能,以便他人访问该数据库。
这种集成意味着你可以将一个“SQL Query”节点拖到工作流中,让它指向内存中的数据集或已保存的 .db 文件,然后立即开始筛选、聚合和连接表 —— 一切都在 Divooka 的可视化界面中完成。
入门
打开/创建数据库
-- In the sqlite3 shell: .open my_project.db创建表
CREATE TABLE users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, joined DATE );插入示例数据
INSERT INTO users (name, joined) VALUES ('Alice', '2025-06-01'), ('Bob', '2025-06-15');运行查询
SELECT id, name FROM users WHERE joined >= '2025-06-10';
在 Divooka Explore 中,同样的 SQL 片段可以输入到 SQL 查询块节点中,让你将 SQL 与可视化数据流混合使用。
结语
SQLite 为初学者学习 SQL 和构建数据驱动的应用程序提供了一条顺畅的道路,同时也为更有经验的开发者提供了 ACID 事务、全文搜索和 JSON 支持等高级功能。它将简单性、可移植性和性能独特地结合在一起,使其成为独立项目以及 Divooka 等环境内集成的理想伙伴。无论你是第一次接触数据库,还是在设计嵌入式系统,SQLite 都是一个能随需求扩展的工具 —— 而且无需服务器。
参考资料
另请参阅: