嵌入式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序列化後的二進制數據存儲到表裏。這樣,如果記錄的字段變化,只更新序列化後的二進制數據。

不動表結構。

。。。。。。

未完,改天繼續

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章