FlashDB IoT 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
FlashDB IoT 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
FlashDB IoT 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
FlashDB IoT 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
FlashDB IoT 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

FlashDB 是一款超轻量级的嵌入式数据库,专注于提供嵌入式产品的数据存储方案。与传统的基于文件系统的数据库不同,FlashDB 结合了 Flash 的特性,具有较强的性能及可靠性。并在保证极低的资源占用前提下,尽可能延长 Flash 使用寿命。

FlashDB 提供两种数据库模式:

  • 键值数据库 :是一种非关系数据库,它将数据存储为键值(Key-Value)对集合,其中键作为唯一标识符。KVDB 操作简洁,可扩展性强。
  • 时序数据库 :时间序列数据库 (Time Series Database , 简称 TSDB),它将数据按照 时间顺序存储 。TSDB 数据具有时间戳,数据存储量大,插入及查询性能高。

FlashDB 提供了多样化的数据存储方案,不仅资源占用小,并且存储容量大,非常适合用于物联网产品。下面是主要应用场景:

  • 键值数据库 :
    • 产品参数存储
    • 用户配置信息存储
    • 小文件管理
  • 时序数据库 :
    • 存储动态产生的结构化数据:如 温湿度传感器采集的环境监测信息,智能手环实时记录的人体健康信息等
    • 记录运行日志:存储产品历史的运行日志,异常告警的记录等

主要特性

  • 资源占用极低,内存占用几乎为 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 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 的资源占用非常低。

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (11)

加载中
天龙哥,最近在试用你写的FlashDB,感觉很好用,谢谢! 但现在遇到一个问题,在使用TSDB例程时struct env_status {uint32_t temp; uint32_t humi;}我写入1000个数据,然后进行查询,时间用int数值代替,在不变更存储结构体的情况下,查询范围在[127,127](或更大的值,单个时间点查询)是没有问题的,但如果把struct env_status {uint32_t temp; uint32_t humi; uint32_t temp2; uint32_t humi2;}结构体数据增加,查询范围在[127,127](或更大的值,单个时间点查询)查询到的数据个数为0,不知道是不是我哪里使用不正确,希望能够得到你的尽快回复,由衷的感谢! 平台:stm32F407,SPI Flash:W25Q128,基于你的FlashDB demo(KVDB已经验证是ok)
2020/07/04 20:25
回复
举报
armink软件作者
问题解决了吗?最近有试过新版本吗?
2020/08/30 10:24
回复
举报
如果用到有序号的数据,那key就可以直接以序号来检索,不用再转换为字符串,效率会高很多。建议把key的操作函数用回调方式导出给使用者;这样,不管key是什么类型,都由用户自己决定。
2020/06/07 23:18
回复
举报
armink软件作者
好的,感谢你的建议哈,后面考虑把 key 的类型从 const char* 更换为 const void*
2020/08/30 10:26
回复
举报
还需要移植啊?这个有点麻烦呢; 直接默认开箱即用多好啊
2020/06/05 14:40
回复
举报
armink软件作者
这个数据库与传统数据库不一样,不是基于文件系统,所以需要移植,不过有 demo 的哈
2020/06/07 18:39
回复
举报
建议key不要限制为字符串,可以是其它类型,比如UINT类型。
2020/06/04 12:26
回复
举报
单一类型效率反而高.
2020/06/04 13:19
回复
举报
字符串效率本来就低
2020/06/05 09:18
回复
举报
哈希表查找法
2020/08/10 10:17
回复
举报
armink软件作者
感谢反馈,能说下大概的原因吗?
2020/06/07 18:42
回复
举报
更多评论
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2020/10/17 12:43

FlashDB V1.0.0 正式版发布,轻量级嵌入式数据库

FlashDB 简介 FlashDB 是一款超轻量级的嵌入式数据库,专注于提供嵌入式产品的数据存储方案。与传统的基于文件系统的数据库不同,FlashDB 结合了 Flash 的特性,具有较强的性能及可靠性。并在保证极低的资源占用前提下,尽可能延长 Flash 使用寿命。 FlashDB 提供两种数据库模式: 键值数据库 和 时序数据库。 主要特性 资源占用极低,内存占用几乎为 0 ; 支持 多分区,多实例 。数据量大时,可细化分区,降低检索时间; 支持 ...

0
0
发表了博客
2020/10/22 14:08

轻量级嵌入式数据库FlashDB的介绍与使用

一、FlashDB的介绍 FlashDB 是一款超轻量级的嵌入式数据库,专注于提供嵌入式产品的数据存储方案。与传统的基于文件系统的数据库不同,FlashDB 结合了 Flash 的特性,具有较强的性能及可靠性。并在保证极低的资源占用前提下,尽可能延长 Flash 使用寿命。 FlashDB 提供两种数据库模式: 键值数据库 和 时序数据库。 二、移植 定义 flash 设备 在定义 Flash 设备表前,需要先定义 Flash 设备。可以是片内 flash, 也可以是片外基于...

0
0
发表了博客
2020/07/14 16:30

物联网(IoT)简介

物联网(IoT)是一个由智能设备连接起来的网络,并提供了丰富的数据,但是它也有可能是一场安全领域的噩梦。 物联网Internet of Things(IoT)是一个统称,指的是越来越多不属于传统计算设备,但却连接到互联网接收或发送数据,或既接收也发送的电子设备组成的网络。 现在有数不胜数的东西可以归为这一类:可以联网的“智能”版传统设备,比如说电冰箱和灯泡;那些只能运行于有互联网环境的小设备,比如像 Alexa 之类的电子助手...

