專利名稱:使用查詢模板來將查詢與數據操作相匹配的制作方法
技術領域:
本發明涉及使用查詢模板來將查詢與數據操作相匹配。背景如今的信息技術人員常常使用具有η層(n-tier)、比如3層架構的數據檢索系統。 通過將不同層分開,每個層都可以彼此獨立地被管理、升級和使用。典型的三層數據檢索系統可以包括前層、中間層和后層。前層通常與用戶對接并且可以接收和/或生成針對數據的查詢。中間層通常處理從前層接收到的查詢并且將其翻譯成后層可以處理的形式。后層通常由如下各項的某種組合構成響應諸如查詢或所存儲的過程之類的數據操作的數據庫服務器;以及響應web服務操作的web服務。具體而言,中間層通常將從前層接收到的查詢翻譯成數據庫或web服務操作(在此統稱“數據操作”),這些操作由后層來執行以獲得數據。然后,中間層將所獲得的數據發送回前層。因此,中間層與諸如客戶端計算機之類的前層、以及例如一個或多個數據庫服務器或web服務之類的后層對接。然而,由中間層用于將從前層接收到的查詢翻譯成可由后層執行的數據操作的典型方案相當麻煩。典型的翻譯技術僅能使用前層查詢與數據操作的一對一匹配。例如,典型的方案可以直接將一個前層查詢翻譯成一個數據操作。結果,前層查詢如果有的話也只能具有極少的變型,由此限制了其功能和效用性。此外,這些典型的方案要求前層使用可由中間層使用一對一映射容易地翻譯的受限和嚴格的句法來呈現查詢。結果,典型的方案可能不能補償前層查詢中的任何變型。事實上,這些方案限制了前層編寫具有任何變型的查詢的能力。即使嘗試給前層在編寫查詢方面賦予更多靈活性的方案仍然使用查詢與數據操作之間的受限和不靈活的映射。
發明內容
提供本概述以便以簡化形式介紹將在以下的具體實施方式
中進一步描述的一些概念。本概述并不旨在標識所要求保護主題的關鍵特征或必要特征,也不旨在用于限制所要求保護主題的范圍。此外,注意到本發明不限于在詳細描述和/或本文的其它章節中所述的特定實施例。本文呈現這些實施例僅用于說明性的用途。基于本文所包含的描述,其它實施例對于相關領域的技術人員將是顯而易見的。在此描述了用于使用查詢模板將查詢與數據操作進行匹配的系統和方法。根據某些實施例,這樣的系統和方法可以由三層數據檢索系統的中間層來實現以選擇對應于查詢的數據操作。從前層接收到的查詢可以訪問后層中的數據服務。數據操作的選擇是通過將查詢與同每個數據操作相關聯的查詢模板相匹配來進行的。每個數據操作的查詢模板都包括對查詢的代數描述,這些查詢每個都可被相應數據操作滿足。然后,對數據服務執行所選數據操作以獲得數據,這些數據然后被提供給前層。在一些實施例中,可以由中間層創建執行計劃以用于滿足該查詢。該執行計劃可以包括所選數據操作和后處理步驟。可以將后處理步驟應用于所獲得的數據以滿足該查詢。然后,經過后處理的數據被提供給前層。下面將參考各個附圖,詳細描述本發明的進一步特點和優點,以及本發明的各實施例的結構和操作。值得注意的是,本發明不僅限于此處所描述的特定實施例。本文呈現這些實施例僅用于說明性的用途。基于本文所包含的描述,其它實施例對于相關領域的技術人員將是顯而易見的。
合并在此并作為說明書一部分的附圖與說明書一起示出了本發明的實施例,且進一步用于解釋本發明的原理的作用,并且使相關領域的技術人員能夠實現并使用本發明。圖I是根據一實施例的示例性三層數據檢索系統的框圖,該系統被配置為使用查詢模板將查詢與數據操作相匹配。圖2是根據一實施例的示例性三層數據檢索系統的詳細框圖,該系統被配置為使用查詢模板將查詢與數據操作相匹配。圖3描繪了根據一實施例的使用查詢模板將查詢與數據操作相匹配的數據檢索方法的流程圖。圖4描繪了根據一實施例的使用查詢模板將查詢與數據操作相匹配的方法的另
一流程圖。圖5示出了可用于實現根據一實施例的用于使用查詢模板將查詢與數據操作相匹配的方法的示例性聯網計算機系統的框圖。當結合其中相同的參考字符標識對應的元素的附圖時,本發明的特征和優點將從以下闡述的詳細描述中變得更加顯而易見。在附圖中,相同的參考標號一般指相同的、功能上相似的和/或結構上相似的元素。其中元素第一次出現的附圖由對應的參考標號中最左側的數字指示。
具體實施例方式I.介紹以下詳細描述參考示出本發明的示例性實施例的附圖。但是,本發明的范圍不限于這些實施例,而是由所附權利要求書定義。因此,諸如所示實施例的修改版本之類的在附圖所示之外的實施例仍然由本發明所包含。本說明書中對“一個實施例”、“實施例”、“示例實施例”等的參考,指的是所述實施例可包括具體的特征、結構或特點,但是每個實施例不一定包括該具體的特征、結構或特點。此外,這些短語不一定指相同的實施例。此外,當結合實施例描述具體特征、結構或特性時,應當理解在相關領域的技術人員的知識范圍內能夠結合其他實施例來實現具體特征、 結構或特性,無論是否被顯式地描述。在此描述了一種用于使用查詢模板將查詢與數據操作進行匹配的系統。根據某些實施例,這樣的系統可以由η層數據檢索系統(比如三層數據檢索系統)的中間層來實現以選擇對應于查詢的數據操作。從前層接收到的查詢可以訪問后層中的數據服務。數據操作的選擇是通過將查詢與同每個數據操作相關聯的查詢模板相匹配來進行的。每個數據操作的查詢模板都包括對查詢的代數描述,這些代數描述每個都可被相應數據操作滿足。使用與每個數據操作相關聯的查詢模板將有利地允許將多種查詢與數據操作相匹配。在某些實施例中,可以使用具有任選算子以及可從查詢中提取出的算子和值的查詢模板來提供附加的靈活性。然后,針對數據服務執行所選數據操作以獲得數據,這些數據然后被提供給前層。在一些實施例中,可以由中間層創建執行計劃以用于滿足該查詢。該執行計劃可以包括所選數據操作和一個或多個后處理步驟。可以針對數據服務執行所選數據操作以獲得僅僅部分地滿足該查詢的數據。然后,可以將后處理步驟應用于所獲得的數據以基本上完全滿足該查詢。然后,經過后處理的數據被提供給前層。示例性數據檢索系統圖I是示例性的三層數據檢索系統104的框圖100,該系統被配置為使用查詢模板將查詢與數據操作相匹配。圖I的框圖100示出了一個或多個用戶102以及數據檢索系統 104。用戶102可以與數據檢索系統104對接。例如,用戶102可以向數據檢索系統104提出查詢。數據檢索系統104可以處理該查詢并且比如通過針對數據服務執行該查詢來將該查詢的結果返回給用戶102。在一個實施例中,用戶102可以包括使用個人計算機或其他計算系統或設備的人。用戶102還可以致使應用被數據檢索系統104的前層106執行以生成查詢。數據檢索系統104可以使用諸如三層架構之類的η層架構來實現。數據檢索系統 104可以包括前層106、中間層108和后層110。在一個實施例中,三個層106、108和110可以是在單個計算系統或設備上實現的邏輯層(亦稱層次(layer))。在另一實施例中,數據檢索系統104的三個層106、108和110中的一個或多個可以每個都使用單獨的計算系統或設備來實現。在此處所呈現的各個實施例和示例中,描述了三層數據檢索系統104。然而,示例性實施例的范圍不限于三層數據檢索系統。例如,可以使用另一種類型的具有更多邏輯和/ 或物理層的η層數據檢索系統。在一個實施例中,前層106可以包括允許用戶編寫或選擇查詢的用戶界面,比如圖形用戶界面(⑶I)。在另一實施例中,前層106可以執行生成查詢的應用。中間層108可以包括查詢處理邏輯,該查詢處理邏輯處理從前層106接收到的查詢。中間層108可以比如通過將查詢與同每個數據操作相關聯的查詢模板進行匹配來選擇與該查詢相對應的一個或多個數據操作。用于選擇與查詢相對應的數據操作的實施例將在后面予以描述。然后,中間層108將所選數據操作傳遞回后層110以供執行。后層110例如可以包括數據庫服務器以及與其相關聯的一個或多個數據庫、或者一個或多個web服務,但是這些實施例不旨在為限制性的。后層110執行所選數據操作以獲得數據并且然后將所獲得的數據傳遞給中間層108。中間層108可以對所獲得的數據執行一個或多個后處理功能以便滿足該查詢。用于選擇或標識出后處理功能以滿足查詢的實施例將在后面予以描述。然后,中間層108將所獲得和/或經過后處理的數據返回給前層106。由前層106實現的諸如圖形用戶界面(⑶I)之類的界面可以向用戶102呈現所獲得和/或經過后處理的數據。而且,最初在前層106上請求該數據的應用(例如通過生成該查詢)可以使用所獲得和/或經過后處理的數據。在實施例中,數據操作可以以各種方式基于查詢來選擇。例如,圖2是根據一實施例的示例性三層數據檢索系統200的詳細框圖100,該系統被配置為使用查詢模板將查詢與數據操作相匹配。數據檢索系統200包括請求實體202、中間層204和數據服務206。請求實體202是諸如圖I的前層106之類的前層的示例,并且可以與用戶102對接。中間層 204是圖I的中間層108的示例。數據服務206是諸如圖I的后層110之類的后層的示例。A.請求實體請求實體202旨在寬范圍地表示能夠生成查詢并將其提供給中間層204的任何系統或設備。在一個實施例中,用戶可以與在請求實體202上執行的應用交互以便生成該查詢。例如,用戶可以與在web瀏覽器的上下文中執行的應用交互,例如在該上下文中,請求實體202包括該應用和該web瀏覽器。該應用可以致使web瀏覽器生成統一資源位置(URL) 形式的查詢。然后,URL形式的查詢可以被轉換成可由諸如Windows通信基礎(WCF)服務組件之類的web服務組件提供給中間層204的形式。然后,該查詢被請求實體202提供給中間層204。在另一實施例中,請求實體202可以執行在運行時自動生成查詢的應用。例如,該應用可以包括在該應用的開發期間使用C、C++、C#、Java和/或本領域已知的任何其他編程語言被編寫(即硬編碼)到該應用中的查詢。在該應用的編譯期間,被硬編碼的查詢可以被自動轉換成可提交給中間層204的形式。在經編譯的應用的執行期間,該查詢然后可以按照需要自動被提交給中間層204以履行該應用的功能。在另一實施例中,請求實體202可以執行允許用戶在運行時動態地編寫查詢以及將其提交給中間層204的應用。構思了被請求實體202用于生成查詢的又一方法,并且示例性實施例的范圍不限于上述示例。中間層204以下面將描述的方式來處理從前層202接收到的查詢以從數據服務 204獲得數據并且將包括所獲得數據的查詢結果返回給請求實體202。然后,請求實體202 可以比如通過經由合適界面向用戶(比如用戶102)呈現查詢結果和/或將該查詢結果用在生成該查詢的應用中來使用該查詢結果。由中間層204所接收的查詢可以使用諸如下列用于呈現查詢的各種協議中的一種或多種來表達標準查詢語言(SQL)、語言集成查詢(LINQ)、可擴展標記語言查詢(XML查詢或XQuery)等等。在此處所呈現的各個實施例和示例中,描述了 LINQ形式的查詢,但是示例實施例的范圍在此方面不受限。在一個實施例中,該查詢可以使用本領域已知的諸如LINQ表達式樹之類的數據結構來表示。例如,在一個實施例中,該查詢被表示成LINQ表達式樹,該LINQ表達式樹包括指向該查詢的根節點和連接到根節點的一個或多個子節點,所述節點包含該查詢的主體和/或參數。然而,這僅僅是一個示例,并且可以使用其他數據結構和形式來表示查詢。B.中間層如圖2進一步示出的那樣,中間層204包括多個互連的組件,包括請求處理器 208、查詢規范化器210、查詢匹配器212、目錄214以及結果組裝器216。這些組件例如可以包括在單個計算設備上執行的軟件模塊、或者可替代地包括分布在單獨但相連接的計算設備間并在所述計算設備上執行的軟件模塊。中間層204從請求實體202接收查詢。中間層204以下面所描述的方式處理該查詢,其中這樣的處理包括從固定的一組與該查詢相對應的數據操作中選擇一個或多個數據操作。中間層204針對數據服務206執行所選數據操作,并且響應于所選數據操作的執行而從數據服務206接收數據。中間層204被配置為向請求實體202返回包括所獲得的數據的查詢結果。I.請求處理器請求處理器204從請求實體202接收查詢。請求處理器208將該查詢轉發給查詢規范化器210用于將對其應用規范化過程。查詢規范化器向請求處理器208返回該查詢的經規范化的版本(在此稱為經規范化的查詢)。然后,請求處理器208將經規范化的查詢轉發給查詢匹配器212。查詢匹配器212向查詢處理器208返回執行計劃,其中該執行計劃包括要針對數據服務206來執行的基于經規范化查詢所選擇的一個或多個數據操作。然后, 請求處理器208將執行計劃轉發給結果組裝器216。結果組裝器216針對數據服務206執行所選數據操作以獲得數據。結果組裝器216將包括所獲得數據的查詢結果傳送給請求處理器208。然后,請求處理器208將從結果組裝器216接收到的包括所獲得的數據的查詢結果轉發給請求實體202。在一個實施例中,由查詢匹配器212所生成的執行計劃除了將要針對數據服務 206執行的所選數據操作以外還包括一個或多個后處理功能。這些后處理功能將對從數據服務206獲得的數據執行,以滿足該查詢。根據該實施例,請求處理器208將包括后處理功能和數據操作的執行計劃轉發給結果組裝器216。2.查詢規范化器查詢規范化器210通過生成查詢的符合某個標準或規范查詢形式的表示來對從請求處理器208接收到的查詢進行規范化。所生成的表示在此被稱為經規范化的查詢。 該經規范化的查詢然后被返回給請求處理器208。通過執行規范化功能,查詢規范化器 210保證查詢匹配器212將針對請求相同數據但以不同形式表達的等價查詢返回一致的結果(即將選擇相同的一個或多個數據操作)。可由查詢規范化器210在查詢被表達成LINQ表達式時所執行的示例性規范化操作可以包括對二進制算子的表達式進行重排 (reorder),使得這些表達式被一致地處理,或者將連續過濾(例如Where ())調用合并成單個調用,將其聯合成聯合(進行與(AND)運算)形式。如果查詢規范化器210確定從請求處理器208所接收到的查詢不需要被修改為標準或規范形式,則被查詢規范化器210傳遞回請求處理器208的經規范化的查詢可以與原始查詢相同。3.查詢匹配器查詢匹配器212從請求處理器208接收經規范化的查詢。查詢匹配器212被配置為通過將經規范化的查詢與同每個數據操作相關聯的查詢模板進行匹配來從固定的一組數據操作中選擇與經規范化的查詢相對應的一個或多個數據操作。在一個實施例中,查詢匹配器212創建包括所選數據操作的執行計劃。可以針對數據服務(例如數據服務206) 執行所選數據操作以獲得完全滿足經規范化的查詢的數據。在另一實施例中,查詢匹配器 212創建包括所選數據操作和一個或多個后處理步驟的執行計劃。根據該實施例,針對數據服務206所執行的所選數據操作獲得僅僅部分滿足經規范化的查詢的數據。然后,可以將后處理步驟應用于所獲得的數據以完全滿足經規范化的查詢。根據兩個實施例,執行計劃被傳送給請求處理器208以用于轉發給結果組裝器216。如上所述,查詢匹配器212基于經規范化的查詢從固定的一組數據操作中選擇數據操作。具體而言,查詢匹配器212訪問存儲一組查詢模板的目錄214,其中每個查詢模板都與該固定的一組數據操作中的數據操作相關聯。每個查詢模板都包括查詢的可被相關聯的數據操作滿足的代數描述。然后,查詢匹配器212基于與每個數據操作相關聯的查詢模板來選擇與經規范化的查詢相匹配的一個或多個數據操作。在一個實施例中,該目錄可以包括關于數據操作的附加信息,例如相關聯的成本估計。查詢匹配器212可以利用該信息來使所選數據操作的成本最小化。為了促進匹配,可以使用與用于表示經規范化的查詢的語言或格式基本類似的語言或格式來指定每個查詢模板。例如,在使用LINQ表達式來表達經規范化的查詢的實施例中,每個查詢模板也可以被表達成LINQ表達式。此外,在使用LINQ表達式樹來表達經規范化的查詢的實施例中,每個查詢模板都可以由LINQ表達式樹來表達。查詢匹配器212從與查詢模板相關聯的固定的一組數據操作中選擇被認為與經規范化的查詢最佳地匹配的那些數據操作。根據某些實施例,查詢匹配器212通過如下方式來執行該功能評估表示經規范化的查詢的LINQ表達式或LINQ表達式樹與表示與數據操作相關聯的查詢模板的多個LINQ表達式或LINQ表達式樹中的每個之間的相似性。這例如可以包括評估表達經規范化的查詢的LINQ表達式樹的節點的內容與同每個數據操作相關聯的LINQ表達式樹的相應節點的內容之間的相似性。相關領域內的技術人員將理解, 還可以使用多種用于匹配樹結構的可替代方法。此外,在某些實施例中,查詢匹配器212可以使用一組規則來驅動匹配過程。查詢模板代數描述中的附加的查詢模板算子可以允許查詢匹配器212匹配更寬的一組經規范化的查詢并且從其中提取出信息。現在將提供由查詢匹配器212所執行的匹配過程的示例。將參考使用LINQ表達式來表示經規范化的查詢和查詢模板的實施例來描述這些示例。然而,示例性實施例的范圍在此方面不受限。例如,下面所述的經規范化的查詢和查詢模板還可以使用LINQ表達式樹來表示,并且查詢匹配器212可以使用與所述過程類似的選擇過程。例如,經規范化的查詢可以由如下LINQ表達式來表示[Customers],其旨在從數據服務206獲得所有顧客的列表。查詢匹配器212可以接收在上面被規范化的以所述形式二者任一和/或作為LINQ表達式樹的查詢。查詢匹配器212可以將經規范化的查詢與存儲在目錄214中的每個查詢模板相比較。這樣的查詢模板可以包括用于如下數據操作的查詢模板List<Customer>GetAllCustomers(),其中相關聯的查詢模板是如下形式的LINQ表達式GetAlICustomers:[Customers]。根據上面的示例,查詢匹配器212可以基于經規范化的查詢的[Customers] LINQ表達式與同List〈Customer>GetAlICustomers O數據操作相關聯的查詢模板的 GetAllCustomers: [Customers]LINQ表達式的比較來從固定的一組數據操作中選擇 List〈Customer>GetAl ICustomers O數據操作。在該示例中,當針對數據服務206執行所選數據操作List〈Customer>GetAllCustomers O時,將返回滿足該經規范化的查詢的數據。 因此,根據該示例,查詢匹配器212可以從固定的一組數據操作中選出可以針對數據服務 206來執行的單個數據操作以滿足經規范化的查詢[Customers]。應當注意,在某些實施例中,查詢匹配器可以從固定的一組數據操作中選擇在針對數據服務206執行時將滿足經規范化的查詢的兩個或更多個數據操作。
i.后處理功能在一個實施例中,查詢匹配器212可以從固定的一組數據操作中選擇僅部分滿足經規范化的查詢的數據操作。換言之,響應于所選數據操作的執行而從數據服務206所返回的數據將不完全滿足經規范化的查詢。例如,所返回的這樣的數據可以包括比經規范化的查詢本打算獲得的數據更多的數據和/或以與經規范化的查詢所指定的順序不同的順序所存儲的數據。在一個實施例中,查詢匹配器212可以標識出一個或多個后處理功能,這些后處理功能將被結果組裝器216應用于通過針對數據服務執行所選數據操作所獲得的數據。這些后處理功能可以被標識為執行計劃的如下部分該部分與所選數據操作的標識或描述一起由查詢匹配器212提供給查詢處理器208。舉例來說,經規范化的查詢可以由如下LINQ表達式來表示[Customers]. Where (c = > c. ID = = “MSFT” ),其旨在從數據服務206獲得具有顧客標識符“MSFT”的所有顧客的列表。查詢匹配器212可以接收在上面被規范化的以所述形式二者任一和/或作為LINQ表達式樹的查詢。查詢匹配器212可以將經規范化的查詢與存儲在目錄214中的每個查詢模板相比較。 這樣的查詢模板可以包括用于如下數據操作的查詢模板List<Customer>GetAllCustomers(),其中相關聯的查詢模板是如下形式的LINQ表達式GetAlICustomers:[Customers]。根據上面的示例,查詢匹配器212可以基于經規范化的查詢的[Customers]. Where (c = > c. ID = = ’^ISFT”)表達式與同 List〈Customer>GetAl ICustomers O 數據操作相關聯的查詢模板的GetAllCustomers: [Customers]LINQ表達式的比較來從固定的一組數據操作中選擇List〈Customer>GetAllCustomers O數據操作。在該示例中,當針對數據服務206執行所選數據操作List〈Customer>GetAllCustomers O時,將返回將不完全滿足該經規范化的查詢的數據。因此,查詢匹配器212可以標識出為了滿足經規范化的查詢將由結果組裝器216對從數據服務206獲得的數據執行的一個或多個后處理功能。根據該示例,所標識出的后處理功能可以對基于所選數據操作List〈Customer>GetAllCustomers O 的執行對從數據服務206獲得的數據進行過濾,以生成該數據的包含具有顧客標識符 “MSFT”的顧客的列表的子集,由此滿足該經規范化的查詢。在另一示例中,經規范化的查詢可以由如下LINQ表達式來表示[Customers]. Where (c = > c. ID = = “MSFT” ). SelectMany (c = > c. Orders),其旨在從數據服務206獲得具有顧客標識符“MSFT”的所有顧客的所有訂單的列表。查詢匹配器212可以接收在上面被規范化的以所述形式二者任一和/或作為LINQ表達式樹的查詢。查詢匹配器212可以將經規范化的查詢與存儲在目錄214中的每個查詢模板相比較。這樣的查詢模板可以包括用于如下數據操作的查詢模板List<Customer>GetAllCustomers ()以及List〈Customer>GetAlIOrders O其中相關聯的相應查詢模板是如下形式的LINQ表達式GetAlICustomers: [Customers],以及GetAllOrders:[Orders]
根據上面的示例,查詢匹配器212可以基于經規范化的查詢的[Customers]. Where (c = > c. ID = = “MSFT”)· SelectMany (c = > c. Orders) LINQ 表達式與同 List<Customer>GetA110rders ()數據操作相關聯的查詢模板的 GetAllOrders: [Orders] LINQ表達式的比較來從固定的一組數據操作中選擇List〈Customer>GetA110rders O數據操作。例如,查詢匹配器212可以基于若干匹配因素來在該固定的一組數據操作中的其他數據操作的范圍內選擇List〈Customer>GetA110rders O數據操作,所述匹配因素包括:與該數據操作相關聯的查詢模板的LINQ表達式如何緊密地匹配經規范化的查詢的LINQ表達式。在該示例中,當針對數據服務206執行所選數據操作GetAllOrders: [Orders]時,將返回將不完全滿足該經規范化的查詢的數據。因此,查詢匹配器212可以標識出為了滿足該查詢將由結果組裝器216對從數據服務206獲得的數據執行的一個或多個后處理功能。根據該示例,所標識出的后處理功能可以對基于所選數據操作GetAllOrders: [Orders]的執行從數據服務206獲得的數據進行過濾,以獲得該數據的包含具有顧客標識符“MSFT”的顧客的列表的所有訂單的子集,由此滿足該經規范化的查詢。ii.指示任選性的查詢模板算子在一個實施例中,查詢匹配器212可以將經規范化的查詢與包括指示任選性的算子的查詢模板相比較。查詢匹配器212查明具有指示任選性的算子的查詢模板是否匹配該經規范化的查詢。指示任選性的算子被用于指示查詢模板的元素將在匹配期間被認為是任選的,這意味著,經規范化的查詢不必為了被認為是匹配的而包括該任選元素。使用包括指示任選性的算子的查詢模板將有利地使得能夠定義將與相同查詢的許多不同變型相匹配的查詢模板,其中這些變型的前提是包括或排除諸如任選參數之類的某些任選元素。根據實施方式可以在查詢模板內使用多種合適算子中的任何算子來指示任選性。例如,在某些實施例中,被表達成LINQ表達式的查詢模板的Where O元素可以通過將 Where ()元素表達成OptionalWhereO而被標識為任選的,其中對任選性的指示符是所插入的“Optional (任選)”文字。然而,這僅僅是一個示例。相關領域的技術人員將容易地理解,可以使用任何數目的其他算子。iii.具有提取元素的查詢模板在一個實施例中,查詢匹配器212可以將經規范化的查詢與包括至少一個提取元素的查詢模板相比較。如在此所稱呼的那樣,提取元素是查詢模板的如下部分該部分被指定為向查詢匹配器212指示在匹配以前應當用從經規范化的查詢中提取出的特定值或算子替換該元素。在由查詢匹配器212執行的選擇過程期間,查詢匹配器212將在經規范化查詢中提取出由提取元素所標識出的值、算子或信息元素(比如屬性元素的名稱或屬性元素引用序列),并且然后用所提取出的值、算子或信息元素來替換該提取元素。該特性使得能夠以靈活的方式定義查詢模板,這些靈活的方式允許參考經規范化的查詢的相應元素來定義該模板的元素。例如,經規范化的查詢可以由如下LINQ表達式來表示[Customers]. Where (c = > c. ID = = “MSFT”). SelectMany (c = > c. Orders). OrderBy (o = > o. Date),其旨在從數據服務206獲得具有顧客標識符“MSFT”的所有顧客的所有訂單的列表,其中該訂單列表以按日期排序的形式被返回。查詢匹配器212可以接收在上面被規范化的以所述形式二者任一和/或作為LINQ表達式樹的查詢。查詢匹配器212可以將該查詢與存儲在目錄214中的每個查詢模板相比較。這樣的查詢模板可以包括用于如下數據操作的查詢模板List<Order>GetOrdersForCustomer(string customerID),其中相關聯的查詢模板是如下形式的LINQ表達式GetOrdersForCustomer: [Customers]. Where (c = > c. ID = = ExtractConstantF orParam( “customerID,,))· SelectMany(c = > c. Orders)。根據上面的示例,查詢匹配器212可以基于經規范化的查詢的LINQ表達式與同相應數據操作相關聯的查詢模板的LINQ表達式的比較來從固定的一組數據操作中選擇Lis t<0rder>Get0rdersForCustomer(string customerID)數據操作。在該不例中,查詢模板中的 Where (c = > c. ID = = ExtractConstantForParam( “customerID,,))兀素包括提取兀素ExtractConstantForParam( “customerID”)。在選擇過程期間,查詢匹配器212從經規范化的查詢中提取出參數“customerID”,該參數在該情況下可以是“MSFT”。一旦從查詢中提取出該參數,則該參數就可以用作相應查詢模板的一部分。根據該示例,提取和替換以后的查詢模板為GetOrdersForCustomer: [Customers]. Where (c = > c. ID = = “MSFT”). SelectMany (c = > c. Orders)。換言之,提取兀素 ExtractConstantForParam被從經規范化的查詢中提取的常量“MSFT”替換。然后,查詢匹配器212使用包括所提取的常量的查詢模板繼續該選擇過程。查詢匹配器212可以在執行計劃中記錄關于提取發生的信息。例如, 查詢匹配器212可以用從查詢中提取出的、或者由與所選數據操作相關聯的查詢模板所提供的相應元素來配置執行計劃的描述的指定元素。應當注意,根據某些實施例,可以定義包括上面特性的任何組合的查詢模板。例如,可以定義將一個或多個提取元素與一個或多個任選元素結合使用的一個或多個查詢模。iv.空匹配在一個實施例中,查詢匹配器212可以確定在該固定的一組數據操作中不存在可以完全滿足經規范化的查詢的數據操作,并且還可以確定不存在可以應用于從數據服務206獲得的數據以完全滿足該查詢的可用后處理功能。例如,在某些實施例中,某些后處理功能可能由于中間層204的開發者或管理員確定這樣的后處理功能過于昂貴或以其他原因不期望執行而不可用。在這種情況下,查詢匹配器212可以向請求處理器208返回指示經規范化的查詢不能被執行的結果,并且該結果可以被傳遞回請求實體202。可替代地, 查詢匹配器212可以向請求處理器208返回如下的執行計劃在執行計劃在被結果組裝器 216執行時將導致產生不完全滿足原始提交的查詢的查詢結果。然后,這些查詢結果可以被請求處理器208傳遞回請求實體202。4.目錄在一個實施例中,目錄214存儲固定的一組數據操作和相關聯的查詢模板。在另一實施例中,目錄214僅僅存儲與該固定的一組數據操作相關聯的查詢模板,并且該組固定的數據操作存儲在結果組裝器216中并且準備好供結果組裝器216執行。存儲在目錄 214中的該固定的一組數據操作和相關聯的查詢模板可以由中間層204的管理員和/或開發者或者由其他某個實體來定義。在一個實施例中,目錄214可以存儲隨時間被開發者或其他某個實體修改的一組數據操作。在另一實施例中,目錄214可以不存儲相關聯的查詢模板,而是從諸如關于數據操作名稱的一組約定之類的其他信息中導出所述查詢模板。應當注意,盡管目錄214在圖2中被示為邏輯上不同的組件,但是一實施方式可以將目錄214與數據檢索系統200的另一組件相組合。例如,一實施方式可以將目錄214直接集成到查詢匹配器212中或者可以將目錄214存儲在數據服務206本身之內。5.結果組裝器結果組裝器216從請求處理器208接收執行計劃。該執行計劃可以包含將針對數據服務206執行以獲得數據的所選數據操作。在一個實施例中,結果組裝器216包括該固定的一組數據操作,其中針對該組數據操作,目錄214存儲有相關聯的相應查詢模板。換言之,目錄214可以僅為包括在結果組裝器216中并由其執行的數據操作存儲有查詢模板。 結果組裝器216可以針對數據服務206執行由執行計劃所指定的所選數據操作。數據服務 206可以響應于所選數據操作的執行而向結果組裝器216返回數據。結果組裝器216還可以存儲以及能夠執行后處理功能。如上所述,執行計劃還可以包含可以對從數據服務206獲得的數據執行的后處理功能。結果組裝器216可以對從數據服務206獲得的數據執行由執行計劃所指定的后處理功能。如上所述,后處理功能可以包括過濾和可以對所獲得數據執行以滿足經規范化的查詢的其他功能。在一個實施例中,可由結果組裝器216執行的該固定的一組數據操作可以包括與簡單對象訪問協議(SAOP)、分布式公共對象模型(DCOM)和/或遠程過程調用(RPC)相關聯的一個或多個數據操作。例如,所選數據操作可以是在執行時訪問數據服務206的SOAP操作。結果組裝器216向請求處理器208返回查詢結果以用于轉發給請求實體202。該查詢結果包括所獲得的數據和/或經過后處理的數據。C.數據服務數據服務206充當3層數據檢索系統200的后層。數據服務206可以包括數據庫服務器和與其連接的一個或多個數據庫或一個或多個web服務。在數據服務206包括數據庫服務器的實施例中,該數據庫服務器可以包括任何類型的數據庫服務器,包括任何類型的關系數據庫服務器、對象/關系數據庫服務器、面向對象的數據庫服務器等等。如上所述,數據服務206可以使用由中間層204(即結果組裝器216)執行的數據操作來訪問。響應于從結果組裝器216接收到數據操作,數據服務206被配置為返回數據。III.用于使用查詢模板將查詢與數據操作進行匹配的示例性方法現在將描述根據各個實施例的用于使用查詢模板將查詢與數據操作進行匹配的示例性方法。具體而言,圖3描繪了根據一實施例的使用查詢模板將查詢與數據操作進行匹配的示例性數據檢索方法的流程圖300。現在將在繼續參考上面參照圖2所述的系統200 的情況下描述流程圖300的方法。然而,相關領域的技術人員能夠理解,流程圖300的方法不限于這些實施方式。如圖3所示,流程圖300的方法始于步驟302,在該步驟302,從請求實體接收查詢。該步驟例如可以由系統200的請求處理器208來執行。如上面參考系統200所述,該查詢可以向諸如系統200的數據服務206之類的數據服務請求所指定的數據。例如,請求處理器208可以從請求實體202接收該查詢。
13
在步驟304,通過將該查詢與同每個數據操作相關聯的查詢模板相比較來從用于訪問該數據服務的固定的一組數據操作中選擇數據操作。每個查詢模板都包括查詢的可被相關聯的數據操作滿足的代數描述。該步驟例如可以由系統200的查詢匹配器212來執行。在步驟306,針對數據服務執行所選數據操作以獲得數據。該步驟例如可以由系統200的結果組裝器216來執行。例如,可以由結果組裝器216針對數據服務206執行所選數據操作來獲得數據。在任選步驟308,可以對從該數據服務獲得的數據執行后處理功能以滿足該查詢。 該步驟例如可以由系統200的結果組裝器216來執行。例如,這些后處理功能可以由結果組裝器216對從數據服務206獲得的數據執行以滿足該查詢。在步驟310,將所獲得的數據提供給請求實體。該步驟例如可以由系統200的請求處理器208來執行。例如,請求處理器208可以向請求實體202提供包括所獲得的數據 (或經過后處理的數據)的查詢結果。圖4描繪了根據一實施例的使用查詢模板將查詢與數據操作相匹配的另一示例性數據檢索方法的流程圖400。現在將在繼續參考上面參照圖2所述的系統200的情況下描述流程圖400的方法。然而,相關領域的技術人員能夠理解,流程圖400的方法不限于這些實施方式。如圖4所示,流程圖400的方法始于步驟402,在該步驟402,接收查詢。該步驟例如可以由系統200的請求處理器208來執行。如上面參考系統200所述,該查詢可以向諸如系統200的數據服務206之類的數據服務請求所指定的數據。在步驟404,生成用于滿足該查詢的執行計劃。該執行計劃可以包括對可針對數據服務執行的數據操作和將應用于從數據服務獲得的數據的后處理步驟的引用。該步驟例如可以由系統200的查詢匹配器212來執行。例如,查詢匹配器212可以生成包括用于獲得數據的數據操作以及將對所獲得數據執行的后處理步驟的執行計劃。該執行計劃基于查詢與查詢的可被每個數據操作滿足的代數描述的匹配程度標識出數據操作。在任選步驟406,將執行計劃提供給實體以供執行。該步驟例如可以由系統200的請求處理器208來執行。例如,請求處理器208可以將執行計劃提供給結果組裝器216以供執行。示例性計算機系統實施方式圖5示出了可用于實現根據一實施例的用于使用查詢模板將查詢與數據操作相匹配的系統的示例性計算機系統500。例如,圖I的三層數據檢索系統104或圖2的三層數據檢索系統200的任何組件都可以使用計算機系統500來實現。計算機系統500例如可以表示常規個人計算機、移動計算機或工作站形式的通用計算設備,或者計算機系統500可以是專用計算設備。此處所提供的對計算機系統500的描述只是為了說明,并不是限制性的。實施例也可以在相關領域的技術人員所知的其它類型的計算機系統中實現。如圖5所示,計算機系統500包括處理單元502、系統存儲器504,以及將包括系統存儲器504的各種系統組件耦合到處理單元502的總線506。處理單元502可包括一個或多個處理器或處理核心。系統總線506表示若干類型的總線結構中的任何一種總線結構的一個或多個,包括存儲器總線或存儲器控制器、外圍總線、加速圖形端口,以及使用各種總線體系結構中的任何一種的處理器或局部總線。系統存儲器504包括只讀存儲器(ROM) 508和隨機存取存儲器(RAM)510。基本輸入/輸出系統512 (BIOS)存儲在ROM 508中。計算機系統500還具有一個或多個以下驅動器用于讀寫硬盤的硬盤驅動器514、 用于讀或寫可移動磁盤518的磁盤驅動器516、以及用于讀或寫諸如⑶R0M、DVD ROM或其他光介質之類的可移動光盤522的光盤驅動器520。硬盤驅動器514、磁盤驅動器516,以及光驅動器520分別通過硬盤驅動器接口 524、磁盤驅動器接口 526,以及光學驅動器接口 528連接到系統總線506。驅動器以及它們相關聯的計算機可讀介質為計算機提供了對計算機可讀指令、數據結構、程序模塊,及其他數據的非易失存儲器。雖然描述了硬盤、可移動磁盤和可移動光盤,但是,也可以使用諸如閃存卡、數字視頻盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)等等之類的其他類型的計算機可讀介質來存儲數據。數個程序模塊可被存儲在硬盤、磁盤、光盤、ROM,或RAM上。這些程序模塊可以包括請求處理器208、查詢規范化器210、查詢匹配器212和/或結果組裝器216中的一個或多個。當被處理單元502執行時,這些程序模塊可以執行上述功能和特性,包括、但不限于 上面參考圖3的流程圖300和圖4的流程圖400所述的任何步驟和功能。用戶可以通過諸如鍵盤538和定點設備540之類的輸入設備向計算機系統500中輸入命令和信息。其它輸入設備(未示出)可包括話筒、操縱桿、游戲控制器、掃描儀等等。 在一個實施例中,結合顯示器544提供具有多點觸控能力的觸摸屏以允許用戶通過向觸摸屏上的一個或多個點施加觸摸(例如通過手指或指示筆)來提供用戶輸入。這些及其他輸入設備常常通過耦合到總線506的串行端口接口 542連接到處理單元506,但是,也可以通過其他接口,諸如并行端口、游戲端口、通用串行總線(USB)端口,來進行連接。顯示器544 還通過諸如視頻適配器546之類的接口連接到總線506。除了顯示器之外,計算機系統500 還可包括其他外圍輸出設備(未示出),比如揚聲器和打印機。計算機系統500通過網絡接口或適配器550、調制解調器552或其它用于在網絡上建立通信的裝置連接到網絡548 (例如,局域網或諸如因特網之類的廣域網)。調制解調器552(可以是內置的或外置的),通過串行端口接口 542連接到系統總線506。如此處所用的,術語“計算機程序介質”以及“計算機可讀介質”被用于泛指非瞬態介質,諸如與硬盤驅動器514相關聯的硬盤、可移動磁盤518、可移動光盤522,以及其他介質,諸如閃存卡、數字視頻盤、隨機讀取存儲器(RAM)、只讀存儲器(ROM)等。如上文所指示的,計算機程序和模塊(包括應用程序532及其他程序模塊534)可被存儲在硬盤、磁盤、光盤、ROM或RAM上。這樣的計算機程序也可以通過網絡接口 550或串行端口接口 542來接收。這些計算機程序在由應用程序執行或加載時使得計算機500能夠實現此處所討論的實施例的特征。因此,這樣的計算機程序表示計算機系統500的控制器。實施例還針對包括存儲在任何計算機可讀介質上的軟件的計算機程序產品。這樣的軟件,當在一個或多個數據處理設備中執行時,使數據處理設備如此處所描述的那樣操作。實施例可使用現在已知或將來知曉的任何計算機可使用或計算機可讀介質。計算機可讀介質的例子包括但不限于存儲設備,諸如RAM、硬盤、軟盤、CD ROM,DVD R0M、Zip盤、磁帶、 磁存儲設備、光存儲設備、基于MEMS的存儲設備、基于納米技術的存儲設備,等等。V.結語雖然以上描述了不同的實施例,但應當理解的是它們只是作為示例而非限制。對于相關領域的技術人員顯而易見的是,可以對其做出各種改變而不背離本發明的精神和范圍。因此,此處所公開的本發明的寬度和范圍不應被上述所公開的示例性實施例所限制,而應當僅根據所附權利要求書及其等同替換來定義。
權利要求
1.一種方法(300),包括從請求實體接收(302)查詢;基于該查詢從固定的一組用于訪問數據服務的數據操作中選擇(304) —個或多個數據操作,其中該選擇包括將該查詢與同該固定的一組數據操作中的每個數據操作相關聯的查詢模板相比較,每個查詢模板都包括查詢的能夠被相關聯的數據操作滿足的代數描述;針對數據服務執行(306)所選數據操作以從其獲得數據;以及將所獲得的數據提供(310)給請求實體。
2.如權利要求I所述的方法,其特征在于,該查詢包括LINQ表達式,并且其中將該查詢與同該固定的一組數據操作中的每個數據操作相關聯的查詢模板相比較包括將該LINQ表達式與同該固定的一組數據操作中的每個數據操作相關聯的LINQ表達式模板相比較。
3.如權利要求I所述的方法,其特征在于,該選擇包括選擇一個或多個能夠針對該數據服務執行以滿足該查詢的一個或多個數據操作。
4.如權利要求I所述的方法,其特征在于,該選擇包括選擇一個或多個能夠針對該數據服務執行以部分地滿足該查詢的一個或多個數據操作,該方法還包括對從該數據服務獲得的數據執行一個或多個后處理功能以滿足該查詢。
5.如權利要求I所述的方法,其特征在于,還包括在該選擇步驟以前對該查詢進行規范化。
6.如權利要求I所述的方法,其特征在于,將該查詢與同該固定的一組數據操作中的每個數據操作相關聯的查詢模板相比較包括將該查詢與包括算子的至少一個查詢模板相比較,所述算子指示該查詢模板的一部分在查明該查詢模板是否與該查詢相匹配時是任選的。
7.如權利要求I所述的方法,其特征在于,將該查詢與同該固定的一組數據操作中的每個數據操作相關聯的查詢模板相比較包括用從該查詢中提取的由至少一個查詢模板的指定元素標識出的相應元素替換該指定元素。
8.一種包括上面記錄有計算機程序邏輯的計算機可讀介質的計算機程序產品,該計算機程序邏輯包括用于使得處理器能夠執行如權利要求1-7任一項所述的裝置。
9.一種系統(200),包括請求處理器(208),該請求處理器(208)被配置為從請求實體(202)接收查詢;查詢匹配器(212),該查詢匹配器(212)被配置為基于該查詢從固定的一組用于訪問數據服務(206)的數據操作中選擇一個或多個數據操作,其中該查詢匹配器(212)被配置為通過將該查詢與同該固定的一組數據操作中的每個數據操作相關聯的查詢模板相比較來執行該選擇,每個查詢模板都包括查詢的能夠被相關聯的數據操作滿足的代數描述;以及結果組裝器(216),該結果組裝器(216)被配置為針對數據服務(206)執行所選數據操作以從其獲得數據;請求處理器(208)還被配置為向請求實體(202)提供所獲得的數據。
10.如權利要求9所述的系統,其特征在于,該查詢包括LINQ表達式;以及其中該查詢匹配器被配置為將該LINQ表達式與同該固定的一組數據操作中的每個數據操作相關聯的LINQ表達式模板相比較。
11.如權利要求9所述的系統,其特征在于,該查詢匹配器被配置為選擇一個或多個能夠針對該數據服務執行以滿足該查詢的一個或多個數據操作。
12.如權利要求9所述的系統,其特征在于,該查詢匹配器被配置為選擇一個或多個能夠針對該數據服務執行以部分地滿足該查詢的一個或多個數據操作;以及其中該結果組裝器還被配置為對從該數據服務獲得的數據執行一個或多個后處理功能以滿足該查詢。
13.如權利要求9所述的系統,其特征在于,還包括查詢規范化器,該查詢規范化器被配置為在由該查詢匹配器執行該選擇以前對該查詢進行規范化。
14.如權利要求9所述的系統,其特征在于,該查詢匹配器被配置為將該查詢與包括算子的至少一個查詢模板相比較,所述算子指示該查詢模板的一部分在查明該查詢模板是否與該查詢相匹配時是任選的。
15.如權利要求9所述的系統,其特征在于,該查詢匹配器還被配置為用從該查詢中提取的由至少一個查詢模板的指定元素標識出的相應元素替換該指定元素。
全文摘要
本發明涉及使用查詢模板來將查詢與數據操作相匹配。在此描述了由多層數據檢索系統的中間層執行以選擇對應于查詢的數據操作的系統和方法。可以從前層接收查詢。該選擇是通過將查詢與同每個數據操作相關聯的查詢模板相匹配來執行的。每個數據操作的查詢模板都包括查詢的每個可被相應數據操作滿足的代數描述。然后,針對數據服務執行所選數據操作以獲得數據,這些數據然后被提供給前層。在一些實施例中,可以由中間層創建執行計劃以用于滿足該查詢。該執行計劃可以包括所選數據操作和后處理步驟。可以將后處理步驟應用于所獲得的數據以滿足該查詢。然后,經過后處理的數據被提供給前層。
文檔編號G06F17/30GK102609445SQ20111046279
公開日2012年7月25日 申請日期2011年12月9日 優先權日2010年12月10日
發明者M·L·魯伊斯 申請人:微軟公司