一種電能表數(shù)據(jù)動(dòng)態(tài)存儲(chǔ)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及電能表領(lǐng)域,具體的涉及一種電能表數(shù)據(jù)動(dòng)態(tài)存儲(chǔ)方法。
【背景技術(shù)】
[0002] 智能電能表的行業(yè)標(biāo)準(zhǔn)要求智能電能表能夠記錄電壓、電流、功率、電能等多種數(shù) 據(jù),每種數(shù)據(jù)的字節(jié)長(zhǎng)度是不一樣的,同時(shí),在電能表使用的過(guò)程當(dāng)中,需要記錄的數(shù)據(jù)種 類(lèi)可能會(huì)變化,記錄的間隔也可能會(huì)變化。
[0003] 傳統(tǒng)的記錄方法中,單向鏈表法采用流水賬的方式,將一條一條的負(fù)荷記錄做成 單向鏈表。每條記錄中都記錄本條記錄的數(shù)據(jù)長(zhǎng)度,這樣使用每條記錄的起始地址加上每 條記錄的數(shù)據(jù)長(zhǎng)度就可以得知下一條記錄的起始地址,遍歷所有的記錄后即可查找到所需 的記錄。但單向鏈表法查找非常耗時(shí),且每條記錄需記錄額外的時(shí)標(biāo),降低了有效數(shù)據(jù)的比 重,浪費(fèi)了存儲(chǔ)空間。
[0004] 固定空間分配法為每條數(shù)據(jù)記錄分配固定大小的存儲(chǔ)空間和固定的記錄間隔時(shí) 間。這樣由于記錄不管在記錄間隔上還是在數(shù)據(jù)長(zhǎng)度上都是均勻的,所以查找時(shí),可根據(jù) 需要查找的時(shí)間點(diǎn)準(zhǔn)確的計(jì)算出其存儲(chǔ)地址,查找非常迅速。但如果以最大數(shù)據(jù)長(zhǎng)度和最 短記錄間隔分配存儲(chǔ)空間,則會(huì)極大的浪費(fèi)存儲(chǔ)空間。如果不以最大數(shù)據(jù)長(zhǎng)度和最短記錄 間隔分配存儲(chǔ)空間,則無(wú)法響應(yīng)電能表使用過(guò)程中的記錄數(shù)據(jù)種類(lèi)更改以及記錄間隔的更 改。
[0005] 傳統(tǒng)的記錄方法無(wú)法同時(shí)實(shí)現(xiàn)存儲(chǔ)空間的高利用率和迅速查找的目的。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明為克服上述現(xiàn)有技術(shù)所述的至少一種缺陷(不足),提出了一種電能表數(shù) 據(jù)動(dòng)態(tài)存儲(chǔ)方法,其能有效提高存儲(chǔ)空間的利用率,且可以達(dá)到快速查找記錄數(shù)據(jù)的目的。
[0007] 為了實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
[0008] -種電能表數(shù)據(jù)動(dòng)態(tài)存儲(chǔ)方法,包括以下步驟:
[0009] S0.獲取電能表數(shù)據(jù);
[0010] S1.根據(jù)獲取的電能表數(shù)據(jù)的記錄密度,將獲取的電能表數(shù)據(jù)寫(xiě)入數(shù)據(jù)存儲(chǔ)區(qū)中 相應(yīng)的數(shù)據(jù)分區(qū),并對(duì)索引存儲(chǔ)區(qū)中的索引信息進(jìn)行相應(yīng)的更新。
[0011] 進(jìn)一步所述步驟S1具體為:
[0012] S101.獲取當(dāng)前數(shù)據(jù)的記錄密度,根據(jù)當(dāng)前數(shù)據(jù)的記錄密度判斷在數(shù)據(jù)存儲(chǔ)區(qū)是 否存在相應(yīng)的數(shù)據(jù)分區(qū),若存在則進(jìn)入步驟S102,若否則進(jìn)入步驟S103 ;
[0013] S102.獲取當(dāng)前數(shù)據(jù)在相應(yīng)數(shù)據(jù)分區(qū)中的偏移量;
[0014] S103.在數(shù)據(jù)存儲(chǔ)區(qū)新建相應(yīng)數(shù)據(jù)分區(qū),獲取相應(yīng)數(shù)據(jù)分區(qū)的起始地址,將當(dāng)前的 數(shù)據(jù)記錄設(shè)為該新建數(shù)據(jù)分區(qū)的第一條記錄,偏移量為0,在索引存儲(chǔ)區(qū)新建相應(yīng)的索引;
[0015] S104.根據(jù)相應(yīng)數(shù)據(jù)分區(qū)的起始地址加上偏移量得到當(dāng)前的數(shù)據(jù)的存儲(chǔ)地址,按 照該存儲(chǔ)地址將當(dāng)前數(shù)據(jù)寫(xiě)入相應(yīng)數(shù)據(jù)分區(qū)中;并將當(dāng)前數(shù)據(jù)記錄設(shè)為該相應(yīng)數(shù)據(jù)分區(qū)的 最后一條記錄;
[0016] S105.在索引存儲(chǔ)區(qū)對(duì)相應(yīng)數(shù)據(jù)分區(qū)的相應(yīng)索引信息進(jìn)行更新。
[0017] 進(jìn)一步所述步驟S102包括,
[0018] 獲取相應(yīng)數(shù)據(jù)分區(qū)第一條數(shù)據(jù)的記錄時(shí)標(biāo)、最后一條數(shù)據(jù)的記錄時(shí)標(biāo)和數(shù)據(jù)類(lèi) 型;根據(jù)相應(yīng)數(shù)據(jù)分區(qū)第一條數(shù)據(jù)的記錄時(shí)標(biāo)、最后一條數(shù)據(jù)的記錄時(shí)標(biāo)、數(shù)據(jù)類(lèi)型計(jì)算得 到當(dāng)前數(shù)據(jù)在相應(yīng)數(shù)據(jù)分區(qū)中的偏移量。
[0019] 進(jìn)一步,所述的數(shù)據(jù)的記錄密度包括數(shù)據(jù)類(lèi)型和記錄間隔時(shí)間。
[0020] 進(jìn)一步,所述的索引存儲(chǔ)區(qū)的數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)分區(qū)的起始地址、數(shù)據(jù)分區(qū)的第 一條記錄時(shí)標(biāo)、數(shù)據(jù)分區(qū)的最后一條記錄時(shí)標(biāo)、數(shù)據(jù)分區(qū)的數(shù)據(jù)類(lèi)型、數(shù)據(jù)分區(qū)的記錄間隔 時(shí)間。
[0021] 進(jìn)一步,所述步驟S101之前還包括步驟S100.檢查記錄間隔時(shí)間是否符合設(shè)定, 若是,則進(jìn)入步驟S101,反之,則返回重新檢查。
[0022] 進(jìn)一步,其還包括步驟S2,所述的步驟S2為對(duì)數(shù)據(jù)進(jìn)行查詢。
[0023] 進(jìn)一步,所述的步驟S2包括:
[0024] S201.以待查數(shù)據(jù)的時(shí)標(biāo)為依據(jù),在索引存儲(chǔ)區(qū)遍歷所有索引查找待查數(shù)據(jù)相應(yīng) 的索引;
[0025] S202.根據(jù)相應(yīng)索引在數(shù)據(jù)存儲(chǔ)區(qū)中查找相應(yīng)的數(shù)據(jù)分區(qū),并獲取相應(yīng)數(shù)據(jù)分區(qū) 的起始地址和第一條數(shù)據(jù)記錄的起始時(shí)標(biāo);
[0026] S203.根據(jù)相應(yīng)數(shù)據(jù)分區(qū)的第一條數(shù)據(jù)記錄的起始時(shí)標(biāo)、待查數(shù)據(jù)的時(shí)標(biāo)和數(shù)據(jù) 類(lèi)型計(jì)算得到待查數(shù)據(jù)在相應(yīng)數(shù)據(jù)分區(qū)中的偏移量;
[0027] S204.通過(guò)計(jì)算數(shù)據(jù)分區(qū)的起始地址加上偏移量得到待查數(shù)據(jù)的存儲(chǔ)地址;
[0028] S205.從該存儲(chǔ)地址中讀取待查數(shù)據(jù),并根據(jù)相應(yīng)索引信息解析數(shù)據(jù)的記錄密度。
[0029] 本發(fā)明的有益效果為:本發(fā)明將存儲(chǔ)區(qū)劃分為索引存儲(chǔ)區(qū)和數(shù)據(jù)區(qū),根據(jù)記錄密 度存儲(chǔ)相應(yīng)的數(shù)據(jù),分區(qū)內(nèi)數(shù)據(jù)的定義與解析全部依賴于索引的描述。由于只有新的記錄 密度才會(huì)新建索引,因此索引的數(shù)量相對(duì)數(shù)據(jù)記錄條數(shù)就大大減少,從而遍歷索引所需的 時(shí)間則也相應(yīng)減少,當(dāng)尋找到匹配的索引后,由于該索引相應(yīng)的分區(qū)內(nèi)記錄密度相同,就可 以使用算術(shù)計(jì)算的方法,直接定位到存儲(chǔ)空間,查找時(shí)間可忽略,從而整體的查找速度大大 提高。每個(gè)分區(qū)中不僅不存在無(wú)用的存儲(chǔ)空間,而且每條數(shù)據(jù)無(wú)需時(shí)標(biāo)以及數(shù)據(jù)格式描述 信息,分區(qū)和分區(qū)之間也屬于無(wú)縫銜接,整個(gè)方案只需要額外的少量的索引數(shù)據(jù),因此保持 了存儲(chǔ)空間的高利用率。本發(fā)明可實(shí)現(xiàn)存儲(chǔ)空間的高利用率和快速查找數(shù)據(jù)的目的。
【附圖說(shuō)明】
[0030] 圖1為電能表數(shù)據(jù)動(dòng)態(tài)存儲(chǔ)方法的示意圖;
[0031] 圖2為電能表存儲(chǔ)動(dòng)態(tài)數(shù)據(jù)的流程圖;
[0032] 圖3為電能表存儲(chǔ)數(shù)據(jù)的優(yōu)選流程圖;
[0033] 圖4為電能表查詢數(shù)據(jù)的流程圖;
[0034] 圖5為存儲(chǔ)區(qū)域內(nèi)索引存儲(chǔ)區(qū)和數(shù)據(jù)存儲(chǔ)區(qū)的關(guān)系圖;
[0035]圖6為一具體實(shí)施例中索引存儲(chǔ)區(qū)的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0036] 圖7為一具體實(shí)施例中數(shù)據(jù)分區(qū)的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0037] 圖8為一具體實(shí)施例中電能表負(fù)荷曲線的動(dòng)態(tài)存儲(chǔ)流程圖;
[0038] 圖9為一具體實(shí)施例中電能表負(fù)荷曲線的查詢流程圖。
【具體實(shí)施方式】
[0039] 下面結(jié)合實(shí)施例及附圖,對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明,但本發(fā)明的實(shí)施方式不 限于此。
[0040] 如圖1所示的一種電能表數(shù)據(jù)動(dòng)態(tài)存儲(chǔ)方法的示意圖,包括以下步驟:
[0041] S0.獲取電能表數(shù)據(jù);
[0042] S1.根據(jù)獲取的電能表數(shù)據(jù)的記錄密度,將獲取的電能表數(shù)據(jù)寫(xiě)入數(shù)據(jù)存儲(chǔ)區(qū)中 相應(yīng)的數(shù)據(jù)分區(qū),并對(duì)索引存儲(chǔ)區(qū)中的索引信息進(jìn)行相應(yīng)的更新。
[0043] 進(jìn)一步,如圖2所示的電能表存儲(chǔ)動(dòng)態(tài)數(shù)據(jù)的流程圖,所述步驟S1具體為:
[0044] S101.獲取當(dāng)前數(shù)據(jù)的記錄密度,根據(jù)當(dāng)前數(shù)據(jù)的記錄密度判斷在數(shù)據(jù)存儲(chǔ)區(qū)是 否存在相應(yīng)的數(shù)據(jù)分區(qū),若存在則進(jìn)入步驟S102,若否則進(jìn)入步驟S103;
[0045] S102.獲取當(dāng)前數(shù)據(jù)在相應(yīng)數(shù)據(jù)分區(qū)中的偏移量;
[0046] S103.在數(shù)據(jù)存儲(chǔ)區(qū)新建相應(yīng)數(shù)據(jù)分區(qū),獲取相應(yīng)數(shù)據(jù)分區(qū)的起始地址,將當(dāng)前的 數(shù)據(jù)記錄設(shè)為該新建數(shù)據(jù)分區(qū)的第一條記錄,偏移量為0,在索引存儲(chǔ)區(qū)新建相應(yīng)的索引;
[0047] S104.根據(jù)相應(yīng)數(shù)據(jù)分區(qū)的起始地址加上偏移量得到當(dāng)前的數(shù)據(jù)的存儲(chǔ)地址,按 照該存儲(chǔ)地址將當(dāng)前數(shù)據(jù)寫(xiě)入相應(yīng)數(shù)據(jù)分區(qū)中;并將當(dāng)前數(shù)據(jù)記