stm32移植嵌入式数据库FlashDB

本次实验的程序链接stm32f103+FlashDB嵌入式数据库程序资源-CSDN文库

一、介绍

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

FlashDB 提供两种数据库模式:

键值数据库 :是一种非关系数据库,它将数据存储为键值(Key-Value)对集合,其中键作为唯一标识符。KVDB 操作简洁,可扩展性强。

时序数据库 :时间序列数据库 (Time Series Database , 简称 TSDB),它将数据按照 时间顺序存储 。TSDB 数据具有时间戳,数据存储量大,插入及查询性能高。

二、作用

键值数据库 : 产品参数 存储用户配置信息 存储小文件管理
时序数据库 :

存储动态产生的结构化数据:如 温湿度传感器采集的环境监测信息,智能手环实时记录的人体健康信息等

记录运行日志:存储产品历史的运行日志,异常告警的记录等

三、移植

FlashDB 底层的 Flash 管理及操作依赖于 RT-Thread 的 FAL Flash 抽象层开源软件包 ,该开源库也支持运行在 裸机平台 。所以只需要将所用到的 Flash 对接到 FAL ,即可完成整个移植工作。

FAL 底层将不同的 Flash 存储介质进行了统一封装,并提供了分区表机制,暴露给上层用户。

FlashDB 的每个数据库就是基于 FAL 提供的分区机制,每个数据库都坐落在某个 FAL 的分区上,相当于一个分区对应一个数据库。

在定义 Flash 设备表前,需要先定义 Flash 设备。可以是片内 flash, 也可以是片外基于 SFUD 的 spi flash。

本次使用的是stm32f103c8t6单片机上的片内Flash。当然也可以在扩展的spi-flash上,也能在linux系统上扩展使用。

四、使用

注:移植后的代码必须在fdb_cfg.h文件中选择使用键值数据库和时序数据库

1、键值数据库

如下图所示,系统每次启动一次,boot_count就会加一,保存参数到片上Flash上。

2、时序数据库

**修改状态:**每条 TSL 在被追加到 TSDB 后,都可以修改其状态,状态共有 4 种:

  • FDB_TSL_WRITE:已写入状态,TSL 被追加到 TSDB 中后的默认状态;

  • FDB_TSL_USER_STATUS1 :该状态介于写入与删除之间,用户可自定义其状态含义,比如:数据已被同步至云端;

  • FDB_TSL_DELETED :已删除状态,当 TSL 需要删除时,修改 TSL 的状态为该状态即可;

    提示:在 FlashDB 中,为了提升 Flash 寿命,删除动作并不会真正的将数据从 Flash 从擦除,而是将其标记为删除状态,用户可以通过状态对不同的数据记录进行区分。

  • FDB_TSL_USER_STATUS2:删除状态之后的自定义状态,预留给用户使用;

注: 修改状态时只能按照 FDB_TSL_WRITE -> FDB_TSL_USER_STATUS1 -> FDB_TSL_DELETED -> FDB_TSL_USER_STATUS2 顺序进行修改,不能逆序修改。也可以跳过中间状态,例如:从 FDB_TSL_WRITE 直接修改为FDB_TSL_DELETED 状态,跳过 FDB_TSL_USER_STATUS1 状态。

例如下面图片中,虽然每次只添加了一个数据,但是查询时会把所有的数据打印出来,每次增加1个。

本次实验的程序链接:stm32f103+FlashDB嵌入式数据库程序资源-CSDN文库

参考官网链接:快速开始 (gitee.io)

相关推荐
忘梓.41 分钟前
数据库从零开始:MySQL 中的 DDL 库操作详解【Linux版】
linux·数据库·mysql
Code季风4 小时前
SQL关键字三分钟入门: 表结构管理与分区设计。(ALTER、MODIFY、CHANGE、DEFAULT、VALUES、LESS THAN、RANGE)
数据库·sql·less
才鲸嵌入式5 小时前
C++相比于C语言增加了哪些概念?
c语言·c++·单片机·嵌入式·arm·面向对象·软件
执 、5 小时前
SpringBoot定时监控数据库状态
java·数据库·ide·spring boot·后端
不恋水的雨6 小时前
数据库char字段做trim之后查询很慢的解决方式
数据库·sql
眠りたいです8 小时前
MySQL基础与常用数据类型浅析
linux·数据库·mysql
唐可盐8 小时前
Oracle/MySQL/SqlServer/PostgreSQL等数据库的数据类型映射以及各版本数据类型情况说明
数据库·mysql·oracle
dujunqiu8 小时前
S32DS上进行S32K328的时钟配置,LPUART时钟配置步骤详解
单片机·mcu
阑梦清川8 小时前
C#建立与数据库连接(版本问题的解决方案)踩坑总结
开发语言·数据库·c#
自由鬼9 小时前
Vitess 深度解析:一个云原生 MySQL 数据库扩展系统
数据库·mysql·云原生