如何在嵌入式产品中应用键值存储数据库

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:[email protected]】

1、背景

随着互联网快速发展及大数据时代的到来,NoSQL数据库以其强大的可伸缩性、高效性、实时性等特点,而获得十足的发展。键值(Key-Value)存储数据库就是NoSQL的一种,大名鼎鼎的Redis就是一款用C开发的开源键值对存储数据库。

与此同时又有越来越多的厂家加入了IoT产品、可穿戴设备、智能家居的嵌入式产品开发行列中来,数据的持久化存储需求也就变得越来越多,选型一款伸缩性好、占用资源小、稳定性高,并可以应用于嵌入式产品的持久化存储库就显得越来越重要。

2、EasyFlash

EasyFlash是一款开源的轻量级嵌入式Flash存储器库,主要为MCU提供便捷、通用的上层应用接口,它提供的主要功能有3种:Env(环境变量)、IAP(在线升级)以及Log(Flash存储日志)。这里主要介绍可以让Flash变为小型键值存储数据库的Env功能。

3、增删改查

下图为通过控制台(终端)来调用环境变量的常用接口,演示了环境变量 “temp” 从创建到保存,再修改,最后删除的过程。这些接口都支持被应用层直接调用。

EasyFlash环境变量功能的API位于https://github.com/armink/EasyFlash/blob/master/docs/zh/api.md#12-环境变量

主要使用方法如下:

/* 创建Key名为temp的环境变量,并赋初值"123" */
flash_set_env("temp","123");
/* 修改环境变量temp的值为"456" */
flash_set_env("temp","456");
/* 读取环境变量temp的值 */
char *temp = flash_get_env("temp");
/* 删除环境变量temp */
flash_set_env("temp","");

4、使用场景

目前笔者已应用EasyFlash的产品,主要存储以下内容

  • 1、产品上电的运行参数;
  • 2、运行记录;
  • 3、用户可编辑的参数;
  • 4、软件断言及硬件异常等系统崩溃日志;
  • 5、在线升级时的Bootloader与APP之间的交互参数;
  • 6、更多存储内容有待大家去挖掘……

5、Demo

目前已移植硬件平台有 stm32f10x与 stm32f4xx 系列的片内Flash,并支持裸机及RT-Thread嵌入式操作系统。欢迎大家 star and pull request,并提供更多平台的支持及意见。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 06:27:57

如何在嵌入式产品中应用键值存储数据库的相关文章

怎样在嵌入式产品中应用键值存储数据库

[ 声明:版权全部.欢迎转载.请勿用于商业用途. 联系信箱:[email protected]] 1.背景 随着互联网高速发展及大数据时代的到来.NoSQL数据库以其强大的可伸缩性.高效性.实时性等特点,而获得十足的发展.键值(Key-Value)存储数据库就是NoSQL的一种,大名鼎鼎的Redis就是一款用C开发的开源键值对存储数据库. 与此同一时候又有越来越多的厂家增加了IoT产品.可穿戴设备.智能家居的嵌入式产品开发行列中来,数据的持久化存储需求也就变得越来越多,选型一款伸缩性好.占用资源

NSMutableDictionary 类中增加键值对方法分析

在iOS中可变字典增加一个键值对的方法有setObject: forKey: 和setValue : forKey: .为了方便我们把这两个方法简称为方法A和方法B. B这个方法中其中的value值是不能为nil,否则程序会出项崩溃.而A方法中的这个value可以为nil,但是当这个value位nil时,系统会自动调用removeObjectforKey:这个方法.这样就把这个键值对删除掉了.B方法中的key值可以是任意类型的,但是这个类型必须要实现NSCopying协议.而A方法中它的key值

PHP如何根据数组中的键值进行排序

主要是使用PHP的排序函数,asort()和arsort(). 为了减少代码的耦合性,我们将根据数组中的键值进行排序封装成一个函数 1 <?php 2 $array = array( 3 array('name'=>'aa','price'=>1050), 4 array('name'=>'bb','price'=>4300), 5 array('name'=>'cc','price'=>3100), 6 array('name'=>'dd','price'

【插件开发】—— 8 IPreferenceStore,插件的键/值存储!

前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 6 SWT复杂空间与布局搭配 7 SWT布局详解 前几篇讲解了SWT的基本知识.这篇作为穿插,讲述一下工作终于到的一个问题,并且借着这个机会,好好的学习了一下! 先描述下我遇到的问题吧: 由于对插件的了解也并不全面,很多知识点都不知道.学习其他人的开源源码时,我遇到了下面的报错: 1 org.eclipse.jface.resource.Data

SQLite实现内存键值存储

SQLite数据文件往Linux内存文件系统/dev/shm/data.sqlite3一放,就是内存级读写性能的SQL系统.用SQLite实现内存键值存储:CREATE TABLE IF NOT EXISTS memory (  key VARCHAR(40) NOT NULL PRIMARY KEY,  value TEXT NOT NULL,  time INTEGER NOT NULL);INSERT INTO memory (key, value, time) VALUES ('key1

[Swift Weekly Contest 121]LeetCode981. 基于时间的键值存储 | Time Based Key-Value Store

Create a timebased key-value store class TimeMap, that supports two operations. 1. set(string key, string value, int timestamp) Stores the key and value, along with the given timestamp. 2. get(string key, int timestamp) Returns a value such that set(

对GET/POST请求返回cookie中的键值对进行重新组合

get/post请求返回的cookie中并不是所有的键值对我们都需要,我们只需要提取我们需要的进行重新组合就可以了. 如下图是一个GET请求返回的cookie 我需要提取其中的 uin,skey等相关键值对. 以下函数可以完成我们的需要: //using System.Text.RegularExpressions; public string GetCookieByName(List<string> keylist, string cookie) { string str = "&

Spark中的键值对操作-scala

1.PairRDD介绍     Spark为包含键值对类型的RDD提供了一些专有的操作.这些RDD被称为PairRDD.PairRDD提供了并行操作各个键或跨节点重新进行数据分组的操作接口.例如,PairRDD提供了reduceByKey()方法,可以分别规约每个键对应的数据,还有join()方法,可以把两个RDD中键相同的元素组合在一起,合并为一个RDD. 2.创建Pair RDD 程序示例:对一个英语单词组成的文本行,提取其中的第一个单词作为key,将整个句子作为value,建立 PairR

信号量,消息队列,共享内存中ket_t键值的生成函数ftok。

在System V中,我们经常用用key_t的值来创建或者打开信号量,共享内存和消息队列.这个在IPC的环境中十分的重要,比如说,服务器创建了一个消息队列,等待 客户机发送请求.那么如何创建或者打开已有的消息队列呢?一般而言,我们对于服务器使用的路径和项目id(proj_id)是已知的,所以客户机可以获取 相同的key来打开 消息队列并进行操作.下面就是ftok的使用原型: ftok函数   函数ftok把一个已存在的路径名和一个整数标识得转换成一个key_t值,称为IPC键: # includ