简体中文
English 简体中文 繁體中文
Methodox 首页

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 使用转储工具或复制

实际用例

  1. 桌面和移动应用 存储用户设置、偏好设置和离线数据,而无需捆绑完整的数据库服务器。
  2. 嵌入式和物联网设备 由于占用空间极小,固件和边缘计算模块通常依赖 SQLite 进行本地数据持久化。
  3. 原型设计与测试 为实验和单元测试快速搭建一个关系型存储 —— 无需任何初始化脚本。
  4. 高可用读取 需要大量并发读操作的应用程序(例如分析仪表板)可以受益于 SQLite 的低延迟访问。
  5. 基于文件的数据交换 在团队或工具(例如 GIS 软件、数据科学笔记本)之间共享一个 .db 文件,就像共享 CSV 一样简单。

Divooka 中的 SQLite

在 Divooka 的可视化编程语言中,SQLite 扮演以下角色:

  1. 内存数据引擎:对你在画布上处理的数据运行查询 —— 可以把它看作无需磁盘 I/O 的临时表。
  2. 持久化存储:Divooka Explore 预装了 SQLite,因此你无需任何额外配置即可保存和加载数据 —— 只需为数据库指定一个文件路径即可。
  3. 简单的 Web 界面:O'ista Web 框架提供了在线托管 SQLite 并带身份验证的功能,以便他人访问该数据库。

这种集成意味着你可以将一个“SQL Query”节点拖到工作流中,让它指向内存中的数据集或已保存的 .db 文件,然后立即开始筛选、聚合和连接表 —— 一切都在 Divooka 的可视化界面中完成。

入门

  1. 打开/创建数据库

    -- In the sqlite3 shell:
    .open my_project.db
    
  2. 创建表

    CREATE TABLE users (
      id INTEGER PRIMARY KEY,
      name TEXT NOT NULL,
      joined DATE
    );
    
  3. 插入示例数据

    INSERT INTO users (name, joined)
    VALUES ('Alice', '2025-06-01'),
           ('Bob',   '2025-06-15');
    
  4. 运行查询

    SELECT id, name
    FROM users
    WHERE joined >= '2025-06-10';
    

在 Divooka Explore 中,同样的 SQL 片段可以输入到 SQL 查询块节点中,让你将 SQL 与可视化数据流混合使用。

结语

SQLite 为初学者学习 SQL 和构建数据驱动的应用程序提供了一条顺畅的道路,同时也为更有经验的开发者提供了 ACID 事务、全文搜索和 JSON 支持等高级功能。它将简单性、可移植性和性能独特地结合在一起,使其成为独立项目以及 Divooka 等环境内集成的理想伙伴。无论你是第一次接触数据库,还是在设计嵌入式系统,SQLite 都是一个能随需求扩展的工具 —— 而且无需服务器。

参考资料

另请参阅: