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































