數(shù)據(jù)庫系統(tǒng)、程序以及數(shù)據(jù)處理方法
【專利摘要】本發(fā)明提供數(shù)據(jù)庫系統(tǒng)、程序以及數(shù)據(jù)處理方法。實施方式的數(shù)據(jù)庫系統(tǒng)具備存儲數(shù)據(jù)庫的多個節(jié)點、和管理多個節(jié)點的管理裝置。管理裝置具有第一分配部和第二分配部。第一分配部根據(jù)多個節(jié)點各自的狀況的變更,來分配存儲數(shù)據(jù)集合并接收對數(shù)據(jù)集合的訪問請求的第一節(jié)點以及存儲數(shù)據(jù)集合并作為第一節(jié)點的備份的第二節(jié)點,對多個節(jié)點的每一個指示與分配對應(yīng)的動作。第二分配部根據(jù)多個節(jié)點的狀況、第一節(jié)點以及第二節(jié)點的分配狀況的變更,來分配作為第一節(jié)點或者第二節(jié)點的候補的第三節(jié)點,針對多個節(jié)點的每一個指示用于使第三節(jié)點作為第一節(jié)點或者第二節(jié)點進行動作的準備。
【專利說明】數(shù)據(jù)庫系統(tǒng)、程序以及數(shù)據(jù)處理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明的實施方式涉及數(shù)據(jù)庫系統(tǒng)、程序以及數(shù)據(jù)處理方法。
【背景技術(shù)】
[0002](無分享型數(shù)據(jù)庫)
[0003]以往,公知有一種無分享型數(shù)據(jù)庫系統(tǒng)。無分享型數(shù)據(jù)庫系統(tǒng)具備相互通過網(wǎng)絡(luò)連接的多個數(shù)據(jù)庫節(jié)點。
[0004]多個數(shù)據(jù)庫節(jié)點分別是獨立地具有處理器、存儲器(memory)以及貯存器(storage)等資源的計算機。對無分享型數(shù)據(jù)庫系統(tǒng)而言,由于資源按每個數(shù)據(jù)庫節(jié)點被完全分離,所以在數(shù)據(jù)庫節(jié)點間不會產(chǎn)生訪問沖突。因此,無分享型數(shù)據(jù)庫系統(tǒng)能夠通過增加數(shù)據(jù)庫節(jié)點來使性能線形提高。即,無分享型數(shù)據(jù)庫系統(tǒng)是能夠高效地實現(xiàn)追加數(shù)據(jù)庫節(jié)點的橫向擴展(scale out)的系統(tǒng)。
[0005](分割法(Partit1ning))
[0006]在無分享型數(shù)據(jù)庫系統(tǒng),可以應(yīng)用被稱為分割法的技術(shù)。分割法是將數(shù)據(jù)庫分割成多個,并將分割后的各個數(shù)據(jù)集合(被稱為分區(qū)(Partit1n))分散到多個數(shù)據(jù)庫節(jié)點而使其存儲的技術(shù)。由于應(yīng)用了分割法的無分享型數(shù)據(jù)庫系統(tǒng)能夠減小使各個數(shù)據(jù)庫節(jié)點存儲的數(shù)據(jù)集合,所以能夠?qū)碜钥蛻舳说脑L問分散到多個數(shù)據(jù)庫節(jié)點。
[0007](分片(sharding))
[0008]作為數(shù)據(jù)庫技術(shù)之一,有一種被稱為分片的技術(shù)。分片是將數(shù)據(jù)分割成更小的數(shù)據(jù),自動地分散保存到多個數(shù)據(jù)庫節(jié)點的技術(shù)。分片是與無分享型數(shù)據(jù)庫系統(tǒng)的分割法類似的技術(shù)。
[0009](分布鍵值(Key-Value)型數(shù)據(jù)庫)
[0010]另外,公知有一種鍵值型數(shù)據(jù)庫。鍵值型數(shù)據(jù)庫是基于與編程言語的聯(lián)想排列或者Map同樣地由鍵和值的對構(gòu)成的單純的數(shù)據(jù)模型的數(shù)據(jù)庫。另外,還公知有一種通過基于鍵對鍵值型數(shù)據(jù)庫進行分片來分散化的分布鍵值型數(shù)據(jù)庫。
[0011]對鍵值型數(shù)據(jù)庫而言,由于數(shù)據(jù)模型單純,所以分片以及分割法的處理容易。另夕卜,分布鍵值型數(shù)據(jù)庫能夠使用多個鍵值型數(shù)據(jù)庫節(jié)點,處理由單一的鍵值型數(shù)據(jù)庫節(jié)點無法應(yīng)對那樣的大規(guī)模數(shù)據(jù)集合。因此,通過將分布鍵值型數(shù)據(jù)庫應(yīng)用于具有多個數(shù)據(jù)庫節(jié)點的無分享型數(shù)據(jù)庫系統(tǒng),可實現(xiàn)能夠橫向擴展的大規(guī)模的數(shù)據(jù)庫系統(tǒng)。
[0012]并且,這樣的應(yīng)用了分布鍵值型數(shù)據(jù)庫的無分享型數(shù)據(jù)庫系統(tǒng)(以下稱為橫向擴展型數(shù)據(jù)庫系統(tǒng))通過將數(shù)據(jù)均衡地配置于多個數(shù)據(jù)庫節(jié)點,可使來自客戶端的訪問分散而整體提高吞吐量(Throughput)以及響應(yīng)。
[0013]現(xiàn)有技術(shù)文獻
[0014]專利文獻
[0015]專利文獻1:日本特開2009 - 157785號公報
[0016]專利文獻2:日本特開2005 - 196602號公報
[0017]非專利文獻
[0018]非專利文獻1:“MongoDB Manual Contents”、[Online]、lOgen、[平成 25 年 I 月18 日検索]、^、y 夕一才、'7 卜 <URL:http://docs.mongodb.0rg/manual/contents/>
【發(fā)明內(nèi)容】
[0019]發(fā)明要解決的問題
[0020]在橫向擴展型數(shù)據(jù)庫系統(tǒng)中,可應(yīng)用將數(shù)據(jù)的復(fù)制品(replica:副本)存儲到其他數(shù)據(jù)庫節(jié)點的被稱為復(fù)制(Replicat1n)的技術(shù)。橫向擴展型數(shù)據(jù)庫系統(tǒng)通過進行復(fù)制,即使在某個數(shù)據(jù)庫節(jié)點發(fā)生了故障,也能夠使用存儲了副本的數(shù)據(jù)庫節(jié)點來繼續(xù)服務(wù)。將對數(shù)據(jù)的副本進行存儲的數(shù)據(jù)庫節(jié)點的個數(shù)稱為冗余度。在橫向擴展型數(shù)據(jù)庫系統(tǒng)中,例如設(shè)定2個或者3個作為冗余度。
[0021]這里,對橫向擴展型數(shù)據(jù)庫系統(tǒng)而言,如果數(shù)據(jù)庫節(jié)點發(fā)生故障而將發(fā)生了故障的數(shù)據(jù)庫節(jié)點割離,則冗余度比預(yù)先設(shè)定的值降低。橫向擴展型數(shù)據(jù)庫系統(tǒng)如果在冗余度降低的狀態(tài)下長時間繼續(xù)運轉(zhuǎn),則在發(fā)生了進一步的數(shù)據(jù)庫節(jié)點的故障時產(chǎn)生系統(tǒng)整體的動作停止或者大范圍的數(shù)據(jù)損失的可能性變高。因此,在橫向擴展型數(shù)據(jù)庫系統(tǒng)中,需要在數(shù)據(jù)庫節(jié)點發(fā)生了故障之后追加新的數(shù)據(jù)庫節(jié)點,并使追加的數(shù)據(jù)庫節(jié)點存儲副本而恢復(fù)冗余度的結(jié)構(gòu)。
[0022]另外,在橫向擴展型數(shù)據(jù)庫系統(tǒng)中,所存儲的數(shù)據(jù)量有時因數(shù)據(jù)的配置而在數(shù)據(jù)庫節(jié)點間不均衡。另外,在橫向擴展型數(shù)據(jù)庫系統(tǒng)中,來自客戶端的訪問量有時因數(shù)據(jù)的配置而在數(shù)據(jù)庫節(jié)點間不均衡。
[0023]如果這樣的數(shù)據(jù)配置的不均衡變大,則在橫向擴展型數(shù)據(jù)庫系統(tǒng)中,在數(shù)據(jù)量多的數(shù)據(jù)庫節(jié)點或者來自客戶端的訪問在數(shù)據(jù)庫節(jié)點中的處理時間相對變長。由于橫向擴展型數(shù)據(jù)庫系統(tǒng)的優(yōu)點之一在于使來自客戶端的訪問分散,所以會因為這樣的數(shù)據(jù)配置的不均衡而喪失優(yōu)點。
[0024]為了解決以上那樣的冗余度的降低以及數(shù)據(jù)配置的不均衡,橫向擴展型數(shù)據(jù)庫系統(tǒng)必須在數(shù)據(jù)配置產(chǎn)生了不均衡的時刻進行數(shù)據(jù)向多個數(shù)據(jù)庫節(jié)點的重新配置處理。
[0025]然而,在以往的數(shù)據(jù)庫系統(tǒng)中,必須在停止服務(wù)的狀態(tài)下實施這樣的重新配置處理。另外,在以往的數(shù)據(jù)庫系統(tǒng)中,由于數(shù)據(jù)的重新配置處理的負荷非常高,所以如果不執(zhí)行高效的處理則會使處理效率顯著惡化。
[0026]用于解決問題的手段
[0027]實施方式涉及的數(shù)據(jù)庫系統(tǒng)具備存儲數(shù)據(jù)庫的多個節(jié)點、和管理多個節(jié)點的管理裝置。管理裝置具有第一分配部和第二分配部。第一分配部根據(jù)多個節(jié)點各自的狀況的變更,來分配存儲數(shù)據(jù)集合并受理對數(shù)據(jù)集合的訪問請求的第一節(jié)點、以及存儲數(shù)據(jù)集合并成為第一節(jié)點的備份的第二節(jié)點,對多個節(jié)點分別指示與分配對應(yīng)的動作。第二分配部根據(jù)多個節(jié)點的狀況并根據(jù)第一節(jié)點以及第二節(jié)點的分配狀況的變更,來分配作為第一節(jié)點或者第二節(jié)點的候補的第三節(jié)點,針對多個節(jié)點分別指示用于使第三節(jié)點作為第一節(jié)點或者第二節(jié)點動作的準備。多個節(jié)點分別具有將第一節(jié)點或者第二節(jié)點的數(shù)據(jù)集合向第三節(jié)點發(fā)送的轉(zhuǎn)送部。
【專利附圖】
【附圖說明】
[0028]圖1是表示實施方式涉及的數(shù)據(jù)庫系統(tǒng)的硬件構(gòu)成的圖。
[0029]圖2是表示實施方式涉及的數(shù)據(jù)庫系統(tǒng)的功能構(gòu)成的圖。
[0030]圖3是表示數(shù)據(jù)保持表的一個例子的圖。
[0031]圖4是表示當前任務(wù)表的一個例子的圖。
[0032]圖5是表示下次任務(wù)表的一個例子的圖。
[0033]圖6是表不目標任務(wù)表的一個例子的圖。
[0034]圖7是表示數(shù)據(jù)貯存(data store)部中存儲的數(shù)據(jù)集合的一個例子的圖。
[0035]圖8是用于對復(fù)制處理進行說明的圖。
[0036]圖9是用于對短期同步處理進行說明的圖。
[0037]圖10是用于對長期同步處理進行說明的圖。
[0038]圖11是表示對節(jié)點分配的任務(wù)的轉(zhuǎn)變的圖。
[0039]圖12是表示管理裝置的集群(cluster)管理部的處理流程的圖。
[0040]圖13是表示由管理裝置的第一分配部進行的下次任務(wù)表的計算處理的流程的圖。
[0041]圖14是表示由管理裝置的第二分配部進行的目標任務(wù)表的計算處理的流程的圖。
[0042]圖15是表示節(jié)點的訪問處理部的處理流程的圖。
[0043]圖16是表示節(jié)點的節(jié)點管理部的處理流程的圖。
[0044]圖17是表示節(jié)點的轉(zhuǎn)送部的處理流程的圖。
[0045]圖18是表示針對3個分區(qū)# I?# 3的每一個分配了成為屬主(owner)以及備份的節(jié)點的情況下的、節(jié)點30 — A至節(jié)點30 — C各自的狀態(tài)的圖。
[0046]圖19是表示從圖18的狀態(tài)開始根據(jù)節(jié)點30 — C發(fā)生了故障而執(zhí)行了短期同步處理之后的、節(jié)點30 — A至節(jié)點30 — C各自的狀態(tài)的圖。
[0047]圖20是表示從圖19的狀態(tài)開始執(zhí)行的長期同步處理的一個例子的圖。
[0048]圖21是表示對應(yīng)于圖20的長期同步處理結(jié)束而執(zhí)行了短期同步處理之后的、節(jié)點30 — A至節(jié)點30 — C各自的狀態(tài)的圖。
[0049]圖22是表示從圖21的狀態(tài)開始追加了節(jié)點30 — D的情況下的、節(jié)點30 — A至節(jié)點30 — D各自的狀態(tài)的圖。
[0050]圖23是表示從圖22的狀態(tài)開始執(zhí)行的長期同步處理的一個例子的圖。
[0051]圖24是表示對應(yīng)于圖23的長期同步處理結(jié)束而執(zhí)行了短期同步處理之后的、節(jié)點30 — A至節(jié)點30 — D各自的狀態(tài)的圖。
【具體實施方式】
[0052]圖1是表示實施方式涉及的數(shù)據(jù)庫系統(tǒng)10的硬件構(gòu)成的圖。數(shù)據(jù)庫系統(tǒng)10經(jīng)由網(wǎng)絡(luò)從作為外部的計算機的客戶端接收針對數(shù)據(jù)庫的訪問請求(例如參照、更新或者登記),執(zhí)行與接收到的訪問請求對應(yīng)的處理。
[0053]數(shù)據(jù)庫系統(tǒng)10具備管理裝置20和多個節(jié)點30。管理裝置20以及多個節(jié)點30經(jīng)由網(wǎng)絡(luò)相互連接。此外,在圖1中表示了兩個節(jié)點30,但數(shù)據(jù)庫系統(tǒng)10也可以具備三個以上節(jié)點30。
[0054]作為一個例子,數(shù)據(jù)庫系統(tǒng)10是將分布鍵值型數(shù)據(jù)庫應(yīng)用于無分享型數(shù)據(jù)庫的能夠橫向擴展的數(shù)據(jù)庫系統(tǒng)。這樣的數(shù)據(jù)庫系統(tǒng)10能夠向多個節(jié)點30分散數(shù)據(jù)集合,作為一個巨大的數(shù)據(jù)庫,能夠從作為外部的計算機的客戶端進行訪問。
[0055]管理裝置20以及多個節(jié)點30分別是硬件相互獨立的計算機。多個節(jié)點30分別獨立地接收來自客戶端的訪問請求,能夠獨立地進行與訪問請求對應(yīng)的處理。
[0056]作為一個例子,管理裝置20以及多個節(jié)點30分別具有CPU(Central ProcessingUnit) 12、存儲器13、通信I / F14以及貯存器I / F15。另外,管理裝置20以及多個節(jié)點30分別經(jīng)由貯存器I / F15與外部存儲裝置16連接。此外,外部存儲裝置16也可設(shè)在節(jié)點30的內(nèi)部。
[0057]另外,數(shù)據(jù)庫系統(tǒng)10將數(shù)據(jù)庫分割成多個分區(qū)來存儲。分區(qū)的數(shù)量被預(yù)先決定。分割數(shù)據(jù)庫的方法只要是預(yù)先決定的方法即可,可以是任意的方法。
[0058]多個節(jié)點30分別按多個分區(qū)的每一個分配是承擔作為屬主的任務(wù)、還是承擔作為備份的任務(wù)、或者不承擔屬主以及備份中任意一個任務(wù)。
[0059]屬主存儲對應(yīng)的分區(qū)的數(shù)據(jù)集合,接收來自客戶端的向?qū)?yīng)的分區(qū)的數(shù)據(jù)集合的訪問請求并進行處理。另外,備份存儲對應(yīng)的分區(qū)的數(shù)據(jù)集合,對屬主進行備份,以便例如在屬主發(fā)生了故障時能取而代之承擔屬主的任務(wù)。此外,有時也不稱為屬主以及備份而稱為主(master)以及從(slave)。
[0060]管理裝置20對多個節(jié)點30進行管理。作為一個例子,管理裝置20按多個分區(qū)的每一個來分配作為屬主的節(jié)點30以及作為備份的節(jié)點30。
[0061]該情況下,為了無論因哪個節(jié)點30的故障都能盡量恢復(fù)數(shù)據(jù)庫,管理裝置20按照在預(yù)先決定的范圍具有冗余度的方式分配作為備份的節(jié)點30。并且,管理裝置20按照數(shù)據(jù)庫所含的數(shù)據(jù)集合被分散配置到多個節(jié)點30的方式,來分配作為屬主以及備份的節(jié)點30。
[0062]此外,管理裝置20也可以在任意的節(jié)點30中設(shè)置。另外,作為管理裝置20發(fā)揮功能的節(jié)點30也可以通過任意的算法被選擇。另外,在作為管理裝置20發(fā)揮功能的節(jié)點30發(fā)生了故障的情況下,其他節(jié)點30也可以作為管理裝置20發(fā)揮功能。
[0063]這樣的數(shù)據(jù)庫系統(tǒng)10在多個節(jié)點30中的任意節(jié)點30發(fā)生了故障的情況下,能夠?qū)l(fā)生了故障的節(jié)點30割離。另外,數(shù)據(jù)庫系統(tǒng)10也能夠重新追加節(jié)點30來提高數(shù)據(jù)庫的性能。
[0064]圖2是表示實施方式涉及的數(shù)據(jù)庫系統(tǒng)10的功能構(gòu)成的圖。
[0065]管理裝置20具有表存儲部21、第一分配部22、第二分配部23、和集群管理部24。第一分配部22、第二分配部23以及集群管理部24通過管理裝置20的CPU12執(zhí)行程序來實現(xiàn)。另外,第一分配部22、第二分配部23以及集群管理部24的一部分或者全部也可以由硬件電路實現(xiàn)。另外,表存儲部21由管理裝置20的存儲器13或者外部存儲裝置16來實現(xiàn)。
[0066]表存儲部21存儲針對多個分區(qū)的每一個的用于決定多個節(jié)點30各自的任務(wù)的4個表。4個表的每一個可以是表形式的數(shù)據(jù),也可以是表形式以外的數(shù)據(jù)。
[0067]具體而言,表存儲部21存儲數(shù)據(jù)保持表、當前任務(wù)表、下次任務(wù)表以及目標任務(wù)表。
[0068]數(shù)據(jù)保持表儲存針對多個分區(qū)每一個的、多個節(jié)點30各自的時間戳(timestamp)。時間戳表示對應(yīng)的節(jié)點30所存儲的對應(yīng)的分區(qū)的數(shù)據(jù)集合的更新履歷。作為一個例子,時間戳是每當數(shù)據(jù)集合被更新便加I的值。因此,某個分區(qū)中的時間戳最大的節(jié)點30意味著是存儲有該分區(qū)的最新的數(shù)據(jù)集合的節(jié)點30。
[0069]此外,在數(shù)據(jù)庫的大小隨時間不斷增加的情況下,數(shù)據(jù)保持表也可以替代時間戳而儲存對應(yīng)的節(jié)點30所存儲的對應(yīng)的分區(qū)的數(shù)據(jù)集合的大小或者數(shù)據(jù)數(shù)等。
[0070]作為一個例子,數(shù)據(jù)保持表如圖3所示,節(jié)點30由行確定,分區(qū)由列確定。該情況下,數(shù)據(jù)保持表在行與列正交的各個單元中儲存由該行確定的節(jié)點30所存儲的、由該列確定的分區(qū)的數(shù)據(jù)集合的時間戳。
[0071]當前任務(wù)表儲存針對多個分區(qū)的每一個的、多個節(jié)點30分別被分配的在數(shù)據(jù)庫中的任務(wù)。具體而言,當前任務(wù)表針多個分區(qū)的每一個儲存多個節(jié)點30的每一個是被分配為屬主、還是被分配為備份或者未被分配為屬主也未被分配為備份。
[0072]作為一個例子,當前任務(wù)表如圖4所示,由行確定節(jié)點30,由列確定分區(qū)。該情況下,當前任務(wù)表在行與列正交的位置的每一個單元中儲存針對由該列確定的分區(qū)的、對由該行確定的節(jié)點30分配的任務(wù)。其中,在附圖中,將被分配了作為屬主的任務(wù)的記載為“OWNER”或者“0”,將被分配了作為備份的任務(wù)的記載為“BACKUP”或者“B”,將未被分配為屬主也未被分配為備份的記載為“None”或“N”或者空白。
[0073]下次任務(wù)表儲存針對多個分區(qū)的每一個的、多個節(jié)點30分別接下來被分配的任務(wù)。即,下次任務(wù)表針對多個分區(qū)分別儲存多個節(jié)點30的每一個接下來是被分配為屬主、還是被分配為備份、或者不被分配為屬主也不被分配為備份。下次任務(wù)表是例如在節(jié)點30發(fā)生了故障或追加了新的節(jié)點30的情況下等,與當前任務(wù)表置換的表。
[0074]作為一個例子,下次任務(wù)表如圖5所示,由行確定節(jié)點30,由列確定分區(qū)。該情況下,下次任務(wù)表在行與列正交的位置的每一個單元中儲存針對由該列確定的分區(qū)的、由該行確定的節(jié)點30被分配的下一個任務(wù)。
[0075]目標任務(wù)表儲存針對多個分區(qū)的每一個的、多個節(jié)點30分別被分配的作為備份的候補的任務(wù)。備份的候補是將來用于針對該分區(qū)進行該節(jié)點30承擔作為屬主或者備份的任務(wù)的準備的任務(wù)。此外,在本實施方式的說明中,雖然將任務(wù)的名稱設(shè)為“備份的候補”,但被分配為備份的候補的節(jié)點30將來也可以成為屬主。
[0076]作為一個例子,目標任務(wù)表如圖6所示,由行確定節(jié)點30,由列確定分區(qū)。該情況下,目標任務(wù)表在行與列正交的位置的每一個單元中儲存針對由該列確定的分區(qū)的、由該行確定的節(jié)點30被分配的作為備份的候補的任務(wù)。其中,在附圖中,在被分配了作為備份的候補的任務(wù)的情況下記載“MID - BACKUP”或者“M”,在未被分配為備份的候補的情況下設(shè)為空白。
[0077]第一分配部22根據(jù)多個節(jié)點30各自的狀況的變更,對多個分區(qū)的每一個分配成為屬主的節(jié)點30以及成為備份的節(jié)點30。另外,例如在多個節(jié)點30中的任意節(jié)點30發(fā)生了故障的情況下,第一分配部22將發(fā)生了故障的節(jié)點30除外,再次分配作為屬主以及備份的節(jié)點30。
[0078]另外,在追加了新的節(jié)點30的情況下,第一分配部22針對多個分區(qū)的每一個,再次分配包括新的節(jié)點30在內(nèi)的作為屬主以及備份的節(jié)點30。另外,在因數(shù)據(jù)集合向被分配為備份的候補的節(jié)點30的發(fā)送結(jié)束而新產(chǎn)生了能夠作為屬主或者備份的節(jié)點30的情況下,第一分配部22針對多個分區(qū)的每一個再次分配作為屬主以及備份的節(jié)點30。
[0079]這里,第一分配部22按照至少存在屬主的方式,針對多個分區(qū)的全部分配作為屬主以及備份的節(jié)點30。由此,第一分配部22能夠至少使數(shù)據(jù)庫發(fā)揮功能。
[0080]另外,第一分配部22以至少使數(shù)據(jù)庫發(fā)揮功能作為條件,按照具有預(yù)先決定的范圍內(nèi)的冗余度的方式,針對多個分區(qū)的每一個分配作為屬主以及備份的節(jié)點30。由此,即使任意的節(jié)點30發(fā)生了故障,第一分配部22也能夠提高至少可使數(shù)據(jù)庫發(fā)揮功能的可能性。
[0081]另外,作為至少使數(shù)據(jù)庫發(fā)揮功能且具有預(yù)先決定的范圍內(nèi)的冗余度的條件,第一分配部22按照屬主以及備份分散于多個節(jié)點30每一個的方式,針對多個分區(qū)的每一個分配作為屬主以及備份的節(jié)點30。由此,第一分配部22能夠使多個節(jié)點30各自的處理的負荷均衡。
[0082]其中,在本例中,第一分配部22通過計算下次任務(wù)表,來分配作為屬主以及備份的節(jié)點30。關(guān)于利用第一分配部22計算下次任務(wù)表的計算方法的一個例子,將參照圖13在后面進行說明。
[0083]第二分配部23根據(jù)多個節(jié)點30的狀況以及利用當前分配表分配的屬主和備份的分配狀況的變更,針對多個分區(qū)的每一個分配作為備份的候補的節(jié)點30。另外,例如在多個節(jié)點30中的任意節(jié)點30發(fā)生了故障的情況下,第二分配部23將發(fā)生了故障的節(jié)點30除外來再次分配作為備份的候補的節(jié)點30。另外,例如在追加了新的節(jié)點30的情況下,第二分配部23針對多個分區(qū)分別再次分配包括新的節(jié)點30在內(nèi)的作為備份的候補的節(jié)點30。
[0084]這里,第二分配部23按照將來具有預(yù)先決定的范圍內(nèi)的冗余度的方式,針對多個分區(qū)的每一個分配作為備份的候補的節(jié)點30。由此,即使將來任意的節(jié)點30發(fā)生了故障,第二分配部23也能提高至少可使數(shù)據(jù)庫發(fā)揮功能的可能性。
[0085]另外,第二分配部23按照將來屬主以及備份分散分配于多個節(jié)點30的每一個的方式,針對多個分區(qū)的每一個分配作為備份的候補的節(jié)點30。由此,第二分配部23能夠在將來使多個節(jié)點30各自的處理的負荷均衡。
[0086]其中,在本例中,第二分配部23通過計算目標任務(wù)表,來分配作為備份的候補的節(jié)點30。關(guān)于利用第二分配部23計算目標任務(wù)表的計算方法的一個例子,將參照圖14在后面進行說明。
[0087]集群管理部24與多個節(jié)點30的每一個經(jīng)由網(wǎng)絡(luò)交換消息,來對多個節(jié)點30的每一個進行管理。例如,集群管理部24每隔一定時間便與多個節(jié)點30的每一個交換被稱為心跳(heart beat)的消息。而且,集群管理部24根據(jù)有無心跳的回信來確定發(fā)生了故障的節(jié)點30。
[0088]另外,集群管理部24定期從多個節(jié)點30的每一個接收數(shù)據(jù)保持表。而且,集群管理部24將從全部的節(jié)點30接收到的數(shù)據(jù)保持表集中存儲到表存儲部21。另外,集群管理部24根據(jù)是否接收到數(shù)據(jù)保持表來確定發(fā)生了故障的節(jié)點30。
[0089]另外,集群管理部24在起動時使第一分配部22計算出下次任務(wù)表,通過將計算出的下次任務(wù)表分發(fā)給多個節(jié)點30的每一個來對多個節(jié)點30的每一個指示與分配對應(yīng)的動作。另外,集群管理部24定期使第一分配部22計算下次任務(wù)表。而且,在計算出的下次任務(wù)表與當前任務(wù)表相比發(fā)生了變化的情況下,集群管理部24通過將計算出的下次任務(wù)表分發(fā)給多個節(jié)點30的每一個來對多個節(jié)點30的每一個指示與分配對應(yīng)的動作。而且,集群管理部24在分發(fā)了下次任務(wù)表之后,將表存儲部21中存儲的當前任務(wù)表更新成下次任務(wù)表的內(nèi)容。
[0090]例如,在任意的節(jié)點30發(fā)生了故障的情況下、追加了新的節(jié)點30的情況下,或者數(shù)據(jù)集合向被分配為候補的節(jié)點30的發(fā)送結(jié)束而產(chǎn)生了能夠分配為備份的節(jié)點30的情況下,第一分配部22將任務(wù)表從當前任務(wù)表變化成計算出的下次任務(wù)表。因此,集群管理部24在這樣的情況下將下次任務(wù)表向多個節(jié)點30的每一個分發(fā)。
[0091]另外,集群管理部24定期使第二分配部23計算目標任務(wù)表,將計算出的目標任務(wù)表向多個節(jié)點30的每一個分發(fā)。集群管理部24通過分發(fā)目標任務(wù)表,來對多個節(jié)點30的每一個指示用于使被分配為候補的節(jié)點30作為屬主或者備份動作的準備。其中,集群管理部24以不同的周期計算下次任務(wù)表和目標任務(wù)表。
[0092]多個節(jié)點30的每一個具有數(shù)據(jù)貯存部31、表存儲部32、訪問處理部33、節(jié)點管理部34、轉(zhuǎn)送部35。訪問處理部33、節(jié)點管理部34以及轉(zhuǎn)送部35通過節(jié)點30的CPU12執(zhí)行程序來實現(xiàn)。另外,訪問處理部33、節(jié)點管理部34以及轉(zhuǎn)送部35的一部分或者全部也可以由硬件電路實現(xiàn)。數(shù)據(jù)貯存部31以及表存儲部32由節(jié)點30的存儲器13或者外部存儲裝置16來實現(xiàn)。
[0093]數(shù)據(jù)貯存部31存儲將數(shù)據(jù)庫分割后的多個分區(qū)中自節(jié)點被當前任務(wù)表分配為屬主或者備份的分區(qū)的數(shù)據(jù)集合。例如,如圖7所示,在被分割為3個的分區(qū)# I?# 3中,自節(jié)點相對于分區(qū)# I被分配為屬主,相對于分區(qū)# 3被分配為備份。該情況下,數(shù)據(jù)貯存部31存儲分區(qū)# I以及分區(qū)# 3的數(shù)據(jù)集合。
[0094]另外,節(jié)點30針對被目標任務(wù)表分配為備份的候補的分區(qū),從被分配為該分區(qū)的屬主的節(jié)點30接收數(shù)據(jù)集合。數(shù)據(jù)貯存部31存儲自節(jié)點被目標任務(wù)表分配為備份的候補的分區(qū)的數(shù)據(jù)集合中的、從屬主的節(jié)點30接收完畢的一部分或者全部。
[0095]表存儲部32存儲與數(shù)據(jù)保持表的自節(jié)點對應(yīng)的部分。另外,表存儲部32存儲當前任務(wù)表、下次任務(wù)表以及目標任務(wù)表。在接收到下次任務(wù)表的情況下,當前任務(wù)表被改寫成下次任務(wù)表的內(nèi)容。在定期接收的目標任務(wù)表發(fā)生了變化的情況下,目標任務(wù)表被改寫成變化后的內(nèi)容。
[0096]訪問處理部33經(jīng)由網(wǎng)絡(luò)接收來自客戶端的訪問請求。而且,訪問處理部33針對多個分區(qū)的每一個執(zhí)行與由當前任務(wù)表對自節(jié)點分配的任務(wù)對應(yīng)的處理。
[0097]具體而言,訪問處理部33接收針對被當前任務(wù)表分配為屬主的分區(qū)的來自客戶端的訪問請求,執(zhí)行與該訪問請求對應(yīng)的處理。作為一個例子,在接收到參照請求的情況下,訪問處理部33讀出該分區(qū)的數(shù)據(jù)集合之中對應(yīng)的數(shù)據(jù)并向客戶端發(fā)送。另外,作為一個例子,在接收到更新請求的情況下,訪問處理部33對該分區(qū)的數(shù)據(jù)集合所對應(yīng)的數(shù)據(jù)進行更新。另外,作為一個例子,在接收到登記請求的情況下,訪問處理部33向該分區(qū)的數(shù)據(jù)集合登記新的數(shù)據(jù)。
[0098]此外,訪問處理部33也可以接收包括一系列訪問請求的事項(transact1n)。該情況下,訪問處理部33通過事項處理來執(zhí)行來自客戶端的一系列訪問請求。
[0099]另外,訪問處理部33在處理了更新請求以及登記請求的情況下,與被當前任務(wù)表針對該分區(qū)分配為備份的節(jié)點30之間執(zhí)行復(fù)制處理。復(fù)制處理是用于在被分配為備份的節(jié)點30中生成被分配為屬主的節(jié)點30中存儲的數(shù)據(jù)集合的副本(復(fù)制品)的處理。
[0100]具體如圖8所示,訪問處理部33在接收到針對自節(jié)點被分配為屬主的分區(qū)的更新或者登記請求的情況下,將同一訪問請求向被分配為備份的其他節(jié)點30發(fā)送。而且,其他節(jié)點30的訪問處理部33從相對被分配為備份的分區(qū)的、被分配為屬主的節(jié)點30接收更新或者登記的請求,執(zhí)行與該請求對應(yīng)的更新或者登記的處理。
[0101]訪問處理部33通過進行這樣的復(fù)制處理,能夠在被分配為屬主的節(jié)點30與被分配為備份的節(jié)點30之間取得數(shù)據(jù)集合的同步。
[0102]此外,在執(zhí)行復(fù)制處理的情況下,被分配為屬主的節(jié)點30的訪問處理部33也可以發(fā)送包括一系列訪問請求的事項。該情況下,被分配為備份的節(jié)點30的訪問處理部33通過事項處理來執(zhí)行復(fù)制處理。
[0103]另外,在處理了更新請求以及登記請求的情況下,訪問處理部33對表存儲部32中存儲的數(shù)據(jù)保持表所對應(yīng)的分區(qū)的時間戳進行更新。
[0104]節(jié)點管理部34經(jīng)由網(wǎng)絡(luò)與管理裝置20的集群管理部24交換消息。對應(yīng)于從集群管理部24接收到被稱為心跳的消息,如果自節(jié)點沒有發(fā)生故障則節(jié)點管理部34發(fā)送響應(yīng)消息。另外,節(jié)點管理部34定期將表存儲部32中存儲的數(shù)據(jù)保持表向集群管理部24發(fā)送。
[0105]另外,節(jié)點管理部34從集群管理部24接收下次任務(wù)表,將接收到的下次任務(wù)表存儲到表存儲部32。而且,在接收到下次任務(wù)表的情況下,節(jié)點管理部34如圖9所示,執(zhí)行為了使多個節(jié)點30的每一個以由下次任務(wù)表分配的任務(wù)進行動作而將與來自客戶端的訪問請求對應(yīng)的處理暫時中斷來進行的同步處理、即短期同步處理。
[0106]具體而言,節(jié)點管理部34為了針對多個分區(qū)的每一個使多個節(jié)點30的每一個以由下次任務(wù)表表示的任務(wù)進行動作,使訪問處理部33執(zhí)行與復(fù)制處理同樣的處理。由此,節(jié)點管理部34針對多個分區(qū)的每一個,能夠取得被分配為屬主的節(jié)點30與被分配為備份的節(jié)點30之間的數(shù)據(jù)集合的同步。而且,在取得了數(shù)據(jù)集合的同步之后,節(jié)點管理部34使訪問處理部33將當前任務(wù)表改寫為下次任務(wù)表的內(nèi)容,執(zhí)行針對多個分區(qū)的每一個的由下次任務(wù)表分配的新的任務(wù)所對應(yīng)的處理。
[0107]而且,如果短期同步處理結(jié)束,則節(jié)點管理部34將當前任務(wù)表的內(nèi)容更新成下次任務(wù)表的內(nèi)容。以后,訪問處理部33能夠接受來自客戶端的訪問請求。
[0108]另外,節(jié)點管理部34從集群管理部24定期接收目標任務(wù)表,并將接收到的目標任務(wù)表存儲于表存儲部32。
[0109]轉(zhuǎn)送部35如圖10所示,執(zhí)行為了使多個節(jié)點30的每一個以由目標任務(wù)表分配的任務(wù)進行動作而不將針對來自客戶端的訪問請求的處理中斷地進行的同步處理、即長期同步處理。具體而言,轉(zhuǎn)送部35不中斷針對訪問請求的處理地將自節(jié)點被當前任務(wù)表分配為屬主的分區(qū)的數(shù)據(jù)集合向被目標任務(wù)表分配為備份的候補且未被當前任務(wù)表分配為屬主也未被分配為備份的其他節(jié)點30發(fā)送。另外,轉(zhuǎn)送部35不中斷針對訪問請求的處理地從被當前任務(wù)表分配為屬主的其他節(jié)點30接收自節(jié)點被目標任務(wù)表分配為備份的候補且未被當前任務(wù)表分配為屬主也未被分配為備份的分區(qū)的數(shù)據(jù)集合。
[0110]轉(zhuǎn)送部35通過執(zhí)行這樣的長期同步處理,能夠?qū)⒈环峙錇閷僦鞯墓?jié)點30中存儲的數(shù)據(jù)集合的復(fù)制存儲到未被分配為屬主或者備份的節(jié)點30。由此,轉(zhuǎn)送部35能夠新生成在長期同步處理結(jié)束之后可以作為屬主或者備份的節(jié)點30。
[0111]這里,在執(zhí)行長期同步處理的情況下,轉(zhuǎn)送部35通過不阻礙訪問處理部33對事項的執(zhí)行的后臺(background)將被分配為屬主的分區(qū)的數(shù)據(jù)集合發(fā)送給被分配為備份的候補的節(jié)點30。另外,轉(zhuǎn)送部35通過后臺從被分配為屬主的節(jié)點30接收被分配為備份的候補的分區(qū)的數(shù)據(jù)集合。其中,作為一個例子,后臺中的處理是在節(jié)點30具備多個CPU12的情況下使用不執(zhí)行事項處理的一部分CPU12來執(zhí)行的處理。另外,作為一個例子,后臺中的處理是在CPU12進行時分處理的情況下在CPU12不執(zhí)行事項處理的一部分時間段執(zhí)行的處理。由此,轉(zhuǎn)送部35能夠不降低針對來自客戶端的訪問請求的響應(yīng)速度等地執(zhí)行長期同步處理。
[0112]另外,轉(zhuǎn)送部35也可以將在當前任務(wù)表中自節(jié)點被分配為備份的分區(qū)的數(shù)據(jù)集合向被目標任務(wù)表分配為備份的候補且未被分配為屬主也未被分配為備份的其他節(jié)點30發(fā)送。該情況下,轉(zhuǎn)送部35以未從其他節(jié)點30發(fā)送同一數(shù)據(jù)集合為條件來進行處理。
[0113]圖11是表示節(jié)點30被分配的任務(wù)的轉(zhuǎn)變的圖。節(jié)點30轉(zhuǎn)變?yōu)閷Χ鄠€分區(qū)的每一個分配了“屬主”、“備份”或“備份的候補”的狀態(tài)、或者未被分配任何任務(wù)的“無”狀態(tài)中任意一個。
[0114]節(jié)點30通過短期同步處理在“無”狀態(tài)與“屬主”狀態(tài)之間相互轉(zhuǎn)變。另外,節(jié)點30通過短期同步處理在“屬主”狀態(tài)與“備份”狀態(tài)之間相互轉(zhuǎn)變。另外,節(jié)點30通過短期同步處理從“備份”狀態(tài)向“無”狀態(tài)轉(zhuǎn)變。
[0115]另外,節(jié)點30通過長期同步處理在“無”狀態(tài)與“備份的候補”狀態(tài)之間相互轉(zhuǎn)變。而且,節(jié)點30通過短期同步處理從“備份的候補”狀態(tài)向“備份”狀態(tài)轉(zhuǎn)變。
[0116]圖12是表示管理裝置20的集群管理部24的處理流程的圖。集群管理部24執(zhí)行以下的步驟Slll?步驟S142的處理。
[0117]首先,在步驟Slll中,集群管理部24檢測數(shù)據(jù)保持表的接收事件、第一定周期事件或者第二定周期事件。數(shù)據(jù)保持表的接收事件在集群管理部24接收到從多個節(jié)點30的每一個發(fā)送來的數(shù)據(jù)保持表的情況下產(chǎn)生。第一定周期事件以及第二定周期事件分別定期產(chǎn)生。但是,第一定周期事件與第二定周期事件的產(chǎn)生間隔相互不同。
[0118]集群管理部24在檢測出數(shù)據(jù)保持表的接收事件的情況下,使處理進入步驟S121。集群管理部24在檢測出第一定周期事件的情況下,使處理進入步驟S131。集群管理部24在檢測出第二定周期事件的情況下,使處理進入步驟S141。
[0119]在檢測出數(shù)據(jù)保持表的接收事件的情況下,在步驟S121中,集群管理部24判斷是否是起動之后最初的數(shù)據(jù)保持表的接收事件。
[0120]在是起動之后最初的數(shù)據(jù)保持表的接收事件的情況下(步驟S121的是),集群管理部24使處理進入步驟S122。在步驟S122中,集群管理部24將接收到的數(shù)據(jù)保持表登記到表存儲部21。
[0121]接著,在步驟S123中,集群管理部24使第一分配部22計算出下次任務(wù)表。其中,關(guān)于利用第一分配部22計算下次任務(wù)表的計算處理,將參照圖13來進行說明。
[0122]接著,在步驟S124中,集群管理部24將計算出的下次任務(wù)表分發(fā)給多個節(jié)點30的每一個。而且,如果結(jié)束了步驟S124的處理,則集群管理部24使處理返回到步驟S111。
[0123]另外,在不是起動之后最初的數(shù)據(jù)保持表的接收事件的情況下(步驟S121的否),在步驟S125中,集群管理部24對表存儲部21的數(shù)據(jù)保持表進行更新。而且,如果結(jié)束了步驟S125的處理,則集群管理部24使處理返回到步驟S111。
[0124]另一方面,在檢測出第一定周期事件的情況下,在步驟S131中,集群管理部24判斷是否在從上次的第一定周期事件到這次的第一定周期事件為止的期間,從多個節(jié)點30的全部接收到了數(shù)據(jù)保持表。在從多個節(jié)點30的全部接收到了數(shù)據(jù)保持表的情況下(步驟S131的是),集群管理部24使處理進入步驟S134。在從任意的節(jié)點30無法接收數(shù)據(jù)保持表的情況下(步驟S131的否),集群管理部24使處理進入步驟S132。
[0125]在步驟S132中,集群管理部24進行將無法接收數(shù)據(jù)保持表的節(jié)點30從數(shù)據(jù)庫系統(tǒng)10割離的處理。接著,在步驟S133中,集群管理部24從數(shù)據(jù)保持表中刪除割離了的節(jié)點30的內(nèi)容,對數(shù)據(jù)保持表進行更新。如果結(jié)束了步驟S133的處理,則集群管理部24使處理進入步驟S134。
[0126]在步驟S134中,集群管理部24使第一分配部22計算出下次任務(wù)表。其中,關(guān)于利用第一分配部22計算下次任務(wù)表的計算處理,將參照圖13來進行說明。
[0127]接著,在步驟S135中,集群管理部24判斷下次任務(wù)表是否發(fā)生了變化。例如,在割離了發(fā)生故障的節(jié)點30的情況下、追加了新的節(jié)點30的情況下,或者長期同步處理結(jié)束而被分配為備份的節(jié)點30發(fā)生變更的情況下,下次任務(wù)表發(fā)生變化。
[0128]在下次任務(wù)表未變化的情況下(步驟S135的否),集群管理部24使處理返回到步驟S111。在下次任務(wù)表發(fā)生了變化的情況下(步驟S135的是),在步驟S136中,集群管理部24將變化后的下次任務(wù)表分發(fā)給多個節(jié)點30的每一個。而且,如果結(jié)束了步驟S136的處理,則集群管理部24使處理返回到步驟S111。
[0129]另外,另一方面在檢測出第二定周期事件的情況下,在步驟S141中,集群管理部24使第二分配部23計算出目標任務(wù)表。其中,關(guān)于利用第二分配部23計算目標任務(wù)表的計算處理,將參照圖14來進行說明。
[0130]接著,在步驟S142中,集群管理部24將計算出的目標任務(wù)表分發(fā)給多個節(jié)點30的每一個。而且,如果結(jié)束了步驟S142的處理,則集群管理部24使處理返回到步驟S111。
[0131]圖13是表示由管理裝置20的第一分配部22進行的下次任務(wù)表的計算處理的流程的圖。第一分配部22在圖12的步驟S123以及步驟S134中被集群管理部24調(diào)出,執(zhí)行以下的步驟S211?步驟S220的處理。
[0132]首先,在步驟S211中,第一分配部22對下次任務(wù)表進行初始化。此時,第一分配部22使下次任務(wù)表的多個節(jié)點30的每一個與數(shù)據(jù)保持表的節(jié)點30建立對應(yīng)。由此,第一分配部22能夠?qū)⒁蚬收习l(fā)生而被割離的節(jié)點30以及新追加的節(jié)點30反映到下次任務(wù)表。
[0133]接著,在步驟S212與步驟S220之間,第一分配部22按每個分區(qū)執(zhí)行循環(huán)處理。例如,在將數(shù)據(jù)庫分割成第一至第三分區(qū)的情況下,第一分配部22以第一分區(qū)、第二分區(qū)以及第三分區(qū)的每一個作為對象,執(zhí)行步驟S212至步驟S220的處理。
[0134]在每個分區(qū)的循環(huán)處理內(nèi),首先在步驟S213中,第一分配部22針對對象的分區(qū)選擇在數(shù)據(jù)保持表中具有最大的時間戳的節(jié)點30的集合。在本例中,時間戳是每當對象的分區(qū)的數(shù)據(jù)集合被更新便逐個加I的值。因此,在步驟S213中,第一分配部22針對對象的分區(qū)能夠選擇存儲了最新的數(shù)據(jù)集合的節(jié)點30的集合。
[0135]接著,在步驟S214中,第一分配部22從在步驟S213中選擇出的節(jié)點30的集合之中,選擇在下次任務(wù)表中被分配為屬主以及備份的分區(qū)的數(shù)量最少的一個節(jié)點30,將選擇出的節(jié)點30分配為屬主。由此,第一分配部22能夠?qū)⒋鎯τ凶钚碌臄?shù)據(jù)集合的節(jié)點30的集合中負荷最小的節(jié)點30分配為屬主。
[0136]此外,在被分配為屬主以及備份的分區(qū)的數(shù)量最少的節(jié)點30存在多個的情況下,第一分配部22也可以使運算能力高的節(jié)點30比運算能力低的節(jié)點30優(yōu)先分配為屬主。取而代之,第一分配部22也可以使接受訪問請求的次數(shù)少的節(jié)點30比接受訪問請求的次數(shù)多的節(jié)點30優(yōu)先分配為屬主。
[0137]接著,在步驟S215中,第一分配部22針對對象的分區(qū),將被分配為屬主的節(jié)點30除外,選擇具有與最大時間戳之差為一定范圍內(nèi)的時間戳的節(jié)點30的集合。由此,第一分配部22能夠針對對象的分區(qū),選擇存儲有最新的數(shù)據(jù)集合或者與最新的數(shù)據(jù)集合比較接近的數(shù)據(jù)集合的節(jié)點30的集合。
[0138]接著,在步驟S216與步驟S219之間,第一分配部22執(zhí)行與復(fù)制的次數(shù)對應(yīng)的循環(huán)處理。這里,復(fù)制的次數(shù)是指在被分配為屬主的節(jié)點30之間能夠復(fù)制處理的最大的節(jié)點30的個數(shù)。即,復(fù)制的次數(shù)與能夠分配的備份的數(shù)量相同。
[0139]在與復(fù)制的次數(shù)對應(yīng)的循環(huán)處理內(nèi),首先在步驟S217中,第一分配部22判斷在由步驟S215選擇出的節(jié)點30的集合之中是否存在能夠分配為備份的節(jié)點30。當存在能夠分配為備份的節(jié)點30時(步驟S217的是),第一分配部22使處理進入步驟S218。
[0140]當沒有能夠分配為備份的節(jié)點30時(步驟S217的否),第一分配部22強制地跳出與復(fù)制的次數(shù)對應(yīng)的循環(huán)處理,使處理進入步驟S220。即,因此,有時第一分配部22計算出不存在備份、或備份的數(shù)量小于復(fù)制的次數(shù)的下次任務(wù)表。
[0141]在步驟S218中,第一分配部22從由步驟S215選擇出的節(jié)點30的集合之中,將在下次任務(wù)表中被分配為屬主以及備份的分區(qū)的數(shù)量最少的節(jié)點30分配為備份。由此,第一分配部22能夠分配存儲有最新的數(shù)據(jù)集合或者與最新的數(shù)據(jù)集合接近的數(shù)據(jù)的節(jié)點30的集合中負荷按從小到大的順序備份的節(jié)點30。
[0142]此外,在被分配為屬主以及備份的分區(qū)的數(shù)量最少的節(jié)點30存在多個的情況下,第一分配部22也可以使運算能力高的節(jié)點30比運算能力低的節(jié)點30優(yōu)先分配為備份。取而代之,第一分配部22也可以使接受訪問請求的次數(shù)少的節(jié)點30比接受訪問請求的次數(shù)多的節(jié)點30優(yōu)先分配為備份。
[0143]而且,第一分配部22從選擇出的節(jié)點30的集合將被分配為備份的節(jié)點30除外,使處理進入步驟S219。在步驟S219中,第一分配部22在步驟S216到步驟S219的處理次數(shù)比復(fù)制的次數(shù)少的情況下使處理返回到步驟S216,在與復(fù)制的次數(shù)一致的情況下使處理進入步驟S220。
[0144]接著,在步驟S220中,第一分配部22在對全部的分區(qū)沒有執(zhí)行步驟S212到步驟S220的處理的情況下,使處理返回到步驟S216。而且,第一分配部22在對全部的分區(qū)執(zhí)行了步驟S212到步驟S220的處理的情況下,結(jié)束下次任務(wù)表的計算而跳出本流程。
[0145]如上所述,根據(jù)第一分配部22,通過對多個分區(qū)的全部分配作為屬主的節(jié)點30,能夠至少使數(shù)據(jù)庫發(fā)揮功能。并且,根據(jù)第一分配部22,通過盡量分配作為備份的節(jié)點30,能夠擔保數(shù)據(jù)庫的冗余度。進而,根據(jù)第一分配部22,通過從負荷最小的節(jié)點30按順序分配作為屬主以及備份的節(jié)點30,能夠使多個節(jié)點30各自的負荷均衡。
[0146]圖14是表示利用管理裝置20的第二分配部23計算目標任務(wù)表的計算處理的流程的圖。第二分配部23在圖12的步驟S141中被集群管理部24調(diào)出,執(zhí)行以下的步驟S311?步驟S324的處理。
[0147]首先,在步驟S311中,第二分配部23對目標任務(wù)表進行初始化。此時,第二分配部23使目標任務(wù)表的多個節(jié)點30的每一個與數(shù)據(jù)保持表的節(jié)點30建立對應(yīng)付。由此,第二分配部23能夠?qū)⒁蚬收习l(fā)生而被割離的節(jié)點30以及新追加的節(jié)點30反映到目標任務(wù)表。
[0148]接著,在步驟S312中,第二分配部23將當前任務(wù)表的分區(qū)以被分配的屬主以及備份的合計數(shù)按升序排序。由此,第二分配部23能夠從被分配為備份的節(jié)點30少的分區(qū)開始按順序分配備份的候補。即,第二分配部23能夠在當前任務(wù)表中從冗余度少的分區(qū)開始按順序分配作為備份的候補的節(jié)點30。
[0149]接著,在步驟S313中,第二分配部23對多個節(jié)點30的每一個所對應(yīng)的負荷值進行初始化。負荷值是對應(yīng)于對節(jié)點30分配了備份的候補的任務(wù)而增加的值。作為一個例子,第二分配部23將各自的負荷值初始化為“O”。
[0150]接著,在步驟S314與步驟S324之間,第二分配部23按每個分區(qū)執(zhí)行循環(huán)處理。該情況下,第二分配部23以在步驟S312中重新排列的當前任務(wù)表的分區(qū)的順序來選擇對象的分區(qū),執(zhí)行循環(huán)處理。
[0151]在每個分區(qū)的循環(huán)處理內(nèi),首先在步驟S315中,第二分配部23針對對象的分區(qū)選擇數(shù)據(jù)保持表中最大的時間戳的節(jié)點30。
[0152]接著,在步驟S316中,第二分配部23將當前任務(wù)表的節(jié)點30以值V按降序排序。這里,值V是針對被分配為屬主的節(jié)點30 “+ I”、針對被分配為備份的節(jié)點30 “+ I”、以及針對最大的時間戳的節(jié)點30 “+ I”的值。因此,不是屬主、也不是備份且時間戳也不是最大的節(jié)點30的值V為“O”。
[0153]由此,第二分配部23能夠?qū)⒈环峙錇閷僦饕约皞浞莸墓?jié)點30或者存儲最新的數(shù)據(jù)集合的節(jié)點30先分配為作為備份的候補的節(jié)點30。
[0154]其中,在排列有多個值V相同的節(jié)點30的情況下,第二分配部23將運算能力高的節(jié)點30配置到上位以使其先成為備份的候補。由此,第二分配部23可以按照運算能力高的節(jié)點30比運算能力低的節(jié)點30優(yōu)先成為屬主或者備份的方式,來分配作為備份的候補的節(jié)點30。取而代之,第二分配部23也可以將接受訪問請求的次數(shù)少的節(jié)點30配置到上位以使其先成為備份的候補。由此,第二分配部23能夠按照接受訪問請求的次數(shù)少的節(jié)點30比接受訪問請求的次數(shù)多的節(jié)點30優(yōu)先成為屬主或者備份的方式,來分配作為備份的候補的節(jié)點30。
[0155]接著,在步驟S317中,第二分配部23通過下述式(I)來計算作為常量的上限權(quán)重MLOAD。
[0156]MLOAD = {分區(qū)的數(shù)X (復(fù)制數(shù)+ I) + (節(jié)點數(shù)一I)} +節(jié)點數(shù)…(I)
[0157]這里,(復(fù)制數(shù)+ I)表示針對一個分區(qū)能夠分配的屬主以及備份的最大數(shù)。這樣的上限權(quán)重MLOAD表示針對一個節(jié)點30能夠分配為備份的候補的數(shù)量的上限基準。
[0158]接著,在步驟S318與步驟S323之間,第二分配部23按每個節(jié)點30執(zhí)行循環(huán)處理。該情況下,第二分配部23以在步驟S316中重新排列的當前任務(wù)表的順序來選擇對象的節(jié)點30,執(zhí)行循環(huán)處理。
[0159]在每個節(jié)點30的循環(huán)處理內(nèi),首先在步驟S319中,第二分配部23判斷是否對(復(fù)制的數(shù)+ I)個節(jié)點30分配了作為備份的候補的節(jié)點30。在對(復(fù)制的數(shù)+ I)個節(jié)點30分配了備份的候補的情況下(步驟S319的是),使處理進入步驟S324。該情況下,第二分配部23針對對象的分區(qū)分配最大數(shù)的作為備份的候補的節(jié)點30。
[0160]第二分配部23在未對(復(fù)制的數(shù)+ I)個節(jié)點30分配備份的候補的情況下(步驟S319的否),使處理進入步驟S320。
[0161]在步驟S320中,第二分配部23判斷成為對象的節(jié)點30的負荷值是否小于上限權(quán)重ML0AD。在成為對象的節(jié)點30的負荷值小于上限權(quán)重MLOAD的情況下(步驟S320的是),第二分配部23使處理進入步驟S321。
[0162]在成為對象的節(jié)點30的負荷值為上限權(quán)重MLOAD以上的情況下(步驟S320的否),第二分配部23使處理進入步驟S323。由此,第二分配部23在對某一個節(jié)點30分配了基準值以上的作為備份的候補的任務(wù)的情況下,能夠避免將該節(jié)點30繼續(xù)分配為備份的候補。結(jié)果,第二分配部23可以將作為備份的候補的任務(wù)分散分配給多個節(jié)點30。
[0163]在步驟S321中,第二分配部23針對對象的分區(qū)分配對象的節(jié)點30作為備份的候補。接著,在步驟S322中,第二分配部23通過對對象的節(jié)點30的負荷值加“I”來進行更新。由此,第二分配部23能夠每當被分配為候補時便使節(jié)點30的負荷值增加I。如果結(jié)束了步驟S322的處理,則第二分配部23使處理進入步驟S323。
[0164]接著,在步驟S323中,第二分配部23在沒有對多個節(jié)點30的全部執(zhí)行步驟S318到步驟S323的處理的情況下,使處理返回到步驟S318。另外,第二分配部23在對多個節(jié)點30的全部執(zhí)行了步驟S318到步驟S223的處理的情況下,使處理進入步驟S324。
[0165]接著,在步驟S324中,第二分配部23在沒有針對多個分區(qū)的全部執(zhí)行步驟S314到步驟S324的處理的情況下,使處理返回到步驟S314。而且,第二分配部23在針對多個分區(qū)的全部執(zhí)行了步驟S314到步驟S324的處理的情況下,結(jié)束目標任務(wù)表的計算而跳出本流程。
[0166]如上所述,根據(jù)第二分配部23,由于從冗余度少的(即,被分配的備份的數(shù)量少的)分區(qū)開始按順序分配備份的候補,所以能夠高效地確保數(shù)據(jù)庫的冗余度。并且,根據(jù)第二分配部23,由于對分配了的備份的候補的數(shù)為基準值以上的節(jié)點30不進一步分配備份的候補,所以能夠?qū)Χ鄠€節(jié)點30分散分配備份的候補。
[0167]圖15是表示節(jié)點30的訪問處理部33的處理流程的圖。訪問處理部33執(zhí)行以下的步驟S411?步驟S433的處理。
[0168]首先,在步驟S411中,訪問處理部33檢測來自客戶端的請求接收事件或者基于復(fù)制處理的請求接收事件。在經(jīng)由網(wǎng)絡(luò)從客戶端接收到針對數(shù)據(jù)庫的訪問請求的情況下,產(chǎn)生來自客戶端的請求接收事件。在經(jīng)由網(wǎng)絡(luò)從成為屬主的其他節(jié)點30接收到基于復(fù)制處理的更新請求或者登記請求的情況下,產(chǎn)生基于復(fù)制處理的請求接收事件。
[0169]訪問處理部33在檢測出來自客戶端的請求接收事件的情況下,使處理進入步驟S421。訪問處理部33在檢測出基于復(fù)制處理的請求接收事件的情況下,使處理進入步驟S431。
[0170]在檢測出來自客戶端的請求接收事件的情況下,在步驟S421中,訪問處理部33例如進行計算來取得來自客戶端的訪問請求所表示的請求目的地的分區(qū)的編號。接著,在步驟S422中,訪問處理部33參照當前任務(wù)表來判斷針對請求目的地的分區(qū)自節(jié)點是否被分配為屬主。
[0171]在針對請求目的地的分區(qū)自節(jié)點未被分配為屬主的情況下(步驟S422的否),在步驟S423中,訪問處理部33向客戶端通知被分配為屬主的節(jié)點30的編號,然后使處理返回到步驟S411。
[0172]在針對請求目的地的分區(qū)自節(jié)點被分配為屬主的情況下(步驟S422的是),在步驟S424中,訪問處理部33判斷訪問請求的類型是參照還是更新或登記。
[0173]在訪問請求的類型是參照的情況下(步驟S424的參照),在步驟S425中,訪問處理部33從數(shù)據(jù)貯存部31讀出有參照請求的數(shù)據(jù)并發(fā)送至客戶端,使處理返回到步驟S411。
[0174]在訪問請求的類型是更新或者登記的情況下(步驟S424的更新/登記),在步驟S426中,針對請求目的地的分區(qū),與被分配為備份的其他節(jié)點30之間執(zhí)行復(fù)制處理。即,訪問處理部33將與從客戶端接收到的更新或者登記的請求相同的訪問請求向被分配為備份的節(jié)點30發(fā)送。
[0175]如果復(fù)制處理結(jié)束,則接著在步驟S427中,訪問處理部33按照從客戶端發(fā)送來的更新或者登記請求,進行數(shù)據(jù)貯存部31中存儲的數(shù)據(jù)的更新或者對數(shù)據(jù)貯存部31進行新的數(shù)據(jù)的登記。接著,在步驟S428中,訪問處理部33通過加I處理來對數(shù)據(jù)保持表的時間戳進行更新,然后使處理返回到步驟S411。
[0176]另一方面,訪問處理部33在檢測出基于復(fù)制處理的請求接收事件的情況下,在步驟S431中,根據(jù)從成為屬主的節(jié)點30發(fā)送來的更新或者登記請求,進行數(shù)據(jù)貯存部31中存儲的數(shù)據(jù)的更新或者對數(shù)據(jù)貯存部31進行新的數(shù)據(jù)的登記。接著,在步驟S432中,訪問處理部33通過加I處理對數(shù)據(jù)保持表的時間戳進行更新。接著,在步驟S433中,訪問處理部33向?qū)僦魍ㄖ怯浕蛘吒陆Y(jié)束,然后使處理返回到步驟S411。
[0177]此外,訪問處理部33也可以在步驟S425以及步驟S428中,從客戶端接收包括一系列訪問請求的事項,來執(zhí)行與來自客戶端的訪問請求對應(yīng)的事項處理。另外,訪問處理部33也可以在步驟S426中,當通過復(fù)制處理發(fā)送更新或者登記的請求時,向被分配為備份的節(jié)點30發(fā)送包括一系列訪問請求的事項。另外,訪問處理部33也可以在步驟S431中,從成為屬主的節(jié)點30接收包括一系列訪問請求的事項,來執(zhí)行與來自成為屬主的節(jié)點30的訪問請求對應(yīng)的事項處理。
[0178]圖16是表示節(jié)點30的節(jié)點管理部34的處理流程的圖。節(jié)點管理部34執(zhí)行以下的步驟S511?步驟S541的處理。
[0179]首先,在步驟S511中,節(jié)點管理部34對第三定周期事件、下次任務(wù)表的接收事件或者目標任務(wù)表的接收事件進行檢測。第三定周期事件定期產(chǎn)生。下次任務(wù)表的接收事件在節(jié)點管理部34接收到下次任務(wù)表的情況下產(chǎn)生。目標任務(wù)表的接收事件在節(jié)點管理部34接收到目標任務(wù)表的情況下產(chǎn)生。
[0180]節(jié)點管理部34在檢測出第三定周期事件的情況下,使處理進入步驟S521。節(jié)點管理部34在檢測出下次任務(wù)表的接收事件的情況下,使處理進入步驟S531。節(jié)點管理部34在檢測出目標任務(wù)表的接收事件的情況下,使處理進入步驟S541。
[0181]在檢測出第三定周期事件的情況下,在步驟S521中,節(jié)點管理部34將表存儲部32中存儲的數(shù)據(jù)保持表發(fā)送給管理裝置20的集群管理部24。然后,節(jié)點管理部34使處理返回到步驟S511。
[0182]在檢測出下次任務(wù)表的接收事件的情況下,在步驟S531中,如果訪問處理部33正執(zhí)行事項,則節(jié)點管理部34使處理中斷。接著,在步驟S532中,節(jié)點管理部34根據(jù)接收到的下次任務(wù)表,執(zhí)行短期同步處理。
[0183]具體而言,在成為屬主的節(jié)點30與成為備份的節(jié)點30之間存儲的數(shù)據(jù)集合存在不同的情況下,節(jié)點管理部34針對多個分區(qū)的每一個,使訪問處理部33執(zhí)行與復(fù)制處理同樣的處理。由此,節(jié)點管理部34針對多個分區(qū)的每一個,能夠取得被分配為屬主的節(jié)點30與被分配為備份的節(jié)點30之間的同步。而且,節(jié)點管理部34針對多個分區(qū)的每一個,使訪問處理部33執(zhí)行與被下次任務(wù)表分配的新的任務(wù)(屬主以及備份)對應(yīng)的處理。
[0184]如果短期同步處理結(jié)束,則接著在步驟S533中,節(jié)點管理部34將當前任務(wù)表改寫成下次任務(wù)表的內(nèi)容。由此,訪問處理部33能夠接受來自客戶端的訪問請求。
[0185]接著,在步驟S534中,節(jié)點管理部34進行中斷而重新開始事項。然后,節(jié)點管理部34使處理返回到步驟S511。
[0186]在檢測出目標任務(wù)表的接收事件的情況下,在步驟S541中,節(jié)點管理部34對表存儲部32中存儲的目標任務(wù)表進行更新。然后,節(jié)點管理部34使處理返回到步驟S511。
[0187]圖17是表示節(jié)點30的轉(zhuǎn)送部35的處理流程的圖。轉(zhuǎn)送部35執(zhí)行以下的步驟S611?步驟S618的處理以及步驟S621?步驟S622的處理。
[0188]首先,在步驟S611中,轉(zhuǎn)送部35判斷CPU12的負荷是否大于預(yù)先決定的基準值。在負荷大于基準值的情況下(步驟S611的是),在步驟S612中,轉(zhuǎn)送部35待機(sleep) —定時間后,使處理返回到步驟S611。
[0189]在負荷為基準值以下的情況下(步驟S611的否),在步驟S613中,轉(zhuǎn)送部35檢測當前任務(wù)表與目標任務(wù)表之間的差。接著,在步驟S614中,轉(zhuǎn)送部35判斷當前任務(wù)表與目標任務(wù)表之間是否存在差。
[0190]當在當前任務(wù)表與目標任務(wù)表之間不存在差時(步驟S614的否),在步驟S615中,如果當前任務(wù)表、下次任務(wù)表以及目標任務(wù)表的任意一個中存在未對自節(jié)點分配任務(wù)的分區(qū),則轉(zhuǎn)送部35將該數(shù)據(jù)集合消除。而且,轉(zhuǎn)送部35在步驟S615的處理之后,使處理返回到步驟S611。
[0191]當在當前任務(wù)表與目標任務(wù)表之間存在差時(步驟S614的是),在步驟S616中,轉(zhuǎn)送部35針對在當前任務(wù)表中自節(jié)點為屬主的分區(qū),檢測在目標任務(wù)表為備份的候補且在當前任務(wù)表中不是屬主也不是備份的其他節(jié)點30。
[0192]接著,在步驟S617中,轉(zhuǎn)送部35判斷是否存在在目標任務(wù)表中是備份的候補、在當前任務(wù)表中不是屬主也不是備份的其他節(jié)點30。在不存在的情況下(步驟S617的否),轉(zhuǎn)送部35使處理返回到步驟S611。
[0193]在存在的情況下(步驟S617的是),在步驟S618中,轉(zhuǎn)送部35不將針對來自客戶端的訪問請求的處理中斷地開始長期同步處理。具體而言,關(guān)于在當前任務(wù)表中自節(jié)點被分配為屬主的分區(qū),轉(zhuǎn)送部35針對被目標任務(wù)表分配為備份的候補且未被當前任務(wù)表分配為屬主也未被分配為備份的其他節(jié)點30發(fā)送該分區(qū)的數(shù)據(jù)集合。該情況下,轉(zhuǎn)送部35通過不阻礙訪問處理部33對事項的執(zhí)行的后臺發(fā)送數(shù)據(jù)集合。由此,轉(zhuǎn)送部35能夠不降低針對來自客戶端的訪問請求的響應(yīng)速度等地執(zhí)行長期同步處理。
[0194]而且,如果結(jié)束了步驟S618的處理,則轉(zhuǎn)送部35使處理返回到步驟S611。
[0195]另一方面,具備被目標任務(wù)表分配為備份的候補且未被當前任務(wù)表分配為屬主也未被分配為備份的分區(qū)的其他節(jié)點30的轉(zhuǎn)送部35執(zhí)行以下的步驟S621以及步驟S622的處理。
[0196]在步驟S621中,轉(zhuǎn)送部35不中斷針對來自客戶端的訪問請求的處理地執(zhí)行長期同步處理。具體而言,轉(zhuǎn)送部35針對被目標任務(wù)表分配為備份的候補且未被當前任務(wù)表分配為屬主也未被分配為備份的分區(qū),從被分配為屬主的節(jié)點30接收數(shù)據(jù)集合。該情況下,轉(zhuǎn)送部35通過不阻礙訪問處理部33對事項的執(zhí)行的后臺來接收數(shù)據(jù)集合。
[0197]接著,在步驟S622中,轉(zhuǎn)送部35對數(shù)據(jù)保持表進行更新。如果長期同步處理結(jié)束,則由于成為屬主的節(jié)點30中存儲的數(shù)據(jù)集合的副本被存儲,所以轉(zhuǎn)送部35通過對數(shù)據(jù)保持表進行更新,能夠使該分區(qū)的時間戳與屬主的數(shù)據(jù)保持表的時間戳一致。然后,如果轉(zhuǎn)送部35結(jié)束了步驟S622的處理,則轉(zhuǎn)送部35結(jié)束本流程。
[0198]如以上那樣,根據(jù)轉(zhuǎn)送部35,由于在被分配為備份的候補的節(jié)點30中生成被分配為屬主的節(jié)點30的數(shù)據(jù)集合的副本,所以能夠新產(chǎn)生可成為屬主或者備份的節(jié)點30。
[0199]參照圖18?圖24,對數(shù)據(jù)庫系統(tǒng)10的動作例進行說明。圖18是表示針對3個分區(qū)# I?# 3的每一個分配了作為屬主以及備份的節(jié)點30的情況下的、節(jié)點30 — A至節(jié)點30 — C各自的狀態(tài)的圖。
[0200]在本例中,如圖18的當前任務(wù)表所示,針對分區(qū)# 1,節(jié)點30 — A被分配為屬主,節(jié)點30 — B被分配為備份。另外,針對分區(qū)# 2,節(jié)點30 — B被分配為屬主,節(jié)點30 — C被分配為備份。另外,針對分區(qū)# 3,節(jié)點30 — C被分配為屬主,節(jié)點30 — A被分配為備份。
[0201]節(jié)點30 — A以及節(jié)點30 — B根據(jù)事項來執(zhí)行針對分區(qū)# I的復(fù)制處理。結(jié)果,如圖18的數(shù)據(jù)保持表所示,分區(qū)# I的時間戳在節(jié)點30 — A以及節(jié)點30 — B中成為相同值。
[0202]另外,節(jié)點30 — B以及節(jié)點30 — C基于事項來執(zhí)行針對分區(qū)# 2的復(fù)制處理。結(jié)果,如圖18的數(shù)據(jù)保持表所示,分區(qū)# 2的時間戳在節(jié)點30 — B以及節(jié)點30 — C中成為相同值。
[0203]另外,節(jié)點30 — C以及節(jié)點30 — A基于事項來執(zhí)行針對分區(qū)# 3的復(fù)制處理。結(jié)果,如圖18的數(shù)據(jù)保持表所示,分區(qū)# 3的時間戳在節(jié)點30 — C以及節(jié)點30 — A中成為相同值。
[0204]圖19是表示對應(yīng)于從圖18的狀態(tài)開始節(jié)點30 — C發(fā)生了故障而執(zhí)行了短期同步處理之后的、節(jié)點30 — A至節(jié)點30 — C各自的狀態(tài)的圖。設(shè)管理裝置20的集群管理部24從圖18的狀態(tài)開始無法從節(jié)點30 — C檢測出數(shù)據(jù)保持表,檢測為節(jié)點30 — C發(fā)生了故障。
[0205]當多個節(jié)點30中的任意節(jié)點30發(fā)生了故障時,管理裝置20的集群管理部24將發(fā)生了故障的節(jié)點30割離,并且使第一分配部22計算出下次任務(wù)表。
[0206]對應(yīng)于來自集群管理部24的調(diào)出,第一分配部22將發(fā)生了故障的節(jié)點30除外來再次分配作為屬主以及備份的節(jié)點30,生成下次任務(wù)表。該情況下,第一分配部22為了至少使數(shù)據(jù)庫發(fā)揮功能而按照至少存在屬主的方式對多個分區(qū)的每一個分配節(jié)點30。例如,第一分配部22在作為屬主的節(jié)點30發(fā)生了故障的情況下,將作為備份的節(jié)點30分配為屬主。并且,第一分配部22為了進一步提高數(shù)據(jù)庫的冗余度而按照盡量存在備份的方式對多個分區(qū)的每一個分配節(jié)點30。
[0207]在本例中,再分配的結(jié)果如圖19的下次任務(wù)表所示,針對分區(qū)# 1,節(jié)點30 — A被分配為屬主,節(jié)點30 — B被分配為備份。另外,針對分區(qū)# 2,節(jié)點30 — B被分配為屬主。另外,針對分區(qū)# 3,節(jié)點30 — A被分配為屬主。
[0208]而且,集群管理部24將下次任務(wù)表分發(fā)給節(jié)點30 — A以及節(jié)點30 — B。節(jié)點30 -A以及節(jié)點30 — B各自的節(jié)點管理部34若接收到下次任務(wù)表則執(zhí)行短期同步處理,并且,將當前任務(wù)表的內(nèi)容改寫為下次任務(wù)表的內(nèi)容。由此,節(jié)點30 — A以及節(jié)點30 — B的每一個能夠執(zhí)行與新被分配的任務(wù)對應(yīng)的處理。
[0209]圖20是表示從圖19的狀態(tài)開始執(zhí)行的長期同步處理的一個例子的圖。另外,管理裝置20的集群管理部24在將發(fā)生了故障的節(jié)點30 — C割離的情況下,使第二分配部23計算出目標任務(wù)表。
[0210]對應(yīng)于來自集群管理部24的調(diào)出,第二分配部23將發(fā)生了故障的節(jié)點30除外來再次分配作為備份的候補的節(jié)點30,生成目標任務(wù)表。該情況下,第二分配部23為了提高數(shù)據(jù)庫的冗余度而按照至少存在屬主以及備份的方式對多個分區(qū)的每一個分配作為候補的節(jié)點30。
[0211]在圖19的狀態(tài)下,不存在針對分區(qū)# 2以及分區(qū)# 3的備份的節(jié)點30。因此,第二分配部23將節(jié)點30 — A分配為針對分區(qū)# 2的備份的候補,將節(jié)點30 — B分配為針對分區(qū)# 3的備份的候補。
[0212]此外,在本例中,第二分配部23將已經(jīng)被當前任務(wù)表分配為屬主以及備份的節(jié)點30也分配為備份的候補。因此,如圖20的目標任務(wù)表所示,針對分區(qū)# I?# 3的每一個分配節(jié)點30 — A以及節(jié)點30 — B雙方作為備份的候補。
[0213]而且,集群管理部24將目標任務(wù)表分發(fā)給節(jié)點30 — A以及節(jié)點30 — B。節(jié)點30 -A以及節(jié)點30 — B各自的轉(zhuǎn)送部35針對當前任務(wù)表與目標任務(wù)表之差的部分執(zhí)行長期同步處理。即,節(jié)點30 — B的轉(zhuǎn)送部35通過后臺將分區(qū)# 2的數(shù)據(jù)集合發(fā)送給節(jié)點30 -A0另外,節(jié)點30 — A的轉(zhuǎn)送部35通過后臺將分區(qū)# 3的數(shù)據(jù)集合發(fā)送給節(jié)點30 —B0
[0214]需要說明的是,此時轉(zhuǎn)送部35不中斷針對來自客戶端的訪問請求的處理地執(zhí)行長期同步處理。
[0215]如果長期同步處理結(jié)束,則節(jié)點30 — A能夠存儲分區(qū)# 2的數(shù)據(jù)集合的副本。并且,如圖20的數(shù)據(jù)保持表所示,此時的分區(qū)# 2的時間戳在節(jié)點30 — A以及節(jié)點30 — B成為相同值。
[0216]另外,節(jié)點30 — B能夠存儲分區(qū)# 3的數(shù)據(jù)集合的副本。并且,如圖20的數(shù)據(jù)保持表所示,分區(qū)# 3的時間戳在節(jié)點30 — A以及節(jié)點30 — B中成為相同值。
[0217]圖21是表示對應(yīng)于圖20的長期同步處理結(jié)束而執(zhí)行了短期同步處理之后的、節(jié)點30 — A至節(jié)點30 — C各自的狀態(tài)的圖。管理裝置20的集群管理部24定期調(diào)出第一分配部22來使其計算出下次任務(wù)表。
[0218]在長期同步處理結(jié)束之后被從集群管理部24調(diào)出的情況下,第一分配部22利用通過長期同步處理生成的副本進一步提高冗余度的方式,針對多個分區(qū)的每一個再次分配作為屬主以及備份的節(jié)點30。
[0219]在本例中,如圖21的下次任務(wù)表所示,針對分區(qū)# 1,節(jié)點30 — A被分配為屬主,節(jié)點30 — B被分配為備份。另外,針對分區(qū)# 2,節(jié)點30 — B被分配為屬主,節(jié)點30 — A被分配為備份。另外,針對分區(qū)# 3,節(jié)點30 — A被分配為屬主,節(jié)點30 — B被分配為備份。
[0220]而且,集群管理部24將下次任務(wù)表分發(fā)給節(jié)點30 — A以及節(jié)點30 — B。節(jié)點30-A以及節(jié)點30 — B各自的節(jié)點管理部34如果接收到下次任務(wù)表則執(zhí)行短期同步處理,并且,將當前任務(wù)表的內(nèi)容改寫成下次任務(wù)表的內(nèi)容。由此,節(jié)點30 — A以及節(jié)點30 —B的每一個能夠執(zhí)行與新被分配的任務(wù)對應(yīng)的處理。
[0221]圖22是表示從圖21的狀態(tài)開始追加了節(jié)點30 — D的情況下的、節(jié)點30 — A至節(jié)點30 — D各自的狀態(tài)的圖。管理裝置20的集群管理部24例如檢測出從圖21的狀態(tài)開始新追加了節(jié)點30 — D。
[0222]集群管理部24如圖22的數(shù)據(jù)保持表所示,生成追加了節(jié)點30 — D的數(shù)據(jù)保持表。第一分配部22對應(yīng)于向數(shù)據(jù)保持表追加了節(jié)點30 — D而生成被追加了節(jié)點30 — D的下次任務(wù)表。
[0223]原本,節(jié)點30 — D不存儲數(shù)據(jù)集合。因此,第一分配部22在追加了節(jié)點30 — D之后不變更屬主以及備份的分配。
[0224]圖23是表示從圖22的狀態(tài)開始執(zhí)行的長期同步處理的一個例子的圖。在追加了新的節(jié)點30的情況下,第二分配部23針對多個分區(qū)的每一個再次分配包括新的節(jié)點30在內(nèi)的作為備份的候補的節(jié)點30。該情況下,第二分配部23按照被分配的屬主以及備份的數(shù)量之差為在節(jié)點30間預(yù)先決定的值的范圍內(nèi)的方式,針對多個分區(qū)的每一個分配作為備份的候補的節(jié)點30。
[0225]在本例中,再分配的結(jié)果如圖23的目標任務(wù)表所示,針對分區(qū)# I,節(jié)點30 — A以及節(jié)點30 — B被分配為備份的候補。另外,針對分區(qū)# 2,節(jié)點30 — B以及節(jié)點30 — D被分配為備份的候補。另外,針對分區(qū)# 3,節(jié)點30 — A以及節(jié)點30 — D被分配為備份的候補。
[0226]而且,集群管理部24將目標任務(wù)表分發(fā)給節(jié)點30 — A、節(jié)點30 — B以及節(jié)點30 —D0節(jié)點30 - A、節(jié)點30 — B以及節(jié)點30 — D各自的轉(zhuǎn)送部35針對當前任務(wù)表與目標任務(wù)表之差的部分執(zhí)行長期同步處理。
[0227]S卩,節(jié)點30 — B的轉(zhuǎn)送部35通過后臺將分區(qū)# 2的數(shù)據(jù)集合發(fā)送給節(jié)點30 — D。另外,節(jié)點30 — A的轉(zhuǎn)送部35通過后臺將分區(qū)# 3的數(shù)據(jù)集合發(fā)送給節(jié)點30 — D。其中,此時,轉(zhuǎn)送部35不中斷針對來自客戶端的訪問請求的處理地執(zhí)行長期同步處理。
[0228]結(jié)果,節(jié)點30 — D能夠存儲分區(qū)# 2的數(shù)據(jù)集合的副本。并且,如圖23的數(shù)據(jù)保持表所示,分區(qū)# 2的時間戳在節(jié)點30 — B以及節(jié)點30 — D中成為相同值。
[0229]另外,節(jié)點30 — D能夠存儲分區(qū)# 3的數(shù)據(jù)集合的副本。并且,如圖23的數(shù)據(jù)保持表所示,分區(qū)# 3的時間戳在節(jié)點30 — A以及節(jié)點30 — D中成為相同值。
[0230]圖24是表示對應(yīng)于圖23的長期同步處理結(jié)束而執(zhí)行了短期同步處理后的、節(jié)點30-A至節(jié)點30 — D各自的狀態(tài)的圖。在長期同步處理結(jié)束后被從集群管理部24調(diào)出的情況下,第一分配部22針對多個分區(qū)的每一個,按照利用由長期同步處理生成的副本使節(jié)點30間的負荷更均衡的方式,再次分配作為屬主以及備份的節(jié)點30。
[0231]在本例中,再分配的結(jié)果如圖24的下次任務(wù)表所示,針對分區(qū)# 1,節(jié)點30 — A被分配為屬主,節(jié)點30 — B被分配為備份。另外,針對分區(qū)# 2,節(jié)點30 — B被分配為屬主,節(jié)點30 — D被分配為備份。另外,針對分區(qū)# 3,節(jié)點30 — A被分配為屬主,節(jié)點30 — D被分配為備份。
[0232]而且,集群管理部24將下次任務(wù)表分發(fā)給節(jié)點30 — A、節(jié)點30 — B以及節(jié)點30 —D0節(jié)點30 - A、節(jié)點30 — B以及節(jié)點30 — D各自的節(jié)點管理部34在接收到下次任務(wù)表后執(zhí)行短期同步處理,并且,將當前任務(wù)表的內(nèi)容改寫為下次任務(wù)表的內(nèi)容。由此,節(jié)點30 —A、節(jié)點30 — B以及節(jié)點30 — D的每一個能夠執(zhí)行與新被分配的任務(wù)對應(yīng)的處理。
[0233]綜上所述,根據(jù)本實施方式涉及的數(shù)據(jù)庫系統(tǒng)10,由于對作為備份的候補的節(jié)點30進行分配而從作為屬主的節(jié)點30向作為候補的節(jié)點30進行數(shù)據(jù)集合的轉(zhuǎn)送,所以能夠使數(shù)據(jù)庫具有冗余度且使節(jié)點30的處理的負荷均衡。并且,根據(jù)數(shù)據(jù)庫系統(tǒng)10,由于能夠不中斷針對來自客戶端的訪問請求的處理地執(zhí)行這樣的處理,所以即使在割離節(jié)點30或新追加節(jié)點30的情況下,也能不使系統(tǒng)停止地進行數(shù)據(jù)的重新配置。
[0234]另外,本實施方式的管理裝置20以及節(jié)點30中執(zhí)行的程序被以能夠安裝的形式或者能夠執(zhí)行的形式的文件記錄到CD — ROM、軟盤(FD)、CD — R、DVD (Digital VersatileDisk)等計算機可讀取的記錄介質(zhì)中來進行提供。
[0235]另外,也可以構(gòu)成為將本實施方式的管理裝置20以及節(jié)點30中執(zhí)行的程序儲存到與因特網(wǎng)等網(wǎng)絡(luò)連接的計算機上,通過經(jīng)由網(wǎng)絡(luò)下載來進行提供。另外,還可以構(gòu)成為將本實施方式的管理裝置20以及節(jié)點30中執(zhí)行的程序經(jīng)由因特網(wǎng)等網(wǎng)絡(luò)提供或者分發(fā)。
[0236]另外,也可以構(gòu)成為將本實施方式的管理裝置20以及節(jié)點30中執(zhí)行的程序預(yù)先編寫到ROM等中來進行提供。
[0237]本實施方式的管理裝置20所執(zhí)行的程序成為包括上述各部(表存儲部21、第一分配部22,第二分配部23以及集群管理部24)的模塊構(gòu)成,作為實際的硬件,通過CPU (處理器)從上述存儲介質(zhì)讀出程序并執(zhí)行來將上述各部加載到主存儲裝置上,表存儲部21、第一分配部22、第二分配部23以及集群管理部24在主存儲裝置上生成。
[0238]另外,本實施方式的節(jié)點30所執(zhí)行的程序成為包括上述各部(數(shù)據(jù)貯存部31、表存儲部32、訪問處理部33、節(jié)點管理部34以及轉(zhuǎn)送部35)的模塊構(gòu)成,作為實際的硬件,通過CPU (處理器)從上述存儲介質(zhì)讀出程序并執(zhí)行來將上述各部加載到主存儲裝置上,數(shù)據(jù)貯存部31,表存儲部32、訪問處理部33、節(jié)點管理部34以及轉(zhuǎn)送部35在主存儲裝置上生成。
[0239]對本發(fā)明的幾個實施方式進行了說明,但這些實施方式只是例示,并不意圖限定發(fā)明的范圍。這些新的實施方式能夠通過其他各種方式來實施,在不脫離發(fā)明主旨的范圍可進行各種省略、置換、變更。這些實施方式及其變形包含在發(fā)明的范圍、主旨中,并且,屬于技術(shù)方案所記載的發(fā)明和其等同的范圍。
[0240]符號說明
[0241]10-數(shù)據(jù)庫系統(tǒng);12-CPU ;13_存儲器;14-通信I / F ; 15-貯存器I / F;16_外部存儲裝置;20_管理裝置;21_表存儲部;22_第一分配部;23_第二分配部;24_集群管理部;30-節(jié)點;31-數(shù)據(jù)貯存部;32-表存儲部;33_訪問處理部;34_節(jié)點管理部;35_轉(zhuǎn)送部。
【權(quán)利要求】
1.一種數(shù)據(jù)庫系統(tǒng),具備存儲數(shù)據(jù)庫的多個節(jié)點和管理所述多個節(jié)點的管理裝置, 所述管理裝置具有: 第一分配部,根據(jù)所述多個節(jié)點各自的狀況的變更,來分配存儲數(shù)據(jù)集合并受理對所述數(shù)據(jù)集合的訪問請求的第一節(jié)點、以及存儲所述數(shù)據(jù)集合并成為所述第一節(jié)點的備份的第二節(jié)點,對所述多個節(jié)點的每個節(jié)點指示與分配對應(yīng)的動作;和 第二分配部,根據(jù)所述多個節(jié)點的狀況并根據(jù)所述第一節(jié)點以及所述第二節(jié)點的分配狀況的變更,分配作為所述第一節(jié)點或者所述第二節(jié)點的候補的第三節(jié)點,對所述多個節(jié)點的每個節(jié)點指示用于使所述第三節(jié)點作為所述第一節(jié)點或者所述第二節(jié)點進行動作的準備, 所述多個節(jié)點的每個節(jié)點具有將所述第一節(jié)點或者所述第二節(jié)點的數(shù)據(jù)集合向所述第三節(jié)點發(fā)送的轉(zhuǎn)送部。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)庫系統(tǒng), 所述多個節(jié)點將所述數(shù)據(jù)庫分割成多個分區(qū)進行存儲, 所述第一分配部針對所述多個分區(qū)的每個分區(qū)分配所述第一節(jié)點以及所述第二節(jié)點, 所述第二分配部針對所述多個分區(qū)的每個分區(qū)分配所述第三節(jié)點。
3.根據(jù)權(quán)利要求2所述的數(shù)據(jù)庫系統(tǒng), 所述第一分配部生成第一表,通過將所述第一表分發(fā)給所述多個節(jié)點的每個節(jié)點來指示與分配對應(yīng)的動作,所述第一表表示針對多個分區(qū)的每個分區(qū),所述多個節(jié)點的每個節(jié)點是所述第一節(jié)點還是所述第二節(jié)點, 所述第二分配部生成第二表,通過將所述第二表分發(fā)給所述多個節(jié)點的每個節(jié)點來指示所述準備,所述第二表表示針對多個分區(qū)的每個分區(qū),所述多個節(jié)點的每個節(jié)點是否是所述第三節(jié)點。
4.根據(jù)權(quán)利要求2所述的數(shù)據(jù)庫系統(tǒng), 在數(shù)據(jù)集合向所述第三節(jié)點的發(fā)送已結(jié)束的情況下,所述第一分配部針對所述多個分區(qū)的每個分區(qū)再次分配所述第一節(jié)點以及所述第二節(jié)點。
5.根據(jù)權(quán)利要求4所述的數(shù)據(jù)庫系統(tǒng), 在所述多個節(jié)點中任意的節(jié)點發(fā)生了故障的情況下, 所述第一分配部將所述發(fā)生了故障的節(jié)點除外,再次分配所述第一節(jié)點以及所述第二節(jié)點, 所述第二分配部將所述發(fā)生了故障的節(jié)點除外,再次分配所述第三節(jié)點。
6.根據(jù)權(quán)利要求5所述的數(shù)據(jù)庫系統(tǒng), 所述第二分配部針對所述多個分區(qū)的每個分區(qū),按照至少存在所述第一節(jié)點以及所述第二節(jié)點的方式來分配所述第三節(jié)點。
7.根據(jù)權(quán)利要求4所述的數(shù)據(jù)庫系統(tǒng), 在追加了新的節(jié)點的情況下,所述第二分配部針對所述多個分區(qū)的每個分區(qū)將所述新的節(jié)點包括在內(nèi)再次分配所述第三節(jié)點。
8.根據(jù)權(quán)利要求7所述的數(shù)據(jù)庫系統(tǒng), 所述第二分配部按照被分配的所述第一節(jié)點與所述第二節(jié)點的數(shù)量之差成為在節(jié)點間預(yù)先決定的值的范圍內(nèi)的方式,針對所述多個分區(qū)的每個分區(qū)分配所述第三節(jié)點。
9.根據(jù)權(quán)利要求8所述的數(shù)據(jù)庫系統(tǒng), 所述第二分配部按照運算能力高的節(jié)點比運算能力低的節(jié)點優(yōu)先成為所述第一節(jié)點或者所述第二節(jié)點的方式來分配所述第三節(jié)點。
10.根據(jù)權(quán)利要求8所述的數(shù)據(jù)庫系統(tǒng), 所述第二分配部按照受理所述訪問請求的數(shù)量少的節(jié)點比受理所述訪問請求的數(shù)量多的節(jié)點優(yōu)先成為所述第一節(jié)點或者所述第二節(jié)點的方式來分配所述第三節(jié)點。
11.根據(jù)權(quán)利要求1所述的數(shù)據(jù)庫系統(tǒng), 所述多個節(jié)點的每個節(jié)點還具有訪問處理部,所述訪問處理部受理包括針對所述第一節(jié)點的分區(qū)的一系列訪問請求在內(nèi)的事項來執(zhí)行與來自客戶端的訪問請求對應(yīng)的處理,在執(zhí)行所述分區(qū)的數(shù)據(jù)集合的更新或者登記的訪問請求的情況下,向所述第二節(jié)點發(fā)送包括一系列訪問請求在內(nèi)的事項并使其執(zhí)行該事項, 所述轉(zhuǎn)送部將所述第一節(jié)點或者所述第二節(jié)點的所述分區(qū)的數(shù)據(jù)集合通過不妨礙所述事項的執(zhí)行的后臺發(fā)送給所述第三節(jié)點。
12.—種管理裝置,是對存儲數(shù)據(jù)庫的多個節(jié)點進行管理的管理裝置, 所述管理裝置具有: 第一分配部,根據(jù)所述多個節(jié)點各自的狀況的變更,來分配存儲數(shù)據(jù)集合并受理對所述數(shù)據(jù)集合的訪問請求的第一節(jié)點、以及存儲所述數(shù)據(jù)集合并成為所述第一節(jié)點的備份的第二節(jié)點,對所述多個節(jié)點的每個節(jié)點指示與分配對應(yīng)的動作;和 第二分配部,根據(jù)所述多個節(jié)點的狀況并根據(jù)述第一節(jié)點以及所述第二節(jié)點的分配狀況的變更,分配作為所述第一節(jié)點或者所述第二節(jié)點的候補的第三節(jié)點,針對所述多個節(jié)點的每個節(jié)點指示用于使所述第三節(jié)點作為所述第一節(jié)點或者所述第二節(jié)點進行動作的準備, 所述多個節(jié)點的每個節(jié)點具有將所述第一節(jié)點或者所述第二節(jié)點的數(shù)據(jù)集合向所述第三節(jié)點發(fā)送的轉(zhuǎn)送部。
13.一種節(jié)點,是權(quán)利要求1所述的數(shù)據(jù)庫系統(tǒng)中具備的節(jié)點。
14.一種程序,用于使計算機作為權(quán)利要求1所述的數(shù)據(jù)庫系統(tǒng)中具備的管理裝置發(fā)?車功能。
15.一種程序,用于使計算機作為權(quán)利要求1所述的數(shù)據(jù)庫系統(tǒng)中具備的節(jié)點發(fā)揮功倉泛。
16.一種數(shù)據(jù)處理方法,是具備存儲數(shù)據(jù)庫的多個節(jié)點和管理所述多個節(jié)點的管理裝置的數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)處理方法, 所述管理裝置執(zhí)行: 第一分配步驟,根據(jù)所述多個節(jié)點各自的狀況的變更,來分配存儲數(shù)據(jù)集合并受理對所述數(shù)據(jù)集合的訪問請求的第一節(jié)點、以及存儲所述數(shù)據(jù)集合并成為所述第一節(jié)點的備份的第二節(jié)點,對所述多個節(jié)點的每個節(jié)點指示與分配對應(yīng)的動作;和 第二分配步驟,根據(jù)所述多個節(jié)點的狀況并根據(jù)所述第一節(jié)點以及所述第二節(jié)點的分配狀況的變更,分配作為所述第一節(jié)點或者所述第二節(jié)點的候補的第三節(jié)點,針對所述多個節(jié)點的每個節(jié)點指示用于使所述第三節(jié)點作為所述第一節(jié)點或者所述第二節(jié)點進行動作的準備, 所述多個節(jié)點的每個節(jié)點執(zhí)行將所述第一節(jié)點或者所述第二節(jié)點的數(shù)據(jù)集合向所述第三節(jié)點發(fā)送的轉(zhuǎn)送步驟。
【文檔編號】G06F11/20GK104185841SQ201380003048
【公開日】2014年12月3日 申請日期:2013年3月12日 優(yōu)先權(quán)日:2013年3月12日
【發(fā)明者】服部雅一 申請人:株式會社東芝, 東芝解決方案株式會社