嵌入式linux之go语言开发(八)存储模块的封装(一)

在嵌入式终端设备上,免不了要存储记录、上传记录、查看记录等操作。

我称之为储存模块。怎样的操作接口,最好用?最方便?

首先想到的是使用嵌入式数据库sqllite,没错,选他作为存储媒介,用go调用也是很方便的。

但是,这还远远不够。原生的sql操作,若不做个封装,将会是很难用。

另外,已经有很多ORM框架,即对象关系映射,将面向对象语言程序中的对象自动持久化到关系数据库中,就满足要求了吗?

这也还不够。

我想要的接口,能满足这样的功能:

可以写入记录,删除记录,查询记录。

删除记录不是真正的删除,而是清除上传标记,即该记录还存在,只是表示一上传过,没用了,可以被覆盖。

记录数量达到一定条数时要从头循环覆盖。

记录可支持同时向不同的第三方平台上送。

操作记录接口要简单和灵活,比如添加记录中的字段不能再去动表结构。

这些,假如只用ORM框架,操作起来还是不够简单。

以往用c操作flash,完成记录的操作,我们有一整套好用的接口。确实很好用,很简单。

如下:

//===============================>> 记录文件操作
extern U32 APP_Create_RecFile( U32 id, U32 rp, U32 mode );		//创建记录文件
extern U32 APP_Open_RecFile( U32 id );							//打开记录文件

extern U32 APP_Read_RecFile_NotServer( U32 id, U32 rp, U32 sn, U08 *buf );
																//读取一条记录  顺序读取第SN条未上传的记录
extern U32 APP_Read_RecFile_WriteNot( U32 id, U32 sn, U08 *buf );
																//读取一条记录  倒数读取第SN条写入的记录
extern U32 APP_Read_RecFile_PHY( U32 id, U32 sn, U08 *buf );	//读取一条记录  读取第SN条记录,按编码位置读取

extern U32 APP_Write_RecFile( U32 id, U08 *buf );				//追加写入一条记录
extern U32 APP_Delete_RecFile( U32 id, U32 rp, U08 *buf, U32 recnum );
																//删除多条记录

extern U32 APP_Get_RecFileNum( U32 id, U32 rp, U32 *num );		//获取未上传的记录数						
extern U32 APP_Get_RecFileNO( U32 id, U32 *phyno, U32 *no );	//获取最后一条记录流水号
extern U32 APP_Get_RecFileStat( U32 id, U32 *sta );				//获取记录文件状态

extern U32 APP_Set_RecReadp( U32 id, U32 outrp, U32 inrp );		//记录多指针处理

这套接口有多好用?

比如,系统初始化时,去调用APP_Create_RecFile(记录区编号,重传指针,是否初始化内容为0)

去完成初始化的操作。假如有3个记录区,则分别是:

APP_Create_RecFile(1,1,0)

APP_Create_RecFile(2,1,0)

APP_Create_RecFile(3,1,0)

创建了三个记录区。相当于三个表。

写记录就调用APP_Create_RecFile(),至于记录的内容,只要为byte[]数组,想写什么就写什么。

读记录则调用APP_Read_RecFile_NotServer(),自动读取的就是未上传的记录,根据传的sn,可获取未上送的记录1,2...

上送一条就删除一条记录,则调用APP_Delete_RecFile(),并不是真正的删除,而是清除上传标记。实际记录还在。更安全。

写入记录也很简单,直接调用 APP_Write_RecFile( U32 id, U08 *buf )即可。需要写入的内容,组织好buf即可。写入哪个区(表),由ID这个参数指定。

那么计划把这一一列的接口,用go语言去实现。内部使用sqllite和protobuf。

暂时想到的是,封装一系列的操作记录的接口。使用sqllite,使用protobuf作为记录的结构定义。

把protobuf序列化后的二进制数据存储到表里。这样,如果记录的字段变化,只更新序列化后的二进制数据。

不动表结构。

。。。。。。

未完,改天继续

发布了125 篇原创文章 · 获赞 165 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/qq8864/article/details/98975108
今日推荐