armink/FlashDB
GitHub: armink/FlashDB
FlashDB 是一款专为嵌入式产品设计、结合 Flash 存储特性的超轻量级数据库,支持键值和时序两种数据模式。
Stars: 2787 | Forks: 556

 [](https://raw.githubusercontent.com/armink/FlashDB/master/LICENSE) [](https://armink.github.io/FlashDB/#/)
EN | [中文](README_zh.md)
## 简介
[FlashDB](https://github.com/armink/FlashDB) 是一款超轻量级的嵌入式数据库,专注于为嵌入式产品提供数据存储解决方案。不同于基于文件系统的传统数据库,[FlashDB](https://github.com/armink/FlashDB) 结合了 Flash 的特性,具有极强的性能与可靠性。并且在保证极低资源占用的前提下,尽可能延长 Flash 的使用寿命。
[FlashDB](https://github.com/armink/FlashDB) 提供两种数据库模式:
- **键值数据库**:它是一种非关系型数据库,将数据作为键值对集合进行存储,其中键用作唯一标识符。KVDB 操作简单,具有极强的可扩展性。
- **时序数据库**:时序数据库(TSDB),按照**时间顺序**存储数据。TSDB 数据带有时间戳,数据存储量大,且具有很高的插入和查询性能。
## 使用场景
如今,IoT 产品的种类越来越多,运行过程中产生的数据类型和总量也在不断增加。FlashDB 提供了多种数据存储解决方案,不仅资源占用小,而且存储容量大,非常适合 IoT 产品。以下是主要的应用场景:
- **键值数据库**:
- 产品参数存储
- 用户配置信息存储
- 小文件管理
- **时序数据库**:
- 存储动态生成的结构化数据:例如温湿度传感器采集的环境监测信息、智能手环实时记录的人体健康信息等。
- 记录操作日志:存储产品历史操作日志、异常报警记录等。
## 核心特性
- 资源占用极小,RAM 占用几乎为 **0**;
- 支持多分区、**多实例**。在数据量较大时,可通过细化分区来缩短检索时间;
- 支持**磨损平衡**,以延长 Flash 寿命;
- 支持**掉电保护**功能,可靠性高;
- 支持 string 和 blob 两种 KV 类型,方便用户操作;
- 支持 KV**增量升级**,产品固件升级后,KVDB 内容也支持自动升级;
- 支持修改每条 TSDB 记录的状态,方便用户管理;
## 性能与资源占用
### TSDB 性能测试 1(nor flash W25Q64)
```
msh />tsl bench
Append 1250 TSL in 5 seconds, average: 250.00 tsl/S, 4.00 ms/per
Query total spent 2218 (ms) for 1251 TSL, min 1, max 2, average: 1.77 ms/per
```
插入平均值:4 ms,查询平均值:1.8 ms
### TSDB 性能测试 2(stm32f2 onchip flash)
```
msh />tsl bench
Append 13421 TSL in 5 seconds, average: 2684.20 tsl/S, 0.37 ms/per
Query total spent 1475 (ms) for 13422 TSL, min 0, max 1, average: 0.11 ms/per
```
插入平均值:0.37 ms,查询平均值:0.12 ms
### 资源占用(stm32f4 IAR8.20)
```
Module ro code ro data rw data
------ ------- ------- -------
fdb.o 276 232 1
fdb_kvdb.o 4 584 356 1
fdb_tsdb.o 1 160 236
fdb_utils.o 418 1 024
```
以上是 IAR 的 map 文件信息。可以看出 FlashDB 的资源占用非常小。
## 如何使用
FlashDB 提供了完善的文档,请参见:https://armink.github.io/FlashDB/#/
快速访问:
- [快速入门文档](http://armink.github.io/FlashDB/#/quick-started)
- [移植文档](http://armink.github.io/FlashDB/#/porting)
- [配置文档](http://armink.github.io/FlashDB/#/configuration)
- [API 文档](http://armink.github.io/FlashDB/#/api)
## 开源许可
该项目采用 Apache-2.0 开源协议。详情请阅读项目中的 LICENSE 文件内容。
标签:Flash存储, LangChain, 客户端加密, 嵌入式数据库, 物联网, 轻量级, 键值数据库