暂无菜单项

聊聊嵌入式数据库

发布于 更新于
3

提到数据库,大多数人首先想到的都是 MySQL、PostgreSQL 或 Redis。但近年来,越来越多的桌面应用、浏览器扩展、边缘计算、IoT 设备,甚至一些后端服务,也开始选择使用嵌入式数据库。那么,什么是嵌入式数据库?它又有哪些优势?

什么是嵌入式数据库?

嵌入式数据库(Embedded Database)是一种直接集成到应用程序内部的数据库。

它不像 MySQL 或 PostgreSQL 那样需要单独安装数据库服务,而是作为一个库文件随程序一起运行。

也就是说:

  • 没有数据库服务器
  • 没有独立进程
  • 不需要监听端口
  • 不需要额外部署

应用程序可以直接读写数据库文件。

整个架构更加轻量。

与传统数据库有什么区别?

传统数据库通常采用客户端 / 服务端架构。

应用程序
    │
    ▼
MySQL Server
    │
    ▼
数据库文件

而嵌入式数据库则更加简单。

应用程序
    │
    ▼
嵌入式数据库
    │
    ▼
数据库文件

整个过程不需要网络通信,也没有额外的数据库服务。

常见的嵌入式数据库

目前比较流行的嵌入式数据库主要有下面几种。

数据库特点适用场景
SQLite最经典、最成熟手机 App、桌面软件
BoltDBGo 原生 KV 数据库Go 项目、本地配置
bboltBoltDB 的维护版本Go 服务
BadgerDB高性能 LSM 数据库缓存、本地索引
PebbleCockroachDB 使用高性能 KV
LevelDBGoogle 开源浏览器、缓存
RocksDBFacebook 开源大数据存储
LMDB内存映射数据库高性能读取

不同数据库各有特点。

例如 SQLite 更偏向关系型数据库。

而 BoltDB、BadgerDB 更适合作为 Key-Value 存储。

为什么越来越受欢迎?

1. 部署简单

这是最大的优势。

很多 Go 项目最终只需要一个可执行文件。

如果数据库也是嵌入式的,那么部署时甚至只需要:

app
data.db

无需安装:

  • MySQL
  • PostgreSQL
  • Redis

整个部署过程非常简单。

2. 性能并不差

很多人认为:

“没有数据库服务器,性能会不会很低?”

实际上并不是。

由于嵌入式数据库:

  • 没有网络通信
  • 没有 Socket
  • 没有 TCP
  • 没有 SQL 解析(部分数据库)

很多简单读写场景反而更快。

特别是:

  • 配置读取
  • 缓存
  • 日志
  • 本地索引

性能往往非常优秀。

3. 更容易发布

很多开源项目都会提供:

Windows
Linux
macOS

三个版本。

如果依赖 MySQL。

用户还需要:

安装数据库

初始化

创建用户

导入 SQL

配置连接

而嵌入式数据库只需要:

下载
启动
开始使用

用户体验会好很多。

4. 数据天然本地化

很多桌面软件都会把数据保存在:

config.db
history.db
cache.db

复制数据库文件即可完成:

  • 备份
  • 迁移
  • 恢复

不需要额外导出 SQL。

有没有缺点?

当然有。

不适合高并发写入

虽然很多嵌入式数据库支持并发。

但对于:

  • 电商
  • 社交平台
  • 大型论坛

这种高并发业务。

仍然推荐:

  • MySQL
  • PostgreSQL

因为它们拥有更加成熟的事务管理。

不适合多台服务器共享

嵌入式数据库本质上还是一个本地文件。

例如:

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 推崇:

一个二进制文件完成部署。

如果数据库也采用嵌入式。

整个项目最终可能只需要:

app
config.yaml
data.db

部署体验非常优秀。

这也是很多个人开发者和开源项目喜欢它的重要原因。

选择数据库,不是追求”最强”,而是找到最适合自己项目的方案。

0 点赞
0 收藏
分享
0 讨论
反馈
0 / 600
0 讨论
热门最新
总结
暂无总结