一種元數(shù)據(jù)讀寫方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及計(jì)算機(jī)存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種元數(shù)據(jù)讀寫方法及裝置。
【背景技術(shù)】
[0002]在大型分布式存儲(chǔ)系統(tǒng)中,元數(shù)據(jù)信息是整個(gè)存儲(chǔ)系統(tǒng)的核心,為了保證系統(tǒng)的可用性,元數(shù)據(jù)通常需要做雙備、甚至多備。另外,元數(shù)據(jù)多備份之間必須保持強(qiáng)一致性,避免系統(tǒng)在多備份間切換時(shí),造成數(shù)據(jù)對(duì)象的狀態(tài)不一致的情況。同時(shí),由于大型分布式存儲(chǔ)系統(tǒng)輸入輸出(10,Input Output)數(shù)據(jù)量較大且讀寫操作頻繁,對(duì)元數(shù)據(jù)信息的讀寫速率要求也較高。
[0003]目前,現(xiàn)有的大型分布式存儲(chǔ)系統(tǒng)中,可以借助HeartBeat等技術(shù)實(shí)現(xiàn)元數(shù)據(jù)服務(wù)的雙備、或者多備,可以通過Double-Write技術(shù)達(dá)到多備份之間數(shù)據(jù)一致性。
[0004]但是,為了保持元數(shù)據(jù)的強(qiáng)一致性,當(dāng)對(duì)數(shù)據(jù)對(duì)象的讀操作頻繁、尤其是讀寫操作并發(fā)量較大時(shí),通常會(huì)同時(shí)引發(fā)日志的同步和歸檔操作,瞬時(shí)增加了服務(wù)負(fù)載,這種情況下,元數(shù)據(jù)服務(wù)性能存在明顯的瓶頸。
[0005]現(xiàn)有技術(shù)不足在于:
[0006]當(dāng)數(shù)據(jù)讀寫操作并發(fā)量較大時(shí)會(huì)同時(shí)引發(fā)日志的同步和歸檔操作,導(dǎo)致元數(shù)據(jù)服務(wù)性能下降。
【發(fā)明內(nèi)容】
[0007]本申請(qǐng)實(shí)施例提出了一種元數(shù)據(jù)讀寫方法及裝置,以解決現(xiàn)有技術(shù)中當(dāng)數(shù)據(jù)讀寫操作并發(fā)量較大時(shí)會(huì)同時(shí)引發(fā)日志的同步和歸檔操作,導(dǎo)致元數(shù)據(jù)服務(wù)性能下降的技術(shù)問題。
[0008]本申請(qǐng)實(shí)施例提供了一種元數(shù)據(jù)讀寫方法,包括如下步驟:
[0009]將元數(shù)據(jù)分成多個(gè)元數(shù)據(jù)塊,所述元數(shù)據(jù)塊攜帶有最近更新的時(shí)間戳;
[0010]元數(shù)據(jù)服務(wù)在讀取預(yù)先存儲(chǔ)在內(nèi)存中的元數(shù)據(jù)副本時(shí),根據(jù)緩沖區(qū)中元數(shù)據(jù)塊的時(shí)間戳與消息隊(duì)列中的時(shí)間戳,確定元數(shù)據(jù)塊的讀取方式。
[0011]本申請(qǐng)實(shí)施例提供了一種元數(shù)據(jù)讀寫裝置,包括:
[0012]分塊模塊,用于將元數(shù)據(jù)分成多個(gè)元數(shù)據(jù)塊,所述元數(shù)據(jù)塊攜帶有最近更新的時(shí)間戳;
[0013]讀操作模塊,用于元數(shù)據(jù)服務(wù)在讀取預(yù)先存儲(chǔ)在內(nèi)存中的元數(shù)據(jù)副本時(shí),根據(jù)緩沖區(qū)中元數(shù)據(jù)塊的時(shí)間戳與消息隊(duì)列中的時(shí)間戳,確定元數(shù)據(jù)塊的讀取方式。
[0014]有益效果如下:
[0015]本申請(qǐng)實(shí)施例所提供的元數(shù)據(jù)讀寫方法及裝置,將元數(shù)據(jù)分成多個(gè)元數(shù)據(jù)塊,所述元數(shù)據(jù)塊攜帶有最近更新的時(shí)間戳;元數(shù)據(jù)服務(wù)在讀取預(yù)先存儲(chǔ)在內(nèi)存中的元數(shù)據(jù)副本時(shí),根據(jù)緩沖區(qū)中元數(shù)據(jù)塊的時(shí)間戳與消息隊(duì)列中的時(shí)間戳,確定元數(shù)據(jù)塊的讀取方式。由于本申請(qǐng)實(shí)施例中將元數(shù)據(jù)按邏輯分塊,并且對(duì)于元數(shù)據(jù)服務(wù),均在其內(nèi)存中預(yù)先存儲(chǔ)了元數(shù)據(jù)副本,所述元數(shù)據(jù)塊攜帶有最近更新的時(shí)間戳,根據(jù)緩沖區(qū)中時(shí)間戳與消息隊(duì)列中時(shí)間戳對(duì)比來確定元數(shù)據(jù)塊的讀取方式,從而在一定程度上提高了元數(shù)據(jù)的讀寫效率,當(dāng)數(shù)據(jù)讀寫操作并發(fā)量較大時(shí),也能確保元數(shù)據(jù)服務(wù)的性能。
【附圖說明】
[0016]下面將參照附圖描述本申請(qǐng)的具體實(shí)施例,其中:
[0017]圖1示出了本申請(qǐng)實(shí)施例中元數(shù)據(jù)讀寫方法實(shí)施的流程示意圖;
[0018]圖2示出了本申請(qǐng)實(shí)施例中元數(shù)據(jù)服務(wù)及其元數(shù)據(jù)副本的數(shù)據(jù)流向示意圖;
[0019]圖3示出了本申請(qǐng)實(shí)施例中元數(shù)據(jù)刷新流程示意圖;
[0020]圖4示出了本申請(qǐng)實(shí)施例中元數(shù)據(jù)讀寫裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0021]為了使本申請(qǐng)的技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖對(duì)本申請(qǐng)的示例性實(shí)施例進(jìn)行進(jìn)一步詳細(xì)的說明,顯然,所描述的實(shí)施例僅是本申請(qǐng)的一部分實(shí)施例,而不是所有實(shí)施例的窮舉。并且在不沖突的情況下,本說明中的實(shí)施例及實(shí)施例中的特征可以互相結(jié)合。
[0022]針對(duì)現(xiàn)有技術(shù)的不足,本申請(qǐng)實(shí)施例提出了一種元數(shù)據(jù)讀寫方法及裝置,下面進(jìn)行說明。
[0023]圖1示出了本申請(qǐng)實(shí)施例中元數(shù)據(jù)讀寫方法實(shí)施的流程示意圖,如圖所示,所述元數(shù)據(jù)讀寫方法可以包括如下步驟:
[0024]步驟101、將元數(shù)據(jù)分成多個(gè)元數(shù)據(jù)塊,所述元數(shù)據(jù)塊攜帶有最近更新的時(shí)間戳;
[0025]步驟102、元數(shù)據(jù)服務(wù)在讀取預(yù)先存儲(chǔ)在內(nèi)存中的元數(shù)據(jù)副本時(shí),根據(jù)緩沖區(qū)中元數(shù)據(jù)塊的時(shí)間戳與消息隊(duì)列中的時(shí)間戳,確定元數(shù)據(jù)塊的讀取方式。
[0026]發(fā)明人在發(fā)明過程中注意到:
[0027]當(dāng)前,關(guān)系型數(shù)據(jù)庫技術(shù)已然成熟,且數(shù)據(jù)庫服務(wù)穩(wěn)定,redo, undo等數(shù)據(jù)庫內(nèi)技術(shù)保證了數(shù)據(jù)完整。通過標(biāo)準(zhǔn)的SQL語句進(jìn)行數(shù)據(jù)的讀寫,免去了開發(fā)存儲(chǔ)引擎的工作。
[0028]因此,本申請(qǐng)實(shí)施例中的元數(shù)據(jù)服務(wù)可以建立在關(guān)系型數(shù)據(jù)庫的基礎(chǔ)上。
[0029]其次,在分布式存儲(chǔ)系統(tǒng)中,為了提高元數(shù)據(jù)讀寫效率,本申請(qǐng)實(shí)施例可以將元數(shù)據(jù)按邏輯分塊,元數(shù)據(jù)塊均可以帶有最近更新的時(shí)間戳信息;而對(duì)于多個(gè)元數(shù)據(jù)服務(wù),例如查詢(query)服務(wù)、更新(update)服務(wù)、塊(chunk)服務(wù),則可以均設(shè)置自己的內(nèi)存元數(shù)據(jù)副本。
[0030]各服務(wù)在讀取各自內(nèi)存元數(shù)據(jù)副本時(shí),對(duì)比緩沖區(qū)中數(shù)據(jù)塊的時(shí)間戳與消息隊(duì)列中的時(shí)間戳,判定是否為最新(對(duì)比時(shí)間戳),進(jìn)而確定元數(shù)據(jù)塊的讀取方式。
[0031]圖2示出了本申請(qǐng)實(shí)施例中元數(shù)據(jù)服務(wù)及其元數(shù)據(jù)副本的數(shù)據(jù)流向示意圖,如圖所示,
[0032]查詢服務(wù)為查詢服務(wù)器Query Server向元數(shù)據(jù)服務(wù)器Meta Server獲取元數(shù)據(jù)Meta Data并存至查詢服務(wù)器Query Server的元數(shù)據(jù)緩沖區(qū)Meta Data Cache ;
[0033]更新服務(wù)為更新服務(wù)器Update Server將所述更新服務(wù)器Update Server的元數(shù)據(jù)緩沖區(qū)Meta Data Cache中的元數(shù)據(jù)Meta Data寫入所述元數(shù)據(jù)服務(wù)器Meta Server ;
[0034]塊服務(wù)為塊服務(wù)器Chunk Server向元數(shù)據(jù)服務(wù)器Meta Server獲取元數(shù)據(jù)MetaData并存至塊服務(wù)器Chunk Server的元數(shù)據(jù)緩沖區(qū)Meta Data Cache。
[0035]還可以有其他元數(shù)據(jù)服務(wù),在此不再一一舉例。
[0036]其中,消息隊(duì)列Message中可以包括編碼Code以及時(shí)間戳Timstamp。
[0037]由于本申請(qǐng)實(shí)施例中將元數(shù)據(jù)按邏輯分塊,并且對(duì)于元數(shù)據(jù)服務(wù),均在其內(nèi)存中預(yù)先存儲(chǔ)了元數(shù)據(jù)副本,所述元數(shù)據(jù)塊攜帶有最近更新的時(shí)間戳,根據(jù)緩沖區(qū)中時(shí)間戳與消息隊(duì)列中時(shí)間戳對(duì)比來確定元數(shù)據(jù)塊的讀取方式,從而在一定程度上提高了元數(shù)據(jù)的讀寫效率,當(dāng)數(shù)據(jù)讀寫操作并發(fā)量較大時(shí),也能確保元數(shù)據(jù)服務(wù)的性能。
[0038]實(shí)施中,在所述將元數(shù)據(jù)分成多個(gè)元數(shù)據(jù)塊之后,所述方法可以進(jìn)一步包括:
[0039]對(duì)所述元數(shù)據(jù)塊進(jìn)行編碼,所述元數(shù)據(jù)塊的編碼為與所述元數(shù)據(jù)塊相關(guān)的數(shù)據(jù)表編碼的“或”操作結(jié)果。
[0040]本申請(qǐng)實(shí)施例中,可以將元數(shù)據(jù)按邏輯分塊后進(jìn)行編碼(BitSet),具體實(shí)施中,元數(shù)據(jù)分塊編碼策略可以如下:
[0041]元數(shù)據(jù)服務(wù)中,數(shù)據(jù)對(duì)象信息可以存儲(chǔ)于表結(jié)構(gòu)中,本申請(qǐng)實(shí)施例可以將所有元數(shù)據(jù)庫表進(jìn)行128bit 二進(jìn)制編碼,規(guī)則可以為:從低位到高位,一張表占用一個(gè)bit。例如:0X00000001,0X00000002,...0X0000F000,...0
[0042]元數(shù)據(jù)邏輯分塊可以為單表或者多表聯(lián)合查詢所得結(jié)果,因此,邏輯塊編碼規(guī)則可以為:所涉及表編碼的“或”操作結(jié)果。例如:元數(shù)據(jù)塊A是由0X00000002和0X000(F000連接(join)操作所得,于是,元數(shù)據(jù)塊A的編碼可以為0X0000F002。
[0043]實(shí)施中,在所述對(duì)所述元數(shù)據(jù)塊進(jìn)行編碼之后,所述方法可以進(jìn)一步包括:
[0044]將所述元數(shù)據(jù)塊的編碼與消息編碼進(jìn)行“與”操作,當(dāng)所述“與”操作結(jié)果不為零時(shí),更新所述元數(shù)據(jù)塊并記錄時(shí)間戳。
[0045]繼續(xù)以上述舉例為例進(jìn)行說明如下:
[0046]當(dāng)某服務(wù)寫操作元數(shù)據(jù)塊A相關(guān)表0X0000F000時(shí),消息隊(duì)列中會(huì)存在形如:0X0000F000-201509264516消息,get操作時(shí),邏輯塊(元數(shù)據(jù)塊)編碼和消息編碼進(jìn)行“與”操作,0X0000F002&0X0000F000 = 0X0000F000,結(jié)果不為零,于是可以判定該邏輯分塊A需要刷新,從而更新所述元數(shù)據(jù)塊A。
[0047]進(jìn)一步地,為了保證元數(shù)據(jù)的強(qiáng)一致性,本申請(qǐng)實(shí)施例還可以按以下方式實(shí)施。
[0048]實(shí)施中,所述方法可以進(jìn)一步包括:
[0049]當(dāng)元數(shù)據(jù)服務(wù)發(fā)生寫操作時(shí),通過遠(yuǎn)程過程調(diào)用(RPC,Remote Procedure CallProtocol)修改所述元數(shù)據(jù)服務(wù)中所述元數(shù)據(jù)塊及其時(shí)間戳,通過消息系統(tǒng)將所述元數(shù)據(jù)塊的編碼及其時(shí)間戳推送到元數(shù)據(jù)服務(wù)的緩沖區(qū)。
[0050]本申請(qǐng)實(shí)施例中,為了保證元數(shù)據(jù)的強(qiáng)一致性,當(dāng)某服務(wù)發(fā)生寫操作時(shí),首先,可以通過一個(gè)遠(yuǎn)程過程調(diào)用RPC修改元數(shù)據(jù)服務(wù)中相應(yīng)元數(shù)據(jù)塊信息及時(shí)間戳,然后,元數(shù)據(jù)服務(wù)系統(tǒng)通過