專利名稱:安全數(shù)字卡的存儲(chǔ)檢索方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理技術(shù),特別是涉及一種高速快效的SD (安全數(shù)字)卡存儲(chǔ) 檢索方法技術(shù)。
背景技術(shù):
在電力自動(dòng)化行業(yè),有大量的監(jiān)控?cái)?shù)據(jù)需要存儲(chǔ)。存儲(chǔ)介質(zhì)最早的是手工抄寫 到紙張上,后來隨著計(jì)算機(jī)在電力自動(dòng)化行業(yè)的應(yīng)用,普遍使用軟磁盤、U盤、硬 盤等來存儲(chǔ)數(shù)據(jù),這些都是上位機(jī)在windows/imix等主流操作系統(tǒng)下實(shí)現(xiàn)的,后來 隨著單片機(jī)、DSP (數(shù)字信號(hào)處理器)等微處理器的蓬勃發(fā)展,電力自動(dòng)化行業(yè)對(duì)監(jiān) 控系統(tǒng)的實(shí)時(shí)性和精確性提出了更高的要求,使得嵌入式操作系統(tǒng)在電力自動(dòng)化行 業(yè)得到迅速發(fā)送,隨之而來的問題就是如何在嵌入式操作系統(tǒng)環(huán)境下解決大量數(shù)據(jù) 的存儲(chǔ)問題。最早人們常用的存儲(chǔ)設(shè)備是EEPROM,需要用紫外線擦除,軟件只能一 次性的寫入數(shù)據(jù),如果要重新寫入數(shù)據(jù)就必須再用紫外線擦除,這造成操作上非常 大的不方便。后來人們開始使用FLASH,可以直接用軟件擦寫,但讀寫速度較慢; 另外還有用各種RAM存儲(chǔ)數(shù)據(jù)的,其讀寫速度快,但失電后存儲(chǔ)的數(shù)據(jù)會(huì)丟失。再 后來,高速FLASH出現(xiàn)了,兼有傳統(tǒng)FLASH和RAM長(zhǎng)度,但價(jià)錢太高。另外,這些 存儲(chǔ)設(shè)備都有個(gè)致命的缺陷容量都無法做大,只能做到M級(jí),已經(jīng)不適合做現(xiàn)在 大容量數(shù)據(jù)的存儲(chǔ)。隨著民用數(shù)碼產(chǎn)品的高速發(fā)展,帶來了新的存儲(chǔ)設(shè)備SD卡 (Secure Digital Card:安全數(shù)字卡),失電后存儲(chǔ)的數(shù)據(jù)不會(huì)丟失,它的讀寫速度達(dá)到 2MBPS,甚至更高,而容量很容易達(dá)到G級(jí),是FLASH之類容量的數(shù)千倍,而價(jià)錢非 常便宜,這就有可能使用SD卡代替?zhèn)鹘y(tǒng)的FLASH、 RAM、硬盤等來存儲(chǔ)監(jiān)控系統(tǒng)的大量數(shù)據(jù)。但由于電力自動(dòng)化行業(yè)與民用數(shù)碼產(chǎn)品行業(yè)不同,對(duì)數(shù)據(jù)的存儲(chǔ)檢索時(shí) 間有很高的要求,所以在民用數(shù)碼產(chǎn)品行業(yè)采用的SD卡存儲(chǔ)檢索方法是不能滿足電 力自動(dòng)化行業(yè)的要求的。
SD卡是現(xiàn)在民用數(shù)碼產(chǎn)品里廣泛使用的存儲(chǔ)設(shè)備,由于SD卡讀寫需要相應(yīng)的 一串指令,在2MBPS速度下讀取SD卡信息,通過計(jì)算可知,讀取1G字節(jié)SD卡數(shù)據(jù) 大約需要60分鐘的時(shí)間。用SD卡存儲(chǔ)歷史數(shù)據(jù),需要檢索歷史數(shù)據(jù)時(shí),普通的方 法就是依次比較數(shù)據(jù)時(shí)間,極端的時(shí)候需要比較所有數(shù)據(jù),那么需要60分鐘,這么 長(zhǎng)的時(shí)間,是無法忍受的。為此, 一般采用索引映勤"的方法,把SD卡分成2部分, 前面為索引區(qū),后面為數(shù)據(jù)區(qū),索引區(qū)記錄數(shù)據(jù)區(qū)的時(shí)間等信息,這樣檢索數(shù)據(jù)就 變成了檢索索引區(qū),此方法顯然能提高SD卡檢索時(shí)間,但是,對(duì)大容量SD卡,搜 索索引區(qū)仍然需要很長(zhǎng)的時(shí)間,尤其在電力自動(dòng)化行業(yè),對(duì)數(shù)據(jù)響應(yīng)的時(shí)間一般要 求不大于1秒,此方法仍然無法滿足要求。
發(fā)明內(nèi)容
針對(duì)上述現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明所要解決的技術(shù)問題是提供一種高速 度、低成本、大容量、數(shù)據(jù)響應(yīng)時(shí)間短的SD卡的存儲(chǔ)檢索方法。
為了解決上述技術(shù)問題,本發(fā)明所提供的一種SD卡的存儲(chǔ)檢索方法,其特征在 于,檢索方法的步驟包括
1) 建立數(shù)據(jù)結(jié)構(gòu),所述SD卡為設(shè)有m個(gè)扇區(qū)的SD卡,每個(gè)扇區(qū)為X(X》512) 字節(jié),設(shè)扇區(qū)的前2n (n為2-4)字節(jié)為ID號(hào),后(X-2n)字節(jié)為數(shù)據(jù)(存儲(chǔ))空 間;
2) 對(duì)采樣數(shù)據(jù)編碼(預(yù)處理),并按序存入,設(shè)時(shí)間基準(zhǔn)點(diǎn)Ti,則數(shù)據(jù)采樣時(shí) 間至?xí)r間基準(zhǔn)點(diǎn)Ti的時(shí)間間隔為Ty (毫秒),采樣數(shù)據(jù)以固定間隔時(shí)間(毫秒)按 照扇區(qū)的順序和扇區(qū)內(nèi)的數(shù)據(jù)點(diǎn)順序依次存入;3) 進(jìn)行數(shù)據(jù)點(diǎn)位置的計(jì)算,設(shè)基準(zhǔn)數(shù)據(jù)點(diǎn)為0,其位置在第Fo扇區(qū)的第Qo點(diǎn) 處;設(shè)要檢索的數(shù)據(jù)點(diǎn)為X,其位置在第Fx扇區(qū)的第Qx點(diǎn)處;則計(jì)算如下
b)先計(jì)算時(shí)間間隔TsHTo-Txl (毫秒),其中,To為基準(zhǔn)數(shù)據(jù)點(diǎn)的(采樣)數(shù) 據(jù)時(shí)間(毫秒),Tx為要檢索數(shù)據(jù)點(diǎn)的(采樣)數(shù)據(jù)時(shí)間(毫秒);
再計(jì)算存儲(chǔ)記錄的時(shí)間間隔為Ts'=|To-Tx|-P (Ts),其中P (Ts)為修正值, 當(dāng)步驟2)中采樣數(shù)據(jù)編碼為按序存入時(shí)P (Ts) =0;
b)數(shù)據(jù)點(diǎn)間隔QsWs' /Kj,其中,Kj為采樣間隔時(shí)間(毫秒);cj規(guī)2iiH」響rs刀、ys-yoj /Htfj楚數(shù)冏,共屮,yo刀巷佃戮骷總仕屈2i的位 置,H為每個(gè)扇區(qū)保存的數(shù)據(jù)點(diǎn)個(gè)數(shù);
d) 要檢索的數(shù)據(jù)點(diǎn)保存的扇區(qū)Fr (Fd+Fo-Fs)取模,其中,F(xiàn)d為SD卡的扇 區(qū)總數(shù),F(xiàn)o為基準(zhǔn)數(shù)據(jù)點(diǎn)保存的扇區(qū);
e) 要檢索的數(shù)據(jù)點(diǎn)在扇區(qū)的位置Qx為H減去(Qs-Qo) /H的余數(shù);
4) 直接從數(shù)據(jù)點(diǎn)位置讀取數(shù)據(jù)。
進(jìn)一步的,所述步驟2)中的時(shí)間基準(zhǔn)點(diǎn)為1970年1月1號(hào)0點(diǎn)0分0毫秒。 進(jìn)一步的,所述步驟3)中設(shè)基準(zhǔn)數(shù)據(jù)點(diǎn)為當(dāng)前數(shù)據(jù)點(diǎn),也就是最后一次寫入
SD卡的采樣數(shù)據(jù)的位置。
進(jìn)一步的,所述步驟3) a)中P (Ts)為Ts的分段(修正值)函數(shù),P (Ts)
由存儲(chǔ)(停電或其它原因而停止運(yùn)行存儲(chǔ)的)記錄確定,或根據(jù)二分法、快速逼近
法搜索、計(jì)算得到。
利用本發(fā)明提供的SD卡的存儲(chǔ)檢索方法,由于采用按序存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu),使存 儲(chǔ)數(shù)據(jù)的檢索過程變?yōu)榇鎯?chǔ)數(shù)據(jù)的位置的計(jì)算過程,從數(shù)據(jù)點(diǎn)存儲(chǔ)位置直接讀取數(shù) 據(jù),所以檢索速度比傳統(tǒng)檢索方法快得多;由于釆用扇區(qū)設(shè)ID號(hào)的結(jié)構(gòu),從而對(duì)不 連續(xù)的采樣數(shù)據(jù)仍然可以快速檢索。
具體實(shí)施例方式
以下對(duì)本發(fā)明的實(shí)施例作進(jìn)一步詳細(xì)描述,但本實(shí)施例并不用于限制本發(fā)明, 凡是采用本發(fā)明的相似方法及其相似變化,均應(yīng)列入本發(fā)明的保護(hù)范圍。
本發(fā)明實(shí)施例所提供的一種SD卡的存儲(chǔ)檢索方法。本發(fā)明通過對(duì)SD卡扇區(qū)合 理的編碼,無須索引區(qū),就能快速檢索歷史數(shù)據(jù)。在電力自動(dòng)化行業(yè),保存歷史數(shù) 據(jù)都要求記錄最近若干時(shí)間的數(shù)據(jù),比如,最近1年的數(shù)據(jù),有明顯的特征數(shù)據(jù) 具有先進(jìn)先出的特點(diǎn),總是用最新的數(shù)據(jù)覆蓋最老的數(shù)據(jù)。本發(fā)明記錄數(shù)據(jù)方法如 下,SD卡一般縣以512享書先一個(gè)扇反.免W:S:前4 ^書乂i TD g.后SnS^書^
數(shù)據(jù)空間(如果是2048字節(jié)或其它字節(jié)為一個(gè)扇區(qū),方法一樣)。ID號(hào)從1開始, 依次增加。每寫一個(gè)扇區(qū),該扇區(qū)的ID號(hào)都比上次寫的扇區(qū)的ID號(hào)大1。系統(tǒng)第 一次寫SD卡時(shí),第一個(gè)扇區(qū)的ID號(hào)從1開始,第二個(gè)扇區(qū)的ID號(hào)為2,由此類推, 假設(shè)為1G字節(jié)的SD卡,則第一次寫到最后一個(gè)扇區(qū)是它的ID號(hào)為2048000,此時(shí) 繼續(xù)記錄數(shù)據(jù),按照先進(jìn)先出的原則,應(yīng)該接著寫第一個(gè)扇區(qū),此時(shí)ID號(hào)繼續(xù)增長(zhǎng) 為2048001,然后接著寫第二個(gè)扇區(qū)的ID號(hào)為2048002,如此一直循環(huán)寫下去。要 保存的數(shù)據(jù)假設(shè)是每O。 l秒記錄一次,那么4字節(jié)的ID號(hào)能保存的時(shí)間為2的 32次方乘以0。 1秒,即429496727. 6秒,大約13。 6年。電力自動(dòng)化行業(yè)對(duì)自動(dòng) 化裝置的年限要求是10年,所以4字節(jié)的ID號(hào)可以保證在自動(dòng)化裝置的生命周期 里ID號(hào)不會(huì)翻轉(zhuǎn)(這里是假設(shè)每個(gè)扇區(qū)數(shù)據(jù)空間只記錄一點(diǎn)的數(shù)據(jù),如果每個(gè)扇區(qū) 數(shù)據(jù)空間記錄10點(diǎn)數(shù)據(jù),則4字節(jié)ID號(hào)可用136年)。如果數(shù)據(jù)的采樣密度更高, 可以用6字節(jié)的ID號(hào),甚至用8字節(jié)的ID號(hào),存儲(chǔ)方法都一樣。數(shù)據(jù)空間可以為 若干個(gè)采樣點(diǎn)加第一個(gè)點(diǎn)或者最后一個(gè)點(diǎn)的采樣時(shí)間,因?yàn)橹酪粋€(gè)點(diǎn)采樣的時(shí)間, 根據(jù)位置順序就可獲得其它點(diǎn)的采樣時(shí)間。當(dāng)然,如果不在乎浪費(fèi)一點(diǎn)空間,也可 以每個(gè)點(diǎn)都帶采樣時(shí)間。為了進(jìn)一步加快數(shù)據(jù)檢索時(shí)間,數(shù)據(jù)的時(shí)間不用傳統(tǒng)的年月 日時(shí)分秒的方式來表示,而是采用相對(duì)于1970年1月1號(hào)0點(diǎn)0分0毫秒的毫秒數(shù)來表示。因?yàn)槟暝氯諘r(shí)分秒的方式記錄時(shí)間,因?yàn)樯婕伴c年閏月大小月,每次比較 時(shí)間都需要復(fù)雜的計(jì)算,而比較毫秒數(shù)就非常簡(jiǎn)單了,比較大小就行。
總之,本發(fā)明數(shù)據(jù)編碼方法描述如下以扇區(qū)為單位,每個(gè)扇區(qū)分為ID號(hào)、用 毫秒數(shù)表示數(shù)據(jù)的采樣時(shí)間、若干點(diǎn)采樣數(shù)據(jù)共三部分。ID號(hào)從1開始依次增長(zhǎng),
毫秒數(shù)是相對(duì)于1970年l月1號(hào)0點(diǎn)0分0毫秒的毫秒數(shù)。
本發(fā)明的數(shù)據(jù)檢索方法非常簡(jiǎn)單,首先建立數(shù)據(jù)結(jié)構(gòu),所述SD卡為設(shè)有m個(gè)扇 區(qū)的SD卡,每個(gè)扇區(qū)為X(512-2048)字節(jié),設(shè)扇區(qū)的前2n (n為2-4)字節(jié)為ID號(hào), 后(X-2n)字節(jié)為數(shù)據(jù)(存儲(chǔ))空間;因?yàn)镮D也具有連續(xù)性和時(shí)間性,既可以看作 是時(shí)間的坐標(biāo),也可以看作是數(shù)據(jù)位置的坐標(biāo)。假設(shè)當(dāng)前數(shù)據(jù)點(diǎn),也就是最后一次 寫入SD卡的采樣數(shù)據(jù),保存在第345 (Fo)扇區(qū)處,ID號(hào)為12345678,數(shù)據(jù)時(shí)間 To是1175587486300 (毫秒)(也就是2007年4月3號(hào)8點(diǎn)4分46. 3秒),那么如 果要檢索2007年3月31號(hào)12點(diǎn)0分0秒的數(shù)據(jù),首先將要檢索的時(shí)間Tx轉(zhuǎn)換成 1175342400000 (毫秒),計(jì)算時(shí)間間隔 Ts= To - Tx =1175587486300-1175342400000=245086300,仍然以采樣間隔Kj為100毫秒為例, 則當(dāng)前數(shù)據(jù)點(diǎn)之前的第2450863 (Qs)個(gè)點(diǎn)就是想檢索的數(shù)據(jù)。假設(shè)每個(gè)扇區(qū)保存 !^500個(gè)數(shù)據(jù),當(dāng)前點(diǎn)是當(dāng)前扇區(qū)345 (Fo)的第100 (Qo)點(diǎn),那么則要檢索的數(shù) 據(jù)點(diǎn)所在扇區(qū)與當(dāng)前扇區(qū)的間隔Fs為(Qs- Qo) / H的整數(shù)商,即(2450863-100) /500的整數(shù)商=4901扇區(qū),而要檢索的數(shù)據(jù)點(diǎn)所在扇區(qū)的具體數(shù)據(jù)點(diǎn)Qx為H減去 (Qs- Qo) /H的余數(shù),即500- (2450863-100) %500= 237點(diǎn)。而當(dāng)前扇區(qū)為345 (Fo)扇區(qū),SD卡有2048000 (Fd)個(gè)扇區(qū),則要檢索的數(shù)據(jù)點(diǎn)所在的實(shí)際扇區(qū)Fx 為(Fd+Fo-Fs)取模,即(2048000+345-4901)取模=2043444。所以要檢索的數(shù)據(jù) 點(diǎn)為2043444 (Fx)扇區(qū)的第237 (Qx)點(diǎn)。上述例子說明了在已知當(dāng)前數(shù)據(jù)點(diǎn)的位 置的情況下,檢索歷史數(shù)據(jù)只需簡(jiǎn)單的計(jì)算就能得到需要數(shù)據(jù)位置,然后直接從數(shù) 據(jù)點(diǎn)位置讀取數(shù)據(jù)。在本發(fā)明的實(shí)施例中,基準(zhǔn)數(shù)據(jù)點(diǎn)也可以設(shè)首次寫入SD卡的采樣數(shù)據(jù)的位置為 基準(zhǔn)數(shù)據(jù)點(diǎn)0';則計(jì)算如下a)時(shí)間間隔T^ Tx- To'(毫秒),其中,To'為基 準(zhǔn)數(shù)據(jù)點(diǎn)的(采樣)數(shù)據(jù)時(shí)間(毫秒),Tx為要檢索數(shù)據(jù)點(diǎn)的(采樣)數(shù)據(jù)時(shí)間(毫 秒);b)數(shù)據(jù)點(diǎn)間隔Qs=Ts/Kj,其中,Kj為采樣間隔時(shí)間(毫秒);c)扇區(qū)間隔 Fs為(Qs-Qo') / H的整數(shù)商,其中,^2'為基準(zhǔn)數(shù)據(jù)點(diǎn)在扇區(qū)的位置,H為每個(gè) 扇區(qū)保存的數(shù)據(jù)點(diǎn)個(gè)數(shù);d)要檢索的數(shù)據(jù)點(diǎn)保存的扇區(qū)F^ (Fd+Fo' -Fs)取模, 其中,F(xiàn)d為SD卡的扇區(qū)總數(shù),E2'為基準(zhǔn)數(shù)據(jù)點(diǎn)保存的扇區(qū);e)要檢索的數(shù)據(jù)點(diǎn) 在扇區(qū)的位置Qx為H減去(Qs-Qo') /H的余數(shù);然后直接從數(shù)據(jù)點(diǎn)位置讀取數(shù)據(jù)。
在實(shí)際應(yīng)用中,有可能某段時(shí)間裝置是停止運(yùn)行的,這樣就造成局部數(shù)據(jù)存儲(chǔ) 的不連續(xù),如果只是簡(jiǎn)單根據(jù)當(dāng)前點(diǎn)的時(shí)間和ID號(hào)計(jì)算出來的位置則有可能不是預(yù) 期的數(shù)據(jù)。解決這個(gè)問題就是在計(jì)算時(shí)間間隔TS后用修正值修正,以修正數(shù)據(jù)存儲(chǔ) 不連續(xù)帶來的誤差,即在所述進(jìn)行數(shù)據(jù)點(diǎn)位置的計(jì)算中,時(shí)間間隔為Ts-lTo-Txl, 存儲(chǔ)記錄的時(shí)間間隔為Ts'=|To-Tx|-P (Ts),其中P (Ts)為修正值當(dāng)采樣數(shù)
據(jù)編碼始終按序存入時(shí)P^;當(dāng)數(shù)據(jù)存儲(chǔ)不連續(xù)時(shí),P為TS的分段函數(shù),即P(TS); 以所述例子為例"假設(shè)當(dāng)前數(shù)據(jù)點(diǎn),也就是最后一次寫入SD卡的采樣數(shù)據(jù),保存
在第345 (Fo)扇區(qū)處,ID號(hào)為12345678,數(shù)據(jù)時(shí)間To是1175587486300 (毫秒) (也就是2007年4月3日8點(diǎn)4分46. 3秒),那么如果要檢索2007年3月31日 12點(diǎn)0分0秒的數(shù)據(jù),首先將要檢索的時(shí)間Tx轉(zhuǎn)換成1175342400000 (毫秒),計(jì) 算時(shí)間間隔Ts二 To — Tx =1175587486300-1175342400000=245086300,"其中由于4 月3日0點(diǎn)至1點(diǎn)裝置停電1小時(shí),則停止存儲(chǔ)(記錄)的時(shí)間間隔為3600000 (毫 秒),4月3日1點(diǎn)至4月3日8點(diǎn)4分46. 3秒的時(shí)間間隔為Ta=25486300 (毫秒), 因Ts>Ta,說明要檢索的數(shù)據(jù)記錄點(diǎn)在停止存儲(chǔ)(記錄)的時(shí)間段之前,則存?zhèn)饔?錄的時(shí)間間隔為Ts'=|To-Tx|-P (Ts) =245086300-3600000=219600000 (毫秒), 以后的關(guān)于數(shù)據(jù)點(diǎn)間隔Qs、要檢索數(shù)據(jù)點(diǎn)所在的扇區(qū)Fx和所在扇區(qū)的具體數(shù)據(jù)點(diǎn)Qx的計(jì)算同原實(shí)施例;分段函數(shù)P (TS)可以從相關(guān)(停電或其它原因而停止運(yùn)行 存儲(chǔ)的)記錄中得到,也可根據(jù)二分法或快速逼近法搜索得到,具體說明如下
如果裝置從一開始就一直在持續(xù)運(yùn)行,那當(dāng)前數(shù)據(jù)點(diǎn)的位置自然是知道的,但 在實(shí)際應(yīng)用中,裝置可能因?yàn)橥k娀蚱渌蚨V惯\(yùn)行,當(dāng)前數(shù)據(jù)點(diǎn)的位置如何
獲得?常見的方法就是用其它存儲(chǔ)設(shè)備記錄當(dāng)前點(diǎn)位置,比如用SRAM或FLASH等, 每往SD卡里寫個(gè)采樣點(diǎn)數(shù)據(jù),就把扇區(qū)號(hào)和扇區(qū)內(nèi)點(diǎn)號(hào)記在SRAM或FLASH的某個(gè) 預(yù)先定義的位置。這樣裝置復(fù)位后直接讀該信息就知道了當(dāng)前數(shù)據(jù)點(diǎn)的位置。如果 沒有輔助的存儲(chǔ)設(shè)備怎么辦呢?這時(shí)就需要利用扇區(qū)ID號(hào)依次增長(zhǎng)的特點(diǎn),裝置初 始化時(shí)讀第一個(gè)扇區(qū)ID號(hào),根據(jù)二分法搜索,可快速找到ID號(hào)最大的扇區(qū),也就 是當(dāng)前數(shù)據(jù)點(diǎn)的位置。仍然假設(shè)有2048000個(gè)扇區(qū),運(yùn)行一段時(shí)間后數(shù)據(jù)寫滿又從 頭開始寫一段時(shí)間的數(shù)據(jù),假設(shè)其存儲(chǔ)的數(shù)據(jù)其ID號(hào)從0扇區(qū)依次為2048001、 2048002、。。。 3048000、 1000001、 1000002、。。。 2048000.那么如何才能找到最新點(diǎn), 也就是3048000這個(gè)點(diǎn)呢?先讀第一個(gè)扇區(qū)的ID號(hào)為2048001,再讀1/2位置的扇 區(qū)ID號(hào)為1024000,如果從第一個(gè)扇區(qū)到l/2位置扇區(qū)是連續(xù)的,則l/2位置的扇 區(qū)ID號(hào)應(yīng)該是2048001+2048000/2=3072001,所以若在1/2位置的扇區(qū)讀到的ID 號(hào)不小于3072001則說明最新點(diǎn)還在后面,繼續(xù)讀后面的l/2位置,即3/4位置扇 區(qū)的ID號(hào),同理分析最新點(diǎn)是否在后面,直到認(rèn)為最新點(diǎn)不在后面為止?,F(xiàn)實(shí)際讀 到的是1024000,說明最新點(diǎn)的位置在0與1/2位置范圍里,再讀前l(fā)/2的l/2位 置,即1/4位置的ID號(hào),為2560001,等于2048001+2048000/4,說明最新點(diǎn)在當(dāng) 前位置的后面,即l/4位置與l/2位置之間。再讀其中間位置,即3/8位置的數(shù)據(jù), 同理根據(jù)此位置的ID號(hào)與上一次讀的ID號(hào)連續(xù)與否,得出最新點(diǎn)在此位置的后面 或前面,然后再讀剩下區(qū)域中間點(diǎn)的ID號(hào),直到最后還剩下1個(gè)點(diǎn)或2個(gè)點(diǎn),如果 扇區(qū)總個(gè)數(shù)是2的整數(shù)冪則正好最后剩下1個(gè)點(diǎn)即為最新點(diǎn),否則可能會(huì)剩下2個(gè) 點(diǎn),此2個(gè)點(diǎn)中最大的為最新點(diǎn)。2048000介于2的20次方與2的21次方之間,所以最多讀22次即能找到最新點(diǎn)。用2分法找最大ID點(diǎn)方法歸納如下定義扇區(qū) 總數(shù)為d, F(x)為ID號(hào)最大的扇區(qū),所有扇區(qū)依次定義為F(l)、 F(2)、。。。 F(x)。。。 F(d),對(duì)應(yīng)的ID號(hào)依次I(l)、 1(2)。。。 I(x)。。。 I(d)。讀扇區(qū)F(l)獲得ID號(hào)I(l), 讀扇區(qū)F(d/2)獲得ID號(hào)I(d/2),如果I(d/2)_ I(l)大于等于d/2則說明扇區(qū)F(x) 在扇區(qū)F(d/2)后面,否則扇區(qū)F(x)在扇區(qū)F(d/2)前面。如果I(d/2) - I(l)大于等 于d/2則讀F(d/2 +(d—d/2)/2)即F(3d/4),若l(3d/4)- I (d/2)大于等于d/4,則 說明扇區(qū)F (x)在扇區(qū)F (3d/4)后面,否則扇區(qū)F(x)在扇區(qū)F (3d/4)前面。如果I (d/2) -1(1)小于d/2則讀F(d/4),若l(d/4)-I(l)大于等于d/4,則說明扇區(qū)F(x)在扇 區(qū)F(d/4)后面,否則扇區(qū)F(x)在扇區(qū)F(d/4)前面。如此分析下去,每次縮小一半 范圍,則剩下最后l個(gè)或2個(gè)扇區(qū)就是F(x)。
在實(shí)際應(yīng)用中,有可能某段時(shí)間裝置是停止運(yùn)行的,這樣就造成局部數(shù)據(jù)不連 續(xù),如果只是簡(jiǎn)單根據(jù)當(dāng)前點(diǎn)的時(shí)間和ID號(hào)計(jì)算出來的位置則有可能不是預(yù)期的數(shù) 據(jù)。解決這個(gè)問題還是利用扇區(qū)ID號(hào)依次增長(zhǎng)的特點(diǎn),比較第一次計(jì)算出來的采樣 點(diǎn)數(shù)據(jù)的時(shí)間,根據(jù)與期望時(shí)間的時(shí)間差再計(jì)算一次,如果不對(duì)就繼續(xù)計(jì)算,顯然 其計(jì)算次數(shù)與數(shù)據(jù)不連續(xù)的次數(shù)有關(guān),實(shí)際工作中裝置停電的次數(shù)非常少,數(shù)據(jù)不 連續(xù)的現(xiàn)象很少,即使數(shù)據(jù)不連續(xù)的次數(shù)很多,此方法為快速逼近法,仍然可以快 速找到目標(biāo)數(shù)據(jù)。仍然以采樣間隔為100毫秒每個(gè)扇區(qū)保存500個(gè)數(shù)據(jù)為例,假設(shè) 根據(jù)當(dāng)前點(diǎn)的時(shí)間和ID號(hào)計(jì)算出來的位置在扇區(qū)12345,如果該位置數(shù)據(jù)時(shí)間與要 檢索的時(shí)間早560000毫秒,560000/100/500=11. 2,那么往后11個(gè)扇區(qū)讀,即讀 12356扇區(qū)。如果扇區(qū)12345的數(shù)據(jù)比要檢索的時(shí)間晚560000毫秒,那么往前11 個(gè)扇區(qū)讀,即讀12334扇區(qū)。同理,再分析新讀扇區(qū)的數(shù)據(jù)時(shí)間與要檢索的時(shí)間間 差,直到時(shí)間差小于500*100=50000毫秒為止,則要檢索的數(shù)據(jù)就在最后讀的那個(gè) 扇區(qū)里。歸納如下,根據(jù)當(dāng)前點(diǎn)的時(shí)間和ID號(hào)計(jì)算出來的位置用F(a)表示,該處數(shù)據(jù)時(shí)間用t(a)表示,要檢索的目標(biāo)數(shù)據(jù)時(shí)間用t(x)表示,對(duì)應(yīng)扇區(qū)仍然用F(x) 表示,每個(gè)扇區(qū)有若干個(gè)數(shù)據(jù)點(diǎn)占用時(shí)間用T表示(如上例中每隔100毫秒采一點(diǎn) 每個(gè)扇區(qū)500點(diǎn)則每個(gè)扇區(qū)占用時(shí)間50000毫秒),則根據(jù)F(a)、 t(a)、 t(x)、 T求 F(x)的方法如下讀F(a十(t(x)- t(a))/T),得到的數(shù)據(jù)時(shí)間為t(a+ (t(x)-t(a))/T),為了表達(dá)式清晰用1)表示3+ (t(x)- t(a))/T,如果t(x)- t(b)小于等 于T,則目標(biāo)數(shù)據(jù)就在此扇區(qū)里,否則再讀「"+ (t(x)-t(b)/T),看該處數(shù)據(jù)時(shí)間 與t(x)的差是否小于等于T,如果大于T則繼續(xù)按上述計(jì)算方法讀新位置數(shù)據(jù),直 到其時(shí)間差小于等于T即找到目標(biāo)數(shù)據(jù)為止。
權(quán)利要求
1、一種SD卡的存儲(chǔ)檢索方法,其特征在于,檢索方法的步驟包括1)建立數(shù)據(jù)結(jié)構(gòu),所述SD卡為設(shè)有m個(gè)扇區(qū)的SD卡,每個(gè)扇區(qū)為X字節(jié),設(shè)扇區(qū)的前2n(n為2-4)字節(jié)為ID號(hào),后(X-2n)字節(jié)為數(shù)據(jù)存儲(chǔ)空間;2)對(duì)采樣數(shù)據(jù)編碼(預(yù)處理),并按序存入,設(shè)時(shí)間基準(zhǔn)點(diǎn)Ti,則數(shù)據(jù)采樣時(shí)間至?xí)r間基準(zhǔn)點(diǎn)Ti的時(shí)間間隔為Ty(毫秒),采樣數(shù)據(jù)以固定間隔時(shí)間(毫秒)按照扇區(qū)的順序和扇區(qū)內(nèi)的數(shù)據(jù)點(diǎn)順序依次存入;3)進(jìn)行數(shù)據(jù)點(diǎn)位置的計(jì)算,設(shè)基準(zhǔn)數(shù)據(jù)點(diǎn)為0,其位置在第Fo扇區(qū)的第Qo點(diǎn)處;設(shè)要檢索的數(shù)據(jù)點(diǎn)為X,其位置在第Fx扇區(qū)的第Qx點(diǎn)處;則計(jì)算如下a)先計(jì)算時(shí)間間隔Ts=|To-Tx|(毫秒),其中,To為基準(zhǔn)數(shù)據(jù)點(diǎn)的(采樣)數(shù)據(jù)時(shí)間(毫秒),Tx為要檢索數(shù)據(jù)點(diǎn)的(采樣)數(shù)據(jù)時(shí)間(毫秒);a)再計(jì)算存儲(chǔ)記錄的時(shí)間間隔為Ts′=|To-Tx|-P(Ts),其中P(Ts)為修正值,當(dāng)步驟2)中采樣數(shù)據(jù)編碼為按序存入時(shí)P(Ts)=0;b)數(shù)據(jù)點(diǎn)間隔Qs=Ts’/Kj,其中,Kj為采樣間隔時(shí)間(毫秒);c)扇區(qū)間隔Fs為(Qs-Qo)/H的整數(shù)商,其中,Qo為基準(zhǔn)數(shù)據(jù)點(diǎn)在扇區(qū)的位置,H為每個(gè)扇區(qū)保存的數(shù)據(jù)點(diǎn)個(gè)數(shù);d)要檢索的數(shù)據(jù)點(diǎn)保存的扇區(qū)Fx=(Fd+Fo-Fs)取模,其中,F(xiàn)d為SD卡的扇區(qū)總數(shù),F(xiàn)o為基準(zhǔn)數(shù)據(jù)點(diǎn)保存的扇區(qū);e)要檢索的數(shù)據(jù)點(diǎn)在扇區(qū)的位置Qx為H減去(Qs-Qo)/H的余數(shù);4)直接從數(shù)據(jù)點(diǎn)位置讀取數(shù)據(jù)。
2、 根據(jù)權(quán)利要求1所述的SD卡的存儲(chǔ)檢索方法,其特征在于,所述步驟2) 中的時(shí)間基準(zhǔn)點(diǎn)為1970年1月1號(hào)0點(diǎn)0分0毫秒。
3、 根據(jù)權(quán)利要求1所述的SD卡的存儲(chǔ)檢索方法,其特征在于,所述步驟3)中設(shè)基準(zhǔn)數(shù)據(jù)點(diǎn)為當(dāng)前數(shù)據(jù)點(diǎn),也就是最后一次寫入SD卡的采樣數(shù)據(jù)的位置。
4、根據(jù)權(quán)利要求1所述的SD卡的存儲(chǔ)檢索方法,其特征在于,所述步驟3) a) 中P (Ts)為Ts的分段函數(shù),P (Ts)由存儲(chǔ)記錄確定,或根據(jù)二分法、快速逼近法 搜索、計(jì)算得到。
全文摘要
本發(fā)明公開一種SD卡的存儲(chǔ)檢索方法,涉及數(shù)據(jù)處理技術(shù)領(lǐng)域;所要解決的是SD卡的高速度、低成本、大容量的存儲(chǔ)檢索技術(shù)問題;該檢索方法的步驟包括首先建立數(shù)據(jù)結(jié)構(gòu),以扇區(qū)為單位,每個(gè)扇區(qū)分為ID號(hào);對(duì)采樣數(shù)據(jù)編碼(預(yù)處理),用毫秒數(shù)表示數(shù)據(jù)的采樣時(shí)間,并按序存入;確定基準(zhǔn)數(shù)據(jù)點(diǎn)和要檢索數(shù)據(jù)點(diǎn),分別計(jì)算出時(shí)間間隔、數(shù)據(jù)點(diǎn)間隔、扇區(qū)間隔,然后計(jì)算出要檢索數(shù)據(jù)點(diǎn)所在的扇區(qū)和其在扇區(qū)的位置;然后直接從數(shù)據(jù)點(diǎn)位置讀取數(shù)據(jù)。本發(fā)明具有高速度、低成本、大容量、數(shù)據(jù)響應(yīng)時(shí)間短的特點(diǎn);并對(duì)不連續(xù)的采樣數(shù)據(jù)仍然可以快速檢索。
文檔編號(hào)G06F17/30GK101290621SQ200710194199
公開日2008年10月22日 申請(qǐng)日期2007年12月10日 優(yōu)先權(quán)日2007年4月17日
發(fā)明者楊浩赟 申請(qǐng)人:上海申瑞電力科技股份有限公司