您的位置首页 >科技要闻 >

嵌入式轻量存储开源库 FlashDB 介绍

FlashDB 是专门给单片机、物联网设备做的超轻量嵌入式数据库,直接跑在 Flash 上,不用依赖文件系统,非常适合资源紧张的 MCU 项目,也是很多嵌入式开发者替代 EasyFlash 的首选库。它用 C 语言开发,开源协议是 Apache2.0,自带 KV 键值库和 TSDB 时序库两种存储模式,RAM 占用几乎接近 0,内置磨损平衡、掉电保护,能直接在片内 Flash 或者 SPI Nor Flash 上存配置、传感器日志,不用上 FatFS 这类文件系统,节省很多 ROM 和内存资源。上手的时候第一步先把 FAL 闪存抽象层移植好,FlashDB 是依托 FAL 来管理 Flash 分区;第二步根据业务选库类型,存参数、配置就用 KVDB,存周期性传感器数据、运行日志就用 TSDB;第三步在头文件里配置 FDB_WRITE_GRAN 写粒度、扇区大小,这一步很容易踩坑,写粒度必须和 Flash 手册里最小写入单位保持一致;第四步调用初始化接口,读写、查询数据,最后做掉电场景的稳定性测试。整体上手门槛不算高,官方文档、示例工程都很齐全,在 STM32、RT-Thread 平台适配成熟,在小容量 MCU 里做断电数据存储,FlashDB 综合表现要比传统文件系统方案更省心、更耐用。

FlashDB 两种数据库模式

  • KVDB 键值数据库:以 key-value 形式保存,适合产品参数、用户配置、小批量静态数据,支持字符串、二进制 blob,固件升级还支持 KV 增量升级,不用清空旧配置。
  • TSDB 时序数据库:带时间戳,按时间顺序存数据,适合传感器采集、设备运行日志,插入和查询速度快,还可以单独修改单条记录状态。

FlashDB 核心优势清单

  1. 资源占用低,RAM 几乎零开销,小容量 MCU 也能跑
  2. 原生适配 Flash 特性,自带磨损平衡,延缓 Flash 擦写老化
  3. 内置掉电保护,意外断电重启不容易损坏数据库
  4. 支持多分区、多数据库实例,不同业务数据分开存放,查询更快
  5. 不强制依赖文件系统,也可以搭配文件系统后端使用
  6. 配套 shell 调试命令,开发阶段可以直接查看、清空数据库
  7. 跨平台,RT-Thread、裸机、其他 RTOS 都可以移植

FlashDB 适用和不适合场景

✅ 适合

  • 单片机设备保存参数、校准值、网络配置
  • 物联网传感器定时采集、日志存储
  • 片内 Flash、小容量 SPI Flash,不想跑文件系统
  • 大容量复杂关系型数据、大量高频随机修改数据
  • 桌面、服务器平台,FlashDB 定位就是嵌入式 MCU 场景

❌ 不适合

FlashDB 移植关键步骤

  1. 移植 FAL 闪存抽象层,划分好 Flash 分区,标记给 FlashDB 使用
  2. 引入 FlashDB 源码,打开或者关闭 KVDB、TSDB 宏开关
  3. 配置 FDB_WRITE_GRAN 写入粒度、扇区大小,扇区大小要对齐 Flash 最小擦除单位
  4. 调用 fdb_kvdb_init 或者 fdb_tsdb_init 初始化数据库实例
  5. 业务层调用读写 API,调试阶段开启 shell 命令验证读写
  6. 反复断电、重启测试,验证掉电保护可靠性

FlashDB 常见踩坑点

  • FDB_WRITE_GRAN 配置错误:SPI Nor Flash 一般是 1,STM32 片内 Flash 常见 8,带 ECC 的 Flash 要按手册设置,配错会出现偶发读写出错、CRC 报错
  • 分区没有对齐擦除块:扇区尺寸必须是 Flash 最小擦除单位的整数倍
  • 多任务并发读写:FlashDB 本身没有内置锁,多线程访问时需要自己加互斥锁保护
  • 分区空间太小:时序数据持续写入,没有做旧数据清理,会写满分区

【相关 FAQ】

问题 1:FlashDB 和 EasyFlash 是什么关系,FlashDB 能不能直接替换 EasyFlash?

回答 1:FlashDB 是 EasyFlash 原作者基于 EasyFlash 全新开发升级的项目,FlashDB 新增了 TSDB 时序库、多实例等能力,FlashDB 可以用来替换 EasyFlash,不过接口和底层依赖 FAL 有改动,不能直接无缝替换,需要少量修改移植代码。

问题 2:使用 FlashDB 必须搭配 RT-Thread 系统吗,裸机单片机能不能跑 FlashDB?

回答 2:FlashDB 不是 RT-Thread 专属,裸机单片机、FreeRTOS 等其他 RTOS 都可以移植 FlashDB,RT-Thread 只是官方适配最好的平台,FlashDB 本身只依赖 FAL 闪存抽象层。

问题 3:FlashDB 自带加密功能吗,存敏感数据怎么处理?

回答 3:FlashDB 本身没有内置加密模块,如果要在 FlashDB 里保存密码、隐私这类敏感数据,需要在应用层把数据加密之后,再存入 FlashDB 的 KV 或者 TSDB 里面。

问题 4:FlashDB 是线程安全的吗,多任务同时读写 FlashDB 要注意什么?

回答 4:FlashDB 本身不自带线程锁,FlashDB 不是线程安全的,如果多个任务同时操作同一个 FlashDB 实例,应用层必须自己增加互斥锁,防止并发访问导致数据库损坏。

问题 5:FlashDB 可以直接用在 NAND Flash 上吗?

回答 5:FlashDB 原生主要针对 Nor Flash 设计,NAND Flash 有坏块管理需求,FlashDB 没有自带坏块管理,不建议直接在 NAND Flash 上跑 FlashDB。

【参考资料】

[2026-11-07](推荐一个好的嵌入式开源项目之二 ——FlashDB)电子工程专辑

[2026-10-27](FlashDB - Open Source Embedded Library)OSRTOS

[2026-09-23](armink/FlashDB 项目介绍)ross.abutalabs.com

[2026-07-16](FlashDB: Ultra-lightweight Embedded Key-Value and Time Series Database)TechLogHub

[2026-03-23](FlashDB GitHub 仓库介绍)GitHub

[2024-07-25](FlashDB 配置 FDB_WRITE_GRAN 问题讨论)哇酷开发者社区

【免责声明】

本文内容仅为 FlashDB 开源项目技术科普,不构成商用落地保证;FlashDB 遵循 Apache2.0 开源协议,项目稳定性、适配性请自行结合硬件、固件版本测试验证;文中提到的踩坑方案、移植步骤仅作参考,因直接使用本文内容造成的设备故障、数据丢失等问题,本文作者不承担相关责任。