[开源]一款支持 KV 数据和时序数据的超轻量级数据库,性能强劲可靠

一飞开源,介绍创意、新奇、有趣、实用的免费开源应用、系统、软件、硬件及技术,一个探索、发现、分享、使用与互动交流的开源技术社区平台。致力于打造活力开源社区,共建开源新生态!

一、开源项目简介

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

FlashDB 提供两种数据库模式:

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

二、开源协议

使用Apache-2.0开源协议

三、界面展示

四、功能概述

使用场景

如今,物联网产品种类越来越多,运行时产生的数据种类及总量及也在不断变大。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 的资源占用非常低

五、技术选型

基本概念

  • 键值数据库(KVDB):是一种非关系数据库,它将数据存储为键值(Key-Value)对集合,其中键作为唯一标识符。KVDB 操作简洁,可扩展性强。
  • 时序数据(TSDB) :时间序列数据库 (Time Series Database , 简称 TSDB),它将数据按照 时间顺序存储 。TSDB 数据具有时间戳,数据存储量大,插入及查询性能高。
  • 时序记录(TSL) :TSL (Time series log),是 TSDB 中每条记录的简称。
  • Blob :在计算机中,blob 常常是数据库中用来存储二进制文件的字段类型。在 FlashDB 中, KV 和 TSL 都使用 blob 类型来存储,该类型可以兼容任意变量类型。
  • 迭代器(iterator):它可以让用户透过特定的接口巡访容器中的每一个元素,而不用了解底层的实现。 TSDB 和 KVDB 都支持通过迭代器对数据库进行遍历访问。

功能框图

通过下面的功能框图,可以大致了解 FlashDB 功能模块划分

准备开发环境

使用前,需提前在 PC 上安装下面的开发软件

集成开发环境

FlashDB 提供的演示工程默认支持两种工程:

  • RT-Studio :免费使用,支持中文,使用方便
  • Keil MDK :需安装 MDK v5 版本的集成开发环境

串口工具

准备 串口调试助手串口终端工具 ,后续需要在查看运行日志时使用

获取源码

访问一飞开源:https://code.exmay.com/

选择演示平台

在项目的 demos 目录下,目前已提供下面一些演示平台,可以选择一个平台,真机体验一下 FlashDB 的运行过程。

更多详细介绍,点击下方表格中的 使用说明 进行查看。

硬件平台

路径

存储类型

stm32f10x

demos/stm32f103ve

stm32 on-chip flash

stm32f40x

demos/stm32f405rg

stm32 on-chip flash

stm32f40x + spi flash

demos/stm32f405rg_spi_flash

spi flash

esp8266 + spi flash

demos/esp8266_spi_flash

spi flash

linux

demos/linux

posix file

查看示例说明

如果上面没有合适自己的演示平台,也可以先查看一下感兴趣的示例说明。

示例文件

说明

samples/kvdb_basic_sample.c

KVDB 基础示例

samples/kvdb_type_string_sample.c

字符串类型 KV 示例

samples/kvdb_type_blob_sample.c

blob 类型 KV 示例

samples/tsdb_sample.c

TSDB 基础示例

六、源码地址

访问一飞开源:https://code.exmay.com/

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章