### [聊聊嵌入式数据库](https://blog.cikcc.com/article/262) **Published:** 2026-10-05T16:21:10 **Author:** Cik **Excerpt:** 提到数据库,大多数人首先想到的都是 MySQL、PostgreSQL 或 Redis。但近年来,越来越多的桌面… > 提到数据库,大多数人首先想到的都是 MySQL、PostgreSQL 或 Redis。但近年来,越来越多的桌面应用、浏览器扩展、边缘计算、IoT 设备,甚至一些后端服务,也开始选择使用嵌入式数据库。那么,什么是嵌入式数据库?它又有哪些优势? ## 什么是嵌入式数据库? 嵌入式数据库(Embedded Database)是一种**直接集成到应用程序内部**的数据库。 它不像 MySQL 或 PostgreSQL 那样需要单独安装数据库服务,而是作为一个库文件随程序一起运行。 也就是说: - 没有数据库服务器 - 没有独立进程 - 不需要监听端口 - 不需要额外部署 应用程序可以直接读写数据库文件。 整个架构更加轻量。 ## 与传统数据库有什么区别? 传统数据库通常采用客户端 / 服务端架构。 ```text 应用程序 │ ▼ MySQL Server │ ▼ 数据库文件 ``` 而嵌入式数据库则更加简单。 ```text 应用程序 │ ▼ 嵌入式数据库 │ ▼ 数据库文件 ``` 整个过程不需要网络通信,也没有额外的数据库服务。 ## 常见的嵌入式数据库 目前比较流行的嵌入式数据库主要有下面几种。 | 数据库 | 特点 | 适用场景 | | --- | --- | --- | | SQLite | 最经典、最成熟 | 手机 App、桌面软件 | | BoltDB | Go 原生 KV 数据库 | Go 项目、本地配置 | | bbolt | BoltDB 的维护版本 | Go 服务 | | BadgerDB | 高性能 LSM 数据库 | 缓存、本地索引 | | Pebble | CockroachDB 使用 | 高性能 KV | | LevelDB | Google 开源 | 浏览器、缓存 | | RocksDB | Facebook 开源 | 大数据存储 | | LMDB | 内存映射数据库 | 高性能读取 | 不同数据库各有特点。 例如 SQLite 更偏向关系型数据库。 而 BoltDB、BadgerDB 更适合作为 Key-Value 存储。 ## 为什么越来越受欢迎? ### 1\. 部署简单 这是最大的优势。 很多 Go 项目最终只需要一个可执行文件。 如果数据库也是嵌入式的,那么部署时甚至只需要: ```text app data.db ``` 无需安装: - MySQL - PostgreSQL - Redis 整个部署过程非常简单。 ### 2\. 性能并不差 很多人认为: > "没有数据库服务器,性能会不会很低?" 实际上并不是。 由于嵌入式数据库: - 没有网络通信 - 没有 Socket - 没有 TCP - 没有 SQL 解析(部分数据库) 很多简单读写场景反而更快。 特别是: - 配置读取 - 缓存 - 日志 - 本地索引 性能往往非常优秀。 ### 3\. 更容易发布 很多开源项目都会提供: ```text Windows Linux macOS ``` 三个版本。 如果依赖 MySQL。 用户还需要: 安装数据库 初始化 创建用户 导入 SQL 配置连接 而嵌入式数据库只需要: ```text 下载 启动 开始使用 ``` 用户体验会好很多。 ### 4\. 数据天然本地化 很多桌面软件都会把数据保存在: ```text config.db history.db cache.db ``` 复制数据库文件即可完成: - 备份 - 迁移 - 恢复 不需要额外导出 SQL。 ## 有没有缺点? 当然有。 ### 不适合高并发写入 虽然很多嵌入式数据库支持并发。 但对于: - 电商 - 社交平台 - 大型论坛 这种高并发业务。 仍然推荐: - MySQL - PostgreSQL 因为它们拥有更加成熟的事务管理。 ### 不适合多台服务器共享 嵌入式数据库本质上还是一个本地文件。 例如: ```text server-a │ data.db server-b │ data.db ``` 两台服务器不能同时写同一个数据库文件。 因此: 分布式 主从同步 读写分离 这些能力通常需要额外实现。 ## 哪些项目适合使用? 下面这些场景,其实都很适合。 - 浏览器扩展 - 桌面应用 - Electron 项目 - CLI 工具 - NAS 应用 - IoT 设备 - 单机服务 - 本地缓存 - 配置中心 - 日志系统 很多人每天都在使用 SQLite。 例如: - 微信 - Chrome - Firefox - VS Code(部分数据) - Android - iOS 它们内部都有 SQLite 的身影。 ## Go 为什么喜欢嵌入式数据库? 近年来越来越多 Go 项目开始采用: - bbolt - BadgerDB - Pebble 原因很简单: Go 推崇: > 一个二进制文件完成部署。 如果数据库也采用嵌入式。 整个项目最终可能只需要: ```text app config.yaml data.db ``` 部署体验非常优秀。 这也是很多个人开发者和开源项目喜欢它的重要原因。 > 选择数据库,不是追求"最强",而是找到最适合自己项目的方案。 **Tags:** BadgerDB, BoltDB, SQLite **Categories:** 闲聊 ---