服务端阅读 06月1日 00:42
SQLite 有哪些核心特点?适合放在哪些项目里?
SQLite 的核心特点可以用一句话概括:它把一个完整的关系型数据库做成了可嵌入的本地库。你不需要启动数据库服务器,也不需要配置账号和端口,应用直接读写一个数据库文件。这种设计让 SQLite 在移动应用、桌面软件、IoT 设备、命令行工具和小型网站里非常常见。零配置和单文件是最大优势SQLite 不需要安装服务,数据库通常就是一个 .db 文件。备份、复制、随应用分发都很方便,开发环境也更容易复现。比如你可以直接用命令行打开文件:sqlite3 local.db.tables.schema user单文件也有边界。它很适合本地磁盘,不适合多个机器通过网络文件系统同时写。网络文件锁不稳定时,轻则报锁错误,重则出现一致性风险。小而完整,不等于玩具数据库SQLite 支持事务、索引、视图、触发器、外键、窗口函数、CTE、JSON 函数和全文搜索扩展。对于很多中小型应用,它提供的能力已经足够。它的延迟很低,因为应用和数据库之间没有网络往返;查询本地小数据集时,体验往往比远程数据库更快。PRAGMA foreign_keys = ON;CREATE TABLE note ( id INTEGER PRIMARY KEY, title TEXT NOT NULL, body TEXT NOT NULL, updated_at TEXT NOT NULL);CREATE INDEX idx_note_updated ON note(updated_at DESC);外键默认是否开启要看连接配置,实际项目里建议每次建连后显式设置。很多“SQLite 不可靠”的抱怨,最后都能追到约束没开、事务没包、锁没处理。它适合什么,不适合什么适合 SQLite 的场景通常有几个共同点:部署环境简单,数据主要归单个应用或单个用户所有,写入并发不高,希望减少运维依赖。移动端 App 的离线数据、本地搜索索引、浏览器插件配置、桌面软件项目文件、小型内部工具都很典型。不适合的场景也很明确:大量用户同时写入、多个应用服务器共享同一个写库、需要细粒度数据库权限、需要内置复制和故障转移。SQLite 可以服务线上系统的一部分,但不应该被硬塞进所有数据库角色里。追问SQLite 为什么说是 serverless?这里的 serverless 不是云函数那个意思,而是没有独立数据库服务器进程。数据库引擎作为库链接到应用里,应用通过文件系统直接访问数据文件。好处是部署极简、延迟低,坏处是连接管理、访问权限和并发边界要由应用自己承担。取舍很清楚:少一层服务,就少一层运维,也少了一些集中治理能力。SQLite 的性能到底好不好?在本地读、小事务写和中小数据量场景下,SQLite 性能很好,尤其省掉网络开销后很占优势。慢通常出现在没有索引、频繁单条提交、长事务占锁或把它放到不适合的网络存储上。批量写入时用事务包起来,差距会非常明显。边界是高并发写入和复杂跨用户查询不是它的主战场。单文件数据库备份是不是直接复制就行?没有写入时直接复制通常可以;有写入时,最好使用 SQLite 的在线备份 API,或者通过 .backup 命令。WAL 模式下还要注意主数据库文件、-wal 和 -shm 文件之间的一致性。踩坑点是只复制了 .db,漏掉 WAL 里的最新提交,恢复后发现数据少了一截。保守做法是先 checkpoint,再按推荐方式备份。SQLite 适合团队协作系统吗?如果团队协作只是少量用户、低频写入、单机部署,可以评估。只要变成多实例 Web 服务、多人同时编辑、需要权限审计和高可用,就更适合 MySQL 或 PostgreSQL。SQLite 的优势是简单,不是替代所有服务器数据库。项目早期可以用它降低复杂度,但要提前想好数据增长和迁移边界。