

摘要:該文介紹了能夠對多類型數據進行層次化組織,進而提高數據檢索、處理效率,以及數據持久化的多類型信息組織結構及存儲的實現。該應用采用主鏈和子鏈的多級鏈式結構,實現對不同數據類型的靈活組織和高效管理;通過抽象父類和各個子類的繼承關系,統一管理子類,既保證系統可擴展性又保證擴展符合系統規范。相關研究旨在為數據管理提供更強大的支持。
關鍵詞:多級鏈式結構;數據融合;數據持久化;序列化與反序列化
doi:10.3969/J.ISSN.1672-7274.2024.08.045
中圖分類號:TP 393.09" " " " " " " " "文獻標志碼:B" " " " " " 文章編碼:1672-7274(2024)08-0-03
Application of Multi type Information Organization Structure and Storage Implementation
YIN Hu1,2, LI Yingying2, QI Mingzhu2
(1. Key Laboratory of Fiber Optic Intelligent Sensing Network Technology in Shandong Province, Weihai 264200, China; 2. Weihai Beiyang Electric Group Co., Ltd., Weihai 264200, China)
Abstract: This article introduces the hierarchical organization of multi type data, which can improve data retrieval and processing efficiency, as well as the implementation of multi type information organization structure and storage for data persistence. This application adopts a multi-level chain structure of main chain and sub chain, achieving flexible organization and efficient management of different data types; By abstracting the inheritance relationship between the parent class and each subclass, the subclasses are managed uniformly, ensuring both system scalability and compliance with system specifications. The related research aims to provide stronger support for data management.
Keywords: multi-level chain structure; data fusion; data persistence; serializable and deserialize
1" "應用設計與實現
1.1 多級鏈式結構
本應用的關鍵在于設計一種多級鏈式結構,包括主鏈和子鏈的層次關系。主鏈由多個節點組成,每個節點可以包含一個或多個子節點。這種設計使得數據有機組織在一起,形成具有實際意義描述事物的整體,保持數據之間層次性和關聯性。主鏈結合子鏈的多級鏈式結構如圖1所示。
具體而言,主鏈由節點1、節點2、節點3、……、節點m、……、節點n組成(n≥1);節點1包含1子鏈由節點11、節點12、……、節點1a組成(a≥0);節點m包含m子鏈由節點m1、節點m2、……、節點mi組成(i≥0);節點n包含n子鏈由節點n1、節點n2、……、節點nx組成(x≥0);在主子鏈表中,每個節點存儲不同的對象,而對象中包含一類或兩類以上混合數據。這些數據類型包括整型、浮點、字符、布爾、文本、圖像、音頻以及視頻[1]。
1.2 數據組織及持久化實現
引入抽象的父類統一管理子類,父類包括通用屬性和序列化、反序列化虛函數。子類除了繼承父類屬性并實現特定的序列化和反序列化邏輯,還包括自身屬性及方法。
父類即管理類,包括名稱和虛函數,其中名稱屬性用于在實例化子對象并構造父類對象時存儲子類的類名稱,父實例管理此名稱屬性;序列化和反序列化虛函數是父類提供的模板,需要子類重寫。父類與子類關系如圖2所示。
例如,有一個抽象的父類F,并且有四個子類:A類、B類、C類和D類,A、B、C、D子類繼承父類F。
在特殊的C子類中,包含一個鏈表,鏈表的每個節點存儲D數據類的實例。D類也繼承自F類,例如,節點1存儲A實例,節點2存儲B實例,節點3存儲C實例,依次類推;C子類包含子鏈表,節點31存儲D類實例cp1,節點32存儲D類實例cp2,依次類推。
父類F實現結構如下:
class F{
public:
F();
~F();
protected:
int managerName(QString name);
bool setName(QString name);
public:
virtual void serial(QDataStream amp;out) = 0;
virtual void deserial(QDataStream amp;in) = 0;
private:
QString name;
};
父類F包含名稱屬性存儲對象的名稱;構造函數F()用于初始化對象;析構函數~F()負責在生命周期結束時釋放對象資源;函數setName用于設置對象的名稱屬性,并返回操作是否成功的布爾值;函數managerName用于管理對象的名稱屬性,包含正確設置名稱、注冊維護名稱列表的邏輯;序列化虛函數serial需要在派生類中進行實現,負責將對象數據序列化;反序列化虛函數deserial需要在派生類中進行實現,負責將序列化的數據還原為對象的數據[2]。
子類A實現結構如下:
class A: public F{
public:
A();
~A();
protected:
bool setName(QString name);
QString getName(void);
bool setTemperature (int var);
int getTemperature (void);
protected:
QString name;
int temperature;
};
子類A是繼承自父類F的子類,添加與溫度相關的屬性和操作,名稱屬性存儲A類對象的名稱;溫度屬性存儲A類對象的溫度值;構造函數A()用于初始化A類的對象;析構函數~A()負責釋放A類對象在生命周期結束時分配的資源;setName和getName方法用于設置和獲取對象的名稱屬性。setTemperature和getTemperature方法用于設置和獲取對象的溫度屬性。
子類B類似子類A是繼承自父類F的子類,具有除去名稱屬性外與A子類完全不同的濕度屬性。
子類C實現結構如下:
class C: public F{
public:
C();
~C();
protected:
bool setName(QString name);
QString getName(void);
bool setID (int var);
int getID (void);
protected:
int id = 0;
QString name;
QLinkedListlt;D*gt; *dlist = NULL;
};
子類C與子類A、子類B最大的不同是包含保護性成員QLinkedListlt;D*gt; *dlist,存儲指向QLinkedList對象的指針,該鏈表存儲子類D對象的震動信息。dlist變量構建包含子類D對象的鏈表,實現子類C對象中對子類D對象的組織和管理。
數據類D實現結構如下:
class D:public F
{
public:
D();
~D();
cv::Rect *getRect() const;
Void setRect(cv::Rect value);
cv::Mat *getPicture() const;
void setPicture(cv::Mat *value);
protected:
cv::Rect *rect = NULL;
cv::Mat *picture = NULL;
};
子類D包含坐標屬性rect存儲D類對象的震動坐標,圖片屬性picture存儲D類對象的位置圖片信息。getRect和setRect方法用于獲取和設置對象的震動坐標屬性,getPicture和setPicture方法用于獲取和設置對象的位置圖片屬性。
序列化是將數據結構或對象轉換為可存儲或傳輸的格式的過程,通常將數據表示為二進制流或文本。
反序列化是將序列化后的數據重新構建為原始數據結構或對象的過程,是序列化的逆過程。
A子類對父類虛函數重寫示例如下:
void A::serial(QDataStream" amp;out)
{
out lt;lt; this-gt;name lt;lt; this-gt;temperature;
}
void A::deserial(QDataStream amp;in){
in gt;gt; this-gt;name gt;gt; this-gt;temperature;
}
B、C、D類同樣對父類F虛函數進行重寫。通過序列化方法將多級鏈式結構數據存儲到磁盤,需要時通過反序列化方法將數據從磁盤恢復,從而確保數據在存儲和恢復過程中的一致性。
1.3 多級鏈式結構的優勢
在線性結構中,通常需要為每種數據類型創建一個獨立的數據表或文件,導致數據分散存儲;而多級鏈式結構可以將不同類型的數據組織在一起,更好地表示數據之間的層次關系。
2" "應用場景
在一個先進的制造工廠中,生產線上分布有多個傳感器,分別用于監測溫度、濕度、振動等環境參數。采用多級鏈式結構來組織和處理這些數據。
步驟1:建立相應的數據結構:首先,針對每種傳感器,應用創建相應的子類。
步驟2:多種傳感器數據的協同處理:用于協同處理傳感器的數據,設計一個數據處理單元類,該類包含主鏈和子鏈的多級鏈式結構。
步驟3:數據的持久性存儲:確保數據的持久性,設計一個序列化模塊,負責將多級鏈式數據結構進行序列化,存儲到磁盤上。
3" "結束語
本文提出的多級鏈式結構對數據組織與存儲的應用,可展現靈活的層次結構、繼承關系和序列化機制,有效應對多種類型數據管理的復雜性,具有良好的靈活性、可維護性和查詢效率,為處理多類型數據和復雜關系提供了一種新穎的解決方案。這種優勢使得在處理多類型數據和復雜關系時更為適用,特別是在工業應用等領域,可為數據管理和處理提供更強大的支持。
參考文獻
[1] 梁白鷗.一種提高代碼復用的C++序列化框架設計[J].單片機與嵌入式系統應用,2019,19(5):11-14.
[2] 任治斌,劉軍.程序設計中對象序列化方法的探討[J].渭南師范學院學報,2002(5):71-73.
作者簡介:尹" "虎(1986—),男,漢族,山東威海人,高級工程師,本科,研究方向為機器視覺。
李瑩瑩(1985—),女,漢族,山東威海人,中級工程師,研究生,研究方向為計算機視覺。
戚明珠(1986—),男,漢族,山東威海人,中級工程師,研究生,研究方向為物聯網。