使用鍵值存儲(chǔ)系統(tǒng)的分布式sql查詢處理的制作方法
【專利說(shuō)明】
【背景技術(shù)】
[0001]大規(guī)模的基于web的應(yīng)用可以使用分布式存儲(chǔ)系統(tǒng)來(lái)存儲(chǔ)應(yīng)用數(shù)據(jù),諸如關(guān)于其用戶、顧客、內(nèi)部狀態(tài)等等的數(shù)據(jù)。用于基于web的應(yīng)用的現(xiàn)有的存儲(chǔ)系統(tǒng)既包括一般以使用標(biāo)準(zhǔn)查詢語(yǔ)言(SQ)為特色的傳統(tǒng)的數(shù)據(jù)庫(kù)系統(tǒng),也包括不使用SQL的“NoSQL”存儲(chǔ)系統(tǒng)。SQL是已知的并且廣泛使用的查詢接口,通過(guò)使用聲明性語(yǔ)言提供強(qiáng)大功能,該聲明性語(yǔ)言比命令式編程語(yǔ)言更簡(jiǎn)潔,使得幾行SQL可等同于用于使用NoSQL系統(tǒng)來(lái)實(shí)現(xiàn)相同功能的幾百行代碼。
[0002]—般而言,使用SQL的傳統(tǒng)的數(shù)據(jù)庫(kù)系統(tǒng)擴(kuò)展起來(lái)困難并且昂貴,因?yàn)樗鼈兪褂冒嘿F的特殊硬件和/或具有高開(kāi)銷(例如,對(duì)數(shù)據(jù)進(jìn)行分區(qū)以及調(diào)節(jié)性能的昂貴的系統(tǒng)管理員)。然而,在過(guò)去的十年,開(kāi)發(fā)和使用大規(guī)模的Web應(yīng)用的許多公司將傳統(tǒng)的SQL數(shù)據(jù)庫(kù)系統(tǒng)替換為不帶有SQL的專業(yè)化的定制的存儲(chǔ)系統(tǒng),這類存儲(chǔ)系統(tǒng)具有更好的性能、更好的可縮放性和降低的成本(不論是硬件還是開(kāi)銷)。然而,這些“NoSQL”存儲(chǔ)系統(tǒng)只提供在傳統(tǒng)的SQL數(shù)據(jù)庫(kù)系統(tǒng)中可用的功能的子集。例如,NoSQL存儲(chǔ)系統(tǒng)可能缺乏聯(lián)接、子查詢、輔助鍵、聚集、及由SQL所提供的其他特征。
[0003]因此,使用需要此缺失的功能的NoSQL存儲(chǔ)系統(tǒng)的Web應(yīng)用必須自己提供它,這又會(huì)增大開(kāi)發(fā)這樣的用于與NoSQL存儲(chǔ)系統(tǒng)一起操作的應(yīng)用的工作量和成本。此外,NoSQL存儲(chǔ)系統(tǒng)一般具有自定義界面和專屬于該存儲(chǔ)系統(tǒng)的查詢語(yǔ)言(即,是非標(biāo)準(zhǔn)并且專用的);結(jié)果,被開(kāi)發(fā)使用一個(gè)特定NoSQL系統(tǒng)的web應(yīng)用在不對(duì)這樣的web應(yīng)用作出重大的更改以使它們與由其他NoSQL存儲(chǔ)系統(tǒng)所特有的定制界面和查詢語(yǔ)言兼容的情況下可能不與其他NoSQL存儲(chǔ)系統(tǒng)一起工作。
【發(fā)明內(nèi)容】
[0004]此處所公開(kāi)的各種實(shí)現(xiàn)涉及支持SQL同時(shí)還提供可縮放性和高容錯(cuò)的存儲(chǔ)系統(tǒng)。這些實(shí)現(xiàn)以層疊在事務(wù)性鍵值系統(tǒng)(數(shù)據(jù)存儲(chǔ)組件)上面的SQL庫(kù)(SQL執(zhí)行組件)為特色。更具體地,SQL庫(kù)包括在客戶機(jī)上運(yùn)行的解析器和執(zhí)行引擎,而存儲(chǔ)組件包括實(shí)現(xiàn)用于存儲(chǔ)數(shù)據(jù)的鍵值系統(tǒng)的一個(gè)或多個(gè)存儲(chǔ)服務(wù)器??蛻舳藗?cè)的SQL庫(kù)解析從客戶端應(yīng)用接收到的SQL查詢,并將這些SQL查詢映射到鍵值系統(tǒng)上的操作(例如,事務(wù)),該鍵值系統(tǒng)執(zhí)行這些操作,以讀取和寫入通過(guò)鍵來(lái)標(biāo)識(shí)的數(shù)據(jù)項(xiàng)(沒(méi)有任何模式)。鍵值系統(tǒng)支持事務(wù),并進(jìn)一步提供處理并行事務(wù)的并行性控制機(jī)制。鍵值系統(tǒng)可以使用提供可縮放性和容錯(cuò)的數(shù)種技術(shù)中的任何一種來(lái)實(shí)現(xiàn)。對(duì)于數(shù)種這樣的實(shí)現(xiàn),鍵值系統(tǒng)可以是帶有數(shù)個(gè)存儲(chǔ)服務(wù)器的分布式系統(tǒng),每一個(gè)存儲(chǔ)服務(wù)器都附接到一個(gè)或多個(gè)本地存儲(chǔ)設(shè)備。
[0005]一些實(shí)現(xiàn)涉及分布式SQL查詢處理系統(tǒng),包括:用于存儲(chǔ)鍵值對(duì)象的鍵值服務(wù)器;通信地耦合到所述鍵值服務(wù)器的至少一個(gè)客戶端;用于處理對(duì)所述鍵值對(duì)象中的一個(gè)的操作的鍵值庫(kù);以及用于從應(yīng)用接收SQL查詢并將所述SQL查詢轉(zhuǎn)換為對(duì)于要處理的所述鍵值庫(kù)的事務(wù)的SQL庫(kù)。
[0006]提供本
【發(fā)明內(nèi)容】
是為了以精簡(jiǎn)的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一些概念。本
【發(fā)明內(nèi)容】
并不旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于限制所要求保護(hù)的主題的范圍。
[0007]附圖簡(jiǎn)述
[0008]當(dāng)結(jié)合附圖閱讀時(shí),可以更好地了解前面的摘要,以及下面的對(duì)說(shuō)明性實(shí)現(xiàn)的詳細(xì)描述。為了說(shuō)明各實(shí)現(xiàn),在圖形中示出了各實(shí)現(xiàn)的示例結(jié)構(gòu);然而,各實(shí)現(xiàn)不僅限于所公開(kāi)的特定方法和所公開(kāi)的手段。在附圖中:
[0009]圖1是解說(shuō)表示此處所公開(kāi)的各種實(shí)現(xiàn)的示例性分布式SQL查詢處理系統(tǒng)的框圖;
[0010]圖2是解說(shuō)此處所公開(kāi)的各種實(shí)現(xiàn)所使用的圖1的SQL庫(kù)、鍵值庫(kù),以及鍵值服務(wù)器的示例性結(jié)構(gòu)的框圖;
[0011]圖3是用于在可以由此處所公開(kāi)的各種實(shí)現(xiàn)使用的事務(wù)鍵值數(shù)據(jù)存儲(chǔ)系統(tǒng)上執(zhí)行SQL查詢的示例性方法的流程圖;
[0012]圖4是表示可以由此處所公開(kāi)的各種實(shí)現(xiàn)用于執(zhí)行SQL查詢的示例性方法的流程圖,SQL查詢使用計(jì)算出的并存儲(chǔ)在臨時(shí)表中的中間結(jié)果;以及
[0013]圖5是可以與示例實(shí)現(xiàn)和各方面結(jié)合使用的示例計(jì)算環(huán)境的框圖。
【具體實(shí)施方式】
[0014]傳統(tǒng)的分布式數(shù)據(jù)庫(kù)系統(tǒng)(再?gòu)?qiáng)調(diào)一遍,它們擴(kuò)展起來(lái)困難并且昂貴)一般分成兩個(gè)類別:共享磁盤的系統(tǒng)和無(wú)共享系統(tǒng)。在共享磁盤的系統(tǒng)中,數(shù)據(jù)庫(kù)服務(wù)器共享一個(gè)或多個(gè)磁盤(或其他存儲(chǔ)設(shè)備),并且彼此協(xié)調(diào),以通過(guò)使用鎖定或同步協(xié)議,來(lái)控制對(duì)這些共享設(shè)備的并發(fā)訪問(wèn)。然而,此方法的缺點(diǎn)是由這些協(xié)議施加的開(kāi)銷,這會(huì)限制可縮放性,并會(huì)使這些系統(tǒng)的設(shè)計(jì)復(fù)雜化。另一方面,無(wú)共享系統(tǒng)不共享磁盤,而是替代地跨各種服務(wù)器對(duì)數(shù)據(jù)進(jìn)行分割,每一個(gè)服務(wù)器存儲(chǔ)數(shù)據(jù)的一部分。為在這些系統(tǒng)中執(zhí)行數(shù)據(jù)庫(kù)查詢,查詢被分解成在合適的服務(wù)器上執(zhí)行的子查詢,以產(chǎn)生被組合以回答查詢的結(jié)果。然而,此方法的缺點(diǎn)是,它要求高效地跨服務(wù)器對(duì)數(shù)據(jù)進(jìn)行分割,并高效地查詢存儲(chǔ)的數(shù)據(jù),其中,實(shí)現(xiàn)這些效率涉及由管理專家進(jìn)行相當(dāng)大的手動(dòng)調(diào)節(jié)。
[0015]為克服上文所描述的SQL和NoSQL系統(tǒng)的缺點(diǎn),一些解決方案(此處被稱為“兩層方法”)嘗試將存儲(chǔ)系統(tǒng)劃分為兩個(gè)不同的并且分離的層,“事務(wù)層”位于“數(shù)據(jù)層”之上,其中,事務(wù)層協(xié)調(diào)事務(wù)執(zhí)行,并負(fù)責(zé)并發(fā)控制,而數(shù)據(jù)層存儲(chǔ)數(shù)據(jù)。然而,與現(xiàn)有的兩層方法不同,此處所公開(kāi)的各種實(shí)現(xiàn)的兩個(gè)組件(SQL執(zhí)行和數(shù)據(jù)存儲(chǔ))的不同之處在于,數(shù)據(jù)存儲(chǔ)層中具有事務(wù),并且負(fù)責(zé)并發(fā)控制。換言之,此處所公開(kāi)的各種實(shí)現(xiàn)的數(shù)據(jù)存儲(chǔ)組件有效地包括事務(wù)層和數(shù)據(jù)層兩者,而SQL執(zhí)行提供額外的事務(wù)功能(由SQL提供),否則該功能是數(shù)據(jù)存儲(chǔ)組件的事務(wù)能力所沒(méi)有的。
[0016]其他解決方案(此處被稱為“記錄管理系統(tǒng)”)為每一個(gè)自定義數(shù)據(jù)庫(kù)系統(tǒng)使用事務(wù)記錄管理器,其中,事務(wù)被寫入到共享的全局日志中,以允許每一個(gè)定制數(shù)據(jù)庫(kù)系統(tǒng)重播每一個(gè)事務(wù)(即,其他定制數(shù)據(jù)庫(kù)系統(tǒng)上的事務(wù)),以便構(gòu)建其自己的數(shù)據(jù)庫(kù)狀態(tài)的副本。然而,這些記錄管理系統(tǒng)沒(méi)有被實(shí)現(xiàn)為用于關(guān)系數(shù)據(jù)庫(kù),而是僅限于事務(wù)性鍵值系統(tǒng)。相比之下,此處所公開(kāi)的各種實(shí)現(xiàn)是為關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)實(shí)現(xiàn)的,雖然數(shù)個(gè)這樣的實(shí)現(xiàn)確實(shí)包括事務(wù)性鍵值系統(tǒng)作為其組件,但是,存儲(chǔ)系統(tǒng)本身是關(guān)系數(shù)據(jù)庫(kù)。
[0017]在任何情況下,在傳統(tǒng)的SQL數(shù)據(jù)庫(kù)系統(tǒng)中處理查詢是在數(shù)據(jù)庫(kù)服務(wù)器中與存儲(chǔ)和管理數(shù)據(jù)一起進(jìn)行。然而,除數(shù)據(jù)庫(kù)服務(wù)器昂貴之外,向共享磁盤的數(shù)據(jù)庫(kù)系統(tǒng)添加更多數(shù)據(jù)庫(kù)服務(wù)器會(huì)顯著地增大允許數(shù)量增多的數(shù)據(jù)庫(kù)服務(wù)器訪問(wèn)共享的數(shù)據(jù)所需的協(xié)調(diào)開(kāi)銷。同樣,在無(wú)共享數(shù)據(jù)庫(kù)系統(tǒng)中,添加更多服務(wù)器要使用昂貴的并且資源密集的操作來(lái)在數(shù)量增多的可用的服務(wù)器之間在較細(xì)粒度對(duì)數(shù)據(jù)進(jìn)行重新分割。類似地,對(duì)于傳統(tǒng)的SQL數(shù)據(jù)庫(kù)系統(tǒng)中的并發(fā)控制機(jī)制,事務(wù)協(xié)調(diào)器還位于服務(wù)器上,但是,由于上文給出的同樣的理由,服務(wù)器難以擴(kuò)展。
[0018]此處所公開(kāi)的各種實(shí)現(xiàn)的增強(qiáng)的可縮放性(與現(xiàn)有的數(shù)據(jù)庫(kù)系統(tǒng)相比)源于允許查詢處理和并發(fā)控制相對(duì)于存儲(chǔ)服務(wù)器獨(dú)立地縮放。例如,查詢處理和并發(fā)控制可以在客戶端執(zhí)行。以此方式,處理更多SQL查詢的能力與客戶端的數(shù)量成正比。結(jié)果,增大客戶端的數(shù)量會(huì)提供額外的硬件來(lái)處理SQL查詢。此增加的硬件還提供用于可縮放的并發(fā)地控制的增大的處理能力。由于在事務(wù)性鍵值系統(tǒng)上運(yùn)行的并發(fā)控制機(jī)制構(gòu)成簡(jiǎn)單服務(wù)一一僅僅存儲(chǔ)鍵值對(duì)一一當(dāng)客戶端充當(dāng)它們自己的事務(wù)的協(xié)調(diào)器時(shí),如由此處所公開(kāi)的各種實(shí)現(xiàn)所特有的,它們可以被高效地?cái)U(kuò)展。
[0019]相應(yīng)地,此處所公開(kāi)的各種實(shí)現(xiàn)涉及數(shù)據(jù)庫(kù)系統(tǒng),該數(shù)據(jù)庫(kù)系統(tǒng)支持SQL,但是具有相當(dāng)于現(xiàn)有的NoSQL系統(tǒng)的、并且在沒(méi)有昂貴的專業(yè)化的硬件和大量的手動(dòng)系統(tǒng)管理的情況下不能由傳統(tǒng)的SQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)的性能和可縮放性。這些各種實(shí)現(xiàn)高效地將SQL查詢映射到存儲(chǔ)在鍵值系統(tǒng)上的鍵值對(duì)象上的操作,其中大多數(shù)簡(jiǎn)單SQL查詢被映射到相對(duì)較小數(shù)量的操作。更具體而言,SQL查詢處理系統(tǒng)包括:用于存儲(chǔ)多個(gè)鍵值對(duì)象的鍵值服務(wù)器,通信地耦合到所述鍵值服務(wù)器的至少一個(gè)客戶端,用于處理對(duì)所述鍵值對(duì)象的操作的鍵值庫(kù),以及,用于從應(yīng)用接收SQL查詢并將所述SQL查詢轉(zhuǎn)換為對(duì)于要處理的所述鍵值庫(kù)的操作的SQL庫(kù)。
[0020]當(dāng)然,盡管此處所公開(kāi)的各種實(shí)現(xiàn)可以包括位于客戶端中的鍵值庫(kù)和SQL庫(kù),但是也預(yù)料了各種替代的實(shí)現(xiàn)。例如,各種替代的實(shí)現(xiàn)可以包括SQL庫(kù)和維護(hù)在與客戶端分開(kāi)的第二機(jī)器(并可能與鍵值服務(wù)器分開(kāi))中的鍵值庫(kù),在這樣的情況下,客戶端生成SQL查詢,并將它發(fā)送到第二機(jī)器上的SQL庫(kù)。其他替代實(shí)現(xiàn)可以包括在客戶端機(jī)器處的SQL庫(kù)和在第二機(jī)器處的鍵值庫(kù),其中,客戶端可以生成SQL查詢并在本地處理它(因?yàn)镾QL庫(kù)位于同一個(gè)機(jī)器上)。然后,客戶端生成鍵值操作,該鍵值操作被發(fā)送到鍵值庫(kù)所在的第二機(jī)器,隨后,第二機(jī)器處的鍵值庫(kù)將鍵值操作發(fā)送到鍵值服務(wù)器。在又一些其他替代實(shí)現(xiàn)中,SQL庫(kù)可以位于第二機(jī)器處,而鍵值庫(kù)位于第三機(jī)器處。在此設(shè)置中,客戶端在客戶端(第一機(jī)器)處生成SQL查詢,并將它發(fā)送到第二機(jī)器處的SQL庫(kù),該第二機(jī)器又生成鍵值操作,隨后,該鍵值操作被發(fā)送到第三機(jī)器處的鍵值庫(kù),隨后,該第三機(jī)器將鍵值操作發(fā)送到鍵值服務(wù)器。其他這類替代的實(shí)現(xiàn)也是可以的。相應(yīng)地,對(duì)此處的各種實(shí)現(xiàn)的描述可以假設(shè),SQL庫(kù)和鍵值庫(kù)位于客戶端處,但是,這不是限制性的,因?yàn)槠渌娲桨敢彩强梢灶A(yù)期的。
當(dāng)前第1頁(yè)
1 
2 
3 
4