国产精品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>

      使用流式架構(gòu)的漸進(jìn)式查詢計算的制作方法

      文檔序號:6534545閱讀:334來源:國知局
      使用流式架構(gòu)的漸進(jìn)式查詢計算的制作方法
      【專利摘要】所描述的各實現(xiàn)涉及電子數(shù)據(jù)的處理。一種實現(xiàn)表現(xiàn)為可包括獲得引用一個或多個數(shù)據(jù)項的關(guān)系查詢以及將進(jìn)度區(qū)間與這些數(shù)據(jù)項相關(guān)聯(lián)的一種技術(shù)。該技術(shù)還可包括將關(guān)系查詢轉(zhuǎn)換成對應(yīng)的流式查詢,以及向流引擎提供流式查詢和具有進(jìn)度區(qū)間的數(shù)據(jù)項,該流引擎產(chǎn)生查詢的增量式結(jié)果。例如,進(jìn)度區(qū)間可以基于關(guān)系數(shù)據(jù)庫表格的行數(shù)。進(jìn)度區(qū)間可被用于定義作為輸入被提供給流引擎的流式事件的事件生存期。
      【專利說明】使用流式架構(gòu)的漸進(jìn)式查詢計算
      [0001] 背景
      [0002] 用于對數(shù)據(jù)進(jìn)行工作的現(xiàn)有技術(shù)在大部分情形中往往提供令人滿意的用戶體驗。 例如,與數(shù)據(jù)庫交互的用戶可以使用圖形用戶界面(GUI)來向后端數(shù)據(jù)庫發(fā)出各種查詢。 在許多情景中,這些查詢可以在短時間段內(nèi)被執(zhí)行,并且用戶可以繼續(xù)交互式地與數(shù)據(jù)庫 工作。對于許多開發(fā)情景來說也是如此,例如,軟件開發(fā)者可以撰寫各種查詢,對照數(shù)據(jù)庫 來測試這些查詢,并且以交互方式接收結(jié)果。這促進(jìn)了查詢開發(fā),因為如果給定查詢未產(chǎn)生 預(yù)期結(jié)果則軟件開發(fā)者可以按需修訂該查詢。
      [0003] 然而,對于大型數(shù)據(jù)集而言,現(xiàn)有技術(shù)并非總能提供令人滿意的用戶體驗。例如, "大數(shù)據(jù)"工具(諸如Apache? Hadoop? )能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分析,但并不一定以交互 的方式。在大數(shù)據(jù)的上下文中,給定查詢可能花費(fèi)非常長的時間來完成,甚至可能要整晚。 從負(fù)責(zé)撰寫查詢的軟件開發(fā)者的角度來說,高效地調(diào)試這些查詢可能是困難的,因為軟件 開發(fā)者在評估結(jié)果的正確性之前要等待很長時間直到查詢完成。


      【發(fā)明內(nèi)容】

      [0004] 以上列出的示例旨在提供快速參考以幫助讀者,并且不旨在限定此處所描述的概 念的范圍。
      [0005] 本文檔涉及電子數(shù)據(jù)的處理。一種實現(xiàn)表現(xiàn)為可包括獲得引用一個或多個數(shù)據(jù)項 的關(guān)系查詢以及將進(jìn)度區(qū)間與這些數(shù)據(jù)項相關(guān)聯(lián)的一種技術(shù)。該技術(shù)還可包括將關(guān)系查詢 轉(zhuǎn)換成對應(yīng)的流式查詢,以及向流引擎提供流式查詢和具有進(jìn)度區(qū)間的數(shù)據(jù)項,該流引擎 產(chǎn)生查詢的增量式結(jié)果。至少上述相關(guān)聯(lián)可由計算設(shè)備執(zhí)行。
      [0006] 另一實現(xiàn)表現(xiàn)為包括指令的一個或多個計算機(jī)可讀存儲介質(zhì),所述指令在被一個 或多個處理設(shè)備執(zhí)行時使得所述一個或多個處理設(shè)備執(zhí)行動作。這些動作可包括使用被 配置成處理流式查詢的流引擎來處理關(guān)系查詢,以及用流引擎產(chǎn)生的增量式結(jié)果來更新界 面。
      [0007] 另一實現(xiàn)表現(xiàn)為可包括邏輯以及配置成執(zhí)行所述邏輯的至少一個處理設(shè)備的系 統(tǒng)。該邏輯可被配置成接收第一代碼條目,接收依賴于第一代碼條目的結(jié)果的第二代碼條 目,以及提供第一代碼條目和第二代碼條目的漸進(jìn)式結(jié)果的可視化。

      【專利附圖】

      【附圖說明】
      [0008] 附圖示出了本專利中傳達(dá)的概念的實現(xiàn)。所示實現(xiàn)的特征可通過參考以下結(jié)合 附圖的描述來更容易地理解。只要可行,各附圖中相同的附圖標(biāo)記用來指代相同的元素。 此外,每一個如圖標(biāo)記的最左邊的數(shù)字傳達(dá)其中首次引入該附圖標(biāo)記的附圖及相關(guān)聯(lián)的討 論。
      [0009] 圖1示出根據(jù)某些實現(xiàn)可被配置成實現(xiàn)某些概念的示例性系統(tǒng)。
      [0010] 圖2A示出根據(jù)某些實現(xiàn)的示例性數(shù)據(jù)表。
      [0011] 圖2B示出解說符合本發(fā)明的各概念的某些實現(xiàn)的某些特征的示例性進(jìn)度圖。
      [0012] 圖3和4示出根據(jù)某些實現(xiàn)的用于實現(xiàn)某些概念的流程圖。
      [0013] 圖5-15示出可根據(jù)某些實現(xiàn)提供的圖形用戶界面的示例性屏幕截圖。

      【具體實施方式】
      [0014] 概覽
      [0015] 本討論涉及電子數(shù)據(jù)處理,尤其涉及使用電子數(shù)據(jù)處理來對數(shù)據(jù)執(zhí)行增量式計 算。例如,所公開的實現(xiàn)可以通過在部分?jǐn)?shù)據(jù)集上執(zhí)行查詢來提供用于關(guān)系查詢的有意義 的結(jié)果。為此,所公開的實現(xiàn)可以引入與數(shù)據(jù)集相關(guān)聯(lián)的可能不具有任何顯式時間意義或 排序的進(jìn)度的概念。以此方式,流引擎可被配置成提供關(guān)系查詢的增量式結(jié)果。
      [0016] 所公開的實現(xiàn)還可用于提供對多個關(guān)系查詢的撰寫的有意義的部分結(jié)果。例如, 考慮指示用戶在給定的一天中接收到特定在線廣告的1百萬次投放的數(shù)據(jù)集。該數(shù)據(jù)集可 以指示,在那同一天期間,該廣告收到10000次點擊即1%的點進(jìn)率。確定點進(jìn)率的一種辦 法是將計算完整一天期間的投放數(shù)目的第一關(guān)系查詢運(yùn)行完成。接著,可以將計算該完整 一天的點擊數(shù)目的第二關(guān)系查詢運(yùn)行完成,并且將第二查詢的結(jié)果除以第一查詢的結(jié)果。
      [0017] 然而,這種辦法可涉及等待兩個關(guān)系查詢?nèi)客瓿?。所公開的實現(xiàn)可以提供對點 進(jìn)率的部分增量式結(jié)果,例如,在兩個查詢中10%的進(jìn)度之后,可以向用戶提供已經(jīng)被處理 的10%的數(shù)據(jù)的相關(guān)聯(lián)的點進(jìn)率。隨著進(jìn)度繼續(xù),部分結(jié)果可以被更新直至計算全部完成。 還注意到,查詢可以按不同的速率進(jìn)展,例如,第一查詢可以完成20%,而第二查詢可以僅 完成10%。在此情形中,可以向用戶提供10%的數(shù)據(jù)的結(jié)果,并且因而可具有對平均點進(jìn) 率的有意義的理解而不必等待計算點擊和/或投放的總數(shù)。
      [0018] 網(wǎng)絡(luò)系統(tǒng)示例
      [0019] 圖1示出其中可以采用此處引入的技術(shù)的示例性網(wǎng)絡(luò)系統(tǒng)100。如圖1所示,網(wǎng) 絡(luò)系統(tǒng)100包括連接若干設(shè)備的網(wǎng)絡(luò)110,諸如服務(wù)器120和各種客戶端設(shè)備130、140和 150。服務(wù)器可以具有包括web服務(wù)121、腳本存儲122、數(shù)據(jù)庫123、流引擎124、和適配器 模塊125的邏輯組件。服務(wù)器可以使用硬件資源126 (諸如處理器127、存儲128和存儲器 129)來實現(xiàn)這些邏輯組件。要理解的是,數(shù)據(jù)庫123不必一定與服務(wù)器120位于相同的 物理機(jī)器上;事實上,數(shù)據(jù)庫123可以由以數(shù)據(jù)庫網(wǎng)絡(luò)組成的分布式數(shù)據(jù)庫架構(gòu)組成,諸如 Hadoop?:文件系統(tǒng)或微軟公司的SQL Azure???蛻舳嗽O(shè)備可以具有邏輯組件(諸如界面 模塊131、141和151)和相關(guān)聯(lián)的硬件資源132-135、142-145和152-155。關(guān)于硬件資源的 其它細(xì)節(jié)在本文檔的后文中提供。緊接著下面的討論著重于由服務(wù)器和客戶端設(shè)備的邏輯 資源(例如組件121-125、131、141和151)執(zhí)行的處理。
      [0020] 在一些實現(xiàn)中,界面模塊131-151是與web服務(wù)121通信的web瀏覽器。例如,界 面模塊可以是呈現(xiàn)命令和所接收到的更新以及向web服務(wù)發(fā)送命令的HTML5瀏覽器。然而 在其它實現(xiàn)中,界面模塊可以是專用或定制的應(yīng)用而非web瀏覽器。其它實現(xiàn)可以使用瀏 覽器插件或其它技術(shù)來實現(xiàn)此處描述的界面功能。
      [0021] 例如,客戶端設(shè)備130-150處的用戶可以經(jīng)由相應(yīng)的界面模塊向web服務(wù)提交源 代碼,諸如腳本。腳本存儲122可被配置成存儲接收到的源代碼中的一些或全部。一般而 言,源代碼可以被撰寫以查詢數(shù)據(jù)庫123,數(shù)據(jù)庫123可以是具有用表格形式表示的數(shù)據(jù)的 關(guān)系數(shù)據(jù)庫(例如,SQL)。例如,源代碼可以是具有集成關(guān)系查詢的通用代碼,或者源代碼 可以直接用查詢語言來撰寫。
      [0022] 流引擎124可被配置成對與顯式時間數(shù)據(jù)(例如,具有起始時間、結(jié)束時間和/或 歷時的數(shù)據(jù)事件)相關(guān)聯(lián)的流傳輸數(shù)據(jù)執(zhí)行處理。值得注意的是,數(shù)據(jù)庫123中的數(shù)據(jù)項 不必具有任何顯式時間數(shù)據(jù)或時間排序,并且實際上可以隨機(jī)排序。適配器模塊125可被 配置成適配數(shù)據(jù)庫中的數(shù)據(jù),以使得該數(shù)據(jù)可由流引擎處理。例如,適配器模塊可以從數(shù)據(jù) 庫獲得數(shù)據(jù)項(例如,表格的行),創(chuàng)建時間數(shù)據(jù),將時間數(shù)據(jù)與數(shù)據(jù)項相關(guān)聯(lián),以及將數(shù)據(jù) 項作為具有時間數(shù)據(jù)的流傳輸事件提供給流引擎。流引擎隨后可以使用一個或多個流式查 詢運(yùn)算符來處理流傳輸事件以產(chǎn)生增量式結(jié)果。
      [0023] 流引擎細(xì)節(jié)
      [0024] 在常規(guī)的數(shù)據(jù)庫上下文中,關(guān)系查詢(諸如SQL查詢)可用于構(gòu)建和操縱表格以 供離線分析。一種相反的辦法是使用被設(shè)計成用于實時地處理流傳輸事件的流引擎。適用 于所公開的事件的流引擎的一個示例是微軟公司的Streamlnsight?,但也可使用其它流引 擎。一般來說,流引擎(諸如Streamlnsight? )被配置成接收流傳輸數(shù)據(jù)事件并且持續(xù)地 輸出結(jié)果,該結(jié)果表示在移動的時間窗口上對數(shù)據(jù)的分析。例如,流引擎可被配置成提供給 定公司在過去5天內(nèi)股票價格的移動平均。作為另一示例,流引擎可被配置成計算來自溫 度傳感器在5分鐘的窗口內(nèi)的平均溫度。流引擎可因而實現(xiàn)在不斷改變的數(shù)據(jù)流上進(jìn)行流 式的持續(xù)查詢,這與常規(guī)數(shù)據(jù)庫執(zhí)行的靜態(tài)查詢相反。
      [0025] 流引擎與常規(guī)關(guān)系數(shù)據(jù)庫之間的一個相區(qū)分的特征在于流引擎依賴于時間性的 概念。這是因為,流傳輸事件可以與顯式時間戳(例如,特定活動發(fā)生時的時間戳)相關(guān)聯(lián), 并且一般在給定時間窗口內(nèi)有效,例如,在股票價格的示例中是五天前直到現(xiàn)在,而在溫度 示例中是5分鐘之前直到現(xiàn)在。因而,流引擎可以依賴于在數(shù)據(jù)針對查詢不再有效的意義 上數(shù)據(jù)"期滿"的概念一一在先前示例中在計算當(dāng)前結(jié)果時6天前的數(shù)據(jù)或6分鐘前的數(shù) 據(jù)不被流引擎考慮。相反,典型的關(guān)系查詢可以將查詢結(jié)果映射到整個數(shù)據(jù)集,而沒有進(jìn)度 或存儲于其中的數(shù)據(jù)的有效性的窗口的任何概念。此外,數(shù)據(jù)本身在本質(zhì)上可以是非時間 化的,其中的元組不必于具體的時間點相關(guān)聯(lián)。
      [0026] 一般來說,出于使用流引擎124來處理關(guān)系查詢的目的,適配器模塊125可以將時 間性的概念引入數(shù)據(jù)。例如,在上述點進(jìn)示例中,數(shù)據(jù)集中每一 100個用戶的群可以表示一 個處理區(qū)間。通過像流引擎的顯式進(jìn)度點那樣對待用戶,流引擎可以被充分利用來向一個 或多個關(guān)系查詢提供部分的有意義的結(jié)果。一些實現(xiàn)可以通過定義與每一區(qū)間相關(guān)聯(lián)的有 效性的時間窗口來適配供流引擎處理的數(shù)據(jù),如下文進(jìn)一步討論的。注意到,通過這一制 定,流式引擎可能不知曉它正被用于處理非時間化的關(guān)系查詢。
      [0027] 示例數(shù)據(jù)
      [0028] 圖2A解說可在一些實現(xiàn)中采用的示例性關(guān)系數(shù)據(jù)表格200。數(shù)據(jù)表格200包括與 航班信息有關(guān)的N行數(shù)據(jù),諸如可被航空公司或旅行服務(wù)采用。數(shù)據(jù)表格200包括行號列 201、星期幾列202、航班號列203、機(jī)場列204和延誤列205。每一行ID與特定數(shù)據(jù)項相對 應(yīng),在該情形中,與特定日子的特定航班相對應(yīng)。例如,表格200示出航班936在一個實例 (行2)中延誤14分鐘而在另一實例(行6)中延誤18分鐘。注意到,行號列可充當(dāng)該示例 中的主鍵,例如,以區(qū)分于相同航班號的不同實例。同樣,注意到,在數(shù)據(jù)表格中不存在對數(shù) 據(jù)的固有時間排序,即,表格并未指定這些延誤中的任何一個在另一個之前或之后發(fā)生。因 而,數(shù)據(jù)表格中的數(shù)據(jù)項未被配置成供常規(guī)流引擎處理。
      [0029] 現(xiàn)在,考慮用戶希望知曉針對不同日子的平均航班延誤。此外,假定N是非常大的 數(shù)字,可能是數(shù)百萬或甚至更大。使用常規(guī)的關(guān)系查詢,向用戶提供回答的一種辦法將會是 構(gòu)建運(yùn)算符(諸如選擇、結(jié)合等)的查詢計劃(例如樹)。查詢計劃可以讀取整個N行數(shù) 據(jù)集,并且作為整體對其進(jìn)行處理以產(chǎn)生給出一星期中的每一天的所請求的平均延誤的結(jié) 果。取決于要被處理的數(shù)據(jù)量、可用的處理資源等,這可能花費(fèi)大量的時間。
      [0030] 然而注意到,在得出有意義的結(jié)論之前實際上需要處理所有的數(shù)據(jù)是不太可能 的。例如,僅處理10000行可以提供針對一星期中的不同日子的平均航班延誤的統(tǒng)計學(xué)上 有意義的信息。然而,使用常規(guī)關(guān)系查詢,在被給出查詢結(jié)果之前,用戶將需要等待處理整 個數(shù)據(jù)表格200。
      [0031] 為了提供對這樣的查詢的有意義的中間結(jié)果,可以在一些實現(xiàn)中使用常規(guī)的流引 擎。然而,如上所提及的,常規(guī)流引擎一般被配置成處理具有基于與數(shù)據(jù)項相關(guān)聯(lián)的時間值 來定義的有限生存期窗口的數(shù)據(jù)項。在一些實現(xiàn)中,適配器模塊125可以向流引擎124提 供給定數(shù)據(jù)項的行ID作為每一數(shù)據(jù)項的時間屬性。因而,從正在處理數(shù)據(jù)表格200的流引 擎的角度,行1開始于時間1,行2開始于時間2,行3開始于時間3,以此類推。流引擎可以 在每一次處理給定行時遞增"滴答"或時間計數(shù)器。在某種意義上,這相當(dāng)于通過將應(yīng)用設(shè) 置為進(jìn)度時間來重新使用流引擎中的應(yīng)用時間的概念。此處,進(jìn)度時間表示數(shù)據(jù)集朝著全 部數(shù)據(jù)項均被處理的最終狀態(tài)的進(jìn)度。然而注意到,行ID僅僅是可以在其上定義進(jìn)度的域 的一個示例。
      [0032] 此外,注意到,常規(guī)流引擎可以處理有起始時間和結(jié)束時間兩者的數(shù)據(jù)項,例如,5 天、5分鐘等的窗口。然而在此情形中,用戶想要全部數(shù)據(jù)項上的平均,并且因而不一定想要 個別行"期滿"。換言之,用戶想要表格200中的全部數(shù)據(jù)值以對最終結(jié)果作出貢獻(xiàn)。適配 器模塊125可以通過為數(shù)據(jù)表格中的每一數(shù)據(jù)項創(chuàng)建流事件并且設(shè)置流事件的結(jié)束生存 期以便該事件不結(jié)束(例如,通過將結(jié)束時間設(shè)為無窮大)來達(dá)成此。換言之,適配器模塊 可以創(chuàng)建對流引擎的輸入事件,該輸入事件包括來自行1的數(shù)據(jù),開始于時間1,并且在時 間無窮大處結(jié)束。同樣地,適配器模塊可以創(chuàng)建對流引擎的另一輸入事件,該輸入事件包括 來自行2的數(shù)據(jù),開始于時間2,并且在時間無窮大處結(jié)束。更一般地,適配器模塊可以將數(shù) 據(jù)表格中的每一行轉(zhuǎn)換成起始于行號所定義的時間并且在無窮大處結(jié)束的輸入事件。然而 注意到,取決于查詢的細(xì)節(jié),事件的其它時間窗口也是可行的,如下文進(jìn)一步討論的。
      [0033] 因而,允許將流引擎的流式運(yùn)算法應(yīng)用于常規(guī)數(shù)據(jù)的一種辦法在于,定義可被流 引擎使用來處理個別數(shù)據(jù)項的某一進(jìn)度屬性。在以上的示例中,進(jìn)度屬性是行ID,并且進(jìn)度 在逐行的基礎(chǔ)上進(jìn)行說明。其它實現(xiàn)可以定義不同精度級別的進(jìn)度。例如,表格200中的 每3行數(shù)據(jù)可以被認(rèn)為是一個進(jìn)度點。
      [0034] 這在圖2B中解說,圖2B示出了在逐行的基礎(chǔ)上表示進(jìn)度的進(jìn)度圖250以及基于 左側(cè)端點每3行向前移動的進(jìn)度區(qū)間來示出進(jìn)度的進(jìn)度圖260。在該示例中,流引擎124可 以按照3個一群地處理行并且輸出每一群的新的結(jié)果集。換言之,流引擎產(chǎn)生的第一結(jié)果 集將表示前3個記錄的平均航班延誤,流引擎產(chǎn)生的第二結(jié)果集將表示前6個記錄的平均 航班延誤,第三結(jié)果集將表示前9個記錄的平均航班延誤,以此類推。還注意到,值3被選 擇以提供圖2B中的壓縮解說,并且可以使用許多不同的值,例如,可以在任意數(shù)目的記錄 上定義進(jìn)度。
      [0035] 從概念上的角度來看,每一進(jìn)度區(qū)間表示從流引擎的角度來說對時間的"快照"。 流引擎可以例如將流式對應(yīng)運(yùn)算用于傳統(tǒng)關(guān)系關(guān)系查詢來執(zhí)行流式運(yùn)算,諸如選擇、投影、 結(jié)合等。每一流式運(yùn)算可以在單個時間在個別的數(shù)據(jù)快照上運(yùn)算。
      [0036] 為了配置輸入事件,適配器模塊125可以使用流引擎的更改生存期運(yùn)算。在此情 形中,更改生存期運(yùn)算的參數(shù)可用于(1)設(shè)置每一事件的起始時間戳以及(2)設(shè)置每一事 件的歷時。在以上的示例中,前3個事件(對于前3個數(shù)據(jù)項)可被設(shè)置為具有為1的起 始時間和無窮大的生存期,接著的3個事件具有為2的起始時間和無窮大的生存期,接著的 3個事件具有為3的起始時間和無窮大的生存期,以此類推。從這一角度,行1-3對從時間 1到無窮大的結(jié)果作出貢獻(xiàn),行4-6對從時間2到無窮大的結(jié)果作出貢獻(xiàn),以此類推。一些 實現(xiàn)還可在處理行時定義不同精度的生存期。例如,針對前10000個記錄可以每100秒提 供一次結(jié)果以給予用戶相對快速的反饋,而之后以1000的集合來處理記錄。給定事件集中 的每一個別事件可具有相同的生存期,并且對從其生存期開始以來的結(jié)果作出貢獻(xiàn)。
      [0037] 因而,在當(dāng)前示例中,用于獲得各星期一的延誤時間的流式選擇運(yùn)算可以在第一 快照時的前3行的第一事件集運(yùn)算,對第二快照時的前6行的第二事件集運(yùn)算,以此類推, 并且對于一星期中的其它日子也是如此。可以以類似的方式計算個別快照上的平均值。以 此方式,原始關(guān)系查詢在越來越大的數(shù)據(jù)集上漸進(jìn)式地執(zhí)行,直至所有數(shù)據(jù)均被處理并且 已經(jīng)到達(dá)最終狀態(tài)。此時,流引擎輸出的最終結(jié)果可以與常規(guī)關(guān)系數(shù)據(jù)庫輸出的結(jié)果相同。 換言之,一旦流引擎時間滴答至事件的結(jié)束時間,整個數(shù)據(jù)集對回答作出貢獻(xiàn),如同常規(guī) SQL查詢那樣。
      [0038] 因而,流引擎實現(xiàn)的流式運(yùn)算可以被視為通過一系列進(jìn)度點來漸進(jìn)。進(jìn)度點可以 被視為單調(diào)增加的經(jīng)排序的域。注意到,以上討論引用"無窮大"作為某些行的示例結(jié)束生 存期。在此上下文中,"無窮大"意味著針對各定數(shù)據(jù)集的流引擎的最終進(jìn)度點。因而,具有 無窮大的結(jié)束生存期的數(shù)據(jù)項是對最終結(jié)果作出貢獻(xiàn)的數(shù)據(jù)項。
      [0039] 在一些實現(xiàn)中,web服務(wù)121可以獲得來自流引擎124的對計算的增量式結(jié)果,并 且將增量式結(jié)果發(fā)送給客戶端設(shè)備130-150中的任一個以供由相應(yīng)的界面模塊131-151顯 示。其它實現(xiàn)可以處理取決于當(dāng)前正在進(jìn)展中的對先前查詢的結(jié)果的附加查詢。例如,第 一查詢可以產(chǎn)生用作對第二查詢的輸入的結(jié)果。第一查詢可以前進(jìn)直至第一進(jìn)度區(qū)間,而 第二查詢可以使用第一查詢至多至第一進(jìn)度區(qū)間的部分結(jié)果來開始處理。以此方式,增量 式結(jié)果的流水線可以從一個查詢饋送至另一查詢。進(jìn)而,可以向客戶端設(shè)備處的用戶提供 多個依賴查詢的增量式結(jié)果的可視化,如下文更詳細(xì)地討論的。
      [0040] 查詢進(jìn)度
      [0041] 所公開的實現(xiàn)可以鑒于流引擎的時間語義可以直接與關(guān)系查詢的漸進(jìn)式計算的 概念相對應(yīng)的洞察來執(zhí)行。如上所提及的,這可以通過使用流引擎的應(yīng)用時間概念來表示 進(jìn)度來實現(xiàn)。因為漸進(jìn)式結(jié)果的語義與流引擎用于時間(以便計算在實時數(shù)據(jù)流上的流式 查詢結(jié)果)的語義類似,所以這是可能的。
      [0042] 更正式地來考慮,每一個別元組(例如行)與進(jìn)度區(qū)間[LE,RE)相關(guān)聯(lián)。此處,LE 指的是區(qū)間的左側(cè)端點,而RE指的是區(qū)間的右側(cè)端點。這些區(qū)間將進(jìn)度域拆分成分立的快 照,其中可以獲得每一快照時的結(jié)果。這些端點的聯(lián)合形成了對流引擎的輸入的"進(jìn)度點" 集合。
      [0043] 進(jìn)度點可用于按如下來定義查詢Q的漸進(jìn)式輸出。首先,每一輸入元組可具有指 派的進(jìn)度區(qū)間。接著,對于跨輸入數(shù)據(jù)中的全部進(jìn)度區(qū)間端點的每一唯一進(jìn)度點P,存在具 有由P "穿刺"的進(jìn)度區(qū)間的輸出結(jié)果集合0_p。此處,術(shù)語"穿刺"意味著進(jìn)度點P包括包 含了區(qū)間內(nèi)的進(jìn)度點P的進(jìn)度區(qū)間的全部,例如,對于區(qū)間[LE,RE),p位于LE與RE內(nèi)。流 式查詢的輸出0_P可以被準(zhǔn)確地定義為在具有由P穿刺的進(jìn)度區(qū)間的輸入元組上對查詢Q 求解的結(jié)果。
      [0044] 給定進(jìn)度點的排序列表ρ_0、ρ_1、......以此類推,從進(jìn)度點p_i起的輸入關(guān)系查 詢的漸進(jìn)式(即增量式)結(jié)果是流式查詢在與P_i相關(guān)聯(lián)(即"生存"于P_i)的數(shù)據(jù)上的 結(jié)果。進(jìn)度點P_i的漸進(jìn)式結(jié)果可以根據(jù)于先前計算的進(jìn)度Ap_(i_l)相關(guān)聯(lián)的計算和/ 或結(jié)果來增量式地計算。每一漸進(jìn)式結(jié)果元組本身與進(jìn)度區(qū)間相關(guān)聯(lián),以使得漸進(jìn)式查詢 可以跨運(yùn)算符來撰寫。
      [0045] 示例方法
      [0046] 圖3示出可應(yīng)用以適配關(guān)系查詢以供流引擎使用的示例方法300。例如,方法300 可由適配器模塊125執(zhí)行。然而,相對于適配器模塊在此描述的功能中的一些或全部可以 由不同的模塊或設(shè)備來執(zhí)行,例如,通過修改流引擎124,通過在客戶端設(shè)備處執(zhí)行處理等。
      [0047] 在框301,獲得關(guān)系查詢。例如,適配器模塊可以通過網(wǎng)絡(luò)接收關(guān)系查詢。作為另 一示例,適配器模塊可以接收標(biāo)識關(guān)系查詢的腳本代碼。在任一種情形中,關(guān)系查詢的源可 以是用戶將源代碼輸入到界面模塊131中。
      [0048] 在框302,進(jìn)度區(qū)間與關(guān)系查詢引用的數(shù)據(jù)項相關(guān)聯(lián)。例如,表格的每一行ID可以 被指派不同的進(jìn)度區(qū)間,或者表格的多個行可以被分組到各集合中(其中每一集合具有指 派進(jìn)度區(qū)間)。
      [0049] 在框303,關(guān)系查詢被轉(zhuǎn)換成對應(yīng)的流式查詢。例如,關(guān)系查詢可以是SQL查詢,并 且流引擎可以實現(xiàn)SQL查詢的流式版本。
      [0050] 在框304,將事件提供給流引擎。例如,可以為表格的每一行生成事件,并且事件的 時間區(qū)間可以被設(shè)置為在框302與行相關(guān)聯(lián)的進(jìn)度區(qū)間。
      [0051] 在框305,可以從流引擎獲得增量式結(jié)果。例如,適配器模塊可以獲得結(jié)果,并且在 獲得結(jié)果時,通過在網(wǎng)絡(luò)上向客戶端設(shè)備中的一個或多個發(fā)送結(jié)果來將結(jié)果提供給用戶。
      [0052] 一般而言,框304和305可以繼續(xù)迭代,直至已經(jīng)處理了整個表格。接著,在框306, 可以從流引擎獲得最終結(jié)果并且將最終結(jié)果提供給客戶端設(shè)備,如上所討論的。
      [0053] 可以如上所述地在多個表格上執(zhí)行查詢。例如,每一個表格可具有其子集的進(jìn)度 區(qū)間集合,以使得進(jìn)度區(qū)間是跨表格兼容的并且指示類似的底層進(jìn)度概念。例如,點擊表格 和投放表格可具有針對導(dǎo)致點擊和投放的相同用戶動作集合被指派相同進(jìn)度區(qū)間的元組。 對進(jìn)度區(qū)間的指派給予了終端用戶(或用戶與系統(tǒng)之間的自動化進(jìn)度指派模塊)在定義進(jìn) 度對于它們具體的應(yīng)用意味著什么方面的極大的靈活性。
      [0054] 此外,使用所公開的技術(shù),可能提供確定性的行為。換言之,由于顯式進(jìn)度區(qū)間與 表格中的個別數(shù)據(jù)項相關(guān)聯(lián),因此存在與特定數(shù)據(jù)集的任何給定進(jìn)度點相關(guān)聯(lián)的一個特定 漸進(jìn)式結(jié)果。同樣地,這為漸進(jìn)式結(jié)果提供了準(zhǔn)確的數(shù)據(jù)依賴的查詢語義,因為改變輸入數(shù) 據(jù)對可針對任何給定進(jìn)度點重新計算的漸進(jìn)式結(jié)果具有具體影響。
      [0055] 另外,所公開的實現(xiàn)為漸進(jìn)式結(jié)果提供出處質(zhì)量。對于任何給定的漸進(jìn)式結(jié)果,適 配器模塊125可被配置成確定用于計算漸進(jìn)式結(jié)果的數(shù)據(jù)項集合。流引擎可以通過確定給 定漸進(jìn)式結(jié)果的進(jìn)度區(qū)間來這么做。因為每一進(jìn)度區(qū)間與可標(biāo)識(例如,唯一的)數(shù)據(jù)項 集合相對應(yīng),所以這是可能的。
      [0056] 在一些實現(xiàn)中,適配器模塊125可被配置成對于任何給定結(jié)果標(biāo)識對漸進(jìn)式結(jié)果 作出貢獻(xiàn)的特定數(shù)據(jù)項并且將這些數(shù)據(jù)項提供給用戶。例如,可以向調(diào)試給定查詢的用戶 提供對給定查詢的第一進(jìn)度區(qū)間作出貢獻(xiàn)的全部數(shù)據(jù)項。這使得用戶能夠使用替換機(jī)制 (諸如手工計算查詢的預(yù)期結(jié)果)來檢查查詢的正確性。
      [0057] 查詢流水線
      [0058] 方法300可用于對來自一個查詢的部分增量式查詢結(jié)果流水線化至另一查詢。例 如,框305處輸出的第一查詢的增量式結(jié)果可以被輸入第二查詢。因而,也可獲得第二查詢 的增量式結(jié)果。
      [0059] 圖4解說了示例性查詢流水線400的流程圖。首先,用戶輸入第一代碼條目401。 代碼條目401可以是用于得出稍后被轉(zhuǎn)換成流式查詢的關(guān)系查詢的源代碼。流式查詢的增 量式結(jié)果402由流引擎124輸出。此處,漸進(jìn)式結(jié)果402表示分別具有身高為60、64、75和 73英寸的名為Bob、Joe、Richard和Samuel的個人的身高。
      [0060] 接著,用戶提供第二代碼條目403。代碼條目403被用于得出稍后被轉(zhuǎn)換成第二流 式查詢的第二關(guān)系查詢。第二流式查詢的第二增量式結(jié)果404由流引擎124輸出。此處, 第二增量式結(jié)果404表示超過72英寸的個人的身高,包括Richard和Samuel。
      [0061] 接著,用戶提供第三代碼條目405。代碼條目405被用于得出稍后被轉(zhuǎn)換成第三流 式查詢的第三關(guān)系查詢。第三增量式結(jié)果406由流引擎輸出。此處,第三漸進(jìn)式結(jié)果表示 超過72英寸高的個體的名字長度,例如,分別為Richard為7和Samuel為6。
      [0062] 以此方式對查詢結(jié)果流水線化的一種結(jié)果是用戶能夠接收來自第一查詢的反饋 并且接著基于該反饋來決定要輸入什么代碼。這一正在進(jìn)行中的反饋可以作為持續(xù)進(jìn)展的 長期運(yùn)行的計算來接收。此外,在計算完成之前用戶可以停止計算,例如,在結(jié)果表現(xiàn)為指 示代碼中的某一邏輯錯誤的情況下。
      [0063] 存儲器開銷
      [0064] 流引擎124可被配置成完全在主存儲器中操作并且產(chǎn)生流式查詢的增量式結(jié)果。 對于每一傳入事件,流引擎可以檢查是否需要更新查詢結(jié)果作為該事件的結(jié)果,并且如果 是則立即產(chǎn)生輸出事件。為了達(dá)成此,連續(xù)查詢可以被編譯成以基于推送的方式來處理傳 入事件的增量式運(yùn)算符的圖,即,對于每一傳入事件,它們更新某種內(nèi)部存儲器內(nèi)的狀態(tài)并 且產(chǎn)生反映對運(yùn)算符結(jié)果的改變的輸出事件作為處理該數(shù)據(jù)的結(jié)果。如所提及的,流引擎 一般被配置成在有界的數(shù)據(jù)時間窗口上操作。因而,當(dāng)不再需要內(nèi)部狀態(tài)時,流引擎可以清 空內(nèi)部狀態(tài),例如,流引擎可以清空不再對新的結(jié)果作出貢獻(xiàn)的輸入事件和中間結(jié)果。
      [0065] 使用存儲器內(nèi)的流引擎來處理數(shù)據(jù)而不施加有界窗口(例如,無窮大的結(jié)束時 間)的結(jié)果在于可能需要維持內(nèi)部狀態(tài)。例如,在結(jié)合的情形的中,左側(cè)輸入表格中的最后 一個數(shù)據(jù)項可以與右側(cè)輸入表格上的第一項結(jié)合。作為結(jié)果,存儲器使用可以在流式查詢 的生存期上單調(diào)地增大。然而,注意到,一些交互式流式查詢不必運(yùn)行至完成并且因而存儲 器使用在實踐中不一定是一個問題。
      [0066] -些流式查詢可以具有允許存儲器開銷被顯著降低的表征。例如,考慮其中進(jìn)度 屬性與劃分屬性相同(或與其相關(guān))的情形。查詢可以是計算廣告點擊和投放日志中每用 戶的平均點進(jìn)率。假定日志的每一行被用作事件,進(jìn)度屬性使用日志的各行,并且用戶出現(xiàn) 在貫穿表格而散布的多個行中。由于流引擎124可遭遇表格中的任何行處的給定用戶,因 此流引擎為表格中的每一用戶維持計數(shù)器直至到達(dá)最終狀態(tài)。
      [0067] 然而,考慮其中可以在每用戶的基礎(chǔ)上執(zhí)行進(jìn)度的情形。例如,每一用戶的記錄在 表格中可以被分組在一起。在此情形中,當(dāng)流引擎進(jìn)展到下一用戶,流引擎124將不再看見 先前用戶的任何事件。因而,流引擎可以通過從存儲器中刪除先前處理的用戶來清空先前 處理的用戶的計數(shù)器。流引擎可以在存儲中持久保持該用戶的點進(jìn)率(增量式結(jié)果)和/ 或通過將增量式結(jié)果發(fā)送給一個或多個客戶端設(shè)備。
      [0068] 在一些實現(xiàn)中,適配器模塊125可以使得流引擎124通過在執(zhí)行查詢之前放置更 改生存期來執(zhí)行清空。更改生存期調(diào)用可以將每一用戶的進(jìn)度端點改變?yōu)闅v時中的一個定 時因子(即"滴答"),以使得表示用戶的事件期滿而非持續(xù)"無窮大"。因而,當(dāng)流引擎移至 下一用戶時,流引擎可以自動地忘記與先前用戶相關(guān)聯(lián)的狀態(tài)。
      [0069] 使用以上技術(shù)可以降低流引擎124的存儲器利用,但如果沒有更多的話,流引擎 可以刪除結(jié)果以及中間狀態(tài)。因而,適配器模塊125還可將流引擎配置成保留結(jié)果但仍然 清空中間狀態(tài)。為此,適配器模塊可以執(zhí)行另一更改生存期調(diào)用,以將進(jìn)度端點設(shè)置回在執(zhí) 行第一次更改生存期之前生存期的原始值,例如,無窮大或足以持久保持結(jié)果直至它們不 再被需要的另一值。這一技術(shù)可使用指示進(jìn)度和劃分之間的連接的屬性來自動完成。
      [0070] 作為一個簡短示例,考慮具有指示給定用戶在農(nóng)場上具有哪些動物的6個條目的 數(shù)據(jù)表格。該表格可以包括如下6條記錄:{(Steve,馬),(Steve,牛),(Steve,狗),(Bob, 雞),(Bob,豬),(Joe,驢)}?,F(xiàn)在,考慮這一表格上對每一農(nóng)場上的不同動物的數(shù)目進(jìn)行 計數(shù)的查詢。輸入事件的生存期可以被如此設(shè)置以使得Steve的記錄開始于0并且結(jié)束于 1,Bob的記錄開始于1并且結(jié)束于2, Joe的記錄開始于2并且結(jié)束于3。對記錄的數(shù)目進(jìn) 行計數(shù)的查詢的結(jié)果的生存期(例如,輸出事件)被持久保持(例如,通過將結(jié)果的生存期 設(shè)置為在無窮大處結(jié)束)直至處理了整個表格。在此示例中,用戶標(biāo)識符被用作進(jìn)度屬性 來代替使用行號。在這一上下文中這在語義上行得通,因為查詢是在逐個用戶的基礎(chǔ)上聚 集信息。
      [0071] 以上技術(shù)可以充分利用記錄在存儲設(shè)備上的物理存儲位置。例如,在按照用戶id 排序的表格中,個體記錄在存儲設(shè)備上的物理位置可以與這些記錄將被流引擎處理的次序 相對應(yīng)。因而,一些實現(xiàn)允許個體記錄按照它們物理地出現(xiàn)在存儲中的次序從存儲中被讀 取。
      [0072] 示例圖形界面
      [0073] 以上提及的代碼條目可以由各種本地和/或遠(yuǎn)程用戶界面被提供給適配器模塊 125和/或流引擎124。同樣地,可以使用不同的遠(yuǎn)程和/或本地用戶界面來輸出增量式結(jié) 果。以下討論解說了可以與適配器模塊和流引擎結(jié)合使用的一些示例性圖形界面。然而, 注意到,以下界面適用于用于獲得除了此處討論的那些之外的增量式查詢結(jié)果的技術(shù)。一 般而言,下文討論的圖形界面可以由web服務(wù)121提供給客戶端設(shè)備130-150,并且由對應(yīng) 的界面模塊131-151顯示。
      [0074] 圖5解說了示例性圖形用戶界面(⑶1)500。⑶I 500包括允許用戶查看腳本存儲 122中保存在服務(wù)器120上的各個現(xiàn)有腳本的腳本(script)選項卡501。此處,用戶已經(jīng) 選擇了題為"How long are search words (搜索詞有多長)?"的腳本。響應(yīng)于該用戶選 擇,GUI 500被更新以示出代碼區(qū)段510中先前輸入的腳本代碼以及結(jié)果區(qū)段520中先前 獲得的結(jié)果。例如,先前的代碼和結(jié)果可以與先前的腳本會話相關(guān)并且可以從腳本存儲122 獲得。
      [0075] 代碼區(qū)段510包括2個個體代碼條目511和512以及結(jié)果區(qū)段520中對應(yīng)的結(jié)果。 因而,2個代碼條目共同包括腳本"How long are search words?"并且相關(guān)聯(lián)的結(jié)果共 同包括腳本的結(jié)果。此處,結(jié)果包括表示變量"data(數(shù)據(jù))"的最新10個值的表格。隨著 行511進(jìn)展,結(jié)果表格521將用新的10個值被重復(fù)地更新。腳本條目512的結(jié)果包括示出 詞的詞長的柱狀圖。結(jié)果柱狀圖522將隨著查詢不斷繼續(xù)而增量式地更新。一般而言,GUI 500給予用戶輸入代碼,接收增量式結(jié)果,保存代碼和相關(guān)聯(lián)的結(jié)果,以及稍后對其進(jìn)行檢 索的能力。
      [0076] 因而,在一些實現(xiàn)中,在給定腳本會話之后代碼和/或相關(guān)聯(lián)的結(jié)果和可視化被 自動地持久保持。這允許用戶從先前狀態(tài)起重新輸入腳本會話。每一腳本動作(諸如創(chuàng)建、 刪除、或編輯腳本)可以被存儲在腳本存儲122中。當(dāng)用戶訪問web服務(wù)121時,用戶可以 查看它們的可用腳本以及至多至最新記錄的改變的腳本內(nèi)容。
      [0077] web服務(wù)121還可在計算結(jié)果時存儲每一代碼條目的結(jié)果的概述。這意味著給定 代碼條目的結(jié)果可以比腳本會話本身持續(xù)得更久。在一些實現(xiàn)中,GUI 500使用不同的背 景來區(qū)分其中存在正在進(jìn)行的會話的腳本("活的"腳本)與其腳本會話先前已結(jié)束的腳 本("死的"腳本)。刷新按鈕或其它界面元素可以被提供以使死的腳本再生。一些實現(xiàn)可 以在非活躍的給定時段(例如20分鐘)之后使腳本會話超時。
      [0078] 因為用戶具有蓋寫和刪除代碼條目的能力并且被蓋寫/刪除的代碼條目的結(jié)果 被持久保存,所以可能產(chǎn)生一些問題。例如,考慮用戶輸入了:
      [0079] int X = 3 ;
      [0080] X = x+1 ;
      [0081] 并且隨后刪除了⑶I中的第二行代碼并且用以下來替換它:
      [0082] int X = 3 ;
      [0083] int y = X ;
      [0084] 在用戶點擊輸入之后,第二行被求值并且變量X被更新為等于4。當(dāng)用戶刪除對X 的遞增操作時,一些實現(xiàn)不一定撤銷其在對應(yīng)腳本會話中的效果。然而注意到,用戶可以擊 中刷新按鈕以重新運(yùn)行兩個代碼條目并且賦予y預(yù)期值3。一些實現(xiàn)可以維持用于在視覺 上區(qū)分在擊中刷新按鈕的情況下其值將會不同的結(jié)果所需的數(shù)據(jù)依賴性。例如,在刷新操 作時會改變的數(shù)據(jù)項可以被突出顯示或者以其它方式區(qū)別于其它數(shù)據(jù)值。
      [0085] 作為將腳本存儲在中央數(shù)據(jù)庫中并且在中央服務(wù)器上主存腳本會話的一種結(jié)果, 多人可以從不同的客戶端設(shè)備并發(fā)地對同一腳本會話進(jìn)行工作。web服務(wù)可以異步地聯(lián)系 每一客戶端設(shè)備關(guān)于對數(shù)據(jù)庫的改變以保持每一用戶的視圖是最新的。如上所提及的,每 一腳本動作可以由web服務(wù)用采取該動作的人的用戶ID來加標(biāo)簽。例如,在圖5中,每一 命令的左側(cè)是最后編輯該命令的人的首字母(RD)。這允許查看界面的用戶理解她的團(tuán)隊成 員到達(dá)什么進(jìn)度并且在他們工作時共享他們的結(jié)果。其它團(tuán)隊成員可以選擇將腳本復(fù)制到 新的頁面以探索其它查詢。
      [0086] 其它實現(xiàn)可以提供對等和/或主/從樣式的協(xié)作。在這樣的實現(xiàn)中,在此關(guān)于服 務(wù)器120所討論的功能可以由單個對等方來執(zhí)行或跨多個對等方分布。一些腳本可以作為 多媒體文檔來提供,該多媒體文檔包括經(jīng)格式化的自然語言文本、圖像、音頻注釋和便簽注 釋。其它實現(xiàn)可以提供導(dǎo)出路徑,以使得腳本環(huán)境中的可視化可以容易地用替換格式來保 存。例如,一些實現(xiàn)可以提供直接從⑶I 500的.jpg圖像、.pdf文件、PowerPoint?幻燈 片等。
      [0087] 第一示例腳本和結(jié)果
      [0088] 圖6解說了在另一配置中的GUI 500的代碼區(qū)段510和結(jié)果區(qū)段520,其中用戶 正在處理題為"Explore Data(探索數(shù)據(jù))"的腳本中的身高數(shù)據(jù)。出于空間約束的原因, ⑶I 500的其它部分從圖6中略去。如所提及的,用戶可以將代碼輸入到代碼區(qū)段510,例 如,此處用戶已經(jīng)輸入了指代腳本環(huán)境中定義的變量的"HeightData (身高數(shù)據(jù))"。例如, HeightData可以已經(jīng)在代碼中不再示出的先前執(zhí)行的行中被定義或以其它方式被定義為 數(shù)據(jù)源。HeightData可以是表示人們的身高的double (雙精度型)陣列,并且可以從諸如關(guān) 系數(shù)據(jù)表格等各種數(shù)據(jù)源中獲得。此處,一旦用戶輸入了"HeightData",腳本界面用諸如柱 狀圖621之類的可視化被自動填充。因而,在鍵入身高數(shù)據(jù)之后簡單地通過點擊"Enter (輸 入)",就立即向用戶呈現(xiàn)該柱狀圖。這可以緩解用戶主動地請求可視化的負(fù)擔(dān)并且替代地 促進(jìn)了用戶體驗的交互性。柱狀圖僅僅作為示例;還可提供表示聚集信息的其它可視化。
      [0089] 柱狀圖621可包括bin size (柱尺寸)滑塊622。通過調(diào)整柱尺寸,用戶可以查看 在不同精度級別如何分組數(shù)據(jù)??紤]具有柱尺寸為1的圖6,柱狀圖中的每一條表示個體數(shù) 據(jù)項。通過移動滑塊以將柱尺寸改變?yōu)?,柱狀圖可被更新以使得8個個體數(shù)據(jù)項落入每一 柱內(nèi),如圖7所示。通過改變柱尺寸,注意到,與當(dāng)柱尺寸為1時的情形相比,數(shù)據(jù)開始更清 楚地類似典型的分布。
      [0090] 圖8示出一種配置中的代碼區(qū)段510和結(jié)果區(qū)段520,其中用戶又輸入了兩行代 碼。首先,用戶用身高數(shù)據(jù)的平均的標(biāo)量值來填充值"avg(平均)"。在此情形中,在結(jié)果區(qū) 段520中以十進(jìn)制表示來顯示標(biāo)量值,例如,約66. 4。更一般地,十進(jìn)制表示或其它數(shù)字形 式可用于在結(jié)果區(qū)段520中顯示標(biāo)量值。
      [0091] 接著,用戶可以輸入另一行代碼以創(chuàng)建稱為"tails (高個)"的變量,該變量包括 來自高度數(shù)據(jù)中高于平均高度的條目。當(dāng)用戶輸入代碼行時,在結(jié)果部分中呈現(xiàn)另一柱狀 圖821,此時柱狀圖表示變量"tails"。柱狀圖最初可以用bin size(柱尺寸)為1(如滑 塊822所示)來呈現(xiàn)。圖9示出了一種配置中的結(jié)果區(qū)段520,其中用戶將柱尺寸更新為 8。此處,柱狀圖現(xiàn)在看上去更像典型的統(tǒng)計分布的右半部分。
      [0092] 如所提及的,結(jié)果區(qū)段520可以隨著執(zhí)行增量式處理繼續(xù)被更新。因而,柱狀圖 621和821兩者可以隨著流引擎處理其它數(shù)據(jù)項而繼續(xù)更新。這使得即便在正被處理的查 詢?nèi)客瓿芍坝脩粢材軌蛟趩蝹€界面中與數(shù)據(jù)的可視化進(jìn)行工作和查看。
      [0093] 注意到,一些實現(xiàn)可涉及取決于柱尺寸來不同地配置流引擎124。例如,柱尺寸可 以默認(rèn)為1,并且流引擎可以開始個體地處理數(shù)據(jù)項。接著,用戶可以將滑塊調(diào)整為值5,并 且接著可以在稍后將滑塊調(diào)整為值7。每一次用戶移動滑塊,界面模塊131-151可以生成包 含滑塊值作為有效載荷的事件。當(dāng)值改變時,先前的事件可被配置成結(jié)束并且可以將新的 事件提供給流引擎。
      [0094] 例如,考慮當(dāng)用戶將滑塊從1移至5的情況。界面模塊131可以創(chuàng)建具有有效載 荷"5"(從而指示滑塊值為5)以及從[起始_時間=0]到[結(jié)束_時間=無窮大]的生 存期的事件。接著,假定用戶在進(jìn)度點20處將滑塊改為調(diào)整為柱尺寸7。兩個事件被發(fā)送 到流引擎,(1)結(jié)束先前滑塊值的結(jié)束事件:有效載荷=5,起始時間=0,新結(jié)束時間=20, 舊結(jié)束時間=無窮大,以及(2)開始新的滑塊值的起始事件:有效載荷=7,起始時間=20, 結(jié)束時間=無窮大。
      [0095] 現(xiàn)在,流引擎124使用這些事件來將柱狀圖的分組條件改變?yōu)檩^新的值。例如,柱 狀圖可以由現(xiàn)在將具有不同(更粗粒度)分組條件的分區(qū)和應(yīng)用運(yùn)算來生成。例如,分組鍵 可能從層(用戶/5)至層(用戶/7)。這進(jìn)而會將柱狀圖的柱從5個用戶的寬度轉(zhuǎn)換成7 個用戶的寬度。在轉(zhuǎn)換之前,用戶0-4在柱0內(nèi),用戶5-9在柱1內(nèi),用戶10-14在柱2內(nèi), 以此類推。在轉(zhuǎn)換之后,用戶0-6在柱0內(nèi),用戶7-13在柱1內(nèi),以此類推。
      [0096] 第二示例腳本代碼和結(jié)果
      [0097] 圖10-12示出用于題為"Word Length Distribution(詞長分布)"的不同代碼條 目集的GUI 500的代碼區(qū)段510和結(jié)果區(qū)段520。在圖10中,名為RD的用戶輸入了第一行 代碼"var data = StreamAccess. GetDataStreamO ; ",這行代碼用來自表格的行填充變量 "data(數(shù)據(jù))"。此處,該表格包括例如來自搜索引擎的用戶輸入的搜索項。當(dāng)前進(jìn)度區(qū)間 中的前10個條目在結(jié)果區(qū)段520中示出,例如,所示的行是表格中最近結(jié)果集合的行。注 意到,用戶RD可以位于不同的客戶端設(shè)備處,并且顯示首字母以使其它用戶知曉哪個用戶 輸入了該特定代碼行。
      [0098] 在圖11中,另一用戶(例如,本地用戶)輸入第二行腳本代碼%31'16118 = (^3· Select (d = >d. word. Length); ",這行代碼用來自變量"data"的詞長填充陣列"lens (長 度)"。柱狀圖1121被顯示為具有相關(guān)聯(lián)的滑塊1102。圖12示出在稍后時間處理了更多結(jié) 果時被更新的結(jié)果區(qū)段520。注意到,柱狀圖1121可以自動地調(diào)整1和 7軸的比例以在處 理結(jié)果時容適這些結(jié)果,例如,圖12中示出的比例可以相對于圖11中示出的比例來調(diào)整。
      [0099] 附加的柱狀圖實現(xiàn)
      [0100] 圖13解說了可根據(jù)所公開的實現(xiàn)來使用的示例性⑶I 1300。⑶I 1300包括配置 部分1310和柱狀圖部分1320。配置部分包括用于配置柱狀圖部分如何表現(xiàn)的選項。例如, 用戶可以在任何時間停止處理查詢,可以使用滑塊1311來配置置信區(qū)間,并且可以使用滑 塊1312來配置處理增量。改變置信區(qū)間和處理增量的效果在下文更詳細(xì)地討論。配置部 分還給出了指示已經(jīng)被處理的數(shù)據(jù)項數(shù)目的當(dāng)前樣本尺寸以及指示已經(jīng)被處理的數(shù)據(jù)項 的百分比的完成百分比。
      [0101] GUI 1300在其中用戶輸入了具有集成關(guān)系查詢的代碼的配置中示出,該集成關(guān)系 查詢處理諸如表格200中示出的那樣的數(shù)據(jù),例如,航班延誤數(shù)據(jù)。此處,柱狀圖部分1320 示出表示一星期中的每一天的延誤的個體列,起始于第1天的星期一并且結(jié)束于第7天的 星期天。盡管僅處理0. 01 %的數(shù)據(jù),但圖案已經(jīng)開始出現(xiàn),因為星期二和星期五(第4天和 第5天)比周末(第6天和第7天)具有顯著地更長的延誤。
      [0102] 圖14示出在稍后時間處理了 3000行數(shù)據(jù)之后的⑶I 1300。此處,越來越明顯的 是星期五的延誤是最長的,而星期二緊接著排名第二。圖15繼續(xù)該示例,其示出在處理了 36000行航班數(shù)據(jù)之后的⑶I 1300?,F(xiàn)在清楚的是平均來看周末具有最短的延誤。
      [0103] 通過如圖13-15中示出的那樣呈現(xiàn)增量式結(jié)果,用戶能夠相對快速地查看一星期 中的不同日子和航班延誤之間的關(guān)系。此處,僅僅前1000個數(shù)據(jù)項上的結(jié)果提供了對底層 數(shù)據(jù)的表征的有意義的理解。一些實現(xiàn)是可調(diào)節(jié)的,并且允許用戶經(jīng)由⑶I 1300來選擇多 久計算一次部分結(jié)果。比較圖13和14并且注意到用戶調(diào)整了增量滑塊1312以改變對每 一增量式結(jié)果作出貢獻(xiàn)的行數(shù)。這可以使得適配器模塊125改變底層數(shù)據(jù)項的生存期。
      [0104] 例如,如果按照每滴答1000個記錄的粒度處理了 10000個記錄,則流引擎中的滴 答計數(shù)器可具有當(dāng)前值為10?,F(xiàn)在,當(dāng)區(qū)間被設(shè)置為11000時,下一滴答值11將意味著又 11000個記錄已經(jīng)被處理--總數(shù)為21000個。換言之,記錄10001到21000在滴答11被 處理。相應(yīng)地,適配器模塊125可以將記錄21000-31999的生存期設(shè)置為開始于11并且在 無窮大結(jié)束,記錄32000-43999的生存期可以被設(shè)置為開始于12并且在無窮大處結(jié)束,以 此類推?,F(xiàn)在,用戶將不那么頻繁地接收到更新,但每一更新將與對結(jié)果作出貢獻(xiàn)的相對較 大的數(shù)據(jù)集相對應(yīng)。在此意義上,用戶可以對處理進(jìn)行"微調(diào)"以按照偏好的粒度級別來接 收結(jié)果。
      [0105] 同樣,注意到,柱狀圖部分1320可以使用圓圈1321表不置信區(qū)間。圓圈表不如由 置信滑塊1311所設(shè)置的查詢結(jié)果的置信的上界和下界。隨著置信區(qū)間改變,柱狀圖的y軸 可以改變比例以使置信結(jié)果容納在柱狀圖部分中。因而,隨著y軸比例變得越來越小,置信 區(qū)間從圖13到15變得逐漸地窄了。這是因為隨著處理越來越多的數(shù)據(jù)項,置信區(qū)間本身 變得越來越小。一些實現(xiàn)使用數(shù)據(jù)集最小和最大以及已經(jīng)觀察到的變化來計算這些置信邊 界并且將其顯示在可視化上。諸如總和和平均之類的聚集可以被更新,并且置信邊界可以 隨著接收到服務(wù)器更新而變窄。
      [0106] 編程實現(xiàn)
      [0107] -般地,此處討論的圖形界面可以與服務(wù)器120交互以提供使得用戶能夠交互式 地處理大量數(shù)據(jù)的統(tǒng)一腳本環(huán)境。一個具體的實現(xiàn)使用語言集成查詢("LINQ")技術(shù)將查 詢(例如SQL)納入到通用編程語言(諸如C#)中。以上示出的代碼條目一般地解說了這一 技術(shù)。在一些實現(xiàn)中,客戶端設(shè)備130-150使用超文本標(biāo)記語言(HTML)、異步JavaScript? 和可擴(kuò)展標(biāo)記語言(XML)、和/或其它技術(shù)來與web服務(wù)121通信。
      [0108] 回頭參考圖5中所示的⑶I 500,⑶I可用于提供兩列讀取-求值-打印循環(huán) (REPL),其中代碼區(qū)段510包括REPL的左冊列并且結(jié)果區(qū)段520包括REPL的右側(cè)列。在 左側(cè)列中,用戶鍵入命令(C#陳述或表達(dá));在右側(cè)列中,客戶端設(shè)備顯示命令結(jié)果。當(dāng)用 戶按壓"enter (輸入)"時客戶端設(shè)備可以將這些命令發(fā)送給服務(wù)器以供求值,并且隨著流 引擎124計算它們而從服務(wù)器接收增量式結(jié)果。
      [0109] 輸入到代碼區(qū)段510中的一些命令可包括標(biāo)識一個或多個關(guān)系查詢的LINQ代碼。 例如,考慮圖5中的代碼條目512。此處,語言"d. word. Length"可以被視為使用流式選擇 運(yùn)算來實現(xiàn)的選擇運(yùn)算符。對于每一傳入事件(例如行),流式選擇運(yùn)算選擇詞長屬性。注 意到在此實例中,"Pick (撿拾)"運(yùn)算符可被視為用戶定義的運(yùn)算符。
      [0110] 每一代碼條目可具有不同類型的相關(guān)聯(lián)的結(jié)果。在其中結(jié)果是簡單的標(biāo)量的情形 中,客戶端設(shè)備可以在結(jié)果區(qū)段520中繪制打印串。然而,當(dāng)結(jié)果是更復(fù)雜的對象時,客戶 端設(shè)備可以選擇數(shù)據(jù)的默認(rèn)可視化為:對于表格數(shù)據(jù),用于數(shù)字流的表格,用于數(shù)字對的流 的柱狀圖,散點標(biāo)繪等。在任何事件中,可以簡單地通過輸入產(chǎn)生結(jié)果的查詢來向用戶提供 默認(rèn)可視化。如果默認(rèn)可視化不適合用戶的需求,則用戶可以交互式地切換可視化類型并 且改變其參數(shù)。例如,用戶能夠經(jīng)由下拉菜單或其它選擇選項交互式地在柱狀圖和散點標(biāo) 繪之間切換。
      [0111] 在一些實現(xiàn)中,腳本命令由界面模塊131-151或web服務(wù)121自動地重寫。例如, 當(dāng)腳本訪問枚舉(.NET中的IEnumerable〈T>)時,枚舉可被包裝在適于供流引擎124處理 的數(shù)據(jù)流(Stream丨nsight?中的CepStream〈T>)。每一時間單元,web服務(wù)121可以回頭向 客戶端設(shè)備報告結(jié)果的概述以及報告總的進(jìn)度。對于其尺寸是已知的數(shù)據(jù)源,這可以被報 告為已完成的百分比;對于其它源,已處理的項數(shù)。
      [0112] 硬件實現(xiàn)
      [0113] 如先前所提及的,系統(tǒng)100是其中可以執(zhí)行諸如上文討論的那些技術(shù)的系統(tǒng)的一 個示例。例如,其它示例性系統(tǒng)可以在單個設(shè)備上執(zhí)行所公開的功能中的一些或全部。此 夕卜,功能組件(諸如界面模塊、適配器模塊、流引擎、數(shù)據(jù)庫、腳本存儲和/或web服務(wù))可 被實現(xiàn)為軟件、硬件和/或固件。處理器可執(zhí)行計算機(jī)可讀指令來提供本文所討論的任何 功能,如方法300和相關(guān)聯(lián)的處理。數(shù)據(jù)和/或計算機(jī)可讀指令可被存儲在存儲器和/或 存儲上。存儲器和存儲可包括易失性或非易失性存儲器設(shè)備、硬盤驅(qū)動器存儲設(shè)備、和/或 光學(xué)存儲設(shè)備(如CD、DVD等)、閃存存儲設(shè)備等。
      [0114] 在某些情況下,本文所討論的各種功能組件可在匯編期間或至少在交付給用戶之 前被安裝在相關(guān)聯(lián)的客戶端設(shè)備或服務(wù)器上。在其他情形中,可在交付之后安裝功能組件, 例如通過網(wǎng)絡(luò)110和/或從可移動存儲設(shè)備可獲得的下載。功能組件可表現(xiàn)為獨(dú)立應(yīng)用或 服務(wù)、個體應(yīng)用模塊、作為操作系統(tǒng)的一部分等等。
      [0115] 還值得注意的是在某些實例中,客戶端設(shè)備或服務(wù)器可包括多個計算設(shè)備或機(jī) 器,例如在分布式環(huán)境中。在這一配置中,方法300可使用跨多個計算設(shè)備或機(jī)器的分布式 處理來實現(xiàn)。如本文所使用的術(shù)語〃計算機(jī)"、〃客戶機(jī)設(shè)備"、〃服務(wù)器〃以及〃計算設(shè)備 "可意味著具有某種量的處理能力和/或存儲能力的任何類型的設(shè)備。一般來說,"移動設(shè) 備"指的是以適用于用戶本人攜帶的形狀因子來體現(xiàn)的計算設(shè)備。計算設(shè)備可獲得存儲在 存儲設(shè)備和/或存儲器設(shè)備上的計算機(jī)可讀指令。還注意,術(shù)語"系統(tǒng)"可指代單個設(shè)備或 多個設(shè)備。這些設(shè)備可包括各種輸入/輸出機(jī)構(gòu),諸如鍵盤、顯示器、觸摸屏(例如,鍵入和 /或姿勢輸入)、語音激活的界面等。
      [0116] 如本文所使用的,術(shù)語〃計算機(jī)可讀介質(zhì)〃可包括信號。相反,術(shù)語〃計算機(jī)可讀 存儲介質(zhì)"排除了純信號,并暗示出某種物理結(jié)構(gòu)。計算機(jī)可讀存儲介質(zhì)包括"計算機(jī)可 讀存儲設(shè)備"。計算機(jī)可讀存儲設(shè)備的實例包括易失性存儲介質(zhì)(諸如RAM)和非易失性存 儲介質(zhì)(諸如硬盤驅(qū)動器、光盤和閃存等等)。
      [0117] 除了圖1所示的配置之外,根據(jù)所公開的實現(xiàn)的計算設(shè)備可采用片上系統(tǒng)(SOC) 類型的設(shè)計。在這一情況下,計算機(jī)所提供的功能可被集成在單個SOC或多個耦合的SOC 上。一個或多個處理器可被配置成與共享硬件協(xié)調(diào),例如存儲器、存儲等,和/或與一個或 多個專用硬件資源協(xié)調(diào),如配置成執(zhí)行特定具體功能的硬件塊。從而,如本文是使用的術(shù)語 "處理器"還可指代控制器、微控制器、處理器核、或適用于在常規(guī)計算架構(gòu)以及SOC設(shè)計兩 者中實現(xiàn)的其他類型的處理設(shè)備。在該上下文中,與處理器/處理設(shè)備相關(guān)聯(lián)的術(shù)語"執(zhí) 行"可包括諸如將數(shù)據(jù)和/或指令路由到各種專用硬件資源之類的功能。術(shù)語"邏輯"包含 硬件模塊和軟件指令或模塊。
      [0118] 結(jié)語
      [0119] 描述各示例方法的次序并不旨在解釋為限制,并且任何數(shù)量的所述框或動作都可 以按任何次序組合以實現(xiàn)各方法或?qū)崿F(xiàn)替換方法。此外,方法還可以用任何合適的硬件、軟 件、固件或其組合來實現(xiàn),以使得計算設(shè)備可實現(xiàn)方法。在一個情況下,方法作為一組指令 被存儲在一個或多個計算機(jī)可讀存儲介質(zhì)上,使得一個或多個計算設(shè)備的執(zhí)行造成一個或 多個計算設(shè)備執(zhí)行該方法。
      [0120] 盡管已用對結(jié)構(gòu)特征和/或方法動作專用的語言描述了本文所討論的技術(shù)、方 法、設(shè)備、系統(tǒng)等,但可以理解,所附權(quán)利要求書中定義的主題不必限于所述具體特征或動 作。相反,上述具體特征和動作是作為實現(xiàn)所要求保護(hù)的方法、設(shè)備、系統(tǒng)等的示例性形式 而公開的。
      【權(quán)利要求】
      1. 一種方法,包括: 獲得引用一個或多個數(shù)據(jù)項的關(guān)系查詢; 將進(jìn)度區(qū)間與所述數(shù)據(jù)項相關(guān)聯(lián); 將所述關(guān)系查詢轉(zhuǎn)換成對應(yīng)的流式查詢;W及 將所述流式查詢W及具有所述進(jìn)度區(qū)間的數(shù)據(jù)項提供給流引擎,所述流引擎產(chǎn)生所述 查詢的增量式結(jié)果, 其中至少所述相關(guān)聯(lián)由計算設(shè)備執(zhí)行。
      2. 如權(quán)利要求1所述的方法,其特征在于,所述進(jìn)度區(qū)間基于存儲所述數(shù)據(jù)項的表格 的行數(shù),或者所述進(jìn)度區(qū)間基于所述表格的屬性。
      3.如權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括: 獲得取決于所述關(guān)系查詢的另一關(guān)系查詢; 將所述另一關(guān)系查詢轉(zhuǎn)換成另一流式查詢;W及 將所述關(guān)系查詢的增量式結(jié)果作為輸入提供給所述另一流式查詢。
      4.如權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括: 從所述流引擎獲得所述增量式結(jié)果;W及 在獲得所述增量式結(jié)果時更新用戶界面。
      5.如權(quán)利要求4所述的方法,其特征在于,更新所述用戶界面包括在所述增量式結(jié)果 被獲得時更新所述增量式結(jié)果的可視化。
      6. 如權(quán)利要求5所述的方法,其特征在于,所述可視化包括柱狀圖并且所述更新包括 在所述增量式結(jié)果被獲得時更新所述柱狀圖的置信區(qū)間。
      7. -個或多個包括指令的計算機(jī)可讀存儲介質(zhì),當(dāng)所述指令被一個或多個處理器執(zhí)行 時,使得所述一個或多個處理器執(zhí)行包括W下的動作: 使用被配置成處理流式查詢的流引擎來處理關(guān)系查詢;W及 用所述流引擎產(chǎn)生的增量式結(jié)果來更新界面。
      8. 如權(quán)利要求7所述的一個或多個計算機(jī)可讀存儲介質(zhì),其特征在于,使用所述流引 擎來處理所述關(guān)系查詢包括: 將所述關(guān)系查詢轉(zhuǎn)換成對應(yīng)的流式查詢;W及 使用所述流引擎來執(zhí)行所述對應(yīng)的流式查詢。
      9.如權(quán)利要求7所述的一種或多種計算機(jī)可讀存儲介質(zhì),其特征在于,所述動作還包 括: 獲得數(shù)據(jù)表格中由所述關(guān)系查詢引用的多個數(shù)據(jù)項; 創(chuàng)建與多個數(shù)據(jù)項相對應(yīng)的事件;W及 將所述事件提供給所述流引擎。
      10. 如權(quán)利要求9所述的一種或多種計算機(jī)可讀存儲介質(zhì),其特征在于,所述動作還包 括: 為所述事件設(shè)置不同生存期,其中個體生存期與所述流引擎的進(jìn)度區(qū)間相對應(yīng)。
      【文檔編號】G06F17/30GK104471572SQ201380037221
      【公開日】2015年3月25日 申請日期:2013年7月10日 優(yōu)先權(quán)日:2012年7月12日
      【發(fā)明者】D·A·費(fèi)雪, S·M·德魯克, J·D·戈德斯汀, B·錢德拉穆里, R·A·德來恩, J·C·普拉特, M·巴那特 申請人:微軟公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1