0
3
发表于DevOps专区
2019/08/11 12:55

物联网IoT hub

物接入(IoT Hub)是面向物联网领域开发者的全托管云服务,通过主流的物联网协议(如MQTT)通讯,可以在智能设备与云端之间建立安全的双向连接,快速实现物联网项目。物接入分为设备型(原物管理)和数据型两种项目类型。设备型适用于基于设备的物联网场景;数据型适用于基于数据流的物联网场景。 设备型项目 适用场景 适用基于设备的物联网场景,以物影子作为设备在云端的映像,帮助开发者聚焦业务。 特性概述 提供设备模型构建...

0
2
发表了博客
2019/06/20 15:09

物联网之窄带物联网(NB-IOT)

NB-IoT即窄带物联网(Narrow Band Internet of Things),NB-IOT构建在蜂窝网络之上,只消耗大约180KHZ的带宽,可直接部署于GSM(2G)、UMTS(3G)、LTE(4G)网络,因为这些网络的基站等基础设备都已经有较好的覆盖范围,所以这将很好的降低了NB-IOT的部署成本。 NB-IoT的优势: 一是广覆盖,将提供改进的室内覆盖,在同样的频段下,NB-IoT比现有的网络增益20dB,相当于提升了100倍覆盖区域的能力,NB-IoT信号穿墙性远远超过现有的网...

0
4
发表了博客
2019/03/16 18:28

自学华为IoT物联网_07 物联网安全

点击返回自学华为IoT物流网 自学华为IoT物联网_07 物联网安全 1. 物联网安全的事件 事件1: 特斯拉事件 车载终端被入侵,通过CAN总线命令可远程控制车辆启停; 本地关键信息存储未做保护,印发后续重大安全事故。 事件2: 南京环保局事件 本地网络被入侵,环保监测数据被篡改;(在一些工厂,环保局会安装一些监控设备检测环保指标) 数据传输过程中对于网络层未做加密和完整性保护,使违法者有机可乘。 事件3: 美国网络瘫痪事...

0
0
2019/07/26 10:35

什么是物联网(IoT)?物联网有哪些平台和优势?

什么是 物联网? 物联网即Internet of things( IoT),最早由Kevin Ashton于1999年命名得来。 根据某知名企业给出的定义:物联网是一个物理对象(车辆、机器、家用电器等)组成的网络,使用传感器和api在Internet上连接和交换数据。2005年,国际电信联盟(ITU)发布的《ITU互联网报告2005:物联网》中正式提出了“物联网”概念。这个世界可能是由通过电子学、传感器和软件嵌入的联网的设备和其他物体组成的,物联网的世界是由健身追...

0
0
2019/02/27 20:15

IoT物联网开发者调查报告

Eclipse基金会从2016年开始每年都针对IoT物联网开发者情况在官网做了在线调研。以下内容基于Eclipse基金会2018年物联网开发者调查报告。(公众号对话框回复 “报告”即可获取完整版) 最主要的物联网编程语言 在物联网整体解决方案中Java,C,JavaScript,Python,C++有明显的优势。 Java是总体上最流行的物联网编程语言,适用于从后端到移动应用的各种环境,在网关和云端占主导地位。 C通常被认为是面向嵌入式物联网设备的主要编...

0
0
发表于软件测试专区
01/28 10:32

物联网(IoT):设备和服务

![物联网(IoT):设备和服务](https://oscimg.oschina.net/oscnet/up-9632780e77390b7df86d2a8e36dd4b8e8c2.png) # 需要从服务的角度来看待物联网问题 虽然“物”是物联网(IoT)中的术语,但事实上,消费者和企业感兴趣的并不仅仅是事物或设备。物联网的真正承诺在于这些设备产生的数据和它们所采取的行动。即使是最小的传感器也在提供有用的服务,尽管嵌入式设备开发人员往往不会从服务的角度考虑,但为了满足物联网全连接世界所...

0
0
2020/10/15 15:25

什么是物联网?常见 IoT 物联网协议最全讲解

什么是物联网?常见IoT 物联网协议最全讲解 一、什么是物联网? 物联网(Internet of Things)这个概念读者应该不会陌生。物联网的概念最早于1999年被提出来,曾被称为继计算机、互联网之后,世界信息产业发展的第三次浪潮,到现在已经发展了20余年。如今,在日常生活中,我们已经可以接触到非常多的物联网产品,例如各种智能家电、智能门锁等,这些都是物联网技术比较成熟的应用。 物联网最早的定义是:把所有物品通过射频识别等...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
2020/10/19 22:04

如何在 OSC 社区运营你的开源项目?

在 OSCHINA 社区,拥有着围绕每一款开源软件展开的完整宣发链条。如果你或你的团队拥有一款开源软件,并且想要让更多的人了解和使用它,那么你可以: 在 OSCHINA 社区投递软件 投递与该软件相关的新闻,比如版本升级、项目社区重大事件等 撰写与该软件技术相关的博客 积极参与项目相关的问答 在 OSCHINA 社区,为你的开源项目构建完善的社区生态,获得社区百万量级的开发者流量曝光! 第一步,投递软件 在首页右上角点开个人信息...

72
66
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
11 评论
155 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部