前言:为啥你需要一款高效嵌入式数据库
说实话,现在做 IoT 或嵌入式,动不动就有成千上万条数据要存,要查,文件系统又重,还得担心 Flash 寿命……折腾人。要是有个专门针对 Flash 优化、占用少、性能又杠杠的数据库,那才叫舒服。FlashDB 就是这么一个“量身定制”的小家伙。
FlashDB 是什么鬼?
FlashDB 是一款超轻量级的嵌入式数据库,专为 Flash 器件量身打造。它不依赖繁重的文件系统,直接在扇区层面做读写,既节省了 RAM,又能把 Flash 的写擦次数平衡到极致,延长寿命。
核心目标:
-
• 资源占用极低
-
• 快速插入、查询
-
• 强可靠性(掉电不怕丢数据)
它能帮你解决哪些痛点
-
• 占用少:一般几 KB 代码+零 RAM,最小影响主程序。
-
• 闪存寿命:内置 Wear-Leveling,自动均衡磨损。
-
• 掉电保护:写到一半断电,重启能自愈。
-
• 简单易用:KV 操作就像访问字典,TS 模式也能秒级写入+查询。
-
• 可分区/多实例:数据量大?分几个逻辑区,查询更快。
两种数据库模式,灵活又高效
FlashDB 提供两大模式,满足不同场景:
|
模式 |
用途说明 |
|
Key-Value |
存配置、参数、小文件,操作简单、扩展性强 |
|
TimeSeries |
存传感器数据、日志记录,带时间戳,高吞吐 |
-
• KVDB:两个类型(string、blob),支持增量升级。
-
• TSDB:每条记录带时间戳,可修改状态字段,便于管理。
安装和快速上手
整个库在 GitHub,克隆就能用:
git clone https://github.com/armink/FlashDB.git
然后把 components/flashdb 加到你的 RTOS/裸机工程里,配置一下分区、Flash 驱动。
示例:初始化一个 KVDB,存取操作简单到爆!
#include "fdb_kvdb.h"
int main(void){
/* 初始化 FlashDB */
fdb_kvdb_t kv;
fdb_kvdb_init(&kv,"kvdb_demo", PARTITION_USER,&flash_drv);
/* 写入键值对 */
fdb_kvdb_set(&kv,"username","armink",strlen("armink"));
/* 读取 */
char buf[32];
size_t len =sizeof(buf);
fdb_kvdb_get(&kv,"username", buf,&len);
printf("user = %s\n", buf);
return0;
}
TimeSeries 模式示例也差不多,调用 fdb_tsdb_append()、fdb_tsdb_query() 就行。
性能和占用——小身板大能量
我们跑了两个测试:
TSDB 写入/查询性能(W25Q64 外置 Flash)
|
操作 |
条数 |
总耗时(ms) |
平均耗时 |
|
Append |
1250 |
5000 |
4.00 ms |
|
Query |
1251 |
2218 |
1.77 ms |
TSDB 写入/查询性能(STM32F2 内置 Flash)
|
操作 |
条数 |
总耗时(ms) |
平均耗时 |
|
Append |
13421 |
5000 |
0.37 ms |
|
Query |
13422 |
1475 |
0.11 ms |
模块占用(STM32F4/IAR8.20)
|
模块 |
ro code (B) |
ro data (B) |
rw data (B) |
|
fdb.o |
276 |
232 |
1 |
|
fdb_kvdb.o |
4584 |
356 |
1 |
|
fdb_tsdb.o |
1160 |
236 |
— |
|
fdb_utils.o |
418 |
1024 |
— |
可以看到,代码区连四位数都没破,跑得快还省空间。
优缺点一览
|
优点 |
缺点 |
|
极小的 Flash/RAM 占用 |
目前只支持扇区型 NOR/NAND |
|
强大的 Wear-Leveling 和掉电保护 |
API 还在迭代,部分场景需适配 |
|
KV 与 TS 两种模式,场景覆盖全 |
需要对 Flash 分区做预先规划 |
|
开源 Apache-2.0,社区活跃 |
文档有时要多看几遍 |
总结:谁适合用 FlashDB
简单来说,做 IoT、智能家居、可穿戴设备、小型工业控制器,只要有 Flash 存储需求,想要低成本、高性能、可靠存储,就冲它!项目开源、轻量、文档齐全,上手快,社区 ook 也在日渐壮大。如果你正头疼嵌入式数据存储,不妨给 FlashDB 一试。
项目地址:https://github.com/armink/FlashDB