本帖最后由 sunnydragon 于 2020-6-7 18:29 编辑
注意:EasyFlash V5.0 新版本先已更名为 FlashDB ,欢迎大家继续关注,详见 https://www.amobbs.com/thread-5734466-1-1.html
从去年发布 V4.0 后,陆陆续续收到了大家的很多反馈。虽然 V4 开始资源占用变得更低了,但是性能经常听到大家吐槽。
大家动不动就是好几万条的数据要存储,查询时间还需要做到秒级以内。解决这个问题,恐怕动动小手术是不行的。
这个五一在家有时间,又对 EasyFlash 进行了重构,并且重新定位了 EasyFlash 的目标,未来将会聚焦于嵌入式超轻量级数据库解决方案。
这次重构,主要改动了两大方面
- 首先增加了多实例模式,这个对于提升性能会有很大的帮助,1万条 KV 的数据库,如果觉得速度慢,可以根据类别进行细分,分别存储到不同子数据库中。子数据库根据细分的比例,理论上比原有的会小 N 倍。
- 其次,增加了时序数据库功能。这个对于存储产品运行记录会非常有帮助,存储的数据量大,并且具有很高的插入及查询速度。
这次更新改动巨大,不仅是功能,还有产品定位。所以更多内容,请看 EasyFlash 最新的说明文档吧。 Github: https://github.com/armink/EasyFlash
该版本为 beta 测试版本,可能还有细节待改进,期待大家试用反馈哈~~~~
简介EasyFlash 是一款超轻量级的嵌入式数据库开源项目,专注于提供嵌入式产品的数据存储方案。其拥有较强的可靠性及性能,并在保证极低的资源占用前提下,尽可能延长 Flash 使用寿命。 EasyFlash 提供两种数据库模式: - 键值数据库 :是一种非关系数据库,它将数据存储为键值(Key-Value)对集合,其中键作为唯一标识符。KVDB 操作简洁,可扩展性强。
- 时序数据库 :时间序列数据库 (Time Series Database , 简称 TSDB),它将数据按照 时间顺序存储 。TSDB 数据具有时间戳,数据存储量大,插入及查询性能高。
使用场景如今,物联网产品种类越来越多,运行时产生的数据种类及总量及也在不断变大。EasyFlash 提供了多样化的数据存储方案,不仅资源占用小,并且存储容量大,非常适合用于物联网产品。下面是主要应用场景: - 键值数据库 :
- 时序数据库 :
- 存储动态产生的结构化数据:如 温湿度传感器采集的环境监测信息,智能手环实时记录的人体健康信息等
- 记录运行日志:存储产品历史的运行日志,异常告警的记录等
主要特性- 资源占用极低,内存占用几乎为 0 ;
- 支持 多分区,多实例 。数据量大时,可细化分区,降低检索时间;
- 支持 磨损平衡 ,延长 Flash 寿命;
- 支持 掉电保护 功能,可靠性高;
- 支持 字符串及 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 2248 (ms) for 1251 TSL, min 1, max 2, average: 1.80 ms/per</font>
复制代码插入平均:4 ms,查询平均:1.8 ms
TSDB 性能测试2 (stm32f2 onchip flash)
- msh />tsl bench
- Append 13527 TSL in 5 seconds, average: 2705.40 tsl/S, 0.37 ms/per
- Query total spent 1621 (ms) for 13528 TSL, min 0, max 1, average: 0.12 ms/per</font>
复制代码插入平均:0.37 ms,查询平均:0.12 ms
资源占用 (stm32f4 IAR8.20)
- Module ro code ro data rw data
- ------ ------- ------- -------
- easyflash.o 276 232 1
- ef_kv.o 4 584 356 1
- ef_ts_log.o 1 160 236
- ef_utils.o 418 1 024
复制代码上面是 IAR 的 map 文件信息,可见 EasyFlash 的资源占用非常低
如何使用从 EasyFlash V5.0 开始,由于软件架构完全重构,导致代码改动巨大,为此牺牲了之前 API 的兼容性。后续 EasyFlash 的 V4.X 版本将会继续维护(见 stable-v4.x 分支),希望大家谅解。
移植EasyFlash 底层依赖于 RT-Thread 的 FAL (Flash Abstraction Layer) Flash 抽象层开源软件包 ,该开源库也支持运行在裸机平台 (点击查看介绍)。所以只需要将所用到的 Flash 对接到 FAL ,即可完成整个移植工作。 FAL 移植主要流程: 示例EasyFlash 提供了主要功能的示例,直接加入工程即可运行,并具有一定的参考性
本坛下载:
最新版本 GitHub 下载 :https://github.com/armink/EasyFlash
|