国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      用于高效地查詢數(shù)據(jù)庫的同態(tài)定理的制作方法

      文檔序號:6438603閱讀:195來源:國知局
      專利名稱:用于高效地查詢數(shù)據(jù)庫的同態(tài)定理的制作方法
      技術領域
      本發(fā)明涉及數(shù)據(jù)庫查詢,更具體地,涉及使用同態(tài)定理以供數(shù)據(jù)庫的高效查詢。
      背景技術
      數(shù)據(jù)模型描述了可如何存儲和訪問數(shù)據(jù)。更正式地,數(shù)據(jù)模型定義數(shù)據(jù)實體以及各數(shù)據(jù)實體間的關系。數(shù)據(jù)模型的主要目的是提供數(shù)據(jù)的定義和格式,以便于管理和處理大量的數(shù)據(jù)。數(shù)據(jù)模型的一種應用是定義如何結構化和利用數(shù)據(jù)庫或其他存儲的數(shù)據(jù)庫模型。數(shù)據(jù)庫模型可以是關系的或非關系的。在關系模型中,或更具體地在關系數(shù)據(jù)庫中,根據(jù)一個或多個表來結構化數(shù)據(jù)。各個表是包括多個行和列的關系,其中所命名的列稱為屬性,而行捕捉具體的實體實例的數(shù)據(jù)。例如,表可在行(也稱為元組)和列中捕捉與諸如書籍之類的特定實體有關的信息。列標識實體的各種屬性,諸如書籍的標題、作者、和出版年份等。行捕捉實體的實例,諸如特定的書籍。換言之,表中的每一行表示特定書籍的各屬性。此外,表可包括使得兩個或更多表能被鏈接在一起的主鍵和外鍵。在非關系模型的許多實現(xiàn)中,鍵值模型是最受歡迎的一種。鍵值數(shù)據(jù)庫或存儲表示將唯一鍵映射到一個或多個值的組的簡單數(shù)據(jù)模型。更具體地,鍵值存儲用于存儲值和索引以便于基于鍵來定位所存儲的值。例如,被定位的鍵標識書籍的數(shù)據(jù)的標題、作者或出版中的一個。關系數(shù)據(jù)庫通常被稱為SQL數(shù)據(jù)庫,而一些非關系數(shù)據(jù)庫則被稱為NoSQL數(shù)據(jù)庫或存儲。SQL代表結構化查詢語言,該結構化查詢語言是被利用來查詢和更新關系數(shù)據(jù)庫中的數(shù)據(jù)的主要語言。當結合關系數(shù)據(jù)庫來利用SQL時,該數(shù)據(jù)庫可被稱為基于SQL的關系數(shù)據(jù)庫。然而,基于SQL的關系數(shù)據(jù)庫更經(jīng)常地被簡稱為SQL數(shù)據(jù)庫,并且用作關系數(shù)據(jù)庫的同義詞。NoSQL是用來指代與基于SQL的關系數(shù)據(jù)庫不同的數(shù)據(jù)庫的一個術語。換言之,術語NoSQL被用作非關系數(shù)據(jù)庫或諸如但不限于鍵值存儲的存儲的同義詞。SQL數(shù)據(jù)庫和NoSQL存儲具有由CAP定理在較高級別捕捉的諸多優(yōu)點和缺點,CAP 定理陳述為在任意時刻只能保證一致性(C)、可用性(A)和分區(qū)容錯性(P)中的兩個。一致性指在諸如更新等操作后保持在一致的狀態(tài)中的系統(tǒng)特性??捎眯躁P注于在一段時間后甚至在出現(xiàn)故障時仍保持可操作的,而分區(qū)容錯性指系統(tǒng)跨各網(wǎng)絡分區(qū)進行操作的能力。 一般而言,對于SQL數(shù)據(jù)庫的設計選擇是選擇一致性和可用性而不選分區(qū)容錯性,而對于 NoSQL存儲則放棄一致性而支持分區(qū)容錯性和可用性。換言之,NoSQL存儲為了可縮放性而犧牲了一致性,或另選地,SQL數(shù)據(jù)庫為了一致性而犧牲了可縮放性。

      發(fā)明內(nèi)容
      下面呈現(xiàn)了簡化的發(fā)明內(nèi)容,以便提供對所公開主題的某些方面的基本概念。本發(fā)明內(nèi)容不是廣泛性的概觀。它并不旨在標識關鍵/重要元素,也不旨在劃定所要求保護主題的范圍。其唯一目的是以簡化形式呈現(xiàn)一些概念,作為稍后呈現(xiàn)的更具體實施例的序
      簡單來說,本發(fā)明大體關于使用同態(tài)定理以供數(shù)據(jù)庫的高效查詢??蓜?chuàng)建基于諸如伯德同態(tài)定理之類的查詢的同態(tài)特性的語言集成查詢(LINQ)的表示。這一 LINQ查詢的表示可隨后被用于在諸如但非限制的鍵值存儲之類的數(shù)據(jù)庫上執(zhí)行查詢。作為示例而非限制,通過使用第一 LINQ算子和第二 LINQ算子,LINQ查詢可被轉換成一種表示,其中第一 LINQ算子是“klecWSelectMany”或“GroupBy”中的至少一個,而第二 LINQ算子是 "Reduce,,或"Aggregate,,中的至少一個。為實現(xiàn)上述及相關目的,在此結合以下描述和附圖描述了所要求保護主題的某些說明性方面。這些方面指示可實踐本主題的各種方式,它們均落在所要求保護主題的范圍之內(nèi)。當結合附圖閱讀以下詳細描述時,本發(fā)明的其他優(yōu)點和新穎特征將變得顯而易見。


      圖1是數(shù)據(jù)庫查詢系統(tǒng)的框圖。圖2是數(shù)據(jù)庫查詢系統(tǒng)的框圖。圖3示出了鍵值存儲的一個示例性集合。圖4是用于關系存儲和鍵值存儲的數(shù)據(jù)庫查詢系統(tǒng)的框圖。圖5是便于生成語言集成查詢(LINQ)查詢的表示的系統(tǒng)的框圖。圖6是將LINQ查詢轉換成表示的方法的流程圖。圖7是創(chuàng)建LINQ查詢的表示的方法的流程圖。圖8是以LINQ查詢來查詢關系存儲和鍵值存儲的方法的流程圖。圖9是示出用于本發(fā)明各方面的合適操作環(huán)境的示意性框圖。
      具體實施例方式下面的細節(jié)大體針對數(shù)據(jù)庫查詢。諸如語言集成查詢(LINQ或LINQ查詢)之類的查詢的表示可基于查詢的同態(tài)特性來生成。LINQ查詢的表示可被用于在諸如鍵值存儲之類的數(shù)據(jù)庫上高效地執(zhí)行LINQ查詢。傳統(tǒng)地,LINQ查詢已被結合關系數(shù)據(jù)庫(例如SQL) 使用。然而,LINQ查詢可被擴展到用于非關系存儲(例如NoSQL、鍵值存儲)。此外,可生成LINQ查詢的表示,用于在關系和/或非關系存儲上高效地執(zhí)行這一查詢,例如,使用并行處理或更具體來說是分布式并行處理?,F(xiàn)在參考附圖更詳細地描述本公開的各個方面,在全部附圖中用相似的標記來指示相似或相應的元素。然而應該理解,附圖及其相關詳細描述不旨在將所要求保護的主題限于所公開的具體形式。相反,其意圖是覆蓋落在所要求保護主題的精神和范圍之內(nèi)的所有修改、等價物和替換的方案。首先參考圖1,示出了數(shù)據(jù)庫查詢系統(tǒng)100。數(shù)據(jù)庫查詢系統(tǒng)100采用諸如語言集成查詢(LINQ或LINQ查詢)之類的查詢的表示以便于在鍵值存儲等等上高效地執(zhí)行查詢。LINQ及其支持技術提供方便且聲明性的簡寫查詢句法(類似SQL)以便利于在編程語言(例如,C# 、Visual Basic ...)內(nèi)部對查詢的指定。具體而言,提供映射到低級語言構造或原語(諸如方法和拉姆達表達式)的查詢操作符。提供用于各種運算(例如,過濾、投影、連接、分組、排序……)族的查詢運算符,并且查詢運算符可包括但不限于映射到實現(xiàn)這些名稱所表示的運算符的方法的“where”和“select”運算符。作為示例,用戶可以以諸如“from η in numbers where η < IOselect η” 的形式指定查詢,其中“numbers” 是數(shù)據(jù)源并且查詢從數(shù)據(jù)源返回小于10的整數(shù)。此外,可以以各種方式組合查詢運算符以生成任意復雜度的查詢。按照慣例,LINQ查詢是相對于關系存儲被指定并執(zhí)行的。然而,LINQ查詢可被擴展以支持對于諸如鍵值存儲之類的非關系數(shù)據(jù)來執(zhí)行。更具體地,通過采用LINQ查詢的同態(tài)特性,可生成這種LINQ查詢的表示并用于在鍵值存儲上執(zhí)行LINQ查詢。換句話說,LINQ 查詢的表示可基于Bird第一同態(tài)定理來創(chuàng)建,其中這一表示允許LINQ查詢在鍵值存儲上執(zhí)行。數(shù)據(jù)庫查詢系統(tǒng)100包括變換組件102,其基于這一 LINQ查詢的同態(tài)特性來生成 LINQ查詢的表示。變換組件102通過執(zhí)行函數(shù)、算法、和/或算子(將在以下(具體來說是圖5)詳細討論)將LINQ查詢轉換成表示。LINQ查詢的這一表示允許相對于鍵值存儲106 的擴展的能力。查詢處理器組件104采用LINQ查詢的表示,以便在鍵值存儲106上執(zhí)行這一 LINQ查詢。可以理解的是鍵值存儲106可以是(但不限于)任何合適的非關系存儲和/ 或NoSQL存儲。例如,在一個實施例中,鍵值存儲可對應于關系存儲(例如coSQL)的數(shù)學對偶。作為示例而非限制,同態(tài)特性是一種兩個代數(shù)結構(諸如,組、集合、集等)之間的結構保留的映射。此外,同態(tài)是遵守該代數(shù)結構的兩個代數(shù)對象(例如,組、集合、集等)之間的函數(shù)。一般來說,包括同態(tài)特性的查詢將維持該同態(tài)性質,或者換句話說,保持同態(tài)。另夕卜,可以理解的是查詢可以是同態(tài)的,因為查詢是從同態(tài)部分創(chuàng)建的。換句話說,同態(tài)特性被執(zhí)行以生成能在各種數(shù)據(jù)庫、存儲等上進行查詢的表示。圖2示出示例性的數(shù)據(jù)庫查詢系統(tǒng)實施例。查詢系統(tǒng)200包括生成LINQ查詢的表示的變換組件102。如所述地,變換組件102基于同態(tài)特性將LINQ查詢轉換成表示以提供與數(shù)據(jù)庫有關的擴展的多功能性等。查詢系統(tǒng)200還包括查詢處理器104,其直接在鍵值存儲106上執(zhí)行該表示。換言之,變換組件102可生成LINQ查詢的表示,而查詢處理器 104直接在鍵值存儲106上執(zhí)行該表示,并進而執(zhí)行該LINQ查詢。作為示例而非限制,查詢系統(tǒng)200對合并在查詢處理器組件104中的變換組件102 進行描述??梢岳斫獾氖亲儞Q組件102可以是獨立的組件、被合并在查詢處理器組件104 中、被合并在鍵值存儲106中、和/或以上的任意組合。圖2還示出了查詢系統(tǒng)202,其包括耦合到查詢處理器組件104的變換組件102。 查詢系統(tǒng)202使得表示能夠被傳遞到數(shù)據(jù)庫前端外殼系統(tǒng)204,以便在鍵值存儲106上執(zhí)行。數(shù)據(jù)庫前端外殼系統(tǒng)204可以是與管理訪問的鍵值存儲106相關聯(lián)的任何合適的前端系統(tǒng)。數(shù)據(jù)庫前端外殼系統(tǒng)204可進一步包括各種安全和認證技術以確保數(shù)據(jù)隱私和完整性,以及與數(shù)據(jù)庫系統(tǒng)相關聯(lián)的其它功能。具體來說,數(shù)據(jù)庫前端外殼系統(tǒng)204可管理鍵值存儲106上的傳入的查詢請求。因此,查詢處理器組件104可向數(shù)據(jù)庫前端外殼系統(tǒng)204提供LINQ查詢的表示,其中,數(shù)據(jù)庫前端外殼系統(tǒng)204使用該表示來執(zhí)行鍵值存儲106上的LINQ查詢。例如,數(shù)據(jù)庫前端外殼系統(tǒng)204可包括執(zhí)行查詢并返回結果的內(nèi)部查詢處理器(未示出)。這一內(nèi)部查詢處理器 (未示出)可利用LINQ查詢的表示來執(zhí)行該鍵值存儲106上的這一查詢。在另一示例而非限制中,查詢處理器組件104可采用直接在鍵值存儲106上執(zhí)行表示以及將表示的至少一部分傳遞到數(shù)據(jù)庫前端外殼系統(tǒng)204以內(nèi)部執(zhí)行(例如,內(nèi)部查詢處理器)的組合。在這種情況下,查詢處理器組件104可將查詢從第一形式轉換成可由數(shù)據(jù)庫前端外殼系統(tǒng)執(zhí)行的第二形式。查詢系統(tǒng)200和202可被用于任何合適的鍵值存儲106??偟脕碚f,查詢處理器組件104可在鍵值存儲106上執(zhí)行表示,而與兩者之間的數(shù)據(jù)連接無關。例如,鍵值存儲106 可以是基于云的、基于服務器的、無線的、硬連線的等等。換言之,查詢處理器組件104可直接在鍵值存儲106上執(zhí)行表示,而獨立于物理位置(例如,遠程的、本地的、其中的任意組合等)和/或數(shù)據(jù)連接(例如,云、無線、局域網(wǎng)(LAN)、其中的任意組合等)。圖3示出了鍵值存儲的一個示例性集合300。總得來說,LINQ查詢可以被定向到鍵值存儲內(nèi)的集合300。如所討論的,基于同態(tài)特性來生成LINQ查詢的表示,以允許LINQ 查詢能夠在鍵值存儲上執(zhí)行。典型地,鍵值存儲是“碎片的”,或者說是分裂開的或分隔的, 分布在多個計算機或機器上。如果查詢是同態(tài)的,則伯德(Bird)的同態(tài)定理可以被用來便于使用并行處理的查詢的高效執(zhí)行。以下是示例性的基于同態(tài)特性將LINQ查詢轉換為表示的高級別的討論,其中轉換可由圖1的變換組件102來執(zhí)行。此處,LINQ查詢指向(例如,被執(zhí)行在)存儲在鍵值存儲中的集合300。用“XS”來描述集合300,代表多個“X”。指向集合300的LINQ查詢可被轉換成表示,以便與鍵值存儲有關地被執(zhí)行。集合300被分成至少兩個子集合。一組子集合302示出第一子集合、第二子集合XSp以及第三子集合XS2??蓪γ恳蛔蛹蠄?zhí)行第一 LINQ算子,以創(chuàng)建包括第一集合Mtl、第二集合M1、以及第三集合的結果304。例如,第一 LINQ算子可以是但不限于 “Select (選擇)”、“klectMany (選擇多個)”或“GroupBy (根據(jù)……來分組)”??梢岳斫獾氖恰癝electMany”算子可以是對關系“CrossApply (交叉應用)”算子的概括。對于結果304可執(zhí)行第二 LINQ算子,以創(chuàng)建包括第一集合&、第二集合Z1,以及第三集合&{口。,Z1, Z2JI的結果306。例如,第二 LINQ算子可以是“Reduce(減少)”或 “Aggregate (聚集)”中的至少一個??蓪Y果306執(zhí)行第二 LINQ算子,以創(chuàng)建對于LINQ 查詢的結果308,結果308包括Z1^Z2K可以理解的是,可以基于子集合的劃分并行執(zhí)行第一 LINQ算子和第二 LINQ算子。換言之,LINQ查詢可基于所生成的表示而并行執(zhí)行。此外,可以理解的是,所執(zhí)行的第一 LINQ算子和隨后執(zhí)行的第二 LINQ算子可復制映射一減少(map-reduce)功能。映射部分將來自主節(jié)點的輸入分割為跨各個工作節(jié)點 (worker node),以便允許工作節(jié)點單獨地處理子部分。隨后,工作節(jié)點的各單獨結果可被組合、減少、以及傳回主結點作為結果。這一有效并行處理對于具有跨多個存儲或機器的巨量數(shù)據(jù)的NoSQL存儲意義重大。圖4示出用于關系存儲和鍵值存儲的數(shù)據(jù)庫查詢系統(tǒng)400。數(shù)據(jù)庫查詢系統(tǒng)400 可包括變換組件102,用于基于包含捕捉映射-減少功能的原語查詢算子的同態(tài)特性(更具體來說是伯德同態(tài)定理)將LINQ查詢變換為表示。查詢處理組件104可被配置成利用該表示來在非關系的鍵值存儲106或關系存儲404上執(zhí)行LINQ查詢。數(shù)據(jù)庫查詢系統(tǒng)400還包括轉換組件402,其可將基于同態(tài)特性生成的LINQ查詢的表示轉換成第二表示。第二表示是可為任何適當?shù)奶囟ù鎯蚬芾韺嶓w接受的命令或指令。換言之,轉換組件402可將第一表示(例如,基于同態(tài)特性的LINQ查詢的表示)配置為用于執(zhí)行該查詢的第二表示。作為示例而非限制,轉換組件402可被配置成從第一表示生成事務-SQL (T-SQL)以便相對于關系存儲404執(zhí)行。還可執(zhí)行類似轉換以便于與鍵值存儲106的特定接口的交互。圖5是便于生成語言集成查詢(LINQ)查詢的表示的系統(tǒng)500。變換組件102基于其同態(tài)特性生成LINQ查詢的表示。查詢處理器組件104使用LINQ查詢的表示來在鍵值存儲106上執(zhí)行該查詢。變換組件102可進一步包括算法組件502,其便于將LINQ查詢變換為表示,該表示用于在鍵值存儲106上執(zhí)行查詢。作為示例而非限制,算法組件502被示出位于變換組件102內(nèi)。然而,可以理解的是算法組件502可以是獨立的組件、被合并在變換組件102中(如所示)、被合并在查詢處理器組件104中、被合并在鍵值存儲106中、和/ 或以上的任意組合。算法組件502可使用算法、函數(shù)以及算子,以便生成LINQ查詢的表示,該表示被用于在鍵值存儲106上執(zhí)行該查詢。作為示例而非限制,算法組件502可使用諸如“klect”、 “SelectMany"GroupBy“Reduce“以及“Aggregate”之類的 LINQ 算子。另外,算法組件 502基于同態(tài)特性和/或伯德同態(tài)定理來創(chuàng)建LINQ查詢的表示。以下是示例性的生成LINQ查詢的表示的高級別的討論,其中生成可由變換組件 102和/或算法組件502來執(zhí)行。要求保護的主題展示出了 NoSQL (以及coSQL)以及SQL存儲都是-元體(monad) 這一事實,以及查詢可被定義為一元體上的同態(tài)這一事實。換言之,伯德同態(tài)定理可被概括為一元體上的同態(tài)。另外,伯德同態(tài)定理可被概括為在存儲上采用“GroupBy”和 “Aggregate”查詢算子。因此,任何同態(tài)查詢可被分解為“GroupBy”和“Aggregate”(例如, LINQ算子),并且可被并行執(zhí)行,包括分布式并行執(zhí)行。這對于NoSQL而言尤其意義重大, 因為大量數(shù)據(jù)通常被分隔為跨多個機器。LINQ是關系代數(shù)的概括,其中使用一元體而不是行的集。就像SQL從常規(guī)語法擴展成關系代數(shù)表達式一樣,編譯器將LINQ或一元體內(nèi)涵解修飾為原語查詢算子上的代數(shù)表達式。換言之,簡單的編程者友好語法被轉換為復雜的較不用戶友好的算術。關系代數(shù)算子的概括如下,其中“M”是集合的抽象概念(而不是SQL中的 “集”(set)),而“T”表示通用的集合元素(例如,鍵值對)。
      0 M<T>(空集合)
      u M<T>xM<T> — M<T> (集合的組合) {_} T今M<T>(把值插入集合)
      σΡ M<T>x(T—bool)今 M<T> (例如,Where 算子) πΡ M<T>x(T^S)今 M<S> (例如,Select 算子)
      X M<T>xM<S>今 M<TxS> (例如,Cross Product 算子)使用“klectMany”或“Bind”算子來實現(xiàn)所稱的相關子查詢
      SelectMany :M<A>x(A — Μ<Β — Μ<Β>使用這一算子和“ {_} ”,其它的可被定義如下
      權利要求
      1.一種便于數(shù)據(jù)庫查詢的方法,包括采用被配置來執(zhí)行存儲在存儲器(930)中的計算機可執(zhí)行指令以執(zhí)行以下動作的至少一個處理器(920)基于語言集成查詢的同態(tài)特性來生成所述語言集成查詢的表示(604,802)。
      2.如權利要求1所述的方法,其特征在于,還包括使用所述表示在鍵值存儲上執(zhí)行查詢。
      3.如權利要求1所述的方法,其特征子在于,生成所述表示還包括 插入關于所述查詢的第一語言集成查詢算子;以及在第一算子的結果上插入第二語言集成查詢算子。
      4.如權利要求3所述的方法,其特征在于,插入“Select”算子或“SelectMany”算子中的至少一個作為所述第一語言集成查詢算子。
      5.如權利要求3所述的方法,其特征在于,插入“Reduce”算子中的至少一個作為所述第二語言集成查詢算子。
      6.如權利要求3所述的方法,其特征在于,插入“GroupBy”算子作為所述第一語言集成查詢算子。
      7.如權利要求3所述的方法,其特征在于,插入“Aggregate”算子作為所述第二語言集成查詢算子。
      8.一種便于數(shù)據(jù)庫查詢的系統(tǒng)(100),包括耦合到存儲器(930)的處理器(920),所述處理器(920)被配置來執(zhí)行存儲在所述存儲器(930)中的以下計算機可執(zhí)行組件變換組件(102),其被配置成基于語言集成查詢的同態(tài)特性來生成允許并行執(zhí)行的所述語言集成查詢的表示。
      9.如權利要求8所述的系統(tǒng),其特征在于,所述變換組件被配置成用對數(shù)據(jù)進行劃分的第一語言集成查詢算子來生成所述表示。
      10.如權利要求8所述的系統(tǒng),其特征在于,所述變換組件被配置成用對兩個或更多分區(qū)上的結果進行組合的第二語言集成查詢算子來生成所述表示。
      全文摘要
      本發(fā)明涉及用于高效地查詢數(shù)據(jù)庫的同態(tài)定理??苫诓樵兊耐瑧B(tài)特性生成語言集成查詢的表示。該表示可被用于允許查詢在例如鍵值存儲上的高效執(zhí)行。更具體地,可使用允許并行執(zhí)行的語言集成查詢算子將查詢轉換成表示。
      文檔編號G06F17/30GK102541992SQ20111036440
      公開日2012年7月4日 申請日期2011年11月2日 優(yōu)先權日2010年11月3日
      發(fā)明者H·J·M·梅杰 申請人:微軟公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1