Featured image of post 不要什么都用 PostgreSQL!SQLite 的嵌入式架构与零配置优势是什么?SQLite 的极限在哪?什么时候该选 SQLite、什么时候该选 PostgreSQL?

不要什么都用 PostgreSQL!SQLite 的嵌入式架构与零配置优势是什么?SQLite 的极限在哪?什么时候该选 SQLite、什么时候该选 PostgreSQL?

SQLite 是世界上部署最广泛的嵌入式数据库引擎,单一文件、零配置、免安装服务器。了解 SQLite 与 PostgreSQL 的核心架构差异、各自适用情境、SQLite 的极限(并发写入锁定、无法跨服务器、缺乏权限管理)。

你有没有想过,你每天打开的浏览器、手机里的通讯软件、甚至桌面上的笔记工具,里面都藏着同一个轻巧的数据库?

它不需要你安装任何服务器软件,不需要设置账号密码,甚至不需要网络连接。它就是一个 文件,静静地躺在你的硬盘里,随时准备好为你服务。

这个低调的存在,就是 SQLite。

什么是 SQLite?世界上部署最广泛的数据库

SQLite 是一个用 C 语言编写的 嵌入式关系型数据库引擎。

它没有独立的服务器程序,而是直接嵌入你的应用程序中运作。

这跟你熟悉的 PostgreSQL 或 MySQL 完全不同。传统数据库是一台 独立运作的服务器,你的程序必须透过 网络协议(TCP/IP) 去跟它「通讯」。

但 SQLite 不一样,它就是一段代码,直接跑在你的应用程序里面,读写硬盘上的那个 .db 文件。

比较维度 SQLite(嵌入式) PostgreSQL(Client-Server)
运作方式 直接嵌入应用程序,无独立服务器 独立服务器程序,透过网络连接
配置需求 零配置,免安装、免帐密 需要安装、配置账号密码与防火墙
数据存储 单一跨平台文件 服务器目录下的多个文件
备份方式 直接复制那个文件 需要使用 pg_dump 等专用工具

正因为这种 「即插即用」 的特性,SQLite 成为了世界上部署最广泛的数据库引擎。

从 Android 和 iOS 操作系统、Chrome 和 Firefox 浏览器,到 Adobe Lightroom、WhatsApp,甚至是 Airbus A350 的飞行系统,处处都有它的身影。

在 Node.js 中使用 SQLite

如果你是 Node.js 开发者,使用 SQLite 非常简单。你不需要在电脑上安装任何数据库服务器软件,只需要安装一个 npm 套件就能开始。

目前行业最常用的选择:

套件名称 特点 建议情境
sqlite3 最老牌,支持异步 API 需要大量同时处理多个异步任务
better-sqlite3 性能极佳,API 设计直观,速度极快 首选推荐,追求开发效率与执行速度

用 better-sqlite3 建立数据库并查询,不用五分钟就能完成:

const Database = require('better-sqlite3');
const db = new Database('my_project.db');

db.prepare('CREATE TABLE IF NOT EXISTS users (name TEXT, age INTEGER)').run();

const insert = db.prepare('INSERT INTO users (name, age) VALUES (?, ?)');
insert.run('John', 25);

const user = db.prepare('SELECT * FROM users WHERE name = ?').get('John');
console.log(user); // { name: 'John', age: 25 }

如果文件不存在,better-sqlite3 会 自动帮你建立。

SQLite 支持的 SQL 语法比你想的强大

很多人以为 SQLite 很阳春,但它支持绝大多数的标准 SQL 语法,包含许多进阶功能:

语法类别 支持项目
基础操作 SELECT、INSERT、UPDATE、DELETE
数据定义 CREATE TABLE、CREATE INDEX、CREATE VIEW
进阶查询 WITH (CTE 递归查询)、窗口函数(Window Functions)
冲突处理 UPSERT (INSERT ... ON CONFLICT DO UPDATE)
JSON 处理 json_extract、json_array、json_object 等内建函数
事务控制 BEGIN、COMMIT、ROLLBACK、SAVEPOINT
连接查询 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL OUTER JOIN

SQLite 的核心哲学是「小而美」,它支持多数你日常需要的 SQL 能力,同时保持极致的轻量。

SQLite 的极限在哪?

轻巧是有代价的。如果把 SQLite 比喻为一间 只有一个结账柜台的文青杂货店,那 PostgreSQL 就是 配备 50 个收银台的好市多。

1. 写入大塞车

SQLite 在写入数据时,会把整个数据库文件 锁起来。

想像一间 只有一间厕所的餐厅:100 个人可以同时在外面看菜单(读取),但只要有 1 个人进去把门锁上(写入),其他人就只能排队等。

虽然开启 WAL 模式 (Write-Ahead Logging) 能改善读写并行的性能,但本质上仍然无法做到多线程同时写入不同的数据行。

2. 无法跨多台服务器

SQLite 的本质就是一个实体文件。如果你的系统部署在多台服务器上(水平扩展),这些服务器 无法安全地共用同一个文件。

3. 缺乏精细的权限管理

SQLite 没有「使用者账号」的概念。谁能在操作系统层面读取那个 .db 文件,谁就能看光、修改所有数据。

对于 需要严格个资审查的商务系统,这是无法接受的。

SQLite vs. PostgreSQL:技术选型决策

工具没有好坏,只有适不适合。以下是一份帮助你做决策的终极检核表:

提問 答「是」→ 选 SQLite 答「否」→ 选 PostgreSQL
后端服务器是不是只有一台,或完全跑在本机端? 是 否(有水平扩展、多台机器)
系统行为是不是读远远大于写,且没有高频并行写入? 是 否(大家会同时抢着写入)
不需要精细的数据库账号权限或进阶索引? 是 否(极度依赖进阶功能)

更具体的情境对照:

情境 推荐选择 理由
桌面软件、手机 App、IoT 设备 SQLite 数据跟着设备走,免安装
个人部落格、展示型官网 SQLite 读多写少,省去维护服务器成本
快速原型开发、Demo SQLite 建个文件就能开工
社区论坛、电商平台 PostgreSQL 高并发写入,需要行级锁
多台服务器分散部署 PostgreSQL 需要跨机器共享数据源
医疗、金融等敏感系统 PostgreSQL 需要严格的角色权限管控

你的数据库是随身笔记还是中央总机

如果数据是 「单机、静态、单一拥有者」,选 SQLite 享受极致的轻量与自由;

如果数据是 「云端、動態、高度互动」,让 PostgreSQL 接管。

SQLite 的核心哲学是 「应用程序的内部元件」,而 PostgreSQL 的定位是 「系统架构的独立中枢」。

下次在架构决策时,别急着拿出 PostgreSQL,先问问自己:

「我的数据库,是拿来当随身笔记,还是中央总机?」

答案清楚了,选择自然就明确了。

Reference

All rights reserved,未經允許不得隨意轉載
Built with Hugo
主题 Stack 由 Jimmy 设计