數(shù)據(jù)存儲(chǔ)方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及計(jì)算機(jī)領(lǐng)域,具體涉及數(shù)據(jù)庫(kù)領(lǐng)域,尤其涉及數(shù)據(jù)存儲(chǔ)方法和裝置。
【背景技術(shù)】
[0002]在對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)中,通常將訪問(wèn)頻次較高的熱數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)的緩存存儲(chǔ)區(qū)域中。同時(shí),可以將熱數(shù)據(jù)進(jìn)行壓縮后存儲(chǔ)在緩存存儲(chǔ)區(qū)域的壓縮數(shù)據(jù)頁(yè)中,使得緩存存儲(chǔ)區(qū)域中存儲(chǔ)更多的熱數(shù)據(jù),進(jìn)一步提升對(duì)熱數(shù)據(jù)的命中率。目前,通常采用的方式為:直接向壓縮數(shù)據(jù)頁(yè)中寫入數(shù)據(jù),在壓縮數(shù)據(jù)頁(yè)上剩余的存儲(chǔ)空間不足時(shí),才對(duì)非壓縮數(shù)據(jù)頁(yè)進(jìn)行壓縮生成新的壓縮數(shù)據(jù)頁(yè)。
[0003]然而,當(dāng)采用上述方式將數(shù)據(jù)寫入壓縮數(shù)據(jù)頁(yè)時(shí),一方面,因?qū)Ψ菈嚎s數(shù)據(jù)頁(yè)進(jìn)行壓縮生成新的壓縮數(shù)據(jù)頁(yè),造成將熱數(shù)據(jù)寫入壓縮數(shù)據(jù)頁(yè)的線程被掛起,增加系統(tǒng)開(kāi)銷。另一方面,當(dāng)生成新的壓縮數(shù)據(jù)頁(yè)失敗時(shí),會(huì)引起頁(yè)面分裂,因頁(yè)面分裂需要對(duì)描述數(shù)據(jù)頁(yè)之間的關(guān)系的數(shù)據(jù)結(jié)構(gòu)進(jìn)行加鎖操作,造成并發(fā)等待的問(wèn)題,進(jìn)一步增加系統(tǒng)開(kāi)銷。
【發(fā)明內(nèi)容】
[0004]本申請(qǐng)?zhí)峁┝藬?shù)據(jù)存儲(chǔ)方法和裝置,用于解決上述【背景技術(shù)】部分存在的技術(shù)問(wèn)題。
[0005]第一方面,本申請(qǐng)?zhí)峁┝藬?shù)據(jù)存儲(chǔ)方法,該方法包括:響應(yīng)于將待存儲(chǔ)數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的緩存存儲(chǔ)區(qū)域中的壓縮數(shù)據(jù)頁(yè),判斷壓縮數(shù)據(jù)頁(yè)中剩余的存儲(chǔ)空間是否大于存儲(chǔ)空間閾值,其中,緩存存儲(chǔ)區(qū)域包括:用于存儲(chǔ)待存儲(chǔ)數(shù)據(jù)的非壓縮數(shù)據(jù)頁(yè)以及用于存儲(chǔ)待存儲(chǔ)數(shù)據(jù)對(duì)應(yīng)的壓縮數(shù)據(jù)的壓縮數(shù)據(jù)頁(yè);若否,確定非壓縮數(shù)據(jù)頁(yè)中用于生成壓縮數(shù)據(jù)頁(yè)的非壓縮數(shù)據(jù)頁(yè);對(duì)所確定的非壓縮數(shù)據(jù)頁(yè)進(jìn)行壓縮,生成壓縮數(shù)據(jù)頁(yè),以使得在下一次將待存儲(chǔ)數(shù)據(jù)寫入壓縮數(shù)據(jù)頁(yè)時(shí),利用生成的壓縮數(shù)據(jù)頁(yè)存儲(chǔ)待存儲(chǔ)數(shù)據(jù)。
[0006]第二方面,本申請(qǐng)?zhí)峁┝藬?shù)據(jù)存儲(chǔ)裝置,該裝置包括:響應(yīng)單元,配置用于響應(yīng)于將待存儲(chǔ)數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的緩存存儲(chǔ)區(qū)域中的壓縮數(shù)據(jù)頁(yè),判斷壓縮數(shù)據(jù)頁(yè)中剩余的存儲(chǔ)空間是否大于存儲(chǔ)空間閾值,其中,緩存存儲(chǔ)區(qū)域包括:用于存儲(chǔ)待存儲(chǔ)數(shù)據(jù)的非壓縮數(shù)據(jù)頁(yè)以及用于存儲(chǔ)待存儲(chǔ)數(shù)據(jù)對(duì)應(yīng)的壓縮數(shù)據(jù)的壓縮數(shù)據(jù)頁(yè);確定單元,配置用于當(dāng)壓縮數(shù)據(jù)頁(yè)中剩余的存儲(chǔ)空間小于存儲(chǔ)空間閾值,確定非壓縮數(shù)據(jù)頁(yè)中用于生成壓縮數(shù)據(jù)頁(yè)的非壓縮數(shù)據(jù)頁(yè);壓縮單元,配置用于對(duì)所確定的非壓縮數(shù)據(jù)頁(yè)進(jìn)行壓縮,生成壓縮數(shù)據(jù)頁(yè),以使得在下一次將待存儲(chǔ)數(shù)據(jù)寫入壓縮數(shù)據(jù)頁(yè)時(shí),利用生成的壓縮數(shù)據(jù)頁(yè)存儲(chǔ)待存儲(chǔ)數(shù)據(jù)。
[0007]本申請(qǐng)?zhí)峁┑臄?shù)據(jù)存儲(chǔ)方法和裝置,通過(guò)響應(yīng)于將待存儲(chǔ)數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的緩存存儲(chǔ)區(qū)域中的壓縮數(shù)據(jù)頁(yè),判斷壓縮數(shù)據(jù)頁(yè)中剩余的存儲(chǔ)空間是否大于存儲(chǔ)空間閾值;若否,確定非壓縮數(shù)據(jù)頁(yè)中用于生成壓縮數(shù)據(jù)頁(yè)的非壓縮數(shù)據(jù)頁(yè);對(duì)所確定的非壓縮數(shù)據(jù)頁(yè)進(jìn)行壓縮,生成壓縮數(shù)據(jù)頁(yè),以使得在下一次將待存儲(chǔ)數(shù)據(jù)寫入壓縮數(shù)據(jù)頁(yè)時(shí),利用生成的壓縮數(shù)據(jù)頁(yè)存儲(chǔ)待存儲(chǔ)數(shù)據(jù)。實(shí)現(xiàn)了預(yù)先生成壓縮數(shù)據(jù)頁(yè),從而使得每一次將數(shù)據(jù)寫入壓縮數(shù)據(jù)頁(yè)時(shí),均可確保壓縮數(shù)據(jù)頁(yè)中具有足夠的存儲(chǔ)空間存儲(chǔ)寫入的數(shù)據(jù),從而減輕將數(shù)據(jù)寫入壓縮數(shù)據(jù)頁(yè)時(shí)的系統(tǒng)開(kāi)銷,進(jìn)而提升系統(tǒng)的寫入效率。
【附圖說(shuō)明】
[0008]通過(guò)閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本申請(qǐng)的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
[0009]圖1是本申請(qǐng)可以應(yīng)用于其中的示例性系統(tǒng)架構(gòu)圖;
[0010]圖2示出了根據(jù)本申請(qǐng)的數(shù)據(jù)存儲(chǔ)方法的一個(gè)實(shí)施例的流程圖;
[0011 ]圖3示出了利用空閑壓縮線程進(jìn)行壓縮的原理圖;
[0012]圖4示出了對(duì)非壓縮數(shù)據(jù)頁(yè)進(jìn)行壓縮的流程圖;
[0013]圖5示出了根據(jù)本申請(qǐng)的數(shù)據(jù)存儲(chǔ)裝置的一個(gè)實(shí)施例的結(jié)構(gòu)示意圖;
[0014]圖6是適于用來(lái)實(shí)現(xiàn)本申請(qǐng)實(shí)施例的終端設(shè)備或服務(wù)器的計(jì)算機(jī)系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0015]下面結(jié)合附圖和實(shí)施例對(duì)本申請(qǐng)作進(jìn)一步的詳細(xì)說(shuō)明??梢岳斫獾氖牵颂幩枋龅木唧w實(shí)施例僅僅用于解釋相關(guān)發(fā)明,而非對(duì)該發(fā)明的限定。另外還需要說(shuō)明的是,為了便于描述,附圖中僅示出了與有關(guān)發(fā)明相關(guān)的部分。
[0016]需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。下面將參考附圖并結(jié)合實(shí)施例來(lái)詳細(xì)說(shuō)明本申請(qǐng)。
[0017]圖1示出了可以應(yīng)用本申請(qǐng)的數(shù)據(jù)存儲(chǔ)方法或數(shù)據(jù)存儲(chǔ)裝置的實(shí)施例的示例性系統(tǒng)架構(gòu)100。
[0018]如圖1所示,系統(tǒng)架構(gòu)100可以包括終端設(shè)備101、102、103,網(wǎng)絡(luò)104和服務(wù)器105。網(wǎng)絡(luò)104用以在終端設(shè)備101、102、103和服務(wù)器105之間提供傳輸鏈路的介質(zhì)。網(wǎng)絡(luò)104可以包括各種連接類型,例如有線、無(wú)線傳輸鏈路或者光纖電纜等等。
[0019]用戶可以使用終端設(shè)備101、102、103通過(guò)網(wǎng)絡(luò)104與服務(wù)器105交互,以接收或發(fā)送消息等。終端設(shè)備101、102、103上可以安裝有各種通訊應(yīng)用,例如網(wǎng)絡(luò)安全類應(yīng)用、即時(shí)通信工具等。
[0020]終端設(shè)備101、102、103可以是具有顯示屏并且支持網(wǎng)絡(luò)通信的各種電子設(shè)備,包括但不限于智能手機(jī)、平板電腦、電子書閱讀器、MP3播放器(Moving Picture ExpertsGroup Aud1 Layer 111,動(dòng)態(tài)影像專家壓縮標(biāo)準(zhǔn)音頻層面3)、MP4 (Moving PictureExperts Group Aud1 Layer IV,動(dòng)態(tài)影像專家壓縮標(biāo)準(zhǔn)音頻層面4)播放器、膝上型便攜計(jì)算機(jī)和臺(tái)式計(jì)算機(jī)等等。
[0021]服務(wù)器105可以是提供各種服務(wù)的服務(wù)器,例如對(duì)終端設(shè)備101、102、103上的應(yīng)用提供數(shù)據(jù)訪問(wèn)支持的服務(wù)器。服務(wù)器可以對(duì)接收到的數(shù)據(jù)訪問(wèn)請(qǐng)求進(jìn)行處理,并將處理結(jié)果(例如數(shù)據(jù)庫(kù)中的數(shù)據(jù))反饋給終端設(shè)備。
[0022]應(yīng)該理解,圖1中的終端設(shè)備、網(wǎng)絡(luò)和服務(wù)器的數(shù)目?jī)H僅是示意性的。根據(jù)實(shí)現(xiàn)需要,可以具有任意數(shù)目的終端設(shè)備、網(wǎng)絡(luò)和服務(wù)器。
[0023]請(qǐng)參考圖2,其示出了根據(jù)本申請(qǐng)的數(shù)據(jù)存儲(chǔ)方法的一個(gè)實(shí)施例的流程200。需要說(shuō)明的是,本申請(qǐng)實(shí)施例所提供的數(shù)據(jù)存儲(chǔ)方法一般由圖1中的服務(wù)器105執(zhí)行,相應(yīng)地,數(shù)據(jù)存儲(chǔ)裝置一般設(shè)置于服務(wù)器105中。該方法包括以下步驟:
[0024]步驟201,響應(yīng)于將待存儲(chǔ)數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的緩存存儲(chǔ)區(qū)域中的壓縮數(shù)據(jù)頁(yè),判斷壓縮數(shù)據(jù)頁(yè)中剩余的存儲(chǔ)空間是否大于存儲(chǔ)空間閾值。
[0025]在本實(shí)施例中,緩存存儲(chǔ)區(qū)域包括:用于存儲(chǔ)待存儲(chǔ)數(shù)據(jù)的非壓縮數(shù)據(jù)頁(yè)以及用于存儲(chǔ)待存儲(chǔ)數(shù)據(jù)對(duì)應(yīng)的壓縮數(shù)據(jù)的壓縮數(shù)據(jù)頁(yè)。該緩存存儲(chǔ)區(qū)域可以為在對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)過(guò)程中,用于存儲(chǔ)用戶頻繁訪問(wèn)的數(shù)據(jù)(也可稱之為熱數(shù)據(jù))的存儲(chǔ)區(qū)域,也可將該緩存存儲(chǔ)區(qū)域稱之為buffer pool。在本實(shí)施例中,由于在每一次存儲(chǔ)數(shù)據(jù),即將數(shù)據(jù)寫入數(shù)據(jù)表中時(shí),是以記錄為單位進(jìn)行寫入的。因此,存儲(chǔ)空間閾值的大小可以為當(dāng)前寫入到數(shù)據(jù)表中占用的存儲(chǔ)空間最大的記錄所占用的存儲(chǔ)空間。
[0026]在本實(shí)施例中,壓縮數(shù)據(jù)頁(yè)中的數(shù)據(jù)可以包括:壓縮數(shù)據(jù)以及以追加寫方式寫入的非壓縮的mlog。下面首先說(shuō)明在buffer pool中設(shè)置壓縮數(shù)據(jù)頁(yè)的原理:為了提升對(duì)在buffer pool中的熱數(shù)據(jù)的命中概率,S卩通過(guò)一次讀取操作讀取出buffer pool中的熱數(shù)據(jù)的概率,可以將buffer pool劃分為用于存儲(chǔ)對(duì)待存儲(chǔ)數(shù)據(jù)進(jìn)行壓縮之后生成的壓縮數(shù)據(jù)的壓縮數(shù)據(jù)頁(yè)以及非壓縮數(shù)據(jù)頁(yè)。從而,可以將熱數(shù)據(jù)進(jìn)行壓縮后存儲(chǔ)在壓縮數(shù)據(jù)頁(yè)中,使得buffer pool中可以緩存更多的熱數(shù)據(jù),提升熱數(shù)據(jù)的命中概率。在對(duì)經(jīng)壓縮后的熱數(shù)據(jù)進(jìn)行讀取時(shí),可以進(jìn)行解壓縮操作,得到解壓縮后的熱數(shù)據(jù)。在本實(shí)施例中,可以將最近訪問(wèn)的數(shù)據(jù)存儲(chǔ)在非壓縮數(shù)據(jù)頁(yè)中,同時(shí),可以將除最近訪問(wèn)的數(shù)據(jù)以外的數(shù)據(jù)存儲(chǔ)于壓縮數(shù)據(jù)頁(yè)中,從而在buffer pool中存儲(chǔ)更多的熱數(shù)據(jù),提升對(duì)熱數(shù)據(jù)的命中概率。
[0027]在本實(shí)施例中,可以預(yù)先分別創(chuàng)建壓縮數(shù)據(jù)頁(yè)鏈表和非壓縮數(shù)據(jù)頁(yè)鏈表,利用壓縮數(shù)據(jù)頁(yè)鏈表和非壓縮數(shù)據(jù)頁(yè)鏈表分別管理壓縮數(shù)據(jù)頁(yè)與非壓縮數(shù)據(jù)頁(yè)。壓縮數(shù)據(jù)頁(yè)鏈表和非壓縮數(shù)據(jù)頁(yè)鏈表均可以采用LRlKLeast Recently Used)鏈表實(shí)現(xiàn)。以壓縮數(shù)據(jù)頁(yè)鏈表為例,鏈表中的每一個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)壓縮數(shù)據(jù)頁(yè),節(jié)點(diǎn)中可以記錄指示該壓縮數(shù)據(jù)頁(yè)之前的壓縮數(shù)據(jù)頁(yè)的存儲(chǔ)地址的指針、該壓縮數(shù)據(jù)頁(yè)之后的壓縮數(shù)據(jù)頁(yè)的存儲(chǔ)地址的指針、壓縮數(shù)據(jù)頁(yè)的實(shí)際物理地址。
[0028]在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,還包括:接收輸入的存儲(chǔ)空間設(shè)置指令;設(shè)置非壓縮數(shù)據(jù)頁(yè)與壓縮數(shù)據(jù)頁(yè)的存儲(chǔ)空間的大小。在本實(shí)施例中,可以對(duì)壓縮數(shù)據(jù)頁(yè)與非壓縮數(shù)據(jù)頁(yè)占據(jù)的存儲(chǔ)空間大小進(jìn)行設(shè)置。例如,將非壓縮數(shù)據(jù)頁(yè)的大小設(shè)置為16KB,也可將該壓縮數(shù)據(jù)頁(yè)稱之為普通非壓縮數(shù)據(jù)頁(yè)。假設(shè)普通非壓縮數(shù)據(jù)頁(yè)的大小為16KB,bufferpool中存儲(chǔ)20個(gè)非壓縮數(shù)據(jù)頁(yè),在壓縮的情況下,當(dāng)壓縮數(shù)據(jù)頁(yè)的大小為8KB時(shí),則bufferpool中可以