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