一種數(shù)據(jù)讀取及寫入的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)讀取方法,一種數(shù)據(jù)寫入方 法,一種數(shù)據(jù)讀取裝置和一種數(shù)據(jù)寫入裝置。
【背景技術(shù)】
[0002] 可靠性及可擴(kuò)展性的海量數(shù)據(jù)存儲(chǔ)對(duì)互聯(lián)網(wǎng)公司來說是一個(gè)巨大的挑戰(zhàn),傳統(tǒng)的 數(shù)據(jù)庫往往很難滿足該需求,并且很多時(shí)候?qū)τ谔囟ǖ南到y(tǒng)絕大部分的檢索都是基于主鍵 的的查詢,在這種情況下使用關(guān)系型數(shù)據(jù)庫將使得效率低下,并且擴(kuò)展也將成為未來很大 的難題。在這樣的情況下,使用Key-value存儲(chǔ)將會(huì)是一個(gè)很好的選擇。
[0003] 然而,目前大部分的Key-value存儲(chǔ)系統(tǒng)都用于分布式環(huán)境中,數(shù)據(jù)通過socket 傳輸,數(shù)據(jù)處理效率低下。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明實(shí)施例所要解決的技術(shù)問題是提供一種數(shù)據(jù)讀取方法及一種數(shù)據(jù)寫入方 法,提高數(shù)據(jù)處理效率。
[0005] 相應(yīng)的,本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)讀取裝置及一種數(shù)據(jù)寫入裝置,用以保 證上述方法的實(shí)現(xiàn)及應(yīng)用。
[0006] 為了解決上述問題,本發(fā)明公開了一種數(shù)據(jù)讀取方法,所述方法包括:
[0007] 接收數(shù)據(jù)讀取請(qǐng)求,所述數(shù)據(jù)讀取請(qǐng)求包括目標(biāo)數(shù)據(jù)記錄標(biāo)識(shí);
[0008] 當(dāng)在預(yù)設(shè)的關(guān)系數(shù)據(jù)表中匹配到所述目標(biāo)數(shù)據(jù)記錄標(biāo)識(shí)時(shí),獲得與所述目標(biāo)數(shù)據(jù) 記錄標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)數(shù)據(jù)記錄虛擬地址;其中,所述關(guān)系數(shù)據(jù)表包括多個(gè)數(shù)據(jù)記錄標(biāo)識(shí)與 對(duì)應(yīng)的數(shù)據(jù)記錄的虛擬地址的關(guān)聯(lián)關(guān)系;
[0009] 計(jì)算所述目標(biāo)數(shù)據(jù)記錄虛擬地址對(duì)應(yīng)的物理地址,其中,所述物理地址中存儲(chǔ)數(shù) 據(jù)記錄標(biāo)識(shí)與對(duì)應(yīng)的數(shù)據(jù)內(nèi)容的鍵值對(duì);
[0010] 從所述物理地址中獲得與所述目標(biāo)數(shù)據(jù)記錄標(biāo)識(shí)對(duì)應(yīng)的數(shù)據(jù)內(nèi)容。
[0011] 優(yōu)選地,所述關(guān)系數(shù)據(jù)表保存在共享內(nèi)存中。
[0012] 優(yōu)選地,所述關(guān)系數(shù)據(jù)表包括數(shù)據(jù)頭、索引記錄以及數(shù)據(jù)記錄;
[0013] 所述數(shù)據(jù)頭進(jìn)一步包括索引根節(jié)點(diǎn),空閑數(shù)據(jù)記錄索引根節(jié)點(diǎn),空閑索引記錄根 節(jié)點(diǎn);
[0014] 其中,所述索引根節(jié)點(diǎn)用于記錄數(shù)據(jù)記錄標(biāo)識(shí)及對(duì)應(yīng)的已使用的索引節(jié)點(diǎn)的虛擬 地址;
[0015] 所述索引記錄用于記錄所述索引節(jié)點(diǎn)的信息,所述索引節(jié)點(diǎn)的信息包括數(shù)據(jù)記錄 標(biāo)識(shí)與對(duì)應(yīng)的數(shù)據(jù)記錄的虛擬地址;
[0016] 所述數(shù)據(jù)記錄用于記錄已寫入的數(shù)據(jù)記錄標(biāo)識(shí)和對(duì)應(yīng)的數(shù)據(jù)內(nèi)容;
[0017] 所述空閑數(shù)據(jù)記錄索引根節(jié)點(diǎn)用于記錄未使用的數(shù)據(jù)記錄的虛擬地址;
[0018] 所述空閑索引記錄根節(jié)點(diǎn)用于記錄未使用的索引節(jié)點(diǎn)的虛擬地址。
[0019] 優(yōu)選地,所述虛擬地址包括高16位及低16位兩部分,所述高16位中記錄對(duì)應(yīng)的 索引節(jié)點(diǎn)的地址相對(duì)數(shù)據(jù)頭的偏移,所述低16位中記錄所述索引節(jié)點(diǎn)內(nèi)部的偏移。
[0020] 優(yōu)選地,在所述當(dāng)在預(yù)設(shè)的關(guān)系數(shù)據(jù)表中匹配到所述目標(biāo)數(shù)據(jù)記錄標(biāo)識(shí)時(shí),獲得 與所述目標(biāo)數(shù)據(jù)記錄標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)數(shù)據(jù)記錄虛擬地址的步驟之前,還包括:
[0021] 在所述索引根節(jié)點(diǎn)中匹配所述目標(biāo)數(shù)據(jù)記錄標(biāo)識(shí),獲取對(duì)應(yīng)的索引節(jié)點(diǎn)的虛擬地 址;
[0022] 計(jì)算所述索引節(jié)點(diǎn)的虛擬地址對(duì)應(yīng)的索引節(jié)點(diǎn)物理地址;
[0023] 在所述索引節(jié)點(diǎn)物理地址中獲得所述索引節(jié)點(diǎn)中記錄的數(shù)據(jù)記錄標(biāo)識(shí)與所述數(shù) 據(jù)記錄虛擬地址的關(guān)聯(lián)關(guān)系。
[0024] 優(yōu)選地,采用如下公式計(jì)算所述目標(biāo)數(shù)據(jù)記錄虛擬地址對(duì)應(yīng)的物理地址:
[0025] 物理地址=(所述共享內(nèi)存基地址+所述數(shù)據(jù)頭大小+當(dāng)前數(shù)據(jù)記錄的位置*每 條數(shù)據(jù)記錄的大小+〇ffset in record)。
[0026] 優(yōu)選地,所述方法還包括:
[0027] 封裝所述共享內(nèi)存的數(shù)據(jù)訪問接口。
[0028] 本發(fā)明還公開了一種數(shù)據(jù)寫入方法,所述方法包括:
[0029] 接收數(shù)據(jù)寫入請(qǐng)求,所述數(shù)據(jù)寫入請(qǐng)求包括目標(biāo)數(shù)據(jù)記錄標(biāo)識(shí)及對(duì)應(yīng)的數(shù)據(jù)內(nèi) 容;
[0030] 判斷在預(yù)設(shè)的關(guān)系數(shù)據(jù)表中是否匹配到所述目標(biāo)數(shù)據(jù)記錄標(biāo)識(shí),其中,所述關(guān)系 數(shù)據(jù)表包括多個(gè)數(shù)據(jù)記錄標(biāo)識(shí)與對(duì)應(yīng)的數(shù)據(jù)記錄的虛擬地址的關(guān)聯(lián)關(guān)系,所述關(guān)系數(shù)據(jù)表 還包括空閑索引資源;
[0031] 若是,則獲得與所述目標(biāo)數(shù)據(jù)記錄標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)數(shù)據(jù)記錄虛擬地址,計(jì)算所述 目標(biāo)數(shù)據(jù)記錄虛擬地址對(duì)應(yīng)的物理地址,并將所述目標(biāo)數(shù)據(jù)的數(shù)據(jù)內(nèi)容寫入所述物理地址 中的對(duì)應(yīng)位置;
[0032] 若否,則獲取所述空閑索引資源,并將所述目標(biāo)數(shù)據(jù)記錄標(biāo)識(shí)及對(duì)應(yīng)的數(shù)據(jù)內(nèi)容 寫入所述空閑索引資源中。
[0033] 優(yōu)選地,所述關(guān)系數(shù)據(jù)表保存在共享內(nèi)存中。
[0034] 優(yōu)選地,所述關(guān)系數(shù)據(jù)表包括數(shù)據(jù)頭、索引記錄以及數(shù)據(jù)記錄;所述數(shù)據(jù)頭進(jìn)一步 包括索引根節(jié)點(diǎn),空閑數(shù)據(jù)記錄索引根節(jié)點(diǎn),空閑索引記錄根節(jié)點(diǎn);
[0035] 其中,所述索引根節(jié)點(diǎn)用于記錄數(shù)據(jù)記錄標(biāo)識(shí)及對(duì)應(yīng)的已使用的索引節(jié)點(diǎn)的虛擬 地址;
[0036] 所述索引記錄用于記錄所述已使用索引節(jié)點(diǎn)的信息,所述已使用索引節(jié)點(diǎn)的信息 包括數(shù)據(jù)記錄標(biāo)識(shí)與對(duì)應(yīng)的數(shù)據(jù)記錄的虛擬地址;
[0037] 所述數(shù)據(jù)記錄用于記錄已寫入的數(shù)據(jù)記錄標(biāo)識(shí)和對(duì)應(yīng)的數(shù)據(jù)內(nèi)容;
[0038] 所述空閑數(shù)據(jù)記錄索引根節(jié)點(diǎn)用于記錄未使用的數(shù)據(jù)記錄的虛擬地址;
[0039] 所述空閑索引記錄根節(jié)點(diǎn)用于記錄未使用的索引節(jié)點(diǎn)的虛擬地址。
[0040] 優(yōu)選地,所述空閑索引資源包括所述空閑索引記錄根節(jié)點(diǎn)及所述空閑數(shù)據(jù)記錄根 節(jié)點(diǎn);所述獲取所述空閑索引資源,并將所述目標(biāo)數(shù)據(jù)記錄標(biāo)識(shí)及對(duì)應(yīng)的數(shù)據(jù)內(nèi)容寫入所 述空閑索引資源中的步驟包括:
[0041] 從所述空閑索引記錄根節(jié)點(diǎn)中選取一虛擬地址,將所述虛擬地址對(duì)應(yīng)的索引節(jié)點(diǎn) 作為新索引節(jié)點(diǎn);
[0042] 從所述空閑數(shù)據(jù)記錄根節(jié)點(diǎn)中選取一虛擬地址,將所述虛擬地址對(duì)應(yīng)的數(shù)據(jù)記錄 作為新的數(shù)據(jù)記錄;
[0043] 將所述目標(biāo)數(shù)據(jù)記錄標(biāo)識(shí)及對(duì)應(yīng)的數(shù)據(jù)內(nèi)容寫入所述新的數(shù)據(jù)記錄中;
[0044] 在所述新索引節(jié)點(diǎn)下記錄所述的目標(biāo)數(shù)據(jù)記錄標(biāo)識(shí)及所述新的數(shù)據(jù)記錄的虛擬 地址。
[0045] 優(yōu)選地,所述方法還包括:
[0046] 當(dāng)從所述空閑索引記錄根節(jié)點(diǎn)中選取一虛擬地址后,更新所述空閑索引記錄根節(jié) 點(diǎn)指向下一虛擬地址;
[0047] 當(dāng)從所述空閑數(shù)據(jù)記錄根節(jié)點(diǎn)中選取一虛擬地址后,更新所述空閑數(shù)據(jù)記錄根節(jié) 點(diǎn)指向下一虛擬地址。
[0048] 優(yōu)選地,所述虛擬地址包括高16位及低16位兩部分,所述高16位中記錄對(duì)應(yīng)的 索引節(jié)點(diǎn)的地址相對(duì)數(shù)據(jù)頭的偏移,所述低16位中記錄所述索引節(jié)點(diǎn)內(nèi)部的偏移。
[0049] 優(yōu)選地,采用如下公式計(jì)算所述目標(biāo)數(shù)據(jù)記錄虛擬地址對(duì)應(yīng)的物理地址:
[0050] 物理地址=(所述共享內(nèi)存基地址+所述數(shù)據(jù)頭大小+當(dāng)前數(shù)據(jù)記錄的位置*每 條數(shù)據(jù)記錄的大小+〇ffset in record)。
[0051 ] 優(yōu)選地,所述方法還包括:
[0052] 封裝所述共享內(nèi)存的數(shù)據(jù)訪問接口。
[0053] 本發(fā)明還公開了一種數(shù)據(jù)讀取裝置,所述裝置包括:
[0054] 請(qǐng)求接收模塊,用于接收數(shù)據(jù)讀取請(qǐng)求,所述數(shù)據(jù)讀取請(qǐng)求包括目標(biāo)數(shù)據(jù)記錄標(biāo) 識(shí);
[0055] 虛擬地址獲取模塊,用于在預(yù)設(shè)的關(guān)系數(shù)據(jù)表中匹配到所述目標(biāo)數(shù)據(jù)記錄標(biāo)識(shí) 時(shí),獲得與所述目標(biāo)數(shù)據(jù)記錄標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)數(shù)據(jù)記錄虛擬地址;其中,所述關(guān)系數(shù)據(jù)表包 括多個(gè)數(shù)據(jù)記錄標(biāo)識(shí)與對(duì)應(yīng)的數(shù)據(jù)記錄的虛擬地址的關(guān)聯(lián)關(guān)系;
[0056] 物理地址計(jì)算模塊,用于計(jì)算所述目標(biāo)數(shù)據(jù)記錄虛擬地址對(duì)應(yīng)的物理地址,其中, 所述物理地址中存儲(chǔ)數(shù)據(jù)記錄標(biāo)識(shí)與對(duì)應(yīng)的數(shù)據(jù)內(nèi)容的鍵