本發(fā)明涉及存儲(chǔ)器領(lǐng)域,尤其涉及一種數(shù)據(jù)記錄的存儲(chǔ)、查詢和檢索的方法及裝置。
背景技術(shù):
Nand Flash在設(shè)計(jì)之初是為了數(shù)據(jù)存儲(chǔ)應(yīng)用,其芯片面積小,容量大。傳統(tǒng)方式下,在Nand Flash中進(jìn)行數(shù)據(jù)記錄的存儲(chǔ)、檢索與查詢時(shí),需遍歷所有的數(shù)據(jù)記錄進(jìn)行比較、定位,尤其是存儲(chǔ)區(qū)內(nèi)已經(jīng)存有多條數(shù)據(jù)且每條存儲(chǔ)的數(shù)據(jù)很長時(shí),對(duì)數(shù)據(jù)記錄的存儲(chǔ)、檢索與查詢的效率會(huì)非常低。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是為了克服現(xiàn)有技術(shù)的缺陷,提出適用于Nand Flash等存儲(chǔ)介質(zhì)的一種數(shù)據(jù)記錄的存儲(chǔ)、查詢和檢索的方法及裝置。
本發(fā)明采用的技術(shù)方案是:
一種數(shù)據(jù)記錄的存儲(chǔ)方法,方法具體包括:
步驟S1:提取待存儲(chǔ)的數(shù)據(jù)記錄的關(guān)鍵字段;
步驟S2:計(jì)算所述關(guān)鍵字段的特征值;
步驟S3:判斷索引區(qū)中是否包含存儲(chǔ)有所述特征值的索引單元,是則執(zhí)行步驟S4,否則執(zhí)行步驟S5;
步驟S4:確定與存儲(chǔ)有所述特征值的索引單元對(duì)應(yīng)的數(shù)據(jù)單元,讀取數(shù)據(jù)記錄,并判斷讀取到的數(shù)據(jù)記錄和所述待存儲(chǔ)的數(shù)據(jù)記錄是否相同,是則所述待存儲(chǔ)的數(shù)據(jù)記錄已存儲(chǔ),結(jié)束,否則執(zhí)行步驟S5;
步驟S5:將所述特征值存入索引區(qū),將所述待存儲(chǔ)的數(shù)據(jù)記錄存入數(shù)據(jù)區(qū)。
一種數(shù)據(jù)記錄的查詢方法,方法具體包括:
步驟T1:提取待查詢的數(shù)據(jù)記錄的關(guān)鍵字段;
步驟T2:計(jì)算所述關(guān)鍵字段的特征值;
步驟T3:判斷索引區(qū)中是否包含存儲(chǔ)有所述特征值的索引單元,是則執(zhí)行步驟T4,否則未查詢到相應(yīng)數(shù)據(jù)記錄,結(jié)束;
步驟T4:確定與存儲(chǔ)有所述特征值的索引單元對(duì)應(yīng)的數(shù)據(jù)單元,讀取數(shù)據(jù)記錄,并判斷讀取到的數(shù)據(jù)記錄和所述待查詢的數(shù)據(jù)記錄是否相同,是則查詢到相應(yīng)數(shù)據(jù)記錄,結(jié)束,否則未查詢到相應(yīng)數(shù)據(jù)記錄,結(jié)束。
一種數(shù)據(jù)記錄的檢索方法,方法具體包括:
步驟U1:計(jì)算待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值;
步驟U2:判斷索引區(qū)中是否包含存儲(chǔ)有所述特征值的索引單元,是則執(zhí)行步驟U3,否則未檢索到相應(yīng)數(shù)據(jù)記錄,結(jié)束;
步驟U3:確定與存儲(chǔ)有所述特征值的索引單元對(duì)應(yīng)的數(shù)據(jù)單元,讀取并顯示所述數(shù)據(jù)記錄,結(jié)束。
一種數(shù)據(jù)記錄的存儲(chǔ)裝置,裝置具體包括:
提取模塊,用于提取待存儲(chǔ)的數(shù)據(jù)記錄的關(guān)鍵字段;
計(jì)算模塊,用于計(jì)算待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值;
第一判斷模塊,用于判斷索引區(qū)中是否包含存儲(chǔ)有所述特征值的索引單元;
定位模塊,用于當(dāng)所述第一判斷模塊判斷索引區(qū)中包含存儲(chǔ)有所述特征值的索引單元時(shí),確定與存儲(chǔ)有所述特征值的索引單元對(duì)應(yīng)的數(shù)據(jù)單元;
讀取模塊,用于讀取數(shù)據(jù)記錄;
第二判斷模塊,用于判斷讀取到的數(shù)據(jù)記錄和待存儲(chǔ)的數(shù)據(jù)記錄是否相同;
第一寫入模塊,用于當(dāng)所述第一判斷模塊判斷出索引區(qū)中不包含所述計(jì)算模塊計(jì)算得到的特征值時(shí),將帶存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值存入索引區(qū);還用于當(dāng)所述第二判斷模塊判斷出讀取到的數(shù)據(jù)記錄和待存儲(chǔ)的數(shù)據(jù)記錄不相同時(shí),將待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值存入索引區(qū);
第二寫入模塊,用于將所述待存儲(chǔ)的數(shù)據(jù)記錄存入數(shù)據(jù)區(qū)。
一種數(shù)據(jù)記錄的查詢裝置,裝置具體包括:
提取模塊,用于提取待存儲(chǔ)的數(shù)據(jù)記錄的關(guān)鍵字段;
計(jì)算模塊,用于計(jì)算待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值;
第一判斷模塊,用于判斷索引區(qū)中是否包含存儲(chǔ)有所述特征值的索引單元;
定位模塊,用于當(dāng)所述第一判斷模塊判斷索引區(qū)中包含存儲(chǔ)有所述特征值的索引單元時(shí),確定與存儲(chǔ)有所述特征值的索引單元對(duì)應(yīng)的數(shù)據(jù)單元;
讀取模塊,用于讀取數(shù)據(jù)記錄;
第二判斷模塊,用于判斷讀取到的數(shù)據(jù)記錄和待存儲(chǔ)的數(shù)據(jù)記錄是否相同。
一種數(shù)據(jù)記錄的檢索裝置,裝置具體包括:
計(jì)算模塊,用于計(jì)算待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值;
判斷模塊,用于判斷索引區(qū)中是否包含存儲(chǔ)有所述特征值的索引單元;
定位模塊,用于當(dāng)所述判斷模塊判斷索引區(qū)中包含存儲(chǔ)有所述特征值的索引單元時(shí),確定與存儲(chǔ)有所述特征值的索引單元對(duì)應(yīng)的數(shù)據(jù)單元;
讀取模塊,用于讀取數(shù)據(jù)記錄;
顯示模塊,用于顯示讀取的數(shù)據(jù)記錄。
本發(fā)明取得的有益效果是:
采用本發(fā)明的技術(shù)方法,將Nand Flash的存儲(chǔ)區(qū)域劃分為索引區(qū)和數(shù)據(jù)區(qū),提取數(shù)據(jù)記錄的關(guān)鍵字段并存入索引區(qū),將索引區(qū)的關(guān)鍵字段讀入內(nèi)存后遍歷,直接確定了索引區(qū)中的關(guān)鍵字段對(duì)應(yīng)的數(shù)據(jù)記錄存放的數(shù)據(jù)區(qū)的位置,大大提升了數(shù)據(jù)記錄的存儲(chǔ)、查詢和檢索的效率。
附圖說明
為了更清楚的說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例一中提供的一種數(shù)據(jù)記錄的存儲(chǔ)方法的流程圖;
圖2為本發(fā)明實(shí)施例二中提供的一種數(shù)據(jù)記錄的存儲(chǔ)方法的流程圖;
圖3為本發(fā)明中存儲(chǔ)區(qū)域的一種結(jié)構(gòu)示意圖;
圖4為本發(fā)明中待存儲(chǔ)的數(shù)據(jù)記錄成功存儲(chǔ)后存儲(chǔ)區(qū)域的一種示意圖;
圖5為本發(fā)明實(shí)施例三中提供的一種數(shù)據(jù)記錄的查詢方法的流程圖;
圖6為本發(fā)明實(shí)施例四中提供的一種數(shù)據(jù)記錄的查詢方法的流程圖;
圖7為本發(fā)明實(shí)施例五中提供的一種數(shù)據(jù)記錄的檢索方法的流程圖;
圖8為本發(fā)明實(shí)施例六中提供的一種數(shù)據(jù)記錄的檢索方法的流程圖;
圖9為本發(fā)明實(shí)施例七中提供的一種數(shù)據(jù)記錄的存儲(chǔ)裝置的示意圖;
圖10為本發(fā)明實(shí)施例八中提供的一種數(shù)據(jù)記錄的查詢裝置的示意圖;
圖11為本發(fā)明實(shí)施例九中提供的一種數(shù)據(jù)記錄的檢索裝置的示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
實(shí)施例一
本發(fā)明實(shí)施例一提供了一種數(shù)據(jù)記錄的存儲(chǔ)方法,具體地,數(shù)據(jù)記錄的存儲(chǔ)區(qū)域劃分為索引區(qū)和數(shù)據(jù)區(qū),索引區(qū)包含若干個(gè)固定長度的索引單元,數(shù)據(jù)區(qū)包含若干個(gè)固定長度的數(shù)據(jù)單元,一個(gè)索引單元存有一條特征值,一個(gè)數(shù)據(jù)單元存有一條數(shù)據(jù)記錄,每條數(shù)據(jù)記錄的長度不超過一個(gè)數(shù)據(jù)單元的長度,索引單元和數(shù)據(jù)單元一一對(duì)應(yīng),索引區(qū)用于存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值,數(shù)據(jù)區(qū)用于存儲(chǔ)數(shù)據(jù)記錄,參見圖1,方法具體包括:
步驟S1:提取待存儲(chǔ)的數(shù)據(jù)記錄的關(guān)鍵字段;
步驟S2:計(jì)算待存儲(chǔ)的數(shù)據(jù)記錄的關(guān)鍵字段的特征值;
步驟S3:判斷索引區(qū)中是否包含存儲(chǔ)有待存儲(chǔ)的數(shù)據(jù)記錄的關(guān)鍵字段的特征值的索引單元,是則執(zhí)行步驟S4,否則執(zhí)行步驟S5;
步驟S4:確定與存儲(chǔ)有待存儲(chǔ)的數(shù)據(jù)記錄的關(guān)鍵字段的特征值的索引單元對(duì)應(yīng)的數(shù)據(jù)單元,讀取數(shù)據(jù)記錄,并判斷讀取到的數(shù)據(jù)記錄和待存儲(chǔ)的數(shù)據(jù)記錄是否相同,是則待存儲(chǔ)的數(shù)據(jù)記錄已存儲(chǔ),結(jié)束,否則執(zhí)行步驟S5;
步驟S5:將待存儲(chǔ)的數(shù)據(jù)記錄的關(guān)鍵字段的特征值存入索引區(qū),將待存儲(chǔ)的數(shù)據(jù)記錄存入數(shù)據(jù)區(qū)。
實(shí)施例二
本發(fā)明實(shí)施例二提供提供了一種數(shù)據(jù)記錄的存儲(chǔ)方法,具體地,存儲(chǔ)區(qū)域包括索引區(qū)和數(shù)據(jù)區(qū);其中,索引區(qū)可以常駐在內(nèi)存中,包括若干索引單元,用于存儲(chǔ)關(guān)鍵字段的特征值,數(shù)據(jù)區(qū)包括與各索引單元一一對(duì)應(yīng)的數(shù)據(jù)單元,用于存儲(chǔ)數(shù)據(jù)記錄。參見圖2,方法具體包括:
步驟101:提取待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段;
具體地,提取數(shù)據(jù)記錄的一個(gè)或多個(gè)關(guān)鍵字段。
例如,本實(shí)施例中,數(shù)據(jù)記錄共33字節(jié),包括8字節(jié)的商戶號(hào)、4字節(jié)的終端號(hào)、5字節(jié)的收單行標(biāo)識(shí)以及16字節(jié)的密鑰,關(guān)鍵字段的特征值共4字節(jié),以“商戶號(hào)”為關(guān)鍵字段,提取數(shù)據(jù)記錄中的“商戶號(hào)”。
步驟102:計(jì)算待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值;
本實(shí)施例中,使用預(yù)設(shè)算法計(jì)算待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值。
具體地,預(yù)設(shè)算法為CRC32、CRC16、SHA1、MD5等算法,優(yōu)選為CRC32算法。
例如,關(guān)鍵字段“商戶號(hào)”為001370248129050,用CRC32算法計(jì)算出的特征值是379854B。
步驟103:判斷索引區(qū)是否還有空間存儲(chǔ)一條數(shù)據(jù)記錄關(guān)鍵字段的特征值,是則執(zhí)行步驟104,否則結(jié)束;
步驟104:將索引區(qū)的數(shù)據(jù)記錄關(guān)鍵字段的特征值按頁載入內(nèi)存;
在本實(shí)施例中,由于Nand Flash是按頁讀寫的,每一條索引單元,每一條數(shù)據(jù)記錄的大小是確定的,所以存儲(chǔ)區(qū)的一頁所能存放的索引單元和數(shù)據(jù)記錄也是確定的,索引單元和數(shù)據(jù)記錄的大小不會(huì)超過存儲(chǔ)區(qū)一頁的大小。為避免出現(xiàn)跨頁存儲(chǔ)的情況,寫入的索引單元和數(shù)據(jù)單元進(jìn)行數(shù)據(jù)對(duì)齊,即將索引單元長度和數(shù)據(jù)單元長度設(shè)置為大于或等于實(shí)際索引單元長度和數(shù)據(jù)單元長度并為頁面大小的某個(gè)約數(shù)。
具體地,在本實(shí)施例中,假設(shè)存儲(chǔ)區(qū)域大小為FS,則存儲(chǔ)區(qū)域能放N=FS/(索引單元長度+數(shù)據(jù)單元長度)條記錄,得到的結(jié)果向下取整數(shù)。索引區(qū)大小為N*索引單元長度,數(shù)據(jù)區(qū)大小為N*數(shù)據(jù)單元長度,數(shù)據(jù)區(qū)的起始地址為索引區(qū)的起始地址+N*索引單元長度。數(shù)據(jù)區(qū)的起始地址可以用上述公式計(jì)算得到,也可以進(jìn)行指定。
更具體地,N*索引單元長度/頁內(nèi)最多字節(jié)數(shù)將得到的結(jié)果向上取整數(shù)得到索引區(qū)是由多少包含索引單元的頁組成,N*索引單元長度/頁內(nèi)最多字節(jié)數(shù)/塊內(nèi)最多頁數(shù)將得到的結(jié)果向上取整數(shù)得到索引區(qū)是由多少塊組成。相應(yīng)地,按照上述方法,能知道數(shù)據(jù)區(qū)所占的頁數(shù)和塊數(shù)。
例如,如圖3所示,在本實(shí)施例中一個(gè)Nand Flash塊最多存放32個(gè)Nand Flash頁面,一個(gè)Nand Flash頁面最多能夠存放512個(gè)字節(jié),索引區(qū)起始位置為0,一條索引單元長度為4字節(jié),一個(gè)頁面可以存放128條索引單元,已存儲(chǔ)在索引區(qū)第一個(gè)塊第一個(gè)頁面的第一條索引單元的特征值是A0DC6439;相對(duì)應(yīng)的數(shù)據(jù)單元長度為33字節(jié),把數(shù)據(jù)單元長度從33字節(jié)擴(kuò)充到64字節(jié),即按64字節(jié)對(duì)齊,這樣一個(gè)頁面可以存放8條記錄數(shù)據(jù),存入的數(shù)據(jù)記錄為0013702481227082000020708010045204471244442611F74447104445A5CB444。其中,索引區(qū)第一個(gè)塊即為Nand Flash存儲(chǔ)區(qū)域的第一個(gè)塊。
其中,按頁載入內(nèi)存,包括:
步驟A1:將索引區(qū)第一塊作為當(dāng)前塊,將索引區(qū)第一塊的第一頁作為當(dāng)前頁面;
步驟A2:將當(dāng)前頁面的數(shù)據(jù)載入內(nèi)存;
步驟A3:判斷當(dāng)前頁面是否為索引區(qū)第一塊的最后一頁,是則執(zhí)行步驟A4,否則執(zhí)行步驟A5;
步驟A4:判斷當(dāng)前塊是否為索引區(qū)的最后一塊,是則結(jié)束,否則將索引區(qū)下一個(gè)塊的第一頁作為當(dāng)前頁面,返回步驟A2;
步驟A5:將當(dāng)前頁面的下一頁面作為當(dāng)前頁面,返回步驟A2。
步驟105:判斷載入內(nèi)存的數(shù)據(jù)是否包含特征值,是則執(zhí)行步驟106,否則執(zhí)行步驟110;
具體地,在本實(shí)施例中,判斷載入內(nèi)存的數(shù)據(jù)是否包含特征值,包括:
步驟B1:初始化當(dāng)前偏移地址;
步驟B2:根據(jù)當(dāng)前偏移地址讀取一個(gè)索引單元長度的數(shù)據(jù),判斷讀取到的數(shù)據(jù)和特征值是否相同,是則載入內(nèi)存的數(shù)據(jù)包含特征值,否則執(zhí)行步驟B3;
步驟B3:更新偏移地址為當(dāng)前偏移地址加上讀取的數(shù)據(jù)的長度,判斷更新的偏移地址是否超過載入內(nèi)存的數(shù)據(jù)的長度,是則載入內(nèi)存的數(shù)據(jù)不包含特征值,否則返回步驟B2。
此外,在本實(shí)施例中,判斷載入內(nèi)存的數(shù)據(jù)是否包含特征值,還包括:
步驟C1:初始化遍歷游標(biāo);
步驟C2:從內(nèi)存中順序讀取長度等于索引單元的長度的數(shù)據(jù),將讀取到的數(shù)據(jù)作為當(dāng)前內(nèi)存數(shù)據(jù);
步驟C3:判斷當(dāng)前內(nèi)存數(shù)據(jù)和特征值是否相同,是則載入內(nèi)存的數(shù)據(jù)包含特征值,否則執(zhí)行步驟C4;
步驟C4:將遍歷游標(biāo)增加第一預(yù)設(shè)值,判斷遍歷游標(biāo)是否超過第二預(yù)設(shè)值,是則載入內(nèi)存的數(shù)據(jù)不包含特征值,否則返回步驟C2。
例如,讀取的特征值為379854B,與待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值A(chǔ)0DC6439不同,直接執(zhí)行步驟110。
步驟106:確定待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值對(duì)應(yīng)的索引區(qū)的索引單元;
具體地,在本實(shí)施例中,可以根據(jù)偏移地址的值確定特征值對(duì)應(yīng)的索引區(qū)的索引單元,也可以根據(jù)遍歷游標(biāo)確定特征值對(duì)應(yīng)的索引區(qū)的索引單元。
步驟107:根據(jù)與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所在的索引單元在數(shù)據(jù)區(qū)中定位到對(duì)應(yīng)的數(shù)據(jù)單元所在的塊號(hào)和頁號(hào);
具體地,在本實(shí)施例中,第n(n<=N)條索引單元的位置為n*索引單元長度,此條索引單元對(duì)應(yīng)的數(shù)據(jù)單元的位置為N*索引單元長度+n*數(shù)據(jù)單元長度。
更具體地,(N*索引單元長度+n*數(shù)據(jù)單元長度)/頁內(nèi)最多字節(jié)數(shù)/塊內(nèi)最多頁數(shù),將得到的最終結(jié)果向上取整數(shù)得到與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所對(duì)應(yīng)數(shù)據(jù)區(qū)的數(shù)據(jù)單元的所在的塊號(hào);(N*索引單元長度+n*數(shù)據(jù)單元長度)/頁內(nèi)最多字節(jié)數(shù)%塊內(nèi)最多頁數(shù),將得到的最終結(jié)果向上取整數(shù)得到與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所對(duì)應(yīng)數(shù)據(jù)區(qū)的數(shù)據(jù)單元的所在的頁號(hào)。
例如,在本實(shí)施例中,最多存儲(chǔ)8192條數(shù)據(jù)記錄的關(guān)鍵字段的特征值,即索引區(qū)占據(jù)了Nand Flash存儲(chǔ)區(qū)域的兩個(gè)塊。根據(jù)上述公式算得,第一條索引單元的特征值A(chǔ)0DC6439對(duì)應(yīng)數(shù)據(jù)單元的數(shù)據(jù)記錄在存儲(chǔ)區(qū)域的第三個(gè)塊的第一頁。
步驟108:將定位的數(shù)據(jù)單元所在頁的所有數(shù)據(jù)載入至內(nèi)存,根據(jù)頁內(nèi)偏移地址查找并讀取與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所在的索引單元對(duì)應(yīng)的數(shù)據(jù)單元的數(shù)據(jù)記錄;
具體地,(N*索引單元長度+n*數(shù)據(jù)單元長度)%頁內(nèi)最多字節(jié)數(shù)得到與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所對(duì)應(yīng)數(shù)據(jù)區(qū)的數(shù)據(jù)單元的所在頁的頁內(nèi)偏移地址。
例如,在本實(shí)施例中,將第一條索引單元的特征值A(chǔ)0DC6439對(duì)應(yīng)數(shù)據(jù)單元的數(shù)據(jù)記錄在存儲(chǔ)區(qū)域的第三個(gè)塊的第一頁的所有數(shù)據(jù)即數(shù)據(jù)區(qū)第一個(gè)塊的第一頁的所有數(shù)據(jù)載入至內(nèi)存,根據(jù)上述公式,算得頁內(nèi)偏移地址為33,即前33個(gè)字節(jié)為與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所在的索引單元對(duì)應(yīng)的數(shù)據(jù)單元的數(shù)據(jù)記錄,載入出來的數(shù)據(jù)為0013702481227082000020708010045204471244442611F74447104445A5CB444。
步驟109:判斷讀取到的數(shù)據(jù)記錄和待存儲(chǔ)的數(shù)據(jù)記錄是否相同,是則結(jié)束,否則執(zhí)行步驟110;
步驟110:確定將待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值寫入索引區(qū)中的位置;
具體地,本實(shí)施例中,如果當(dāng)前索引區(qū)的最后一條數(shù)據(jù)記錄關(guān)鍵字段的特征值是此頁的最后一條數(shù)據(jù)記錄關(guān)鍵字段的特征值,則將同一個(gè)塊的下一頁的數(shù)據(jù)載入至內(nèi)存;如果當(dāng)前索引區(qū)的最后一條數(shù)據(jù)記錄關(guān)鍵字段的特征值是塊的最后一頁的最后一條數(shù)據(jù)記錄關(guān)鍵字段的特征值,則將下一個(gè)塊的第一頁的數(shù)據(jù)載入至內(nèi)存。
步驟111:將待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值順序?qū)懭胨饕齾^(qū);
具體地,本實(shí)施例中,先將待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值順序?qū)懭雰?nèi)存,然后再將內(nèi)存中的數(shù)據(jù)寫入索引區(qū)。
例如,本實(shí)施例中,如圖4所示,將待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值379854B順序?qū)懭胨饕齾^(qū)第一塊的第一頁的第5至8字節(jié)。
步驟112:確定將待存儲(chǔ)的數(shù)據(jù)記錄寫入數(shù)據(jù)區(qū)中的位置;
具體地,本實(shí)施例中,如果當(dāng)前索引區(qū)的最后一條數(shù)據(jù)記錄是此頁的最后一條數(shù)據(jù)記錄,則將同一個(gè)塊的下一頁的數(shù)據(jù)載入至內(nèi)存;如果當(dāng)前數(shù)據(jù)區(qū)的最后一條數(shù)據(jù)記錄是塊的最后一頁的最后一條數(shù)據(jù)記錄,則將下一個(gè)塊的第一頁的數(shù)據(jù)載入至內(nèi)存。
步驟113:將待存儲(chǔ)的數(shù)據(jù)記錄順序?qū)懭霐?shù)據(jù)區(qū),結(jié)束。
具體地,本實(shí)施例中,先將待存儲(chǔ)的數(shù)據(jù)記錄順序?qū)懭雰?nèi)存,然后再將內(nèi)存中的數(shù)據(jù)寫入數(shù)據(jù)區(qū)。
例如,本實(shí)施例中,如圖4所示,特征值379854B對(duì)應(yīng)的數(shù)據(jù)記錄00137024812905090501001080100452083D2B9CB1F2819E30000000200000000存儲(chǔ)在存儲(chǔ)區(qū)域的第三個(gè)塊的第一頁的第34字節(jié)至66字節(jié),結(jié)束存儲(chǔ)。
實(shí)施例三
本發(fā)明實(shí)施例三提供一種數(shù)據(jù)記錄的查詢方法,具體地,數(shù)據(jù)記錄的存儲(chǔ)區(qū)域劃分為索引區(qū)和數(shù)據(jù)區(qū),索引區(qū)包含若干個(gè)固定長度的索引單元,數(shù)據(jù)區(qū)包含若干個(gè)固定長度的數(shù)據(jù)單元,一個(gè)索引單元存有一條特征值,一個(gè)數(shù)據(jù)單元存有一條數(shù)據(jù)記錄,每條數(shù)據(jù)記錄的長度不超過一個(gè)數(shù)據(jù)單元的長度,索引單元和數(shù)據(jù)單元一一對(duì)應(yīng),索引區(qū)用于存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值,數(shù)據(jù)區(qū)用于存儲(chǔ)數(shù)據(jù)記錄,參見圖5,方法具體包括:
步驟T1:提取待查詢的數(shù)據(jù)記錄的關(guān)鍵字段;
步驟T2:計(jì)算待查詢的數(shù)據(jù)記錄的關(guān)鍵字段的特征值;
步驟T3:判斷索引區(qū)中是否包含存儲(chǔ)有待查詢的數(shù)據(jù)記錄的關(guān)鍵字段的特征值的索引單元,是則執(zhí)行步驟T4,否則未查詢到相應(yīng)數(shù)據(jù)記錄,結(jié)束;
步驟T4:確定與存儲(chǔ)有待查詢的數(shù)據(jù)記錄的關(guān)鍵字段的特征值的索引單元對(duì)應(yīng)的數(shù)據(jù)單元,讀取數(shù)據(jù)記錄,并判斷讀取到的數(shù)據(jù)記錄和待查詢的數(shù)據(jù)記錄是否相同,是則查詢到相應(yīng)數(shù)據(jù)記錄,結(jié)束,否則未查詢到相應(yīng)數(shù)據(jù)記錄,結(jié)束。
實(shí)施例四
本發(fā)明實(shí)施例四提供一種數(shù)據(jù)記錄的查詢方法,具體地,存儲(chǔ)區(qū)域包括索引區(qū)和數(shù)據(jù)區(qū);其中,索引區(qū)索引區(qū)可以常駐在內(nèi)存中,包括若干索引單元,用于存儲(chǔ)關(guān)鍵字段的特征值,數(shù)據(jù)區(qū)包括與各索引單元一一對(duì)應(yīng)的數(shù)據(jù)單元,用于存儲(chǔ)數(shù)據(jù)記錄。參見圖6,方法具體包括:
步驟201:提取待查詢數(shù)據(jù)記錄的關(guān)鍵字段;
具體地,提取數(shù)據(jù)記錄的一個(gè)或多個(gè)關(guān)鍵字段。
例如,本實(shí)施例中,數(shù)據(jù)記錄共33字節(jié),包括8字節(jié)的商戶號(hào)、4字節(jié)的終端號(hào)、5字節(jié)的收單行標(biāo)識(shí)以及16字節(jié)的密鑰,在本實(shí)施例中,以“商戶號(hào)”為關(guān)鍵字段,提取數(shù)據(jù)記錄中的“商戶號(hào)”。
步驟202:計(jì)算待查詢數(shù)據(jù)記錄的關(guān)鍵字段的特征值;
本實(shí)施例中,使用預(yù)設(shè)算法計(jì)算待查詢數(shù)據(jù)記錄的關(guān)鍵字段的特征值。
具體地,預(yù)設(shè)算法為CRC32、CRC16、SHA1、MD5等算法,優(yōu)選為CRC32算法。
例如,關(guān)鍵字段“商戶號(hào)”具體為001370248122708,用CRC32算法計(jì)算出的特征值是A0DC6439。
步驟203:將索引區(qū)的數(shù)據(jù)記錄關(guān)鍵字段的特征值按頁載入內(nèi)存;
在本實(shí)施例中,由于Nand Flash是按頁讀寫的,每一條索引單元,每一條數(shù)據(jù)記錄的大小是確定的,所以存儲(chǔ)區(qū)的一頁所能存放的索引單元和數(shù)據(jù)記錄也是確定的,索引單元和數(shù)據(jù)記錄的大小不會(huì)超過存儲(chǔ)區(qū)一頁的大小。為避免出現(xiàn)跨頁存儲(chǔ)的情況,寫入的索引單元和數(shù)據(jù)單元進(jìn)行數(shù)據(jù)對(duì)齊,即將索引單元長度和數(shù)據(jù)單元長度設(shè)置為大于或等于實(shí)際索引單元長度和數(shù)據(jù)單元長度并為頁面大小的某個(gè)約數(shù)。
具體地,在本實(shí)施例中,假設(shè)存儲(chǔ)區(qū)域大小為FS,則存儲(chǔ)區(qū)域能放N=FS/(索引單元長度+數(shù)據(jù)單元長度)條記錄,得到的結(jié)果向下取整數(shù)。索引區(qū)大小為N*索引單元長度,數(shù)據(jù)區(qū)大小為N*數(shù)據(jù)單元長度,數(shù)據(jù)區(qū)的起始地址為索引區(qū)的起始地址+N*索引單元長度。數(shù)據(jù)區(qū)的起始地址可以用上述公式計(jì)算得到,也可以進(jìn)行指定。
更具體地,N*索引單元長度/頁內(nèi)最多字節(jié)數(shù)將得到的結(jié)果向上取整數(shù)得到索引區(qū)是由多少包含索引單元的頁組成,N*索引單元長度/頁內(nèi)最多字節(jié)數(shù)/塊內(nèi)最多頁數(shù)將得到的結(jié)果向上取整數(shù)得到索引區(qū)是由多少塊組成。相應(yīng)地,按照上述方法,能知道數(shù)據(jù)區(qū)所占的頁數(shù)和塊數(shù)。
例如,如圖3所示,在本實(shí)施例中一個(gè)Nand Flash塊最多存放32個(gè)Nand Flash頁面,一個(gè)Nand Flash頁面最多能夠存放512個(gè)字節(jié),索引區(qū)起始位置為0,一條索引單元長度為4字節(jié),一個(gè)頁面可以存放128條索引單元,已存儲(chǔ)在索引區(qū)第一個(gè)塊第一個(gè)頁面的第一條索引單元的特征值是A0DC6439;相對(duì)應(yīng)的數(shù)據(jù)單元長度為33字節(jié),把數(shù)據(jù)單元長度從33字節(jié)擴(kuò)充到64字節(jié),即按64字節(jié)對(duì)齊,這樣一個(gè)頁面可以存放8條記錄數(shù)據(jù),存入的數(shù)據(jù)記錄為0013702481227082000020708010045204471244442611F74447104445A5CB444。其中,索引區(qū)第一個(gè)塊即為Nand Flash存儲(chǔ)區(qū)域的第一個(gè)塊。
其中,按頁載入內(nèi)存,包括:
步驟A1:將索引區(qū)第一塊作為當(dāng)前塊,將索引區(qū)第一塊的第一頁作為當(dāng)前頁面;
步驟A2:將當(dāng)前頁面的數(shù)據(jù)載入內(nèi)存;
步驟A3:判斷當(dāng)前頁面是否為索引區(qū)第一塊的最后一頁,是則執(zhí)行步驟A4,否則執(zhí)行步驟A5;
步驟A4:判斷當(dāng)前塊是否為索引區(qū)的最后一塊,是則結(jié)束,否則將索引區(qū)下一個(gè)塊的第一頁作為當(dāng)前頁面,返回步驟A2;
步驟A5:將當(dāng)前頁面的下一頁面作為當(dāng)前頁面,返回步驟A2。
步驟204:判斷內(nèi)存中是否存在與待查詢數(shù)據(jù)記錄的關(guān)鍵字段特征值相同的特征值,是則執(zhí)行步驟205,否則結(jié)束;
具體地,在本實(shí)施例中,判斷內(nèi)存中是否存在與待查詢數(shù)據(jù)記錄的關(guān)鍵字段特征值相同的特征值,包括:
步驟B1:初始化當(dāng)前偏移地址;
步驟B2:根據(jù)當(dāng)前偏移地址讀取一個(gè)索引單元長度的數(shù)據(jù),判斷讀取到的數(shù)據(jù)和特征值是否相同,是則載入內(nèi)存的數(shù)據(jù)包含特征值,否則執(zhí)行步驟B3;
步驟B3:更新偏移地址為當(dāng)前偏移地址加上讀取的數(shù)據(jù)的長度,判斷更新的偏移地址是否超過載入內(nèi)存的數(shù)據(jù)的長度,是則載入內(nèi)存的數(shù)據(jù)不包含特征值,否則返回步驟B2。
此外,在本實(shí)施例中,判斷載入內(nèi)存的數(shù)據(jù)是否包含特征值,還包括:
步驟C1:初始化遍歷游標(biāo);
步驟C2:從內(nèi)存中順序讀取長度等于索引單元的長度的數(shù)據(jù),將讀取到的數(shù)據(jù)作為當(dāng)前內(nèi)存數(shù)據(jù);
步驟C3:判斷當(dāng)前內(nèi)存數(shù)據(jù)和特征值是否相同,是則載入內(nèi)存的數(shù)據(jù)包含特征值,否則執(zhí)行步驟C4;
步驟C4:將遍歷游標(biāo)增加第一預(yù)設(shè)值,判斷遍歷游標(biāo)是否超過第二預(yù)設(shè)值,是則載入內(nèi)存的數(shù)據(jù)不包含特征值,否則返回步驟C2。
步驟205:確定待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值對(duì)應(yīng)的索引區(qū)的索引單元;
具體地,在本實(shí)施例中,可以根據(jù)偏移地址的值確定特征值對(duì)應(yīng)的索引區(qū)的索引單元,也可以根據(jù)遍歷游標(biāo)確定特征值對(duì)應(yīng)的索引區(qū)的索引單元。
步驟206:根據(jù)與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所在的索引單元在數(shù)據(jù)區(qū)中定位到對(duì)應(yīng)的數(shù)據(jù)單元所在的塊號(hào)和頁號(hào);
具體地,在本實(shí)施例中,第n(n<=N)條索引單元的位置為n*索引單元長度,此條索引單元對(duì)應(yīng)的數(shù)據(jù)單元的位置為N*索引單元長度+n*數(shù)據(jù)單元長度。
更具體地,(N*索引單元長度+n*數(shù)據(jù)單元長度)/頁內(nèi)最多字節(jié)數(shù)/塊內(nèi)最多頁數(shù),將得到的最終結(jié)果向上取整數(shù)得到與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所對(duì)應(yīng)數(shù)據(jù)區(qū)的數(shù)據(jù)單元的所在的塊號(hào);(N*索引單元長度+n*數(shù)據(jù)單元長度)/頁內(nèi)最多字節(jié)數(shù)%塊內(nèi)最多頁數(shù),將得到的最終結(jié)果向上取整數(shù)得到與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所對(duì)應(yīng)數(shù)據(jù)區(qū)的數(shù)據(jù)單元的所在的頁號(hào)。
例如,在本實(shí)施例中,最多存儲(chǔ)8192條數(shù)據(jù)記錄的關(guān)鍵字段的特征值,即索引區(qū)占據(jù)了Nand Flash存儲(chǔ)區(qū)域的兩個(gè)塊。根據(jù)上述公式算得,第一條索引單元的特征值A(chǔ)0DC6439對(duì)應(yīng)數(shù)據(jù)單元的數(shù)據(jù)記錄在存儲(chǔ)區(qū)域的第三個(gè)塊的第一頁。
步驟207:將定位的數(shù)據(jù)單元所在頁的所有數(shù)據(jù)載入至內(nèi)存,根據(jù)頁內(nèi)偏移地址查找并讀取與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所在的索引單元對(duì)應(yīng)的數(shù)據(jù)單元的數(shù)據(jù)記錄。
具體地,(N*索引單元長度+n*數(shù)據(jù)單元長度)%頁內(nèi)最多字節(jié)數(shù)得到與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所對(duì)應(yīng)數(shù)據(jù)區(qū)的數(shù)據(jù)單元的所在頁的頁內(nèi)偏移地址。
例如,在本實(shí)施例中,將第一條索引單元的特征值A(chǔ)0DC6439對(duì)應(yīng)數(shù)據(jù)單元的數(shù)據(jù)記錄在存儲(chǔ)區(qū)域的第三個(gè)塊的第一頁的所有數(shù)據(jù)即數(shù)據(jù)區(qū)第一個(gè)塊的第一頁的所有數(shù)據(jù)載入至內(nèi)存,根據(jù)上述公式,算得頁內(nèi)偏移地址為33,即前33個(gè)字節(jié)為與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所在的索引單元對(duì)應(yīng)的數(shù)據(jù)單元的數(shù)據(jù)記錄,載入出來的數(shù)據(jù)為
0013702481227082000020708010045204471244442611F74447104445A5CB444。
步驟208:判斷讀取到的數(shù)據(jù)記錄和待查詢的數(shù)據(jù)記錄是否相同,是則確認(rèn)存儲(chǔ)區(qū)域中存在待查詢數(shù)據(jù)記錄,結(jié)束;否則確認(rèn)存儲(chǔ)區(qū)中不存在待查詢數(shù)據(jù)記錄,結(jié)束。
實(shí)施例五
本發(fā)明實(shí)施例五提供一種數(shù)據(jù)記錄的檢索方法,具體地,數(shù)據(jù)記錄的存儲(chǔ)區(qū)域劃分為索引區(qū)和數(shù)據(jù)區(qū),索引區(qū)包含若干個(gè)固定長度的索引單元,數(shù)據(jù)區(qū)包含若干個(gè)固定長度的數(shù)據(jù)單元,一個(gè)索引單元存有一條特征值,一個(gè)數(shù)據(jù)單元存有一條數(shù)據(jù)記錄,每條數(shù)據(jù)記錄的長度不超過一個(gè)數(shù)據(jù)單元的長度,索引單元和數(shù)據(jù)單元一一對(duì)應(yīng),索引區(qū)用于存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值,數(shù)據(jù)區(qū)用于存儲(chǔ)數(shù)據(jù)記錄,參見圖7,方法具體包括:
步驟U1:計(jì)算待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值;
步驟U2:判斷索引區(qū)中是否包含存儲(chǔ)待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值的索引單元,是則執(zhí)行步驟U3,否則未檢索到相應(yīng)數(shù)據(jù)記錄,結(jié)束;
步驟U3:確定與存儲(chǔ)有待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值的索引單元對(duì)應(yīng)的數(shù)據(jù)單元,讀取并顯示數(shù)據(jù)記錄,結(jié)束。
實(shí)施例六
本發(fā)明實(shí)施例六提供一種數(shù)據(jù)記錄的檢索方法。Nand Flash是由若干塊組成,每個(gè)塊又由若干頁組成,具體地,本實(shí)施例中,將Nand Flash的存儲(chǔ)區(qū)域劃分為索引區(qū)和數(shù)據(jù)區(qū);其中,索引區(qū)可以常駐在內(nèi)存中,包括若干索引單元,用于存儲(chǔ)關(guān)鍵字段的特征值,數(shù)據(jù)區(qū)包括與各索引單元一一對(duì)應(yīng)的數(shù)據(jù)單元,用于存儲(chǔ)數(shù)據(jù)記錄。參見圖8,方法具體包括:
步驟301:計(jì)算待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值;
本實(shí)施例中,使用預(yù)設(shè)算法計(jì)算待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值。
具體地,預(yù)設(shè)算法為CRC32、CRC16、SHA1、MD5等算法,優(yōu)選為CRC32算法。
例如,本實(shí)施例中,數(shù)據(jù)記錄共33字節(jié),包括8字節(jié)的商戶號(hào)、4字節(jié)的終端號(hào)、5字節(jié)的收單行標(biāo)識(shí)以及16字節(jié)的密鑰,關(guān)鍵字段的特征值共4字節(jié),其中,“商戶號(hào)”為關(guān)鍵字段;已知關(guān)鍵字段“商戶號(hào)”具體為001370248122708,用CRC32算法計(jì)算出的特征值是A0DC6439。
步驟302:將索引區(qū)的數(shù)據(jù)記錄關(guān)鍵字段的特征值按頁載入內(nèi)存;
在本實(shí)施例中,由于Nand Flash是按頁讀寫的,每一條索引單元,每一條數(shù)據(jù)記錄的大小是確定的,所以存儲(chǔ)區(qū)的一頁所能存放的索引單元和數(shù)據(jù)記錄也是確定的,索引單元和數(shù)據(jù)記錄的大小不會(huì)超過存儲(chǔ)區(qū)一頁的大小。為避免出現(xiàn)跨頁存儲(chǔ)的情況,數(shù)據(jù)寫入索引單元和數(shù)據(jù)單元時(shí)要進(jìn)行數(shù)據(jù)對(duì)齊,即將索引單元長度和數(shù)據(jù)單元長度設(shè)置為大于或等于實(shí)際索引單元長度和數(shù)據(jù)單元長度并為頁面大小的某個(gè)約數(shù)。
具體地,在本實(shí)施例中,假設(shè)存儲(chǔ)區(qū)域大小為FS,則存儲(chǔ)區(qū)域能放N=FS/(索引單元長度+數(shù)據(jù)單元長度)條記錄,得到的結(jié)果向下取整數(shù)。索引區(qū)大小為N*索引單元長度,數(shù)據(jù)區(qū)大小為N*數(shù)據(jù)單元長度,數(shù)據(jù)區(qū)的起始地址為索引區(qū)的起始地址+N*索引單元長度。數(shù)據(jù)區(qū)的起始地址可以用上述公式計(jì)算得到,也可以進(jìn)行指定。
更具體地,N*索引單元長度/頁內(nèi)最多字節(jié)數(shù)將得到的結(jié)果向上取整數(shù)得到索引區(qū)是由多少包含索引單元的頁組成,N*索引單元長度/頁內(nèi)最多字節(jié)數(shù)/塊內(nèi)最多頁數(shù)將得到的結(jié)果向上取整數(shù)得到索引區(qū)是由多少塊組成。相應(yīng)地,按照上述方法,能知道數(shù)據(jù)區(qū)所占的頁數(shù)和塊數(shù)。
例如,如圖3所示,在本實(shí)施例中一個(gè)Nand Flash塊最多存放32個(gè)Nand Flash頁面,一個(gè)Nand Flash頁面最多能夠存放512個(gè)字節(jié),索引區(qū)起始位置為0,一條索引單元長度為4字節(jié),一個(gè)頁面可以存放128條索引單元,已存儲(chǔ)在索引區(qū)第一個(gè)塊第一個(gè)頁面的第一條索引單元的特征值是A0DC6439;相對(duì)應(yīng)的數(shù)據(jù)單元長度為33字節(jié),把數(shù)據(jù)單元長度從33字節(jié)擴(kuò)充到64字節(jié),即按64字節(jié)對(duì)齊,這樣一個(gè)頁面可以存放8條記錄數(shù)據(jù),存入的數(shù)據(jù)記錄為0013702481227082000020708010045204471244442611F74447104445A5CB444。其中,索引區(qū)第一個(gè)塊即為Nand Flash存儲(chǔ)區(qū)域的第一個(gè)塊。
其中,按頁載入內(nèi)存,包括:
步驟A1:將索引區(qū)第一塊作為當(dāng)前塊,將索引區(qū)第一塊的第一頁作為當(dāng)前頁面;
步驟A2:將當(dāng)前頁面的數(shù)據(jù)載入內(nèi)存;
步驟A3:判斷當(dāng)前頁面是否為索引區(qū)第一塊的最后一頁,是則執(zhí)行步驟A4,否則執(zhí)行步驟A5;
步驟A4:判斷當(dāng)前塊是否為索引區(qū)的最后一塊,是則結(jié)束,否則將索引區(qū)下一個(gè)塊的第一頁作為當(dāng)前頁面,返回步驟A2;
步驟A5:將當(dāng)前頁面的下一頁面作為當(dāng)前頁面,返回步驟A2。
步驟303:判斷內(nèi)存中是否存在與待檢索數(shù)據(jù)記錄的關(guān)鍵字段特征值相同的特征值,是則執(zhí)行步驟304,否則結(jié)束檢索;
具體地,在本實(shí)施例中,判斷內(nèi)存中是否存在與待檢索數(shù)據(jù)記錄的關(guān)鍵字段特征值相同的特征值,包括:
步驟B1:初始化當(dāng)前偏移地址;
步驟B2:根據(jù)當(dāng)前偏移地址讀取一個(gè)索引單元長度的數(shù)據(jù),判斷讀取到的數(shù)據(jù)和特征值是否相同,是則載入內(nèi)存的數(shù)據(jù)包含特征值,否則執(zhí)行步驟B3;
步驟B3:更新偏移地址為當(dāng)前偏移地址加上讀取的數(shù)據(jù)的長度,判斷更新的偏移地址是否超過載入內(nèi)存的數(shù)據(jù)的長度,是則載入內(nèi)存的數(shù)據(jù)不包含特征值,否則返回步驟B2。
此外,在本實(shí)施例中,判斷載入內(nèi)存的數(shù)據(jù)是否包含特征值,還包括:
步驟C1:初始化遍歷游標(biāo);
步驟C2:從內(nèi)存中順序讀取長度等于索引單元的長度的數(shù)據(jù),將讀取到的數(shù)據(jù)作為當(dāng)前內(nèi)存數(shù)據(jù);
步驟C3:判斷當(dāng)前內(nèi)存數(shù)據(jù)和特征值是否相同,是則載入內(nèi)存的數(shù)據(jù)包含特征值,否則執(zhí)行步驟C4;
步驟C4:將遍歷游標(biāo)增加第一預(yù)設(shè)值,判斷遍歷游標(biāo)是否超過第二預(yù)設(shè)值,是則載入內(nèi)存的數(shù)據(jù)不包含特征值,否則返回步驟C2。
步驟304:確定待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值對(duì)應(yīng)的索引區(qū)的索引單元;
具體地,在本實(shí)施例中,可以根據(jù)偏移地址的值確定特征值對(duì)應(yīng)的索引區(qū)的索引單元,也可以根據(jù)遍歷游標(biāo)確定特征值對(duì)應(yīng)的索引區(qū)的索引單元。
步驟305:根據(jù)與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所在的索引單元在數(shù)據(jù)區(qū)中定位到對(duì)應(yīng)的數(shù)據(jù)單元所在的塊號(hào)和頁號(hào);
具體地,在本實(shí)施例中,第n(n<=N)條索引單元的位置為n*索引單元長度,此條索引單元對(duì)應(yīng)的數(shù)據(jù)單元的位置為N*索引單元長度+n*數(shù)據(jù)單元長度。
更具體地,(N*索引單元長度+n*數(shù)據(jù)單元長度)/頁內(nèi)最多字節(jié)數(shù)/塊內(nèi)最多頁數(shù),將得到的最終結(jié)果向上取整數(shù)得到與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所對(duì)應(yīng)數(shù)據(jù)區(qū)的數(shù)據(jù)單元的所在的塊號(hào);(N*索引單元長度+n*數(shù)據(jù)單元長度)/頁內(nèi)最多字節(jié)數(shù)%塊內(nèi)最多頁數(shù),將得到的最終結(jié)果向上取整數(shù)得到與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所對(duì)應(yīng)數(shù)據(jù)區(qū)的數(shù)據(jù)單元的所在的頁號(hào)。
例如,在本實(shí)施例中,最多存儲(chǔ)8192條數(shù)據(jù)記錄的關(guān)鍵字段的特征值,即索引區(qū)占據(jù)了Nand Flash存儲(chǔ)區(qū)域的兩個(gè)塊。根據(jù)上述公式算得,第一條索引單元的特征值A(chǔ)0DC6439對(duì)應(yīng)數(shù)據(jù)單元的數(shù)據(jù)記錄在存儲(chǔ)區(qū)域的第三個(gè)塊的第一頁。
步驟306:將定位的數(shù)據(jù)單元所在頁的所有數(shù)據(jù)載入至內(nèi)存,根據(jù)頁內(nèi)偏移地址查找、讀取并顯示與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所在的索引單元對(duì)應(yīng)的數(shù)據(jù)單元的數(shù)據(jù)記錄。
具體地,(N*索引單元長度+n*數(shù)據(jù)單元長度)%頁內(nèi)最多字節(jié)數(shù)得到與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所對(duì)應(yīng)數(shù)據(jù)區(qū)的數(shù)據(jù)單元的所在頁的頁內(nèi)偏移地址。
例如,在本實(shí)施例中,將第一條索引單元的特征值A(chǔ)0DC6439對(duì)應(yīng)數(shù)據(jù)單元的數(shù)據(jù)記錄在存儲(chǔ)區(qū)域的第三個(gè)塊的第一頁的所有數(shù)據(jù)即數(shù)據(jù)區(qū)第一個(gè)塊的第一頁的所有數(shù)據(jù)載入至內(nèi)存,根據(jù)上述公式,算得頁內(nèi)偏移地址為33,即前33個(gè)字節(jié)為與待檢索數(shù)據(jù)記錄相同的關(guān)鍵字段的特征值所在的索引單元對(duì)應(yīng)的數(shù)據(jù)單元的數(shù)據(jù)記錄,載入出來的數(shù)據(jù)為
0013702481227082000020708010045204471244442611F74447104445A5CB444。
實(shí)施例七
本發(fā)明實(shí)施例七提供一種數(shù)據(jù)記錄的存儲(chǔ)裝置,如圖9所示,裝置具體包括:
提取模塊101,用于提取待存儲(chǔ)的數(shù)據(jù)記錄的關(guān)鍵字段;
計(jì)算模塊102,用于計(jì)算待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值;
第一判斷模塊103,用于判斷索引區(qū)中是否包含存儲(chǔ)有待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值的索引單元;
具體地,數(shù)據(jù)記錄的存儲(chǔ)區(qū)域的索引區(qū)劃分為若干塊,每塊又劃分為若干頁,第一判斷模塊103包括載入子模塊,用于將索引區(qū)的數(shù)據(jù)按頁載入內(nèi)存;判斷子模塊,用于判斷載入內(nèi)存的數(shù)據(jù)是否包含待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值;定位子模塊,用于當(dāng)判斷子模塊判斷載入內(nèi)存的數(shù)據(jù)包含待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值時(shí),確定待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值對(duì)應(yīng)的索引單元。
更具體地,判斷子模塊具體包括:
第一初始化單元,用于初始化當(dāng)前偏移地址;
第一讀取單元,用于根據(jù)當(dāng)前偏移地址讀取一個(gè)索引單元長度的數(shù)據(jù)和當(dāng)?shù)诙袛鄦卧袛喔碌钠频刂窙]有超過載入內(nèi)存的數(shù)據(jù)的長度時(shí),根據(jù)更新偏移地址讀取一個(gè)索引單元長度的數(shù)據(jù);
第一判斷單元,用于判斷讀取到的數(shù)據(jù)和待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值是否相同;
第一更新單元,用于當(dāng)?shù)谝慌袛鄦卧袛嘧x取到的數(shù)據(jù)和待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值不相同時(shí),更新偏移地址為當(dāng)前偏移地址加上讀取的數(shù)據(jù)的長度;
第二判斷單元,用于判斷更新的偏移地址是否超過載入內(nèi)存的數(shù)據(jù)的長度。
定位子模塊,具體用于根據(jù)偏移地址的值確定待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值對(duì)應(yīng)的索引區(qū)的索引單元。
判斷子模塊還可以包括:
第二初始化單元,用于初始化遍歷游標(biāo);
第二讀取單元,用于從內(nèi)存中順序讀取長度等于索引單元的長度的數(shù)據(jù)和當(dāng)?shù)谒呐袛鄦卧袛啾闅v游標(biāo)沒有超過第二預(yù)設(shè)值時(shí),從內(nèi)存中順序讀取長度等于索引單元的長度的數(shù)據(jù);
第一設(shè)置單元,用于將讀取到的數(shù)據(jù)設(shè)置為當(dāng)前內(nèi)存數(shù)據(jù);
第三判斷單元,用于判斷當(dāng)前內(nèi)存數(shù)據(jù)和待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值是否相同;
第二更新單元,用于當(dāng)?shù)谌袛鄦卧袛喈?dāng)前內(nèi)存數(shù)據(jù)和待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值不相同時(shí),將遍歷游標(biāo)設(shè)置增加第一預(yù)設(shè)值;
第四判斷單元,用于判斷遍歷游標(biāo)是否超過第二預(yù)設(shè)值。
定位子模塊,具體用于根據(jù)遍歷游標(biāo)確定待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值對(duì)應(yīng)的索引區(qū)的索引單元。
定位模塊104,用于當(dāng)?shù)谝慌袛嗄K103判斷索引區(qū)中包含存儲(chǔ)有特征值的索引單元時(shí),確定與存儲(chǔ)有特征值的索引單元對(duì)應(yīng)的數(shù)據(jù)單元;
具體地,第一判斷模塊103的定位子模塊包括計(jì)算單元和定位單元。其中計(jì)算單元包括第一計(jì)算子單元和第二計(jì)算子單元。第一計(jì)算子單元用于計(jì)算索引單元的長度與數(shù)據(jù)單元長度的和,用存儲(chǔ)區(qū)域的大小與得到的和相除,相除結(jié)果向下取整數(shù)得到存儲(chǔ)區(qū)域存儲(chǔ)記錄的數(shù)量;
第二計(jì)算子單元,用于計(jì)算存儲(chǔ)區(qū)域存儲(chǔ)記錄的數(shù)量與索引單元長度的乘積,得到索引區(qū)大??;
定位單元包括第一定位子單元、第二定位子單元和第三定位子單元。第一定位子單元,用于用遍歷游標(biāo)乘以數(shù)據(jù)單元長度得到第一乘積,用頁內(nèi)最多字節(jié)數(shù)乘以塊內(nèi)最多頁數(shù)得到第二乘積,用第一乘積與索引區(qū)大小相加的和除以第二乘積,相除結(jié)果向上取整數(shù)得到待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值所在的索引單元在數(shù)據(jù)區(qū)對(duì)應(yīng)的數(shù)據(jù)單元所在的塊號(hào);
第二定位子單元,用于用遍歷游標(biāo)與數(shù)據(jù)單元長度相乘得到乘積,用所得乘積與索引區(qū)大小相加的和除以頁內(nèi)最多字節(jié)數(shù),用相除結(jié)果對(duì)塊內(nèi)最多頁數(shù)進(jìn)行取余操作,所得結(jié)果向上取整數(shù)得到待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值所在的索引單元在數(shù)據(jù)區(qū)對(duì)應(yīng)的數(shù)據(jù)單元所在的頁號(hào);
第三定位子單元,用于用遍歷游標(biāo)與數(shù)據(jù)單元長度相乘得到乘積,用所得乘積對(duì)頁內(nèi)最多字節(jié)數(shù)取余,所得結(jié)果為待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值所在的索引單元在數(shù)據(jù)區(qū)對(duì)應(yīng)的數(shù)據(jù)單元所在頁的頁內(nèi)偏移。
讀取模塊105,用于讀取數(shù)據(jù)記錄;
第二判斷模塊106,用于判斷讀取到的數(shù)據(jù)記錄和待存儲(chǔ)的數(shù)據(jù)記錄是否相同;
第一寫入模塊107,用于當(dāng)?shù)谝慌袛嗄K103判斷索引區(qū)中不包含計(jì)算模塊102計(jì)算得到的特征值時(shí)或第二判斷模塊106判斷出讀取到的數(shù)據(jù)記錄和待存儲(chǔ)的數(shù)據(jù)記錄不相同時(shí),將待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值存入索引區(qū);
在本實(shí)施例中,第一寫入模塊107,具體包括:
判斷子模塊,用于判斷索引區(qū)最后一個(gè)特征值所在頁是否還有空間存儲(chǔ);
第一載入子模塊,用于當(dāng)索引區(qū)最后一個(gè)特征值所在頁還有空間存儲(chǔ)時(shí),將索引區(qū)最后一個(gè)特征值所在頁的所有數(shù)據(jù)載入至內(nèi)存;
第二載入子模塊,用于當(dāng)索引區(qū)最后一個(gè)特征值所在頁還有空間存儲(chǔ)時(shí),將最后一個(gè)特征值所在頁的下一頁的所有數(shù)據(jù)載入至內(nèi)存;
第一寫入子模塊,用于將待存儲(chǔ)數(shù)據(jù)記錄的關(guān)鍵字段的特征值順序?qū)懭雰?nèi)存;
第二寫入子模塊,用于將內(nèi)存中的數(shù)據(jù)寫入索引區(qū)。
第二寫入模塊108,用于將待存儲(chǔ)的數(shù)據(jù)記錄存入數(shù)據(jù)區(qū);
在本實(shí)施例中,第二寫入模塊108,具體包括:
第一判斷子模塊,用于判斷數(shù)據(jù)區(qū)最后一條數(shù)據(jù)記錄所在頁是否還有空間存儲(chǔ);
第一載入子模塊,用于當(dāng)?shù)谝慌袛嘧幽K判斷數(shù)據(jù)區(qū)最后一條數(shù)據(jù)記錄所在頁還有空間存儲(chǔ)時(shí),將數(shù)據(jù)區(qū)最后一條數(shù)據(jù)記錄所在頁的所有數(shù)據(jù)載入至內(nèi)存;
第二載入子模塊,用于當(dāng)?shù)谝慌袛嘧幽K判斷數(shù)據(jù)區(qū)最后一條數(shù)據(jù)記錄所在頁沒有空間存儲(chǔ)時(shí),將數(shù)據(jù)區(qū)最后一條數(shù)據(jù)記錄所在頁的下一頁載入至內(nèi)存;
第一寫入子模塊,用于將待存儲(chǔ)的數(shù)據(jù)記錄順序?qū)懭雰?nèi)存;
第二寫入子模塊,用于將內(nèi)存中的數(shù)據(jù)寫入數(shù)據(jù)區(qū)。
實(shí)施例八
本發(fā)明實(shí)施例八提供一種數(shù)據(jù)記錄的查詢裝置,如圖10所示,裝置具體包括:
提取模塊201,用于提取待查詢的數(shù)據(jù)記錄的關(guān)鍵字段;
計(jì)算模塊202,用于計(jì)算待查詢數(shù)據(jù)記錄的關(guān)鍵字段的特征值;
第一判斷模塊203,用于判斷索引區(qū)中是否包含存儲(chǔ)有特征值的索引單元;
具體地,數(shù)據(jù)記錄的存儲(chǔ)區(qū)域的索引區(qū)劃分為若干塊,每塊又劃分為若干頁,第一判斷模塊203包括載入子模塊,用于將索引區(qū)的數(shù)據(jù)按頁載入內(nèi)存;判斷子模塊,用于判斷載入內(nèi)存的數(shù)據(jù)是否包含待查詢數(shù)據(jù)記錄的關(guān)鍵字段的特征值;定位子模塊,用于當(dāng)判斷子模塊判斷載入內(nèi)存的數(shù)據(jù)包含待查詢數(shù)據(jù)記錄的關(guān)鍵字段的特征值時(shí),確定待查詢數(shù)據(jù)記錄的關(guān)鍵字段的特征值對(duì)應(yīng)的索引單元。
更具體地,判斷子模塊具體包括:
第一初始化單元,用于初始化當(dāng)前偏移地址;
第一讀取單元,用于根據(jù)當(dāng)前偏移地址讀取一個(gè)索引單元長度的數(shù)據(jù)和當(dāng)?shù)诙袛鄦卧袛喔碌钠频刂窙]有超過載入內(nèi)存的數(shù)據(jù)的長度時(shí),根據(jù)更新偏移地址讀取一個(gè)索引單元長度的數(shù)據(jù);
第一判斷單元,用于判斷讀取到的數(shù)據(jù)和待查詢數(shù)據(jù)記錄的關(guān)鍵字段的特征值是否相同;
第一更新單元,用于當(dāng)?shù)谝慌袛鄦卧袛嘧x取到的數(shù)據(jù)和待查詢數(shù)據(jù)記錄的關(guān)鍵字段的特征值不相同時(shí),更新偏移地址為當(dāng)前偏移地址加上讀取的數(shù)據(jù)的長度;
第二判斷單元,用于判斷更新的偏移地址是否超過載入內(nèi)存的數(shù)據(jù)的長度。
定位子模塊,具體用于根據(jù)偏移地址的值確定待查詢數(shù)據(jù)記錄的關(guān)鍵字段的特征值對(duì)應(yīng)的索引區(qū)的索引單元。
判斷子模塊還可以包括:
第二初始化單元,用于初始化遍歷游標(biāo);
第二讀取單元,用于從內(nèi)存中順序讀取長度等于索引單元的長度的數(shù)據(jù)和當(dāng)?shù)谒呐袛鄦卧袛啾闅v游標(biāo)沒有超過第二預(yù)設(shè)值時(shí),從內(nèi)存中順序讀取長度等于索引單元的長度的數(shù)據(jù);
第一設(shè)置單元,用于將讀取到的數(shù)據(jù)設(shè)置為當(dāng)前內(nèi)存數(shù)據(jù);
第三判斷單元,用于判斷當(dāng)前內(nèi)存數(shù)據(jù)和待查詢數(shù)據(jù)記錄的關(guān)鍵字段的特征值是否相同;
第二更新單元,用于當(dāng)?shù)谌袛鄦卧袛喈?dāng)前內(nèi)存數(shù)據(jù)和待查詢數(shù)據(jù)記錄的關(guān)鍵字段的特征值不相同時(shí),將遍歷游標(biāo)增加第一預(yù)設(shè)值;
第四判斷單元,用于判斷遍歷游標(biāo)是否超過第二預(yù)設(shè)值。
定位子模塊,具體用于根據(jù)遍歷游標(biāo)確定待查詢數(shù)據(jù)記錄的關(guān)鍵字段的特征值對(duì)應(yīng)的索引區(qū)的索引單元。
定位模塊204,用于當(dāng)?shù)谝慌袛嗄K203判斷索引區(qū)中包含存儲(chǔ)有特征值的索引單元時(shí),確定與存儲(chǔ)有特征值的索引單元對(duì)應(yīng)的數(shù)據(jù)單元;
具體地,第一判斷模塊103的定位子模塊包括計(jì)算單元和定位單元。其中計(jì)算單元包括第一計(jì)算子單元和第二計(jì)算子單元。第一計(jì)算子單元用于計(jì)算索引單元的長度與數(shù)據(jù)單元長度的和,用存儲(chǔ)區(qū)域的大小與得到的和相除,相除結(jié)果向下取整數(shù)得到存儲(chǔ)區(qū)域存儲(chǔ)記錄的數(shù)量;
第二計(jì)算子單元,用于計(jì)算存儲(chǔ)區(qū)域存儲(chǔ)記錄的數(shù)量與索引單元長度的乘積,得到索引區(qū)大?。?/p>
定位單元包括第一定位子單元、第二定位子單元和第三定位子單元。第一定位子單元,用于用遍歷游標(biāo)乘以數(shù)據(jù)單元長度得到第一乘積,用頁內(nèi)最多字節(jié)數(shù)乘以塊內(nèi)最多頁數(shù)得到第二乘積,用第一乘積與索引區(qū)大小相加的和除以第二乘積,相除結(jié)果向上取整數(shù)得到待查詢數(shù)據(jù)記錄的關(guān)鍵字段的特征值所在的索引單元在數(shù)據(jù)區(qū)對(duì)應(yīng)的數(shù)據(jù)單元所在的塊號(hào);
第二定位子單元,用于用遍歷游標(biāo)與數(shù)據(jù)單元長度相乘得到乘積,用所得乘積與索引區(qū)大小相加的和除以頁內(nèi)最多字節(jié)數(shù),用相除結(jié)果對(duì)塊內(nèi)最多頁數(shù)進(jìn)行取余操作,所得結(jié)果向上取整數(shù)得到待查詢數(shù)據(jù)記錄的關(guān)鍵字段的特征值所在的索引單元在數(shù)據(jù)區(qū)對(duì)應(yīng)的數(shù)據(jù)單元所在的頁號(hào);
第三定位子單元,用于用遍歷游標(biāo)與數(shù)據(jù)單元長度相乘得到乘積,用所得乘積對(duì)頁內(nèi)最多字節(jié)數(shù)取余,所得結(jié)果為待查詢數(shù)據(jù)記錄的關(guān)鍵字段的特征值所在的索引單元在數(shù)據(jù)區(qū)對(duì)應(yīng)的數(shù)據(jù)單元所在頁的頁內(nèi)偏移。
讀取模塊205,用于讀取數(shù)據(jù)記錄;
第二判斷模塊206,用于判斷讀取到的數(shù)據(jù)記錄和待查詢的數(shù)據(jù)記錄是否相同。
實(shí)施例九
本發(fā)明實(shí)施例九提供一種數(shù)據(jù)記錄的檢索裝置,如圖11所示,裝置具體包括:
計(jì)算模塊301,用于計(jì)算待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值;
判斷模塊302,用于判斷索引區(qū)中是否包含存儲(chǔ)有特征值的索引單元;
具體地,數(shù)據(jù)記錄的存儲(chǔ)區(qū)域的索引區(qū)劃分為若干塊,每塊又劃分為若干頁,判斷模塊302包括載入子模塊,用于將索引區(qū)的數(shù)據(jù)按頁載入內(nèi)存;判斷子模塊,用于判斷載入內(nèi)存的數(shù)據(jù)是否包含待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值;定位子模塊,用于當(dāng)判斷子模塊判斷載入內(nèi)存的數(shù)據(jù)包含待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值時(shí),確定待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值對(duì)應(yīng)的索引單元。
更具體地,判斷子模塊具體包括:
第一初始化單元,用于初始化當(dāng)前偏移地址;
第一讀取單元,用于根據(jù)當(dāng)前偏移地址讀取一個(gè)索引單元長度的數(shù)據(jù)和當(dāng)?shù)诙袛鄦卧袛喔碌钠频刂窙]有超過載入內(nèi)存的數(shù)據(jù)的長度時(shí),根據(jù)更新偏移地址讀取一個(gè)索引單元長度的數(shù)據(jù);
第一判斷單元,用于判斷讀取到的數(shù)據(jù)和待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值是否相同;
第一更新單元,用于當(dāng)?shù)谝慌袛鄦卧袛嘧x取到的數(shù)據(jù)和待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值不相同時(shí),更新偏移地址為當(dāng)前偏移地址加上讀取的數(shù)據(jù)的長度;
第二判斷單元,用于判斷更新的偏移地址是否超過載入內(nèi)存的數(shù)據(jù)的長度。
定位子模塊,具體用于根據(jù)偏移地址的值確定待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值對(duì)應(yīng)的索引區(qū)的索引單元。
判斷子模塊還可以包括:
第二初始化單元,用于初始化遍歷游標(biāo);
第二讀取單元,用于從內(nèi)存中順序讀取長度等于索引單元的長度的數(shù)據(jù)和當(dāng)?shù)谒呐袛鄦卧袛啾闅v游標(biāo)沒有超過第二預(yù)設(shè)值時(shí),從內(nèi)存中順序讀取長度等于索引單元的長度的數(shù)據(jù);
第一設(shè)置單元,用于將讀取到的數(shù)據(jù)設(shè)置為當(dāng)前內(nèi)存數(shù)據(jù);
第三判斷單元,用于判斷當(dāng)前內(nèi)存數(shù)據(jù)和待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值是否相同;
第二更新單元,用于當(dāng)?shù)谌袛鄦卧袛喈?dāng)前內(nèi)存數(shù)據(jù)和待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值不相同時(shí),將遍歷游標(biāo)增加第一預(yù)設(shè)值;
第四判斷單元,用于判斷遍歷游標(biāo)是否超過第二預(yù)設(shè)值。
定位子模塊,具體用于根據(jù)遍歷游標(biāo)確定待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值對(duì)應(yīng)的索引區(qū)的索引單元。
定位模塊303,用于當(dāng)判斷模塊302判斷索引區(qū)中包含存儲(chǔ)有特征值的索引單元時(shí),確定與存儲(chǔ)有特征值的索引單元對(duì)應(yīng)的數(shù)據(jù)單元;
具體地,判斷模塊302的定位子模塊包括計(jì)算單元和定位單元。其中計(jì)算單元包括第一計(jì)算子單元和第二計(jì)算子單元。第一計(jì)算子單元用于計(jì)算索引單元的長度與數(shù)據(jù)單元長度的和,用存儲(chǔ)區(qū)域的大小與得到的和相除,相除結(jié)果向下取整數(shù)得到存儲(chǔ)區(qū)域存儲(chǔ)記錄的數(shù)量;
第二計(jì)算子單元,用于計(jì)算存儲(chǔ)區(qū)域存儲(chǔ)記錄的數(shù)量與索引單元長度的乘積,得到索引區(qū)大?。?/p>
定位單元包括第一定位子單元、第二定位子單元和第三定位子單元。第一定位子單元,用于用遍歷游標(biāo)乘以數(shù)據(jù)單元長度得到第一乘積,用頁內(nèi)最多字節(jié)數(shù)乘以塊內(nèi)最多頁數(shù)得到第二乘積,用第一乘積與索引區(qū)大小相加的和除以第二乘積,相除結(jié)果向上取整數(shù)得到待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值所在的索引單元在數(shù)據(jù)區(qū)對(duì)應(yīng)的數(shù)據(jù)單元所在的塊號(hào);
第二定位子單元,用于用遍歷游標(biāo)與數(shù)據(jù)單元長度相乘得到乘積,用所得乘積與索引區(qū)大小相加的和除以頁內(nèi)最多字節(jié)數(shù),用相除結(jié)果對(duì)塊內(nèi)最多頁數(shù)進(jìn)行取余操作,所得結(jié)果向上取整數(shù)得到待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值所在的索引單元在數(shù)據(jù)區(qū)對(duì)應(yīng)的數(shù)據(jù)單元所在的頁號(hào);
第三定位子單元,用于用遍歷游標(biāo)與數(shù)據(jù)單元長度相乘得到乘積,用所得乘積對(duì)頁內(nèi)最多字節(jié)數(shù)取余,所得結(jié)果為待檢索數(shù)據(jù)記錄的關(guān)鍵字段的特征值所在的索引單元在數(shù)據(jù)區(qū)對(duì)應(yīng)的數(shù)據(jù)單元所在頁的頁內(nèi)偏移。
讀取模塊304,用于讀取數(shù)據(jù)記錄;
顯示模塊305,用于顯示讀取的數(shù)據(jù)記錄。