數(shù)據(jù)存儲(chǔ)輔助方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,特別是涉及數(shù)據(jù)存儲(chǔ)輔助方法及系統(tǒng)。
【背景技術(shù)】
[0002]在一些應(yīng)用或者服務(wù)系統(tǒng)中,常常需要把某些相關(guān)的數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,并根據(jù)管理的需要進(jìn)行相應(yīng)的處理。在電子商務(wù)交易平臺(tái)中,賣家用戶可以將業(yè)務(wù)對(duì)象(例如商品、服務(wù)等)的信息,包括庫(kù)存信息等,發(fā)布到交易平臺(tái)中。在交易平臺(tái)中,需要根據(jù)賣家用戶的設(shè)置,在數(shù)據(jù)庫(kù)中保存對(duì)象的庫(kù)存信息,并且,當(dāng)買家用戶針對(duì)某對(duì)象產(chǎn)生購(gòu)買行為時(shí),需要對(duì)業(yè)務(wù)對(duì)象的庫(kù)存數(shù)量進(jìn)行扣減,其他用戶在查詢?cè)摌I(yè)務(wù)對(duì)象的庫(kù)存數(shù)量時(shí),則可以顯示出最新的庫(kù)存數(shù)量。
[0003]但是,在高并發(fā)、大請(qǐng)求量情況下,對(duì)數(shù)據(jù)庫(kù)的讀寫請(qǐng)求量會(huì)突然加大,很容易達(dá)到數(shù)據(jù)庫(kù)處理能力的極限,這樣會(huì)導(dǎo)致系統(tǒng)的部分功能無(wú)法正常使用。因此,數(shù)據(jù)庫(kù)逐漸成為制約系統(tǒng)快速發(fā)展的瓶頸。
[0004]目前普遍的解決方案基本采用緩存(MDB)+數(shù)據(jù)庫(kù)(DB)的兩級(jí)存儲(chǔ)架構(gòu),其中,MDB位于內(nèi)存中,讀寫速度遠(yuǎn)遠(yuǎn)大于DB,單條記錄大小為512字節(jié)時(shí)的TPS達(dá)到7萬(wàn),響應(yīng)時(shí)間RT〈2ms。參見(jiàn)圖1,在MDB+DB的兩級(jí)存儲(chǔ)架構(gòu)中,當(dāng)一個(gè)查詢操作來(lái)臨時(shí),常見(jiàn)的做法是:
[0005]1.0:首先在MDB中查詢,如果MDB中命中,則直接返回查詢結(jié)果;
[0006]1.1:如果在MDB中未命中,則去查詢DB ;
[0007]1.2:把在DB中查詢到的結(jié)果回寫到MDB中。
[0008]當(dāng)一個(gè)寫操作請(qǐng)求到達(dá)時(shí),常見(jiàn)的做法是:
[0009]2.0:首先對(duì)DB中的數(shù)據(jù)進(jìn)行修改;
[0010]2.1:將MDB中對(duì)應(yīng)的數(shù)據(jù)進(jìn)行無(wú)效處理,例如進(jìn)行刪除等操作。
[0011 ] 例如,假設(shè)某應(yīng)用中產(chǎn)生一查詢請(qǐng)求,對(duì)應(yīng)的查詢對(duì)象是數(shù)據(jù)A,此時(shí),查詢請(qǐng)求首先到達(dá)MDB,如果MDB中存在該記錄,則直接從MDB返回,否則,該查詢請(qǐng)求會(huì)被發(fā)送到DB,DB返回查詢結(jié)果之后,將查詢結(jié)果寫入到MDB中。這樣,后續(xù)再有其他應(yīng)用查詢?cè)摂?shù)據(jù)A時(shí),則直接從MDB返回即可,不用再查詢DB。
[0012]后續(xù)如果又有應(yīng)用產(chǎn)生了對(duì)數(shù)據(jù)A的修改,則會(huì)在DB中對(duì)數(shù)據(jù)A進(jìn)行修改,并將MDB中的關(guān)于該數(shù)據(jù)A的記錄刪除;此時(shí),如果再有其他應(yīng)用發(fā)起對(duì)數(shù)據(jù)A的查詢,則在MDB中將無(wú)法查詢到,而是被發(fā)送到DB中進(jìn)行查詢,在DB中得到查詢結(jié)果之后,再寫入到MDB中。這樣可以保證MDB和DB之間數(shù)據(jù)的一致性,進(jìn)而保證查詢結(jié)果的正確性。
[0013]可見(jiàn),這種兩級(jí)存儲(chǔ)結(jié)構(gòu)減少了直接對(duì)DB的查詢請(qǐng)求,有利于降低應(yīng)用寫DB時(shí)的響應(yīng)時(shí)間。但至少存在以下問(wèn)題:根據(jù)MDB本身的特性,數(shù)據(jù)全部保存在內(nèi)存中,而由于內(nèi)存的大小限制,數(shù)據(jù)存儲(chǔ)空間不能任意擴(kuò)容,這使得存儲(chǔ)有限制,而且容易由于各種原因(如服務(wù)重啟等)丟失數(shù)據(jù),數(shù)據(jù)完整性得不到保證。另外,在寫請(qǐng)求很多的時(shí)候,由于該方法會(huì)清空MDB中對(duì)應(yīng)的數(shù)據(jù),因此,使得之后的讀請(qǐng)求在MDB中的命中率急劇下降,從而使得對(duì)DB的保護(hù)力度大大降低,進(jìn)而使得DB對(duì)寫操作請(qǐng)求的響應(yīng)效率也隨之降低。
【發(fā)明內(nèi)容】
[0014]本申請(qǐng)?zhí)峁┝藬?shù)據(jù)存儲(chǔ)輔助方法及系統(tǒng),能夠降低數(shù)據(jù)庫(kù)DB的讀請(qǐng)求處理壓力,提高對(duì)寫操作請(qǐng)求的響應(yīng)效率。
[0015]本申請(qǐng)?zhí)峁┝巳缦路桨?
[0016]一種數(shù)據(jù)存儲(chǔ)輔助方法,數(shù)據(jù)存儲(chǔ)系統(tǒng)采用數(shù)據(jù)庫(kù)DB、持久化數(shù)據(jù)庫(kù)LDB、內(nèi)存數(shù)據(jù)庫(kù)MDB三級(jí)結(jié)構(gòu),在應(yīng)用系統(tǒng)發(fā)出查詢請(qǐng)求時(shí),首先在MDB中查詢,如果MDB未命中,則通過(guò)查詢LDB返回查詢到的數(shù)據(jù),并將LDB中查詢到的數(shù)據(jù)回寫到MDB ;如LDB也未命中,則通過(guò)查詢DB返回查詢到的數(shù)據(jù),并將DB中查詢到的數(shù)據(jù)回寫到LDB ;所述方法包括:
[0017]判斷DB中的數(shù)據(jù)是否發(fā)生修改;
[0018]如果是,則對(duì)LDB中對(duì)應(yīng)的數(shù)據(jù)進(jìn)行修改,并將MDB中對(duì)應(yīng)的數(shù)據(jù)進(jìn)行無(wú)效處理,以便在應(yīng)用系統(tǒng)發(fā)出對(duì)所述已修改的數(shù)據(jù)的查詢請(qǐng)求時(shí),首先在MDB中查詢,在發(fā)現(xiàn)MDB未命中后,則通過(guò)查詢LDB返回所述已修改的數(shù)據(jù)。
[0019]一種數(shù)據(jù)存儲(chǔ)輔助系統(tǒng),數(shù)據(jù)存儲(chǔ)系統(tǒng)采用數(shù)據(jù)庫(kù)DB、持久化數(shù)據(jù)庫(kù)LDB、內(nèi)存數(shù)據(jù)庫(kù)MDB三級(jí)結(jié)構(gòu),在應(yīng)用系統(tǒng)發(fā)出查詢請(qǐng)求時(shí),首先在MDB中查詢,如果MDB未命中,則通過(guò)查詢LDB返回查詢到的數(shù)據(jù),并將LDB中查詢到的數(shù)據(jù)回寫到MDB ;如LDB也未命中,則通過(guò)查詢DB返回查詢到的數(shù)據(jù),并將DB中查詢到的數(shù)據(jù)回寫到LDB ;所述輔助系統(tǒng)包括:
[0020]判斷單元,用于判斷DB中的數(shù)據(jù)是否發(fā)生修改;
[0021]修改及無(wú)效處理單元,用于如果所述判斷單元的判斷結(jié)果為是,則對(duì)LDB中對(duì)應(yīng)的數(shù)據(jù)進(jìn)行修改,并將MDB中對(duì)應(yīng)的數(shù)據(jù)進(jìn)行無(wú)效處理,以便在應(yīng)用系統(tǒng)發(fā)出對(duì)所述已修改的數(shù)據(jù)的查詢請(qǐng)求時(shí),首先在MDB中查詢,在發(fā)現(xiàn)MDB未命中后,則通過(guò)查詢LDB返回所述已修改的數(shù)據(jù)。
[0022]根據(jù)本申請(qǐng)?zhí)峁┑木唧w實(shí)施例,本申請(qǐng)公開了以下技術(shù)效果:
[0023]通過(guò)本申請(qǐng)實(shí)施例,數(shù)據(jù)存儲(chǔ)系統(tǒng)可以采用DB、LDB, MDB三級(jí)存儲(chǔ)結(jié)構(gòu),并且當(dāng)發(fā)生寫操作請(qǐng)求時(shí),可以保證LDB與DB之間的數(shù)據(jù)一致性,同時(shí)又由于LDB具有持久化的特點(diǎn),因此,在讀操作請(qǐng)求不能在MDB中命中的情況下,在LDB層一般都能命中,從而避免大量的讀操作請(qǐng)求被發(fā)送到DB,更有利于對(duì)DB的保護(hù)。同時(shí),由于MDB、DB仍然存在,因此,可以利用到MDB讀寫速率最高的優(yōu)點(diǎn),并且可以利用到DB支持事務(wù)以及復(fù)雜查詢的優(yōu)點(diǎn),總之,相當(dāng)于使得整個(gè)存儲(chǔ)系統(tǒng)在保留DB、MDB兩級(jí)存儲(chǔ)時(shí)的優(yōu)點(diǎn)的同時(shí),增強(qiáng)對(duì)DB的保護(hù)。而對(duì)于DB而言,讀操作請(qǐng)求與寫操作請(qǐng)求之間是相互影響的,在到達(dá)DB的讀操作請(qǐng)求數(shù)量減少的情況下,DB的寫操作響應(yīng)時(shí)間也會(huì)得到降低,因此有利于從整體上提高存儲(chǔ)系統(tǒng)的性能。
[0024]其中,具體在對(duì)LDB中對(duì)應(yīng)的數(shù)據(jù)進(jìn)行修改時(shí),可以采用異步修改的方式,這樣可以避免影響DB對(duì)寫操作的響應(yīng)時(shí)間,并且也有利于使得對(duì)同一數(shù)據(jù)的不同修改按照修改產(chǎn)生的先后順序進(jìn)行串行處理,在大量寫操作請(qǐng)求并發(fā)的情況下,也保證LDB與DB的數(shù)據(jù)一致性。
[0025]當(dāng)然,實(shí)施本申請(qǐng)的任一產(chǎn)品并不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
【附圖說(shuō)明】
[0026]為了更清楚地說(shuō)明本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本申請(qǐng)的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0027]圖1是現(xiàn)有技術(shù)中的存儲(chǔ)結(jié)構(gòu)示意圖;
[0028]圖2是本申請(qǐng)實(shí)施例提供的方法的流程圖;
[0029]圖3是本申請(qǐng)實(shí)施例提供的存儲(chǔ)結(jié)構(gòu)示意圖;
[0030]圖4是本申請(qǐng)實(shí)施例提供的系統(tǒng)的示意圖。
【具體實(shí)施方式】
[0031 ] 下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。
[0032]在本申請(qǐng)實(shí)施例中,為了能夠?qū)B進(jìn)行更好的保護(hù),提出了一種多級(jí)的存儲(chǔ)結(jié)構(gòu),也就是說(shuō),在現(xiàn)有技術(shù)的DB與MDB之間增加一層存儲(chǔ),這層存儲(chǔ)采用LDB來(lái)實(shí)現(xiàn)。然后通過(guò)保證LDB與DB之間數(shù)據(jù)的一致性,使得未命中MDB的查詢請(qǐng)求,大多數(shù)可以在LDB中獲得查詢結(jié)果,從而降低對(duì)DB的查詢請(qǐng)求,