文档章节

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

armink
 armink
发布于 2015/07/02 10:07
字数 781
阅读 281
收藏 2

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:armink.ztl@gmail.com】

##1、背景

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

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

##2、EasyFlash

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

##3、增删改查

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

EasyFlash环境变量功能的API位于https://github.com/armink/EasyFlash/blob/master/docs/zh/api.md#12-环境变量 主要使用方法如下:

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

##4、使用场景

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

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

##5、Demo

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

© 著作权归作者所有

armink

armink

粉丝 42
博文 2
码字总数 1750
作品 5
平谷
私信 提问
如何在嵌入式产品中应用键值存储数据库

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

armink
2015/07/02
348
0
EasyFlash V1.07.10 发布,新增掉电保护功能

EasyFlash 是一款开源的轻量级嵌入式Flash存储器库,主要为MCU(Micro Control Unit)提供便捷、通用的上层应用接口,使得开发者更加高效实现基于的Flash存储器常见应用开发。该库目前提供 三大...

armink
2015/07/13
2.2K
13
内存数据库:大数据时代数据管理新宠

  【IT168 专稿】在2012中国系统架构师大会上,笔者曾做过一份有关大数据的调查,其中一项“在众多的技术趋势中,您所关注的数据管理的新技术是什么?”的调查结果中,“内存数据库”成为仅...

作者:小野
2012/11/13
0
0
EasyFlash V2.02.22 发布,新增类型转换插件

EasyFlash 是一款开源的轻量级嵌入式Flash存储器库,主要为MCU(Micro Control Unit)提供便捷、通用的上层应用接口,使得开发者更加高效实现基于的Flash存储器常见应用开发。该库目前提供 三大...

armink
2016/02/24
1K
0
数据库的选择(一)

数据库如何选择 常用的数据库一般是分为五种: ( 一 ) 、 Access( 二 )SqlServer( 三 )MySQL( 四 )Oracle( 五 )SQLite ,那么,用户想做一个网站,到底 哪一种数据库是适合自己的呢 ? 以下给...

-wangming-
2015/09/08
194
0

没有更多内容

加载失败,请刷新页面

加载更多

一个activity中多个handler和消息的处理过程

Ø 能否有多个handler handler的构造方法 public Handler() { …. mLooper = Looper.myLooper(); mQueue = mLooper.mQueue; mCallback = null; … } 因为几乎主要的成员变量都是从Looper中拿......

shzwork
32分钟前
3
0
一起来学Java8(一)——函数式编程

在这篇文章中,我们将了解到在Java8下如何进行函数式编程。 函数式编程 所谓的函数式编程就是把函数名字当做值进行传递,然后接收方拿到这个函数名进行调用。 首先来看下JavaScript如何进行函...

猿敲月下码
52分钟前
3
0
vue 源码 断点调试

本文转载于:专业的前端网站➥vue 源码 断点调试 1、添加sourceMap sourceMap: true 2、npm run dev 会生成vue.js.map 3、断点调试 <!DOCTYPE html><html> <head> <meta cha......

前端老手
今天
4
0
流量运营系统demo1

TopkURLMapper public class TopkURLMapper extends Mapper<LongWritable, Text, Text, FlowBean> {private FlowBean bean = new FlowBean();private Text k = new Text();@Ove......

Garphy
今天
4
0
OSChina 周六乱弹 —— 如果是个帅小伙你愿意和他出去吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑推荐:《Ghost 》游戏《死亡搁浅》原声 《Ghost 》游戏(《死亡搁浅》原声) - Au/Ra / Alan Walker 手机党少年们想听歌,请使劲儿戳...

小小编辑
今天
435
15

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部