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

简介: 嵌入式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序列化后的二进制数据存储到表里。这样,如果记录的字段变化,只更新序列化后的二进制数据。


不动表结构。


。。。。。。


未完,改天继续


相关文章
|
4月前
|
缓存 弹性计算 API
用 Go 快速开发一个 RESTful API 服务
用 Go 快速开发一个 RESTful API 服务
|
15天前
|
开发框架 Go 计算机视觉
纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架
开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C++ 库,如 OpenCV 或 dlib,但通过 cgo 调用 C 程序会引入巨大的延迟,并在性能方面产生显著的权衡。此外,在许多情况下,在各种平台上安装 OpenCV 是很麻烦的。使用纯Go开发的插件不仅在开发时方便,在项目部署和项目维护也能省很多时间精力。
|
1月前
|
Go 数据安全/隐私保护 开发者
Go语言开发
【10月更文挑战第26天】Go语言开发
38 3
|
1月前
|
Java 程序员 Go
Go语言的开发
【10月更文挑战第25天】Go语言的开发
32 3
|
2月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
108 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
3月前
|
存储 Linux 开发工具
如何进行Linux内核开发【ChatGPT】
如何进行Linux内核开发【ChatGPT】
|
4月前
|
Java Linux API
Linux设备驱动开发详解2
Linux设备驱动开发详解
52 6
|
4月前
|
消息中间件 算法 Unix
Linux设备驱动开发详解1
Linux设备驱动开发详解
56 5
|
4月前
|
JSON 编解码 中间件
go-zero代码生成器助你高效开发
go-zero代码生成器助你高效开发
|
29天前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
73 8