本公開涉及用于從數(shù)據(jù)庫獲得結(jié)果的查詢的生成。
背景技術(shù):
系統(tǒng)和數(shù)據(jù)庫能夠處理對數(shù)據(jù)的請求,例如數(shù)據(jù)庫查詢。舉例來說,例如利用關(guān)系數(shù)據(jù)庫管理系統(tǒng)(relationaldatabasemanagementsystem,rdbms),可針對關(guān)系數(shù)據(jù)庫生成并運行由用戶鍵入的查詢或者基于用戶輸入或基于其他輸入而制定的查詢。在一些情況下,可以在運行時制定查詢。取決于查詢所基于的輸入,查詢可能非常復(fù)雜。例如,可以由與終端用戶輸入例如過濾器或挖掘設(shè)置關(guān)聯(lián)的信息產(chǎn)生復(fù)雜查詢。在一些情況下,查詢可包含例如多個數(shù)據(jù)庫表的聯(lián)合(union)和聯(lián)接(join)的復(fù)雜組合或潛在地使得查詢復(fù)雜的被建模的數(shù)據(jù)源的堆積式組合。不管查詢的復(fù)雜性如何,終端用戶都會期待來自處理查詢的關(guān)聯(lián)系統(tǒng)的迅速響應(yīng)。
技術(shù)實現(xiàn)要素:
本公開總體上描述了用于定義和利用用于數(shù)據(jù)模型中數(shù)據(jù)元素的相關(guān)性(dependencies)和等價性(dependencies)以便提高查詢效率的計算機實現(xiàn)的方法、軟件和系統(tǒng)。在設(shè)計時,在數(shù)據(jù)模型中定義數(shù)據(jù)元素的相關(guān)性和等價性。相關(guān)性和等價性被與數(shù)據(jù)模型一起存儲在永久性存儲裝置中,在運行時可應(yīng)用。通過計算機網(wǎng)絡(luò)接收對數(shù)據(jù)的請求。這樣的請求一般導(dǎo)致不一定考慮到相關(guān)性和等價性來從數(shù)據(jù)庫獲得結(jié)果的次優(yōu)查詢?;诮邮盏恼埱蟛⑶依孟嚓P(guān)性和等價性生成優(yōu)化的查詢。
在本說明書中描述的主題可以以特定實現(xiàn)方式實現(xiàn)以便實現(xiàn)下列優(yōu)點中的一個或多個。借助在數(shù)據(jù)模型中對相關(guān)性和等價性的顯式聲明,優(yōu)化可以在數(shù)據(jù)請求的實際執(zhí)行之前在運行時結(jié)合到數(shù)據(jù)請求中。這可以在數(shù)據(jù)檢索過程中導(dǎo)致更快且沒那么易變的響應(yīng)時間、更少的資源消耗以及更穩(wěn)定和高效的執(zhí)行計劃。數(shù)據(jù)建模能力的極大豐富還能夠潛在地通過優(yōu)化的執(zhí)行計劃來導(dǎo)致更快的查詢執(zhí)行。
在附圖和下面的描述中闡述本說明書的主題的一個或多個實現(xiàn)方式的細(xì)節(jié)。根據(jù)所述描述、附圖和權(quán)利要求,所述主題的其他特征、方面和優(yōu)點將變得明了。
附圖說明
圖1是用于利用數(shù)據(jù)模型中的顯式相關(guān)性和等價性聲明傳播過濾器的示例系統(tǒng)的框圖。
圖2a-2b共同列出了用于數(shù)據(jù)模型的示例數(shù)據(jù)模型設(shè)計代碼。
圖3a-3b共同列出了用于在其中使用了相關(guān)性和等價性聲明的特殊數(shù)據(jù)模型的示例數(shù)據(jù)模型設(shè)計代碼。
圖4a-4c共同列出了用于與圖2a-2b的數(shù)據(jù)模型關(guān)聯(lián)的請求的示例代碼。
圖5a-5c共同列出了用于與圖3a-3b的特殊數(shù)據(jù)模型關(guān)聯(lián)的請求的示例代碼。
圖6a和6b示出了分別用于圖4a-4c和5a-5c的示例代碼的示例的優(yōu)化的執(zhí)行計劃。
圖7示出了示例查詢執(zhí)行路徑。
圖8是用于更新應(yīng)用的示例方法的流程圖。
具體實施方式
本公開總體上描述了用于利用數(shù)據(jù)模型中的相關(guān)性和等價性聲明的計算機實現(xiàn)的方法、軟件和系統(tǒng)。這些類型的特征可用于例如優(yōu)化原始的數(shù)據(jù)請求并且?guī)椭_??焖俚捻憫?yīng)時間和改善的用戶體驗,例如,降低的延遲。例如,可以生成基于數(shù)據(jù)模型的查詢,包括利用相關(guān)性和等價性聲明,以產(chǎn)生能夠被更加高效地處理的查詢的形式。
在一些實現(xiàn)方式中,為查詢的目標(biāo)的數(shù)據(jù)可以分布在連接的系統(tǒng)的各種數(shù)據(jù)源之間,其中數(shù)據(jù)源內(nèi)的數(shù)據(jù)元素在彼此之間具有關(guān)聯(lián)性。所述關(guān)聯(lián)性可包括諸如字段(例如,數(shù)據(jù)庫表中的列)之間的相關(guān)性和等價性的關(guān)系。在關(guān)系數(shù)據(jù)模型中,例如,外鍵(foreignkey)可用于表示和/或?qū)崿F(xiàn)不同的數(shù)據(jù)源之間的這樣的關(guān)聯(lián)性。例如,如果不在數(shù)據(jù)模型中描述這樣的關(guān)聯(lián)性,則不能沿聯(lián)接分支適當(dāng)?shù)叵峦七^濾器設(shè)置。作為潛在的后果,數(shù)據(jù)請求可能變得不必要地更加復(fù)雜并且可能處理比實際需要多得多的數(shù)據(jù),原因是過濾器未被適當(dāng)?shù)貞?yīng)用。
在一些實現(xiàn)方式中,表達(dá)可用于實現(xiàn)數(shù)據(jù)模型內(nèi)的計算和聚合。簡單表達(dá)的示例可包括重命名(例如,m1asm)、聚合(例如,sum(m1)asm)以及邏輯表達(dá)(例如,0whenm1<0elsem1asm)。用于在計算復(fù)雜表達(dá)中使用的其他選項可包括例程(例如,存儲的程序(procedure))和用戶定義的函數(shù)。
在一些實現(xiàn)方式中,當(dāng)接收到諸如查詢的數(shù)據(jù)請求時,數(shù)據(jù)庫優(yōu)化器可以負(fù)責(zé)確保例如在后端系統(tǒng)中僅評估相關(guān)數(shù)據(jù)。數(shù)據(jù)庫優(yōu)化器還可以盡可能深地(例如,更靠近數(shù)據(jù)提取,例如從表起并且在聯(lián)接之前)下推過濾器,即使數(shù)據(jù)請求自身不迫使這樣的下推也如此。典型的數(shù)據(jù)庫優(yōu)化器也可能夠識別在過程鏈的下端處的哪些信息需要被向上傳播以饋送所有暴露的表達(dá)。在執(zhí)行這樣的分析時,優(yōu)化器可例如決定下推已經(jīng)設(shè)置的過濾器。
然而,如果數(shù)據(jù)請求變得高度復(fù)雜,計算優(yōu)化的訪問計劃也可能變得具有挑戰(zhàn)性并且潛在地變得次優(yōu)。一般的基于成本的優(yōu)化器還可能具有對于計劃計算的超時限制。在一些實現(xiàn)方式中,如果計劃計算不能在閾值時間限制內(nèi)完成,則優(yōu)化器將較有可能選擇沒那么優(yōu)化的訪問計劃。例如,在沒有外部引導(dǎo)的情況下,可能根本不下推過濾器,即使那將會是最合適的。出于這種考慮,以下是合意的:顯式地迫使過濾器設(shè)置的下推,例如與原始的數(shù)據(jù)請求一起包括該信息。這樣做可以減少對隨后的優(yōu)化能力的依靠和對數(shù)據(jù)請求的重寫。
在一些實現(xiàn)方式中,數(shù)據(jù)模型的定義可包括允許在設(shè)計時聲明數(shù)據(jù)模型中列之間的等價性和相關(guān)性(例如,特性和/或度量)。在下面提供的示例中,提供了對數(shù)據(jù)模型的兩種定義,一種具有等價性和相關(guān)性的顯式聲明而另一種沒有。還提供了與兩種數(shù)據(jù)模型關(guān)聯(lián)的示例查詢,以便示意利用等價性和相關(guān)性可以實現(xiàn)的效率。
圖1是用于利用數(shù)據(jù)模型中的顯式相關(guān)性和等價性聲明傳播過濾器的示例環(huán)境100的框圖。示意的環(huán)境100包括至少一個服務(wù)器104和多個客戶端106,或者可通信地與至少一個服務(wù)器104和多個客戶端106耦合,所述至少一個服務(wù)器104和多個客戶端106全部利用網(wǎng)絡(luò)102連接。環(huán)境100可用于例如使用來自由服務(wù)器104管理的數(shù)據(jù)庫(例如,數(shù)據(jù)庫管理系統(tǒng)(databasemanagementsystem,dbms))的數(shù)據(jù)提供和支持一個或多個客戶端106上的應(yīng)用。所述應(yīng)用可包括例如用于設(shè)計數(shù)據(jù)模型的應(yīng)用和用于提交查詢的應(yīng)用(例如,瀏覽器)。每個客戶端106包括電子計算設(shè)備,該電子計算設(shè)備可操作來例如利用來自服務(wù)器104(例如,來自數(shù)據(jù)庫116)以及潛在地來自其他源的數(shù)據(jù),來給用戶提供信息以用于顯示在網(wǎng)頁上和/或用于其它用途。
環(huán)境100可服務(wù)于幾個目的。例如,設(shè)計數(shù)據(jù)模型的用戶可以在數(shù)據(jù)模型(例如,與數(shù)據(jù)庫116關(guān)聯(lián)的數(shù)據(jù)模型)的設(shè)計時,為通過計算機網(wǎng)絡(luò)接收的數(shù)據(jù)模型中的數(shù)據(jù)元素(例如,關(guān)系數(shù)據(jù)庫中的列或關(guān)系數(shù)據(jù)庫中列上的表達(dá))提供相關(guān)性和等價性。例如,可以將相關(guān)性和等價性包括于在設(shè)計數(shù)據(jù)模型時定義的代碼段中。將相關(guān)性和等價性與數(shù)據(jù)模型一起存儲在永久性存儲裝置中,例如,存儲在數(shù)據(jù)模型114的數(shù)據(jù)存儲庫(datastore)中。在稍后時間,可以通過計算機網(wǎng)絡(luò)接收請求,例如查詢或其他數(shù)據(jù)請求。例如,可以生成并執(zhí)行查詢以從與數(shù)據(jù)模型114關(guān)聯(lián)的數(shù)據(jù)庫116獲得查詢結(jié)果??梢岳媒邮盏臄?shù)據(jù)查詢并利用相關(guān)性和等價性來生成例如優(yōu)化的查詢。
在高層,服務(wù)器104包括電子計算設(shè)備,該電子計算設(shè)備可操作來存儲數(shù)據(jù)對象并提供對該數(shù)據(jù)對象的訪問以供多個客戶端106使用??梢杂捎糜谝粋€或多個特定數(shù)據(jù)庫116的數(shù)據(jù)庫管理系統(tǒng)(dbms)來使用(和/或在其中實現(xiàn))例如數(shù)據(jù)模型114。在一些實現(xiàn)方式中,可以存在多個數(shù)據(jù)模型114,每個數(shù)據(jù)模型與一個或多個數(shù)據(jù)庫116關(guān)聯(lián)。例如,當(dāng)存在多個協(xié)同操作的自動保存緩存時,一個緩存可以是承擔(dān)協(xié)調(diào)/代表角色的主緩存。在一些實現(xiàn)方式中,數(shù)據(jù)庫116的數(shù)據(jù)存儲庫可以存儲或分布在多個位置,例如,在服務(wù)器104和/或其他位置。
當(dāng)在本公開中使用時,術(shù)語“計算機”旨在涵蓋任何合適的處理設(shè)備。例如,盡管圖1示意了單個服務(wù)器104,但是環(huán)境100可以利用兩個或更多個服務(wù)器104以及不是服務(wù)器(包括服務(wù)器池)的計算機來實現(xiàn)。實際上,服務(wù)器104和客戶端106可以是任意計算機或處理設(shè)備。在一些實現(xiàn)方式中,服務(wù)器104可以分布在不同位置并且利用網(wǎng)絡(luò)102耦合。
服務(wù)器104包括處理器128和存儲器132。盡管在圖1中被示意為單個處理器128,但是根據(jù)環(huán)境100的特定需要、期望或特定實現(xiàn)方式,可以使用兩個或更多個處理器128??傮w上,處理器128執(zhí)行指令并操縱數(shù)據(jù)以執(zhí)行服務(wù)器104的操作。具體地,處理器128執(zhí)行接收并處理來自服務(wù)器104的請求所要求的功能。在一些實現(xiàn)方式中,存儲器132可存儲數(shù)據(jù)庫116和數(shù)據(jù)模型114。
存儲器132可存儲與服務(wù)器104的目的關(guān)聯(lián)的各種對象或數(shù)據(jù),包括緩存、類、框架、應(yīng)用、備份數(shù)據(jù)、業(yè)務(wù)對象、工作、網(wǎng)頁、網(wǎng)頁模板、數(shù)據(jù)庫表、存儲業(yè)務(wù)和/或動態(tài)信息的倉庫(repository)以及任何其他適當(dāng)?shù)男畔?,包括任意參?shù)、變量、算法、指令、規(guī)則、約束或?qū)ζ涞膮⒖?referencethereto)。
環(huán)境100的每個客戶端106可以為可操作來利用有線線路或無線連接經(jīng)由本地db或經(jīng)由網(wǎng)絡(luò)102連接到其他系統(tǒng)或與其他系統(tǒng)通信的任何計算設(shè)備。一般地,每個客戶端106包括可操作來接收、傳輸、處理和存儲與圖1的環(huán)境100關(guān)聯(lián)的任何適當(dāng)數(shù)據(jù)的電子計算機設(shè)備。
請求處理器(handler)131例如可處理從客戶端106接收的請求,該請求例如針對要從一個或多個數(shù)據(jù)庫116提供的數(shù)據(jù),以及針對要利用數(shù)據(jù)模型114存儲的用戶輸入。在一些實現(xiàn)方式中,可以利用一個或多個關(guān)系數(shù)據(jù)庫和/或其他存儲結(jié)構(gòu)來實現(xiàn)數(shù)據(jù)庫116,并且存儲的數(shù)據(jù)可以被在本地存儲或被分布。
示意的客戶端106進(jìn)一步包括處理器134、存儲器136、應(yīng)用112(例如,瀏覽器)和接口140。接口140被客戶端106用來與連接到網(wǎng)絡(luò)102的——在環(huán)境100內(nèi)包括的——分布式環(huán)境中的其他系統(tǒng)通信,例如,可通信地耦合到網(wǎng)絡(luò)102的其他系統(tǒng)(未示意)。一般地,接口140包括以合適組合編碼在軟件和/或硬件中的且可操作來與網(wǎng)絡(luò)102通信的邏輯。更具體地,接口140可包括支持與通信關(guān)聯(lián)的一個或多個通信協(xié)議的軟件以使得網(wǎng)絡(luò)102或接口的硬件可操作來在示意的環(huán)境100內(nèi)或在其外部傳送物理信號。
包括瀏覽器112a和數(shù)據(jù)模型設(shè)計應(yīng)用112b的應(yīng)用112可接收并提供信息給關(guān)于各個客戶端106中的每一個的用戶110。作為示例,為了更新顯示在客戶端106上的瀏覽器中的網(wǎng)頁,應(yīng)用112可提供對來自由服務(wù)器104管理的一個或多個數(shù)據(jù)庫116的數(shù)據(jù)的請求。由用戶110利用瀏覽器112a鍵入的示例請求130可用于根據(jù)數(shù)據(jù)庫116生成查詢結(jié)果133。包括存儲數(shù)據(jù)模型定義的請求的請求可例如來自于數(shù)據(jù)模型設(shè)計應(yīng)用112b,數(shù)據(jù)模型設(shè)計應(yīng)用112b可從正在設(shè)計要存儲在數(shù)據(jù)模型114的永久性存儲裝置中的數(shù)據(jù)模型的用戶接收輸入。
數(shù)據(jù)模型設(shè)計應(yīng)用112b可允許用戶110設(shè)計數(shù)據(jù)模型,并且因此,數(shù)據(jù)模型定義124可以由客戶端106提供以存儲在服務(wù)器104。數(shù)據(jù)模型定義124可包括本文描述的且由在服務(wù)器的查詢優(yōu)化器118用來創(chuàng)建優(yōu)化的查詢120的相關(guān)性和等價性126,其示例參考圖5a-5c進(jìn)行描述。
如在圖1中示意的,客戶端106包括處理器134。盡管在圖1中被示意為單個處理器134,但是根據(jù)環(huán)境100的特定需要、期望或特定實現(xiàn)方式,可以使用兩個或更多個處理器134??傮w上,處理器134執(zhí)行指令并操縱數(shù)據(jù)以執(zhí)行客戶端106的操作。具體地,處理器134執(zhí)行將請求發(fā)送到服務(wù)器104并且接收和處理來自服務(wù)器104的響應(yīng)所要求的功能。
示意的客戶端106還包括存儲器136。存儲器136可存儲與客戶端106的目的關(guān)聯(lián)的各種對象或數(shù)據(jù),包括緩存、類、框架、應(yīng)用、備份數(shù)據(jù)、業(yè)務(wù)對象、工作、網(wǎng)頁、網(wǎng)頁模板、數(shù)據(jù)庫表、存儲業(yè)務(wù)和/或動態(tài)信息的倉庫以及任何其他適當(dāng)?shù)男畔ⅲㄈ我鈪?shù)、變量、算法、指令、規(guī)則、約束或?qū)ζ涞膮⒖肌?/p>
示意的客戶端106包括圖形用戶界面(gui)142,gui142被相對于客戶端106示出并且被客戶端106所包含。gui142與環(huán)境100的至少一部分接口以用于任何合適的目的,包括例如顯示與數(shù)據(jù)庫116關(guān)聯(lián)的信息、允許提交查詢以及允許對數(shù)據(jù)模型進(jìn)行設(shè)計的用戶界面屏幕。例如,用戶界面屏幕可提供用戶鍵入字段和/或其他用戶鍵入控件,用戶可例如通過應(yīng)用112針對用戶鍵入字段和/或其他用戶鍵入控件提供用戶輸入。用戶輸入可包括例如文本輸入、從控件(例如,菜單、列表、選項或其他元素)的選擇、導(dǎo)航命令(例如,光標(biāo)/鼠標(biāo)移動)和/或復(fù)雜結(jié)構(gòu)(例如,文件、圖像、聲音、視頻)。在一些實現(xiàn)方式中,用戶輸入可以與應(yīng)用的上下文(例如,特定狀態(tài)或段)關(guān)聯(lián)。
圖2a-2b共同列出了用于數(shù)據(jù)模型的示例數(shù)據(jù)模型設(shè)計代碼200。示例數(shù)據(jù)模型設(shè)計代碼200不包括相關(guān)性和等價性聲明。
圖3a-3b共同列出了用于在其中使用了相關(guān)性和等價性聲明的特殊數(shù)據(jù)模型的示例數(shù)據(jù)模型設(shè)計代碼300。例如,除了如在上面針對數(shù)據(jù)模型設(shè)計代碼200提供的相同的數(shù)據(jù)模型語義之外,數(shù)據(jù)模型設(shè)計代碼300還包括用于暴露的列server_timestamp的相關(guān)性的顯式聲明。例如,代碼段302(用加粗突出)包括用于server_timestamp的t1.server_timestamp與t2.start_time之間的等價性。為了展示的清楚,數(shù)據(jù)模型設(shè)計代碼200和數(shù)據(jù)模型設(shè)計代碼300被以相同代碼行分成多個圖,以使得圖2b和3b中的代碼段是相同的。
圖4a-4c共同列出了用于與圖2a-2b的數(shù)據(jù)模型關(guān)聯(lián)的請求的示例代碼400。例如,使用數(shù)據(jù)模型設(shè)計代碼200,示例代碼400可以是數(shù)據(jù)請求(例如,sql查詢),其在運行時生成并且不包括對時間過濾器的深度傳播。代碼段402(用加粗突出)包括例如時間過濾器,該時間過濾器稍后應(yīng)用到聯(lián)接操作的中間結(jié)果以便使得最終結(jié)果集與期望的時間間隔匹配。
圖5a-5c共同列出了用于與圖3a-3b的特殊數(shù)據(jù)模型關(guān)聯(lián)的請求的示例代碼500。例如,使用數(shù)據(jù)模型設(shè)計代碼300,示例代碼500可以是用于在運行時生成并且包括對時間過濾器的深度傳播的數(shù)據(jù)請求的sql代碼。在代碼段502(粗體)中,例如,根據(jù)用于t1.server_timestamp的相關(guān)性聲明,時間過濾器應(yīng)用在第一聯(lián)接分支(通過別名t1識別)內(nèi)。另外,在代碼段504(粗體)中,根據(jù)用于t1.server_timestamp和t2.start_time的等價性聲明,時間過濾器應(yīng)用在第二聯(lián)接分支(通過別名t2識別)內(nèi)。為了展示的清楚,示例代碼400和500被以相同代碼行分成多個圖,以使得圖4a和5a中的代碼段是相同的,以及圖4c和5c中的代碼段是相同的。
在一些實現(xiàn)方式中,示例代碼500的優(yōu)化的執(zhí)行計劃可以由查詢優(yōu)化器來計算,并且其相比于對于示例代碼400的執(zhí)行計劃可以遠(yuǎn)沒那么復(fù)雜,例如顯著地減少了作為結(jié)果的執(zhí)行時間。從終端用戶的視角來看,實際節(jié)省的時間可至少取決于兩個源表statistics.host_sql_plan_cache和sys.m_expensive_statements的記錄的數(shù)量并且還取決于指定的時間范圍。
盡管別名為t1的列timestamp_server和別名為t2的列start_time具有相同的時間戳格式,但是它們不必在每個時間都相等。作為結(jié)果,在數(shù)據(jù)庫數(shù)據(jù)模型中沒有限定優(yōu)化器可用來下推過濾器的用作參考的約束(referentialconstraint)。聯(lián)接這些列以便允許優(yōu)化器下推過濾器是不可能的,因為這可能使得查詢根本不返回結(jié)果。
在一些實現(xiàn)方式中,相同方案的另一示例可包括將過濾器下推到存儲的程序或功能的參數(shù)中。優(yōu)化器一般不知曉例程內(nèi)部的算法并且因此也不知曉參數(shù)如何影響結(jié)果集。通過將參數(shù)的等價性建模到結(jié)果集列,sql生成器也可下推相等的過濾器。作為結(jié)果,例程可內(nèi)部地過濾處理的數(shù)據(jù),這可比后來應(yīng)用過濾器更加高效。
圖6a和6b示出了分別用于圖4a-4c和圖5a-5c的示例代碼400和500的示例的優(yōu)化的執(zhí)行計劃600和650。由于對等價性和相關(guān)性的使用,因此相比于優(yōu)化的執(zhí)行計劃600,優(yōu)化的執(zhí)行計劃650遠(yuǎn)沒那么不復(fù)雜。另外,用于示例代碼500的估計的執(zhí)行時間(例如,0.09秒)相比于用于示例代碼400的估計的執(zhí)行時間(例如,0.14秒)減少了。從終端用戶的視角來看,實際節(jié)省的時間的量可取決于包含在兩個源表statistics.host_sql_plan_cache和sys.m_expensive_statements中的記錄的數(shù)量并且還取決于指定的時間范圍。
圖7示出了示例查詢執(zhí)行路徑700。查詢路徑包括數(shù)據(jù)請求702,在其中,作為sql查詢的一部分,數(shù)據(jù)元素a被選擇。虛擬數(shù)據(jù)源704限定a連同也是數(shù)據(jù)請求702的一部分的其他數(shù)據(jù)元素d和c。作為數(shù)據(jù)請求704的執(zhí)行的一部分,聯(lián)接718在虛擬數(shù)據(jù)源706上針對視圖v1720和視圖v2722執(zhí)行。視圖v3724例如是結(jié)合例如分別用于數(shù)據(jù)元素a710和元素“a”714的視圖v1720和視圖v2722的視圖。包括原生數(shù)據(jù)源1712和原生數(shù)據(jù)源2716的原生數(shù)據(jù)源708包括a710和元素“a”714。如果例如為用于與查詢執(zhí)行路徑700關(guān)聯(lián)的數(shù)據(jù)庫的數(shù)據(jù)模型建立了相關(guān)性和等價性,則針對a710和元素“a”714,查詢可更高效。
圖8是用于更新應(yīng)用的示例方法800的流程圖。為了展示的清楚,下面的描述在圖1-5c的上下文中總體上描述了方法800。
在802,在數(shù)據(jù)模型的設(shè)計時,通過計算機網(wǎng)絡(luò)接收用于數(shù)據(jù)模型中的數(shù)據(jù)元素的相關(guān)性和等價性。例如,當(dāng)設(shè)計與數(shù)據(jù)模型設(shè)計代碼300關(guān)聯(lián)的數(shù)據(jù)模型時,可以定義包括在代碼段302中的相關(guān)性和等價性。在一些實現(xiàn)方式中,可以在數(shù)據(jù)模型的設(shè)計之后的某個時間定義相關(guān)性和等價性。
在804,將相關(guān)性和等價性與數(shù)據(jù)模型一起存儲在永久性存儲裝置中。例如,服務(wù)器104可從客戶端106接收數(shù)據(jù)模型定義124以及相關(guān)性和等價性126以在服務(wù)器104進(jìn)行永久性存儲。
在806,通過計算機網(wǎng)絡(luò)接收請求,該查詢要被執(zhí)行以從與數(shù)據(jù)模型關(guān)聯(lián)的數(shù)據(jù)庫獲得查詢結(jié)果。例如,服務(wù)器104可從客戶端106接收請求130。
在808,利用接收的請求并利用相關(guān)性和等價性來生成優(yōu)化的查詢。優(yōu)化的查詢相對于接收的請求進(jìn)行了優(yōu)化。例如,利用來自數(shù)據(jù)模型114的信息,查詢優(yōu)化器115可生成優(yōu)化的查詢120。優(yōu)化的查詢的示例可為參考圖5a-5c在上面描述的示例代碼500。
在一些實現(xiàn)方式中,方法800可進(jìn)一步包括執(zhí)行優(yōu)化的查詢以代替執(zhí)行接收的請求。例如,服務(wù)器104可執(zhí)行優(yōu)化的查詢120而不是接收的請求130。
在一些實施方式中,生成優(yōu)化的查詢包括將查詢元素移動到在優(yōu)化的查詢中的使得優(yōu)化的查詢比接收的請求在運行時上更高效的新位置。例如,查詢優(yōu)化器115可重排列諸如代碼段502和504的元素以使其出現(xiàn)在相比于代碼段402不同的位置中。
在一些實現(xiàn)方式中,將查詢元素移動到優(yōu)化的查詢中的新位置包括將查詢元素推到優(yōu)化的查詢中的相對于在查詢中的未優(yōu)化的位置較低位置。例如,如參考圖5a-5c在上面描述的,在代碼段504中,根據(jù)用于t1.server_timestamp和t2.start_time的等價性聲明,時間過濾器應(yīng)用在第二聯(lián)接分支(通過別名t2識別)內(nèi)。這是優(yōu)化的查詢中的“較低”位置,因為代碼處于示例代碼500中較深的嵌套部分中。在一些實現(xiàn)方式中,被移動的查詢元素是常規(guī)過濾器或者語義上等價的過濾器,包括表聯(lián)接,函數(shù)參數(shù),以及程序參數(shù)。
在一些實現(xiàn)方式中,在上面描述的環(huán)境和系統(tǒng)的組件可以是任何計算機或處理設(shè)備,諸如例如,刀片式服務(wù)器、通用個人計算機(pc)、macintosh、工作站、基于unix的工作站或任何其他合適的設(shè)備。換言之,本公開料想到了不是通用計算機的其他計算機以及沒有常規(guī)的操作系統(tǒng)的計算機。另外,組件可適配為執(zhí)行任何操作系統(tǒng),包括linux、unix、windows、mac
在上面描述的環(huán)境和系統(tǒng)中使用的處理器可以為中央處理單元(cpu)、專用集成電路(asic)、現(xiàn)場可編程門陣列(fpga)或另外的合適的組件。總體上,每個處理器可執(zhí)行指令并操縱數(shù)據(jù)以執(zhí)行各種組件的操作。具體地,每個處理器可執(zhí)行將請求和/或數(shù)據(jù)發(fā)送到所述環(huán)境的組件并且從所述環(huán)境的組件接收數(shù)據(jù)所要求的功能,例如在外部設(shè)備、中間設(shè)備和目標(biāo)設(shè)備之間進(jìn)行通信。
上面描述的組件、環(huán)境和系統(tǒng)可包括存儲器或多個存儲器。存儲器可包括任意類型的存儲器或數(shù)據(jù)庫模塊,并且可以采取易失性和/或非易失性存儲器的形式,包括但不限于磁介質(zhì)、光介質(zhì)、隨機存取存儲器(ram)、只讀存儲器(rom)、可卸除介質(zhì)或任何其他本地或遠(yuǎn)程的存儲組件。存儲器可存儲與目標(biāo)設(shè)備、中間設(shè)備和外部設(shè)備的目的關(guān)聯(lián)的各種對象或數(shù)據(jù),包括緩存、類、框架、應(yīng)用、備份數(shù)據(jù)、業(yè)務(wù)對象、工作、網(wǎng)頁、網(wǎng)頁模板、數(shù)據(jù)庫表、存儲業(yè)務(wù)和/或動態(tài)信息的倉庫以及任何其他適當(dāng)?shù)男畔ⅲㄈ我鈪?shù),變量,算法,指令,規(guī)則,約束,用于對其的參考。存儲器內(nèi)的其他組件是可能的。
不管特定的實現(xiàn)方式如何,“軟件”可包括在有形介質(zhì)(酌情為暫態(tài)的或非暫態(tài)的)上的計算機可讀指令、固件、有線和/或編程的硬件或其組合,其可在被執(zhí)行時被操作為至少執(zhí)行本文描述的過程和操作。實際上,每個軟件組件可以以任何適當(dāng)?shù)挠嬎銠C語言來完全或部分地編寫或描述,所述計算機語言包括c、c++、javatm、visualbasic、匯編程序、
設(shè)備可涵蓋任何的計算設(shè)備,例如智能電話、平板計算設(shè)備、pda、桌面計算機、膝上型/筆記本式計算機、無線數(shù)據(jù)端口、在這些設(shè)備內(nèi)的一個或多個處理器或任何其他合適的計算設(shè)備。例如,設(shè)備可包括計算機,所述計算機包括諸如鍵盤、觸摸屏、或能接受用戶信息的其他設(shè)備的輸入設(shè)備和輸出設(shè)備,所述輸出設(shè)備傳達(dá)與上面描述的環(huán)境和系統(tǒng)的組件關(guān)聯(lián)的信息,包括數(shù)字?jǐn)?shù)據(jù)、視覺信息或圖形用戶界面(gui)。gui與上面描述的環(huán)境或系統(tǒng)的至少一部分接口以用于任何合適目的,包括生成網(wǎng)絡(luò)瀏覽器的視覺表示。
前面的圖和伴隨的描述示意了示例過程和計算機可實現(xiàn)的技術(shù)。上面描述的環(huán)境和系統(tǒng)(或其軟件或其他組件)可預(yù)料使用、實現(xiàn)或執(zhí)行用于執(zhí)行這些和其他任務(wù)的任何合適的技術(shù)。將理解,這些過程僅出于示意目的并且所描述的或者類似的技術(shù)可以在任何適當(dāng)?shù)臅r間執(zhí)行,包括并發(fā)地、單獨地、并行地和/或以組合的方式執(zhí)行。另外,這些過程中的許多操作可以同時地、并發(fā)地、并行地和/或以不同于所示出順序的順序發(fā)生。此外,過程可具有額外的操作、更少的操作和/或不同的操作,只要所述方法保持為是適當(dāng)?shù)募纯伞?/p>
換言之,盡管已經(jīng)就某些實現(xiàn)方式和一般關(guān)聯(lián)的方法而言描述了本公開,但是這些實現(xiàn)方式以及方法的變更和置換對于技術(shù)領(lǐng)域內(nèi)的技術(shù)人員來說將是明顯的。因此,對示例實現(xiàn)方式的上述描述不限定或約束本公開。在不脫離本公開的精神和范圍的情況下,其他改變、替換和變更也是可能的。