具有碎片的在線添加的樸素的客戶端分片的制作方法
【專利說明】具有碎片的在線添加的樸素的客戶端分片
[0001] 版權(quán)聲明
[0002] 本專利文檔公開內(nèi)容的一部分包含受版權(quán)保護(hù)的素材。版權(quán)擁有者不反對(duì)任何人 對(duì)專利文檔或?qū)@_內(nèi)容按照在專利商標(biāo)局的專利文件或記錄中出現(xiàn)的那樣進(jìn)行傳真 復(fù)制,但是除此之外在任何情況下都保留所有版權(quán)。
[0003] 對(duì)相關(guān)申請(qǐng)的交叉引用;要求優(yōu)先權(quán)
[0004] 本申請(qǐng)依據(jù)35U.S. C.§ 119要求于2013年6月28日提交的標(biāo)題為"ΝΑ?νΕ, CLIENT-SIDE SHARDING WITH ONLINE ADDITION OF SHARDS"的美國(guó)臨時(shí)專利申請(qǐng)序列 No. 61/841,045的優(yōu)先權(quán),該申請(qǐng)的全部?jī)?nèi)容通過引用被結(jié)合于此;以及要求于2014年 3 月 26 日提交的標(biāo)題為"ΝΑ?νΕ,CLIENTSIDESHARDINGWITHONLINEADDITION0F SHARDS"的美國(guó)專利申請(qǐng)序列No. 14/226, 557的優(yōu)先權(quán),該申請(qǐng)全部?jī)?nèi)容通過引用被結(jié)合 于此。
【背景技術(shù)】
[0005] 在數(shù)據(jù)庫(kù)碎片的系統(tǒng)中,諸如文檔的記錄或行之類的數(shù)據(jù)項(xiàng)可以在多個(gè)被稱為碎 片的單獨(dú)、獨(dú)立的數(shù)據(jù)庫(kù)中分布。在這種系統(tǒng)中,數(shù)據(jù)項(xiàng)通常不是并且不被允許在碎片當(dāng)中 被復(fù)制。因此,在這種系統(tǒng)中,特定數(shù)據(jù)項(xiàng)在任何給定的時(shí)間將只位于幾個(gè)碎片當(dāng)中一個(gè) 上。為了讓客戶端確定幾個(gè)碎片當(dāng)中哪個(gè)包含特定數(shù)據(jù)項(xiàng),客戶端可以向散列函數(shù)輸入該 數(shù)據(jù)項(xiàng)的主鍵-該主鍵唯一地標(biāo)識(shí)特定數(shù)據(jù)項(xiàng)。散列函數(shù)基于主鍵計(jì)算該特定數(shù)據(jù)項(xiàng)當(dāng) 前存儲(chǔ)在其上的碎片的身份。例如,散列函數(shù)可以用數(shù)值主鍵除以系統(tǒng)中碎片的數(shù)量,然后 取余數(shù)(基本上是模運(yùn)算)作為包含特定數(shù)據(jù)項(xiàng)的碎片的標(biāo)識(shí)符。利用這種散列函數(shù)首先 確定每個(gè)數(shù)據(jù)項(xiàng)將存儲(chǔ)在其上的碎片通常使數(shù)據(jù)項(xiàng)相對(duì)均勻地在碎片當(dāng)中分布。
[0006] -旦客戶端已經(jīng)識(shí)別出特定數(shù)據(jù)項(xiàng)位于其上的碎片,客戶端就可以相對(duì)于該數(shù)據(jù) 項(xiàng)執(zhí)行操作,諸如讀取、刪除或更新操作。通常,碎片系統(tǒng)將同時(shí)服務(wù)于眾多的客戶端,并且 這些客戶端每個(gè)都可以相對(duì)于單獨(dú)的數(shù)據(jù)項(xiàng)彼此異步地執(zhí)行操作。有可能多個(gè)客戶端無意 中嘗試同時(shí)相對(duì)于相同的數(shù)據(jù)項(xiàng)執(zhí)行操作。如果這種場(chǎng)景被允許不受阻礙地發(fā)生,則數(shù)據(jù) 項(xiàng)會(huì)變得被破壞,從而使碎片系統(tǒng)的狀態(tài)不一致。根據(jù)一種方法,為了保證多個(gè)客戶端將不 同時(shí)相對(duì)于相同的數(shù)據(jù)項(xiàng)執(zhí)行操作,設(shè)法相對(duì)于特定數(shù)據(jù)項(xiàng)執(zhí)行操作的客戶端可以首先被 要求獲得關(guān)于該特定數(shù)據(jù)項(xiàng)的專用鎖。每個(gè)數(shù)據(jù)項(xiàng)可以與單獨(dú)的鎖關(guān)聯(lián)。如果另一個(gè)客戶 端已經(jīng)持有關(guān)于特定數(shù)據(jù)項(xiàng)的專用鎖,則阻止客戶端獲取該專用鎖;在這種情形之下,設(shè)法 獲得該專用鎖的客戶端必須等待持有鎖的客戶端釋放該專用鎖。在客戶端持有關(guān)于特定數(shù) 據(jù)項(xiàng)的專用鎖時(shí),那個(gè)客戶端可以相對(duì)于該特定數(shù)據(jù)項(xiàng)執(zhí)行操作。當(dāng)客戶端相對(duì)于特定數(shù) 據(jù)項(xiàng)完成執(zhí)行操作時(shí),該客戶端釋放關(guān)于該特定數(shù)據(jù)項(xiàng)的專用鎖,由此使該特定數(shù)據(jù)項(xiàng)可 以讓其它客戶端訪問。
[0007] 隨著存儲(chǔ)在碎片系統(tǒng)內(nèi)的數(shù)據(jù)的數(shù)量增長(zhǎng),系統(tǒng)中現(xiàn)有碎片的容量可能變得不足 以包含要在系統(tǒng)中存儲(chǔ)的所有數(shù)據(jù)。在那些情形之下,會(huì)期望向系統(tǒng)添加一個(gè)或多個(gè)新碎 片。新碎片的添加可以涉及新硬件計(jì)算和存儲(chǔ)設(shè)備的添加,以包含和管理新數(shù)據(jù)庫(kù)。為了 嘗試在碎片當(dāng)中平衡客戶端訪問負(fù)載,以使得沒有一個(gè)碎片子集由于客戶端請(qǐng)求而變得不 成比例地過重負(fù)擔(dān),新碎片向系統(tǒng)的添加可以促成系統(tǒng)所存儲(chǔ)的數(shù)據(jù)項(xiàng)在擴(kuò)充的碎片組當(dāng) 中的重新分布。重新分布事件或者重新平衡事件可以使之前存儲(chǔ)在一個(gè)碎片上的數(shù)據(jù)項(xiàng)重 新定位到另一個(gè)碎片,有可能但不一定定位到新添加的碎片。根據(jù)一種方法,重新平衡過程 可以獲得關(guān)于要被移動(dòng)的數(shù)據(jù)項(xiàng)的專用鎖。在獲得關(guān)于數(shù)據(jù)項(xiàng)的專用鎖之后,重新平衡過 程可以將那些數(shù)據(jù)項(xiàng)從舊的碎片移動(dòng)到已經(jīng)被修訂的散列函數(shù)確定為用作那些數(shù)據(jù)項(xiàng)的 目的地的新碎片。在移動(dòng)數(shù)據(jù)項(xiàng)之后,重新平衡過程可以釋放關(guān)于那些數(shù)據(jù)項(xiàng)的專用鎖。
[0008] 只要專用鎖還存在,伴隨著它們的使用就有一些缺陷。一個(gè)缺陷是,當(dāng)數(shù)據(jù)項(xiàng)的專 用鎖被過程持有時(shí),沒有其它過程能夠訪問該數(shù)據(jù)項(xiàng)。因此,根據(jù)以上討論的利用鎖的重新 平衡方法,在重新平衡事件進(jìn)行時(shí),客戶端可能很大程度上不能相對(duì)于碎片系統(tǒng)執(zhí)行操作; 在重新平衡過程持有關(guān)于數(shù)據(jù)項(xiàng)的專用鎖時(shí),沒有客戶端能夠獲得該專用鎖。甚至當(dāng)重新 平衡事件不進(jìn)行時(shí),為了防止并發(fā)的多個(gè)客戶端訪問的客戶端獲取、維護(hù)和鎖的釋放所涉 及的開銷也會(huì)顯著而且繁重。即使忽略重新平衡事件的影響,碎片系統(tǒng)中鎖的使用也會(huì)不 利地影響系統(tǒng)效率和性能。還有可能更糟的是,碎片系統(tǒng)中非預(yù)期的故障會(huì)使持有鎖的過 程(這可以是,例如,客戶端或重新平衡過程)凍結(jié)或以別的方式退出正常運(yùn)行。在這種情 形之下,不工作的過程會(huì)保留關(guān)于特定數(shù)據(jù)項(xiàng)的專用鎖直到某個(gè)定時(shí)器到期,在那個(gè)時(shí)候 不工作的過程可以被終止,并且它所持有的鎖被強(qiáng)制釋放。包括客戶端或重新平衡過程的 其它過程,因此在相對(duì)于那個(gè)特定數(shù)據(jù)項(xiàng)繼續(xù)它們的預(yù)期任務(wù)之前被迫等待定時(shí)器到期。 尤其是如果要相對(duì)于特定數(shù)據(jù)項(xiàng)執(zhí)行的操作僅僅是要相對(duì)于多個(gè)單獨(dú)數(shù)據(jù)項(xiàng)執(zhí)行的嚴(yán)格 有序的操作序列當(dāng)中的一步時(shí),這種強(qiáng)制等待會(huì)使整個(gè)碎片系統(tǒng)的性能顯著降級(jí)。由常常 需要被執(zhí)行的操作的次序所強(qiáng)加的依賴性會(huì)引起這些類型復(fù)雜因素的級(jí)聯(lián)。
【附圖說明】
[0009] 圖1是示出根據(jù)本發(fā)明的實(shí)施例的可擴(kuò)展碎片系統(tǒng)的例子的框圖,其中多個(gè)客戶 端可以訪問已經(jīng)在多個(gè)數(shù)據(jù)庫(kù)碎片當(dāng)中分布的數(shù)據(jù)項(xiàng);
[0010] 圖2是示出根據(jù)本發(fā)明的實(shí)施例的其中系統(tǒng)可以在各個(gè)時(shí)刻存在的各種狀態(tài)以 及那些狀態(tài)之間的可能轉(zhuǎn)變的狀態(tài)圖;
[0011] 圖3是示出根據(jù)本發(fā)明的實(shí)施例的、用于在處于重新平衡狀態(tài)時(shí)執(zhí)行添加操作的 技術(shù)的例子的流程圖;
[0012] 圖4是示出根據(jù)本發(fā)明的實(shí)施例的、用于在處于重新平衡狀態(tài)時(shí)執(zhí)行更新操作的 技術(shù)的例子的流程圖;
[0013] 圖5是示出根據(jù)本發(fā)明的實(shí)施例的、用于在處于重新平衡狀態(tài)時(shí)執(zhí)行刪除操作的 技術(shù)的例子的流程圖;
[0014] 圖6A-6B是示出根據(jù)本發(fā)明的實(shí)施例的、用于在處于重新平衡狀態(tài)時(shí)執(zhí)行獲得操 作的技術(shù)的例子的流程圖;
[0015] 圖7是示出根據(jù)本發(fā)明的實(shí)施例的、用于在(最初)處于重新平衡狀態(tài)時(shí)執(zhí)行重 新平衡操作的技術(shù)的例子的流程圖;
[0016] 圖8是示出根據(jù)本發(fā)明的實(shí)施例的、用于在處于重新平衡狀態(tài)時(shí)執(zhí)行查詢操作的 技術(shù)的例子的流程圖;
[0017]圖9繪出了用于實(shí)現(xiàn)其中一種實(shí)施例的分布式系統(tǒng)的簡(jiǎn)化圖。
[0018] 圖10是根據(jù)本公開內(nèi)容的實(shí)施例的系統(tǒng)環(huán)境的部件的簡(jiǎn)化框圖,通過該環(huán)境,由 實(shí)施例系統(tǒng)的部件提供的服務(wù)可以作為云服務(wù)提供。圖11示出了本發(fā)明的各種實(shí)施例可 以在其中實(shí)現(xiàn)的計(jì)算機(jī)系統(tǒng)的例子。
【具體實(shí)施方式】
[0019] 在以下描述中,為了解釋,闡述了具體的細(xì)節(jié)以便提供對(duì)本發(fā)明的實(shí)施例的透徹 理解。但是,很顯然,沒有這些具體細(xì)節(jié)本發(fā)明也可以實(shí)踐。
[0020] 根據(jù)本發(fā)明的實(shí)施例,可以使多個(gè)客戶端能夠相對(duì)于碎片系統(tǒng)中的數(shù)據(jù)項(xiàng)彼此異 步地執(zhí)行操作,而無需那些客戶端使用專用鎖。此外,根據(jù)本發(fā)明的實(shí)施例,可以在客戶端 不使用專用鎖的情況下執(zhí)行重新平衡事件,其中由于系統(tǒng)中碎片的數(shù)量的修改(添加或者 即將到來的去除),數(shù)據(jù)項(xiàng)在一組碎片當(dāng)中自動(dòng)重新分布。此外,在本發(fā)明的實(shí)施例中,即使 當(dāng)重新平衡過程在系統(tǒng)范圍的重新平衡事件期間異步地重新分布至少一些數(shù)據(jù)項(xiàng)時(shí),客戶 端也可以繼續(xù)相對(duì)于碎片系統(tǒng)中的至少一些數(shù)據(jù)項(xiàng)執(zhí)行操作。提供這些特征的編程代碼可 以專門位于客戶端而不是碎片服務(wù)器上??梢栽诓粻奚槠到y(tǒng)內(nèi)的數(shù)據(jù)一致性的情況下 獲得所有這些好處。
[0021] 示例可擴(kuò)展碎片系統(tǒng)
[0022] 圖1是示出根據(jù)本發(fā)明的實(shí)施例的可擴(kuò)展碎片系統(tǒng)100的例子的框圖,其中多 個(gè)客戶端可以訪問已經(jīng)在多個(gè)數(shù)據(jù)庫(kù)碎片當(dāng)中分布的數(shù)據(jù)項(xiàng)。碎片系統(tǒng)1〇〇包括客戶端 102A-N和碎片104A-N。系統(tǒng)100中客戶端和碎片的數(shù)量可以變化。碎片104A-N中的每個(gè)碎 片可以是不需要知道系統(tǒng)100內(nèi)任何其它碎片的單獨(dú)且獨(dú)立的數(shù)據(jù)庫(kù)。例如,碎片104A-N 中的每個(gè)碎片可以包括單獨(dú)的數(shù)據(jù)庫(kù)服務(wù)器和關(guān)系數(shù)據(jù)庫(kù)。雖然數(shù)據(jù)庫(kù)在本文作為具體的 例子被討論,但是本發(fā)明的實(shí)施例可以應(yīng)用到除數(shù)據(jù)庫(kù)之外的各種類型的數(shù)據(jù)儲(chǔ)存庫(kù)(例 如,輕量級(jí)目錄訪問協(xié)議(LDAP)目錄、平面文件、關(guān)聯(lián)存儲(chǔ)器,等等)。客戶端102A-N中的 每個(gè)客戶端可以是能夠獨(dú)立于客戶端102A-N中的彼此操作的單獨(dú)的計(jì)算系統(tǒng)。例如,客戶 端102A-N可以是臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、移動(dòng)設(shè)備等等。
[0023] 客戶端102A-N可以通過網(wǎng)絡(luò)106與碎片104A-N交互。網(wǎng)絡(luò)106可以是或者可以 包括,局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)和/或互聯(lián)網(wǎng)。經(jīng)網(wǎng)絡(luò)106的通信可以通過一套網(wǎng)絡(luò)通 信協(xié)議(諸如以太網(wǎng)、傳輸控制協(xié)議/網(wǎng)際協(xié)議(TCP/IP)、超文本傳輸協(xié)議(HTTP)、簡(jiǎn)單 對(duì)象訪問協(xié)議(SOAP)、開放式數(shù)據(jù)庫(kù)連接(ODBC)等)來實(shí)現(xiàn)??蛻舳?02A-N中的每個(gè)客 戶端可以執(zhí)行利用散列函數(shù)的軟件程序的單獨(dú)實(shí)例,以便基于特定數(shù)據(jù)項(xiàng)的主鍵計(jì)算碎片 104A-N當(dāng)中該特定數(shù)據(jù)項(xiàng)已經(jīng)在其上存儲(chǔ)或者要存儲(chǔ)到其上的特定碎片的身份。這種數(shù)據(jù) 項(xiàng)可以是對(duì)相似屬性集擁有不同值的單獨(dú)記錄。至少在一種實(shí)施例中,這種數(shù)據(jù)項(xiàng)可以作 為一個(gè)或多個(gè)關(guān)系數(shù)據(jù)庫(kù)表中的單獨(dú)行被存儲(chǔ)在碎片104A-N內(nèi)。利用以下討論的在重新 平衡事件期間適用于系統(tǒng)100的非常具體的例外,每個(gè)數(shù)據(jù)項(xiàng)在任何特定的時(shí)刻僅位于碎 片104A-N當(dāng)中的一個(gè)上。重新平衡事件潛在地會(huì)引起各個(gè)數(shù)據(jù)項(xiàng)從一個(gè)碎片重新定位到 另一個(gè)碎片。在本發(fā)明的實(shí)施例中,在重新平衡事件期間客戶端的操作執(zhí)行中所涉及的活 動(dòng)順序可以與在重新平衡事件之外發(fā)生的"正常"系統(tǒng)狀態(tài)期間客戶端的相同類型操作執(zhí) 行中所涉及的活動(dòng)順序不同。
[0024] -般而言,為了相對(duì)于已經(jīng)存儲(chǔ)在碎片104A-N中的特定的一個(gè)碎片上的數(shù)據(jù)項(xiàng) 執(zhí)行操作,客戶端102A-N中的特定客戶端可以首先(例如,基于散列函數(shù))確定數(shù)據(jù)項(xiàng)當(dāng) 前存儲(chǔ)在其上的碎片。在重新平衡事件期間,特定客戶端可以執(zhí)行檢查以確保該特定客戶 端將對(duì)數(shù)據(jù)項(xiàng)的正確拷貝操作,以便對(duì)特定客戶端的活動(dòng)補(bǔ)償數(shù)據(jù)項(xiàng)可能被異步重新定位 或者刪除的可能性。雖然在正常系統(tǒng)狀態(tài)期間,數(shù)據(jù)項(xiàng)只有一個(gè)拷貝可以存在于系統(tǒng)1〇〇 中任何地方,但是在重新平衡事件期間,可能有數(shù)據(jù)項(xiàng)的多個(gè)拷貝(不同版本)臨時(shí)存在于 系統(tǒng)100內(nèi)。在執(zhí)行這些檢查時(shí),特定客戶端可以使用與每個(gè)數(shù)據(jù)項(xiàng)的每個(gè)拷貝一起存儲(chǔ) 的版本信息(以下更詳細(xì)地討論)。至少部分地基于這種版本信息,特定客戶端可以確保如 果操作被執(zhí)行的話,操作將相對(duì)于存儲(chǔ)在數(shù)據(jù)項(xiàng)最近被置于其上的碎片上的數(shù)據(jù)項(xiàng)的拷貝 來執(zhí)行。在重新平衡事件期間特定客戶端的操作執(zhí)行可以涉及數(shù)據(jù)項(xiàng)的新拷貝在與數(shù)據(jù)項(xiàng) 的另一拷貝之前存在于其上的碎片分開的碎片上的創(chuàng)建。在實(shí)施例中,該操作可以涉及相 對(duì)于數(shù)據(jù)項(xiàng)執(zhí)行一個(gè)或多個(gè)指令。例如,這種指令可以采取查詢語言指令(結(jié)構(gòu)化查詢語 言(SQL)指令僅僅是一種具體的可能性)的形式。在特定客戶端相對(duì)于數(shù)據(jù)項(xiàng)的最新拷貝 執(zhí)行操作之后,可以執(zhí)行清除操作以便從數(shù)據(jù)項(xiàng)不應(yīng)當(dāng)在其上存在的碎片中去除數(shù)據(jù)項(xiàng)的 舊的和過時(shí)的版本。一般而言,系統(tǒng)100內(nèi)的數(shù)據(jù)一致性可以以這種方式來維持,而無需客 戶端102A-N使用鎖。
[0025]根據(jù)本發(fā)明的實(shí)施例,因?yàn)榭梢詫⑺槠砑拥较到y(tǒng)100(或從其去除),所以系統(tǒng) 100是可擴(kuò)展的。碎片104A-N的數(shù)量的修改會(huì)引起在系統(tǒng)100內(nèi)發(fā)生重新平衡事件。在重 新平衡事件期間,重新平衡過程可以基于碎片的新數(shù)量而不是舊數(shù)量來重新散列每個(gè)數(shù)據(jù) 項(xiàng)的主鍵,由此確定在重新平衡事件結(jié)束時(shí)那個(gè)數(shù)據(jù)項(xiàng)應(yīng)當(dāng)位于其上的碎片(不同的或相 同的)的身份。然后,重新平衡過程可以利用以下更詳細(xì)討論的技術(shù)從碎片到碎片重新定 位數(shù)據(jù)項(xiàng)。重新定位可以涉及在重新平衡事件之外將不在系統(tǒng)100內(nèi)存在的數(shù)據(jù)項(xiàng)的拷貝 的創(chuàng)建和刪除。重新平衡過程可以與在客戶端102A-N上執(zhí)行的軟件異步地執(zhí)行。有利地, 至少部分地通過調(diào)整重新平衡操作期間客戶端102A-N執(zhí)行的活動(dòng)的序列,客戶端102A-N 可以在重新平衡操作期間繼續(xù)相對(duì)于數(shù)據(jù)項(xiàng)執(zhí)行操作。
[0026]版本和里程碑屬性
[0027] 如以上所提到的,在本發(fā)明的實(shí)施例中,特定數(shù)據(jù)項(xiàng)的每個(gè)拷貝可以與版本信息 相關(guān)聯(lián)地存儲(chǔ)。在實(shí)施例中,這種版本信息可以采取系統(tǒng)范圍的版本號(hào)的形式,該版本號(hào)在 每次重新平衡事件在系統(tǒng)100中發(fā)生時(shí)遞增。因此,例如,如果現(xiàn)有的數(shù)據(jù)項(xiàng)的版本號(hào)是3, 并且如果在數(shù)據(jù)項(xiàng)的新拷貝在重新平衡事件期間在不同的碎片上創(chuàng)建時(shí)系統(tǒng)的當(dāng)前版本 號(hào)是4,則那個(gè)數(shù)據(jù)項(xiàng)的新拷貝將具有版本號(hào)4。通過檢查數(shù)據(jù)項(xiàng)的兩個(gè)單獨(dú)拷貝的版本信 息,客戶端可以確定哪個(gè)拷貝是更新的版本,并且可以相對(duì)于那個(gè)拷貝執(zhí)行操作,其中所述 兩個(gè)單獨(dú)拷貝可能在重新平衡事件期間存在。此外,通過檢查數(shù)據(jù)項(xiàng)的兩個(gè)單獨(dú)拷貝的版 本信息,重新平衡過程可以確定哪個(gè)拷貝是較舊的版本,并且因此應(yīng)當(dāng)從那個(gè)拷貝位于其 上的碎片被去除,其中所述兩個(gè)單獨(dú)拷貝可能在重新平衡事件期間存在。
[0028]客戶端執(zhí)行的操作可以涉及從碎片刪除數(shù)據(jù)項(xiàng)。在實(shí)施例中,客戶端相對(duì)于數(shù)據(jù) 項(xiàng)的刪除操作的執(zhí)行不立即從數(shù)據(jù)項(xiàng)位于其上的碎片去除該數(shù)據(jù)項(xiàng)的所有痕跡。相反,在 實(shí)施例中,每個(gè)數(shù)據(jù)項(xiàng)都具有被稱為"里程碑"的屬性,其值可以被設(shè)定為真(如果在那個(gè) 碎片上的數(shù)據(jù)項(xiàng)的拷貝已經(jīng)被刪除)或假(如果在那個(gè)碎片上的數(shù)據(jù)項(xiàng)的拷貝還沒有被刪 除)。數(shù)據(jù)項(xiàng)的里程碑屬性設(shè)定為"真"避免否則的話在數(shù)據(jù)項(xiàng)在碎片上不存在時(shí)可能發(fā)生 的歧義情況,其中數(shù)據(jù)項(xiàng)在碎片上不存在或者是由于刪除或者是由于作為重新平衡事件的 一部分被移動(dòng)到另一碎片。在實(shí)施例中,只有重新平衡過程(而