大規(guī)模數(shù)據(jù)處理可以包括并行處理,其通常涉及同時(shí)對(duì)大數(shù)據(jù)集的每個(gè)元素執(zhí)行某個(gè)操作。可以在數(shù)據(jù)并行流水線中將各種操作鏈在一起,以創(chuàng)建用于對(duì)數(shù)據(jù)集進(jìn)行處理的高效機(jī)制。數(shù)據(jù)集的產(chǎn)生可能涉及在一組大進(jìn)化輸入上周期性地運(yùn)行的“批量作業(yè)”。隨著輸入被更新,前一個(gè)輸出變得越來(lái)越陳舊,所以在定期基礎(chǔ)上重新運(yùn)行流水線。
技術(shù)實(shí)現(xiàn)要素:
本公開(kāi)涉及在并行處理系統(tǒng)中執(zhí)行數(shù)據(jù)的增量處理。
一般而言,本說(shuō)明書(shū)中所描述的主題的一個(gè)創(chuàng)新方面能夠用包括以下動(dòng)作的方法加以具體化:識(shí)別包括指定要對(duì)數(shù)據(jù)集執(zhí)行的計(jì)算操作的指令的同步代碼;將所述同步代碼變換成包括一個(gè)或多個(gè)流水線對(duì)象的流水線應(yīng)用,所述流水線應(yīng)用被配置成跨越多個(gè)計(jì)算設(shè)備并行執(zhí)行,所述一個(gè)或多個(gè)流水線對(duì)象中的每一個(gè)流水線對(duì)象被配置成接收輸入數(shù)據(jù)集并且產(chǎn)生輸出數(shù)據(jù)集;識(shí)別要對(duì)其執(zhí)行所述流水線應(yīng)用的第一輸入數(shù)據(jù)集;對(duì)第一輸入數(shù)據(jù)集執(zhí)行所述流水線應(yīng)用以產(chǎn)生第一輸出數(shù)據(jù)集,所述執(zhí)行所述流水線應(yīng)用包括按照前一個(gè)流水線對(duì)象將其輸出數(shù)據(jù)集提供給下一個(gè)流水線對(duì)象作為其輸入數(shù)據(jù)集的次序執(zhí)行所述一個(gè)或多個(gè)流水線對(duì)象中的每一個(gè)流水線對(duì)象;在對(duì)所述第一輸入數(shù)據(jù)集執(zhí)行所述流水線應(yīng)用之后,識(shí)別要對(duì)其執(zhí)行所述流水線應(yīng)用的第二輸入數(shù)據(jù)集;確定所述第一輸入數(shù)據(jù)集與所述第二輸入數(shù)據(jù)集之間的差異的集合;以及對(duì)所述差異集合執(zhí)行所述流水線應(yīng)用以產(chǎn)生第二輸出數(shù)據(jù)集,所述對(duì)差異的集合執(zhí)行所述流水線應(yīng)用包括:執(zhí)行所述一個(gè)或多個(gè)流水線對(duì)象中的每一個(gè)流水線對(duì)象,包括每一個(gè)前一個(gè)流水線對(duì)象按照將與其前一個(gè)輸出數(shù)據(jù)集的差異提供給所述下一個(gè)流水線對(duì)象作為其輸入數(shù)據(jù)集的次序,并且所述第二輸出數(shù)據(jù)集包括與所述第一輸出數(shù)據(jù)集的差異。這個(gè)方面的其它實(shí)施例包括被配置成執(zhí)行在計(jì)算機(jī)存儲(chǔ)設(shè)備上編碼的方法的動(dòng)作的對(duì)應(yīng)的系統(tǒng)、裝置以及計(jì)算機(jī)程序。
能夠?qū)崿F(xiàn)本說(shuō)明書(shū)中所描述的主題的特定實(shí)施例以便實(shí)現(xiàn)以下優(yōu)點(diǎn)中的一個(gè)或多個(gè)。每當(dāng)流水線被重新運(yùn)行時(shí)對(duì)完整輸入數(shù)據(jù)集進(jìn)行再處理可能是浪費(fèi)的,并且對(duì)于大流水線來(lái)說(shuō),它運(yùn)行流水線花費(fèi)的時(shí)間量限制它能夠被運(yùn)行有多頻繁。然而,通過(guò)對(duì)第一輸入數(shù)據(jù)集與第二輸入數(shù)據(jù)集之間的差異進(jìn)行處理,可以減少對(duì)后續(xù)數(shù)據(jù)集進(jìn)行處理所必需的時(shí)間量,從而允許流水線更迅速地產(chǎn)生更新的輸出數(shù)據(jù)集。另外,當(dāng)設(shè)計(jì)者僅寫(xiě)入并維護(hù)同步代碼的一個(gè)版本時(shí),可以避免維護(hù)分離的批量和增量系統(tǒng)的隱患。
該系統(tǒng)能夠自動(dòng)地得到需要考慮到輸入中的改變對(duì)輸出所做的改變。這減少或者消除對(duì)流水線的人工維護(hù),這進(jìn)而也減少成本。還可以減輕與維護(hù)流水線的多個(gè)版本有關(guān)的正確性問(wèn)題。此外,僅對(duì)輸入集的改變進(jìn)行處理可能在輸入集尚未顯著地改變的情況下導(dǎo)致流水線的后續(xù)執(zhí)行所必需的計(jì)算資源的減少。還可以通過(guò)僅對(duì)輸入集的改變進(jìn)行處理來(lái)獲得較低的時(shí)延。
在下面的附圖和描述中闡述本說(shuō)明書(shū)中所描述的主題的一個(gè)或多個(gè)實(shí)施例的細(xì)節(jié)。主題的其它特征、方面和優(yōu)點(diǎn)從本說(shuō)明書(shū)、附圖和權(quán)利要求書(shū)將變得顯而易見(jiàn)。
附圖說(shuō)明
圖1是可能在其中發(fā)生增量數(shù)據(jù)處理的環(huán)境的框圖。
圖2是輸入數(shù)據(jù)集通過(guò)流水線實(shí)例被并行處理的系統(tǒng)的框圖。
圖3是流水線以及包括在其中的流水線對(duì)象存儲(chǔ)狀態(tài)以用于在增量數(shù)據(jù)處理中使用的環(huán)境的框圖。
圖4是針對(duì)增量數(shù)據(jù)處理的示例過(guò)程的流程圖。
圖5是示例計(jì)算設(shè)備的框圖。
各個(gè)附圖中的相同的附圖標(biāo)記和名稱指示相同的元件。
具體實(shí)施方式
本公開(kāi)涉及在并行處理系統(tǒng)中執(zhí)行數(shù)據(jù)的增量處理。在一些實(shí)施方式中,被視為執(zhí)行計(jì)劃(作為要應(yīng)用于記錄的某個(gè)合集的步驟的系列)的批量流水線被變換成增量執(zhí)行計(jì)劃,能夠?qū)Σ町?來(lái)自原始合集的添加或去除)的集合執(zhí)行所述增量執(zhí)行計(jì)劃,以產(chǎn)生差異的集合,該差異的集合能夠被應(yīng)用于前一個(gè)輸出合集以產(chǎn)生與會(huì)通過(guò)對(duì)整個(gè)新輸入運(yùn)行原始流水線而產(chǎn)生的合集相等的合集。在一些實(shí)施方式中,該系統(tǒng)還檢測(cè)對(duì)輸入的改變是什么,并且將輸出差異的集合應(yīng)用于最終輸出。
并行處理框架提供用于由多個(gè)計(jì)算設(shè)備并行對(duì)大量的數(shù)據(jù)進(jìn)行處理的平臺(tái)。用戶可以定義流水線或包括用于對(duì)輸入數(shù)據(jù)集進(jìn)行處理以產(chǎn)生輸出數(shù)據(jù)集的步驟的流水線應(yīng)用。一個(gè)常見(jiàn)的并行處理框架是MapReduce框架,在所述MapReduce框架中分布式計(jì)算被劃分成用于將輸入集劃分成較小組的映射步驟,以及用于對(duì)這些組中的每一個(gè)執(zhí)行操作的簡(jiǎn)化步驟。這樣的框架通常在批量模式下操作,使得即使自流水線被最后運(yùn)行以來(lái)已添加、改變或者刪除了輸入數(shù)據(jù)集中的僅幾個(gè)值,每當(dāng)流水線被運(yùn)行時(shí)也必須處理整個(gè)輸入數(shù)據(jù)集以產(chǎn)生輸出數(shù)據(jù)集。這可能導(dǎo)致輸入的重復(fù)處理,并且對(duì)于大輸入數(shù)據(jù)集導(dǎo)致高時(shí)延。對(duì)于某些應(yīng)用,比能夠運(yùn)行流水線的頻率更新的輸出數(shù)據(jù)可能是必要的。在這種情況下,可以構(gòu)建第二系統(tǒng)以處理這樣的增量更新。尤其隨著原始流水線演進(jìn),這種方法常常增加復(fù)雜性和維護(hù)開(kāi)銷。能夠在單個(gè)框架中表達(dá)計(jì)算并且在批量模式和增量模式兩者下運(yùn)行相同代碼將是有利的。
此外,在同步代碼中定義操作的兩個(gè)模式的能力也是所希望的。同步代碼包含呈現(xiàn)一系列順序步驟的編程指令。這與可以作為涉及等待并對(duì)輸入做出響應(yīng)的有限狀態(tài)機(jī)、事件處理機(jī)、或其它編程概念被實(shí)現(xiàn)的“異步”代碼相反。通常,同步代碼對(duì)于人類來(lái)說(shuō)比異步代碼更易于編輯和理解,因?yàn)榭赡懿豢扇菀椎貜拇a它本身識(shí)別異步代碼的操作和程序流。
因此,本公開(kāi)描述了允許在同步代碼中定義批量和增量處理操作的并行數(shù)據(jù)處理框架。一個(gè)示例方法包括識(shí)別同步代碼并且將它變換成包括流水線對(duì)象的流水線。然后可以對(duì)第一輸入數(shù)據(jù)集執(zhí)行流水線以產(chǎn)生第一輸出數(shù)據(jù)集。當(dāng)對(duì)第二輸入數(shù)據(jù)集執(zhí)行流水線時(shí),第一輸入數(shù)據(jù)集與第二輸入數(shù)據(jù)集之間的差異的集合被確定。然后對(duì)這些差異執(zhí)行流水線以產(chǎn)生第二輸出數(shù)據(jù)集。
通過(guò)對(duì)第一輸入數(shù)據(jù)集與第二輸入數(shù)據(jù)集之間的差異進(jìn)行處理,可以減少對(duì)后續(xù)數(shù)據(jù)集進(jìn)行處理所必需的時(shí)間量,從而允許流水線更迅速地產(chǎn)生更新的輸出數(shù)據(jù)集。另外,當(dāng)設(shè)計(jì)者僅寫(xiě)入并維護(hù)同步代碼的一個(gè)集合時(shí),可以避免維護(hù)分立的批量和增量系統(tǒng)的隱患。
圖1是可能在其中發(fā)生增量數(shù)據(jù)處理的環(huán)境100的框圖。環(huán)境100包括優(yōu)化器104,優(yōu)化器104分析包括用于在產(chǎn)生輸出數(shù)據(jù)集112時(shí)對(duì)輸入數(shù)據(jù)集110進(jìn)行處理的指令的同步代碼102。在操作中,優(yōu)化器104分析同步代碼102以產(chǎn)生可以在不同的計(jì)算設(shè)備上被并行執(zhí)行的流水線106。流水線106包括對(duì)輸入數(shù)據(jù)集110執(zhí)行由同步代碼102定義的處理步驟的一個(gè)或多個(gè)流水線對(duì)象108a-c。
環(huán)境100包括優(yōu)化器104。如所示,優(yōu)化器104可操作用于分析同步代碼102并且產(chǎn)生流水線106。在一些實(shí)施方式中,優(yōu)化器104可以是可操作用于分析同步代碼102并且產(chǎn)生所對(duì)應(yīng)的流水線106以執(zhí)行由同步代碼102定義的數(shù)據(jù)處理動(dòng)作的軟件程序或軟件程序的集合。優(yōu)化器104也可以是可以由作者導(dǎo)入到同步代碼102中并且可以在同步代碼102被編譯和運(yùn)行時(shí)被執(zhí)行的軟件庫(kù)。在一些實(shí)施方式中,優(yōu)化器104可以是服務(wù)器或服務(wù)器的集合,可以諸如通過(guò)應(yīng)用編程接口(API)、經(jīng)由一個(gè)或多個(gè)網(wǎng)絡(luò)協(xié)議而通過(guò)網(wǎng)絡(luò)、或者通過(guò)其它機(jī)制將同步代碼102提交給所述服務(wù)器或服務(wù)器的集合。
在一些實(shí)施方式中,優(yōu)化器104可以確定是否產(chǎn)生流水線,所述流水線在批量模式下操作,使得每當(dāng)流水線被運(yùn)行時(shí)整個(gè)輸入數(shù)據(jù)集110被處理,或者在增量模式下操作,使得僅從最后運(yùn)行起的輸入數(shù)據(jù)集110中的差異被處理。在一些情況下,可以由用戶基于給優(yōu)化器104的輸入做出此確定。還可以由優(yōu)化器104自動(dòng)地(諸如通過(guò)分析同步代碼、輸入數(shù)據(jù)集110或者基于其它分析)做出確定。例如,優(yōu)化器104可以檢驗(yàn)輸入數(shù)據(jù)集110的大小并且確定因?yàn)樗苌俚捻?xiàng),所以應(yīng)該產(chǎn)生批量模式流水線。在另一示例中,優(yōu)化器104可以檢驗(yàn)輸入數(shù)據(jù)集110的大小并且確定集合包含大量的項(xiàng)。優(yōu)化器104還可以諸如通過(guò)與用戶的交互來(lái)確定要產(chǎn)生的流水線將被經(jīng)常運(yùn)行。在這種情況下,優(yōu)化器104可以確定應(yīng)該產(chǎn)生增量模式流水線。
同步代碼102可以包括用于對(duì)輸入數(shù)據(jù)集110進(jìn)行處理以產(chǎn)生輸出數(shù)據(jù)集112的指令。例如,同步代碼102可以包括描述輸入數(shù)據(jù)集如何將被處理的一系列順序指令。包括在同步代碼102中的順序指令可以是函數(shù)調(diào)用、過(guò)程調(diào)用、循環(huán)、條件式或其它編程語(yǔ)言指令。同步代碼102在它表示一系列順序步驟的意義上是“同步的”。這與可以作為涉及等待輸入并對(duì)輸入做出響應(yīng)的有限狀態(tài)機(jī)、事件處理機(jī)或其它編程概念被實(shí)現(xiàn)的“異步”代碼相反。通常,同步代碼對(duì)于人類來(lái)說(shuō)更易于編輯和理解,因?yàn)榭赡懿豢扇菀椎貜拇a它本身識(shí)別異步代碼的操作和程序流。
在一些實(shí)施方式中,同步代碼102可以包括根據(jù)編程語(yǔ)言(諸如例如JAVA、PYTHON、PERL、C、C++、C#、JAVASCRIPT或其它編程語(yǔ)言或處理語(yǔ)言的組合)而編碼的指令。在一些情況下,同步代碼102可以被嵌入在較大應(yīng)用內(nèi),使得應(yīng)用的代碼的僅一部分被優(yōu)化器104優(yōu)化。
優(yōu)化器104分析(例如,變換)同步代碼102以產(chǎn)生流水線106。在一些實(shí)施方式中,流水線106是可操作用于執(zhí)行同步代碼102中所定義的操作的分布式應(yīng)用。在一些實(shí)施方式中,優(yōu)化器104可以在同步代碼102被執(zhí)行時(shí)創(chuàng)建流水線106。優(yōu)化器104可以跨越一個(gè)或多個(gè)服務(wù)器部署流水線106,并且使流水線106實(shí)例化以開(kāi)始輸入數(shù)據(jù)集110的處理。在一些實(shí)施方式中,優(yōu)化器104可以與部署流水線106以便執(zhí)行的環(huán)境102內(nèi)的其它組件進(jìn)行通信。
如所示,流水線106包括一個(gè)或多個(gè)流水線對(duì)象108a-c。在一些實(shí)施方式中,流水線對(duì)象108a-c各自對(duì)應(yīng)于同步代碼102內(nèi)的指令或指令的集合。優(yōu)化器104響應(yīng)于同步代碼102中的這樣的指令而創(chuàng)建并執(zhí)行流水線對(duì)象108a-c。在一些實(shí)施方式中,流水線對(duì)象108a-c可以是可以并行在分立的服務(wù)器上運(yùn)行的獨(dú)立軟件程序??梢园凑?qǐng)?zhí)行次序布置流水線對(duì)象108a-c,使得一個(gè)流水線對(duì)象(例如,108a)的輸出可以用作另一流水線對(duì)象(例如,108b)的輸入。相對(duì)于圖3更詳細(xì)地討論流水線對(duì)象108a-c的操作。
在操作中,流水線對(duì)象108a-c對(duì)輸入數(shù)據(jù)集110執(zhí)行各種操作或變換以產(chǎn)生輸出數(shù)據(jù)集112。在一些實(shí)施方式中,優(yōu)化器104基于同步代碼指令到流水線對(duì)象的類型的映射而生成流水線對(duì)象108a-c。例如,在同步代碼102定義MapReduce操作的情況下,流水線對(duì)象108a可以是響應(yīng)于同步代碼102中的map()函數(shù)而生成的映射器對(duì)象,流水線對(duì)象108b可以是響應(yīng)于同步代碼102中的shuffle()函數(shù)而生成的洗牌器對(duì)象,并且流水線對(duì)象108c可以是響應(yīng)于同步代碼102中的reduce()函數(shù)而生成的簡(jiǎn)化器對(duì)象。流水線對(duì)象108a-c還可以執(zhí)行其它操作,諸如例如聚合、組合、按密鑰分組、平坦化、連接、計(jì)數(shù)、去除重復(fù)項(xiàng)以及其它操作,并且可以響應(yīng)于同步代碼102中的對(duì)應(yīng)功能被生成。
環(huán)境100還包括要由流水線106處理的輸入數(shù)據(jù)集110。在一些實(shí)施方式中,輸入數(shù)據(jù)集110可以是數(shù)據(jù)庫(kù)表、文本或二進(jìn)制文件、數(shù)據(jù)流、數(shù)據(jù)碎片的合集、密鑰值對(duì)的合集,或另一類型的數(shù)據(jù)集或各類型的數(shù)據(jù)集的組合。在一些實(shí)施方式中,輸入數(shù)據(jù)集110可以由流水線106諸如通過(guò)網(wǎng)絡(luò)或者作為程序的標(biāo)準(zhǔn)輸入接收。輸入數(shù)據(jù)集110也可以由流水線106在啟動(dòng)時(shí)或者隨著執(zhí)行進(jìn)行而遞增地請(qǐng)求或者檢索。
環(huán)境100還包括輸出數(shù)據(jù)集112。在操作中,輸出數(shù)據(jù)集112由流水線106通過(guò)對(duì)輸入數(shù)據(jù)集110進(jìn)行處理而產(chǎn)生。輸出數(shù)據(jù)集112表示由同步代碼102定義的操作的最終產(chǎn)品。例如,如果同步代碼102定義輸入集110內(nèi)的每個(gè)字母的發(fā)生次數(shù)將被計(jì)數(shù)的操作,則輸出數(shù)據(jù)集112可以包括每個(gè)字母的計(jì)數(shù)的合集。在一些實(shí)施方式中,輸出數(shù)據(jù)集可以由流水線106隨著操作發(fā)生而更新。在一些情況下,可以在流水線106的執(zhí)行結(jié)束時(shí)產(chǎn)生輸出數(shù)據(jù)集112。輸出數(shù)據(jù)集112可以是數(shù)據(jù)的合集,諸如例如數(shù)據(jù)庫(kù)表或數(shù)據(jù)庫(kù)表的合集、文本文件、密鑰值對(duì)集合、數(shù)據(jù)流、或其它類型的數(shù)據(jù)。
圖2是輸入數(shù)據(jù)集通過(guò)流水線實(shí)例被并行處理的系統(tǒng)200的框圖。如所示,系統(tǒng)200包括各自運(yùn)行流水線實(shí)例204a-n的一個(gè)或多個(gè)服務(wù)器202a-n。每個(gè)流水線實(shí)例204a-n可以是相同的,可以被配置成對(duì)輸入數(shù)據(jù)集110的不同部分進(jìn)行處理。在一些實(shí)施方式中,每個(gè)流水線實(shí)例204a-n可以跨越多個(gè)服務(wù)器202a-n執(zhí)行。在一些情況下,可以在不同的服務(wù)器上運(yùn)行包括在每個(gè)流水線實(shí)例中的流水線對(duì)象中的每一個(gè)流水線對(duì)象。此外,其它組件(諸如對(duì)輸入數(shù)據(jù)集110或由流水線實(shí)例204a-n產(chǎn)生的中間結(jié)果進(jìn)行操作的分割器和組合器)可以被包括在系統(tǒng)200中。在一些實(shí)施方式中,優(yōu)化器104可以為流水線106確定執(zhí)行計(jì)劃,并且可以將流水線實(shí)例204a-c部署在服務(wù)器202a-n上。優(yōu)化器104可以基于對(duì)輸入數(shù)據(jù)集110、同步代碼102、由用戶提供的參數(shù)或其它因素的分析而確定服務(wù)器和要?jiǎng)?chuàng)建的流水線實(shí)例的數(shù)目以及如何配置這些服務(wù)器和流水線實(shí)例。
圖3是流水線106和流水線對(duì)象108a-c存儲(chǔ)狀態(tài)以用于在增量數(shù)據(jù)處理中使用的環(huán)境300的框圖。如所示,環(huán)境300包括數(shù)據(jù)儲(chǔ)存器302。在操作中,流水線106和流水線對(duì)象108a-c分別在數(shù)據(jù)儲(chǔ)存器302中存儲(chǔ)流水線狀態(tài)304和流水線對(duì)象狀態(tài)306。流水線狀態(tài)304可以將流水線106的總體狀態(tài)表示為其最后執(zhí)行的狀態(tài)。流水線對(duì)象狀態(tài)306可以將單個(gè)的流水線對(duì)象108a-c的狀態(tài)表示為流水線106最后執(zhí)行的狀態(tài)。通過(guò)查閱流水線狀態(tài)304和流水線對(duì)象狀態(tài)306,流水線106和流水線對(duì)象108a-c可以將要處理的數(shù)據(jù)與來(lái)自前一個(gè)執(zhí)行的數(shù)據(jù)進(jìn)行處理,以便實(shí)現(xiàn)流水線106的增量模式操作。
數(shù)據(jù)儲(chǔ)存器302可以是數(shù)據(jù)庫(kù)、文件系統(tǒng)、密鑰值儲(chǔ)存器、或其它類型的數(shù)據(jù)儲(chǔ)存器。流水線106和流水線對(duì)象108a-c可以在執(zhí)行流水線106期間寫(xiě)入數(shù)據(jù)儲(chǔ)存器302并且從數(shù)據(jù)儲(chǔ)存器302讀取。數(shù)據(jù)儲(chǔ)存器302可以是如圖3中所示出的中央數(shù)據(jù)儲(chǔ)存器,或者可以是包括多個(gè)節(jié)點(diǎn)的分布式來(lái)歷。在一些實(shí)施方式中,數(shù)據(jù)儲(chǔ)存器302可以包括與執(zhí)行流水線106的每個(gè)服務(wù)器(諸如來(lái)自圖2的服務(wù)器202a-n)關(guān)聯(lián)的存儲(chǔ)器。
數(shù)據(jù)儲(chǔ)存器302包括流水線狀態(tài)304。在一些實(shí)施方式中,流水線狀態(tài)304可以是流水線106的前一個(gè)執(zhí)行的表示。數(shù)據(jù)儲(chǔ)存器302可以存儲(chǔ)多個(gè)流水線狀態(tài)304。在一些情況下,流水線106的每個(gè)實(shí)例可以存儲(chǔ)不同的流水線狀態(tài)304。流水線狀態(tài)304可以存儲(chǔ)針對(duì)流水線106的最后執(zhí)行的輸入數(shù)據(jù)集110的表示。流水線106可以更新流水線狀態(tài)304以指示用于每個(gè)執(zhí)行的輸入數(shù)據(jù)集110中的改變。例如,流水線106可以針對(duì)輸入數(shù)據(jù)集110中的每個(gè)項(xiàng)而檢查流水線狀態(tài)304,以確定該項(xiàng)是否在流水線106的最后執(zhí)行期間被處理了。如果項(xiàng)在最后執(zhí)行中未被處理,則流水線106可以將新項(xiàng)添加到流水線狀態(tài)304,并且可以開(kāi)始在當(dāng)前執(zhí)行中對(duì)該項(xiàng)進(jìn)行處理。通過(guò)以這種方式檢查流水線狀態(tài)304,流水線106可以避免對(duì)在前一個(gè)執(zhí)行期間處理過(guò)的項(xiàng)進(jìn)行處理,并且因此實(shí)現(xiàn)增量處理模式。流水線106還可以確定已被從輸入數(shù)據(jù)集110中移除的項(xiàng),并且從流水線狀態(tài)304中移除這些項(xiàng)。
在一些實(shí)施方式中,流水線狀態(tài)304可以被作為項(xiàng)集合存儲(chǔ)在數(shù)據(jù)儲(chǔ)存器302中。在輸入數(shù)據(jù)集110被存儲(chǔ)在相同或類似的數(shù)據(jù)機(jī)存儲(chǔ)中的情況下,流水線106可以執(zhí)行輸入數(shù)據(jù)集110與流水線狀態(tài)304之間的集合比較以確定兩個(gè)集合之間的差異。流水線106然后可以對(duì)這些差異進(jìn)行處理以產(chǎn)生輸出數(shù)據(jù)集112。
在一些實(shí)施方式中,流水線狀態(tài)304可以包括針對(duì)流水線106的最后執(zhí)行的輸出數(shù)據(jù)集112的表示。流水線106可以隨著來(lái)自輸入數(shù)據(jù)集110的新項(xiàng)被處理并且隨著從輸入數(shù)據(jù)集110中刪除的項(xiàng)被識(shí)別而更新輸出數(shù)據(jù)集112的這個(gè)表示。流水線106然后可以產(chǎn)生這個(gè)更新的輸出數(shù)據(jù)集112作為它針對(duì)當(dāng)前執(zhí)行的輸出。在一些情況下,流水線106可以產(chǎn)生僅新輸出(例如,由新輸入數(shù)據(jù)生成的輸出)代替全輸出數(shù)據(jù)集112。
數(shù)據(jù)儲(chǔ)存器302還包括流水線對(duì)象狀態(tài)306。在一些情況下,流水線對(duì)象狀態(tài)306中的每一個(gè)對(duì)應(yīng)于流水線對(duì)象108a-c中的一個(gè)。流水線對(duì)象狀態(tài)306可以存儲(chǔ)與來(lái)自流水線106的前一個(gè)執(zhí)行的單個(gè)流水線對(duì)象108a-c關(guān)聯(lián)的狀態(tài)信息。流水線對(duì)象108a-c當(dāng)在增量模式下操作時(shí)可以使用這個(gè)先前的狀態(tài)數(shù)據(jù)。例如,產(chǎn)生在輸入數(shù)據(jù)集110中遇到的不同項(xiàng)的計(jì)數(shù)的聚合器對(duì)象在它被僅呈現(xiàn)有在執(zhí)行期間對(duì)輸入數(shù)據(jù)集110的改變的情況下才可能產(chǎn)生不完整的或錯(cuò)誤的結(jié)果。通過(guò)存儲(chǔ)用于前一個(gè)執(zhí)行的輸入數(shù)據(jù)集110中遇到的項(xiàng)計(jì)數(shù),聚合器可以在流水線106的執(zhí)行期間更新這些計(jì)數(shù),并且產(chǎn)生指示經(jīng)修改的輸入數(shù)據(jù)集110的更新的結(jié)果。在一些實(shí)施方式中,流水線對(duì)象狀態(tài)306可以作為密鑰值對(duì)被存儲(chǔ),所述密鑰值對(duì)具有包括在輸入數(shù)據(jù)集110中找到的項(xiàng)的密鑰的復(fù)合密鑰以及與該狀態(tài)關(guān)聯(lián)的流水線對(duì)象的識(shí)別符。
圖4是針對(duì)增量數(shù)據(jù)處理的示例過(guò)程400的流程圖。在402處,包括指定要對(duì)數(shù)據(jù)集執(zhí)行計(jì)算操作的指令的同步代碼被識(shí)別。例如,可以對(duì)同步代碼執(zhí)行應(yīng)用(諸如來(lái)自圖1的優(yōu)化器104)。還可以在編譯、構(gòu)建、或解釋步驟期間識(shí)別同步代碼。在一些實(shí)施方式中,同步代碼可能本身不適合于對(duì)輸入集的改變進(jìn)行處理。在這些情況下,可以從對(duì)輸入集的改變進(jìn)行操作以產(chǎn)生輸出集的對(duì)應(yīng)改變的同步代碼得到新流水線。
在404處,同步代碼被變換成包括一個(gè)或多個(gè)流水線對(duì)象的流水線應(yīng)用。在一些實(shí)施方式中,變換涉及使新軟件對(duì)象或程序?qū)嵗詫?shí)現(xiàn)同步代碼(諸如相對(duì)于圖1所描述的流水線對(duì)象108a-c)的步驟。在一些情況下,可以基于輸入數(shù)據(jù)集的大小或其它屬性來(lái)執(zhí)行同步代碼的變換。例如,同步代碼可以針對(duì)小輸入數(shù)據(jù)集(例如,能夠在單個(gè)計(jì)算設(shè)備上被迅速地處理的輸入數(shù)據(jù)集)被變換成流水線的單個(gè)實(shí)例,但是可以針對(duì)大輸入數(shù)據(jù)集(例如,不能夠在單個(gè)計(jì)算設(shè)備上在合理量的時(shí)間內(nèi)被處理的輸入數(shù)據(jù)集)被變換成不同服務(wù)器上的多個(gè)分布式流水線實(shí)例。
在406處,要對(duì)其執(zhí)行流水線應(yīng)用的第一輸入數(shù)據(jù)集被識(shí)別。在一些情況下,第一輸入數(shù)據(jù)集被變換成密鑰值對(duì)的第一集合并且存儲(chǔ)在密鑰值儲(chǔ)存器中。第一輸入數(shù)據(jù)集可以是數(shù)據(jù)流、數(shù)據(jù)庫(kù)表、文件、或文件的集合,或另一類型的數(shù)據(jù)集。
在408處,對(duì)第一輸入數(shù)據(jù)集執(zhí)行流水線應(yīng)用以產(chǎn)生第一輸出數(shù)據(jù)集。在一些情況下,執(zhí)行流水線應(yīng)用包括利用包括在流水線應(yīng)用中的流水線對(duì)象對(duì)第一輸入數(shù)據(jù)集中的所有項(xiàng)進(jìn)行處理以產(chǎn)生第一輸出數(shù)據(jù)集。
在410處,要對(duì)其執(zhí)行流水線應(yīng)用的第二輸入數(shù)據(jù)集在對(duì)第一輸入數(shù)據(jù)集執(zhí)行流水線應(yīng)用之后被識(shí)別。在一些情況下,第二輸入數(shù)據(jù)集可以是具有多個(gè)添加的和/或刪除的項(xiàng)的第一輸入數(shù)據(jù)集。在412處,第一輸入數(shù)據(jù)集與第二輸入數(shù)據(jù)集之間的差異的集合被確定。在一些實(shí)施方式中,確定差異包括將第二輸入數(shù)據(jù)集變換成密鑰值對(duì)的第二集合、將密鑰值對(duì)的第二集合與密鑰值對(duì)的第一集合進(jìn)行比較、以及識(shí)別已相對(duì)于密鑰值對(duì)的第一集合被從密鑰值對(duì)的第二集合中添加或者刪除的密鑰值對(duì)。確定差異還可以包括確定表示對(duì)第一輸入數(shù)據(jù)集執(zhí)行了流水線的時(shí)間的流水線的最后執(zhí)行時(shí)間戳,以及識(shí)別包括所述最后執(zhí)行時(shí)間戳之后的時(shí)間戳的第二輸入數(shù)據(jù)集中的項(xiàng)集合。在414處,對(duì)差異的集合執(zhí)行流水線應(yīng)用以產(chǎn)生第二輸出數(shù)據(jù)集。
在一些情況下,過(guò)程400包括響應(yīng)于對(duì)第一輸入數(shù)據(jù)集執(zhí)行流水線而確定流水線狀態(tài),該流水線狀態(tài)包括第一輸入數(shù)據(jù)集和第一輸出數(shù)據(jù)集的表示??梢皂憫?yīng)于對(duì)與第一輸入數(shù)據(jù)集的差異集合執(zhí)行流水線而更新流水線狀態(tài)以生成更新的流水線狀態(tài),該更新的流水線狀態(tài)包括第二輸入數(shù)據(jù)集和第二輸出數(shù)據(jù)集的表示。在一些情況下,可以響應(yīng)于對(duì)第一輸入數(shù)據(jù)集執(zhí)行流水線而針對(duì)一個(gè)或多個(gè)流水線對(duì)象中的每一個(gè)確定流水線對(duì)象狀態(tài),該流水線對(duì)象狀態(tài)包括針對(duì)流水線對(duì)象的輸入數(shù)據(jù)集和輸出數(shù)據(jù)集的表示。還可以響應(yīng)于對(duì)與第一輸入數(shù)據(jù)集的差異的集合執(zhí)行流水線而更新流水線對(duì)象狀態(tài)以生成更新的流水線對(duì)象狀態(tài),該更新的流水線對(duì)象狀態(tài)包括針對(duì)流水線對(duì)象的輸入數(shù)據(jù)集和輸出數(shù)據(jù)集的差異。
圖5是作為客戶端或者作為服務(wù)器或多個(gè)服務(wù)器的可以被用來(lái)實(shí)現(xiàn)此文檔中所描述的系統(tǒng)和方法的計(jì)算設(shè)備500、550的框圖。計(jì)算設(shè)備500旨在表示各種形式的數(shù)字計(jì)算機(jī),諸如膝上型計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、工作站、個(gè)人數(shù)字助理、服務(wù)器、刀片服務(wù)器、主機(jī)、以及其它適當(dāng)?shù)挠?jì)算機(jī)。計(jì)算設(shè)備550旨在表示各種形式的移動(dòng)設(shè)備,諸如個(gè)人數(shù)字助理、蜂窩電話、智能電話、以及其它類似的計(jì)算設(shè)備。附加地,計(jì)算設(shè)備500或550能夠包括通用串行總線(USB)閃速驅(qū)動(dòng)器。USB閃速驅(qū)動(dòng)器可以存儲(chǔ)操作系統(tǒng)和其它應(yīng)用。USB閃速驅(qū)動(dòng)器能夠包括輸入/輸出組件,諸如可以被插入到另一計(jì)算設(shè)備的USB端口中的無(wú)線發(fā)射器或USB連接器。這里所示出的組件、它們的連接和關(guān)系、以及它們的功能意味著僅為示例性的,而不意味著限制此文檔中所描述和/或要求保護(hù)的發(fā)明的實(shí)施方式。
計(jì)算設(shè)備500包括處理器502、存儲(chǔ)器504、存儲(chǔ)設(shè)備506、連接到存儲(chǔ)器504和高速擴(kuò)展端口510的高速接口508、以及連接到低速總線514和存儲(chǔ)設(shè)備506的低速接口512。組件502、504、506、508、510和512中的每一個(gè)使用各種總線來(lái)互連,并且可以被安裝在公共主板上或者視情況而定以其它方式互連。處理器502能夠處理用于在計(jì)算設(shè)備500內(nèi)執(zhí)行的指令,包括存儲(chǔ)在存儲(chǔ)器504中或在存儲(chǔ)設(shè)備506上以將GUI的圖形信息顯示在外部輸入/輸出設(shè)備(諸如耦合到高速接口508的顯示器516)上的指令。在其它實(shí)施方式中,視情況而定,可以使用多個(gè)處理器和/或多個(gè)總線以及多個(gè)存儲(chǔ)器和各種類型的存儲(chǔ)器。并且,多個(gè)計(jì)算設(shè)備500可以與提供必要操作的部分的每個(gè)設(shè)備連接在一起(例如,作為服務(wù)器組、一組刀片服務(wù)器、或多處理器系統(tǒng))。
存儲(chǔ)器504存儲(chǔ)計(jì)算設(shè)備500內(nèi)的信息。在一個(gè)實(shí)施方式中,存儲(chǔ)器504是一個(gè)或多個(gè)易失性存儲(chǔ)器單元。在另一實(shí)施方式中,存儲(chǔ)器504是一個(gè)或多個(gè)非易失性存儲(chǔ)器單元。存儲(chǔ)器504還可以是另一形式的計(jì)算機(jī)可讀介質(zhì),諸如磁或光盤(pán)。
存儲(chǔ)設(shè)備506能夠?yàn)橛?jì)算設(shè)備500提供大容量存儲(chǔ)。在一個(gè)實(shí)施方式中,存儲(chǔ)設(shè)備506可以是或者包含計(jì)算機(jī)可讀介質(zhì),諸如軟盤(pán)設(shè)備、硬盤(pán)設(shè)備、光盤(pán)設(shè)備、或磁帶設(shè)備、閃速存儲(chǔ)器或其它類似的固態(tài)存儲(chǔ)器設(shè)備或這些設(shè)備的陣列,包括存儲(chǔ)區(qū)域網(wǎng)絡(luò)或其它配置中的設(shè)備。計(jì)算機(jī)程序產(chǎn)品能夠用信息載體有形地具體化。計(jì)算機(jī)程序產(chǎn)品還可以包含當(dāng)被執(zhí)行時(shí)執(zhí)行一個(gè)或多個(gè)方法(諸如上面所描述的那些方法)的指令。信息載體是計(jì)算機(jī)或機(jī)器可讀介質(zhì),諸如存儲(chǔ)器504、存儲(chǔ)設(shè)備506、或處理器502上的存儲(chǔ)器。
高速接口508管理計(jì)算設(shè)備500的帶寬密集操作,而低速接口512管理較低帶寬密集操作。功能的這種分配僅是示例性的。在一個(gè)實(shí)施方式中,高速接口508耦合到存儲(chǔ)器504、顯示器516(例如,通過(guò)圖形處理器或加速計(jì)),并且耦合到高速擴(kuò)展端口510,其可以接受各種擴(kuò)展卡(未示出)。在該實(shí)施方式中,低速接口512耦合到存儲(chǔ)設(shè)備506和低速擴(kuò)展端口514??梢园ǜ鞣N通信端口(例如,USB、藍(lán)牙、以太網(wǎng)、無(wú)線以太網(wǎng))的低速擴(kuò)展端口可以耦合到一個(gè)或多個(gè)輸入/輸出設(shè)備,諸如鍵盤(pán)、指示設(shè)備、掃描器,或諸如交換機(jī)或路由器的聯(lián)網(wǎng)設(shè)備,例如通過(guò)網(wǎng)絡(luò)適配器。
如該圖中所示,可以以許多不同的形式實(shí)現(xiàn)計(jì)算設(shè)備500。例如,它可以作為標(biāo)準(zhǔn)服務(wù)器520被實(shí)現(xiàn),或者被實(shí)現(xiàn)在一組此類服務(wù)器中多次。它還可以被實(shí)現(xiàn)為機(jī)架服務(wù)器系統(tǒng)524的一部分。此外,它可以被實(shí)現(xiàn)在諸如膝上型計(jì)算機(jī)522的個(gè)人計(jì)算機(jī)中??商孢x地,來(lái)自計(jì)算設(shè)備500的組件可以與諸如設(shè)備550的移動(dòng)設(shè)備(未示出)中的其它組件組合。這些設(shè)備中的每一個(gè)可以包含計(jì)算設(shè)備500、550中的一個(gè)或多個(gè),并且整個(gè)系統(tǒng)可以由彼此通信的多個(gè)計(jì)算設(shè)備500、550組成。
除其它組件之外,計(jì)算設(shè)備550還包括處理器552、存儲(chǔ)器564、諸如顯示器554的輸入/輸出設(shè)備、通信接口566以及收發(fā)器568。設(shè)備550還可以提供有存儲(chǔ)設(shè)備,諸如微型驅(qū)動(dòng)器或其它設(shè)備,以提供附加的存儲(chǔ)。組件550、552、564、554、566和568中的每一個(gè)使用各種總線來(lái)互連,并且這些組件中的數(shù)個(gè)可以被安裝在公共主板上或者視情況而定以其它方式互連。
處理器552能夠執(zhí)行計(jì)算設(shè)備550內(nèi)的指令,包括存儲(chǔ)在存儲(chǔ)器564中的指令。處理器可以作為包括單獨(dú)的及多個(gè)模擬和數(shù)字處理器的芯片的芯片集被實(shí)現(xiàn)。附加地,可以使用許多架構(gòu)中的任一個(gè)來(lái)實(shí)現(xiàn)處理器。例如,處理器552可以是CISC(復(fù)雜指令集計(jì)算機(jī))處理器、RISC(精簡(jiǎn)指令集計(jì)算機(jī))處理器、或MISC(最小指令集計(jì)算機(jī))處理器。處理器可以提供例如對(duì)設(shè)備550的其它組件的協(xié)調(diào),諸如對(duì)用戶接口、由設(shè)備550運(yùn)行的應(yīng)用、以及通過(guò)設(shè)備550的無(wú)線通信的控制。
處理器552可以通過(guò)控制接口558以及耦合到顯示器554的顯示接口556與用戶進(jìn)行通信。顯示器554可以是例如TFT(薄膜晶體管液晶顯示)顯示器或OLED(有機(jī)發(fā)光二極管)顯示器或其它適當(dāng)?shù)娘@示技術(shù)。顯示接口556可以包括用于驅(qū)動(dòng)顯示器554以向用戶呈現(xiàn)圖形和其它信息的適當(dāng)電路。控制接口558可以接收來(lái)自用戶的命令并且對(duì)它們進(jìn)行轉(zhuǎn)換以用于提交給處理器552。此外,外部接口562可以被設(shè)置為與處理器552通信,以便使得能實(shí)現(xiàn)設(shè)備550與其它設(shè)備的近區(qū)域通信。例如,外部接口562可以在一些實(shí)施方式中提供有線通信,或者在其它實(shí)施方式中提供無(wú)線通信,并且還可以使用多個(gè)接口。
存儲(chǔ)器564存儲(chǔ)計(jì)算設(shè)備550內(nèi)的信息。存儲(chǔ)器564可以作為計(jì)算機(jī)可讀介質(zhì)或媒體、一個(gè)或多個(gè)易失性存儲(chǔ)器單元、或一個(gè)或多個(gè)非易失性存儲(chǔ)器單元中的一個(gè)或多個(gè)被實(shí)現(xiàn)。還可以提供擴(kuò)展存儲(chǔ)器574并且通過(guò)擴(kuò)展接口572連接到設(shè)備550,所述擴(kuò)展接口572可以包括例如SIMM(單列直插存儲(chǔ)器模塊)卡接口。這種擴(kuò)展存儲(chǔ)器574可以為設(shè)備550提供額外的存儲(chǔ)空間,或者還可以為設(shè)備550存儲(chǔ)應(yīng)用或其它信息。具體地,擴(kuò)展存儲(chǔ)器574可以包括用來(lái)執(zhí)行或者補(bǔ)充上面所描述的過(guò)程的指令,并且還可以包括安全信息。因此,例如,擴(kuò)展存儲(chǔ)器574可以作為設(shè)備550的安全模塊被提供,并且可以被編程有許可設(shè)備550的安全使用的指令。此外,可以經(jīng)由SIMM卡與附加信息一起提供安全應(yīng)用,諸如以不可被黑客破壞的方式將識(shí)別信息放置在SIMM卡上。
如在下面所討論的,存儲(chǔ)器564可以包括例如閃速存儲(chǔ)器和/或NVRAM存儲(chǔ)器。在一個(gè)實(shí)施方式中,計(jì)算機(jī)程序產(chǎn)品用信息載體有形地具體化。計(jì)算機(jī)程序產(chǎn)品包含指令,所述指令當(dāng)被執(zhí)行時(shí)執(zhí)行一個(gè)或多個(gè)方法,諸如上面所描述的那些方法。信息載體是計(jì)算機(jī)或機(jī)器可讀介質(zhì),諸如存儲(chǔ)器564、擴(kuò)展存儲(chǔ)器574,或可以例如通過(guò)收發(fā)器568或外部接口562接收的處理器552上的存儲(chǔ)器。
設(shè)備550可以通過(guò)通信接口566以無(wú)線方式通信,所述通信接口566必要時(shí)可以包括數(shù)字信號(hào)處理電路。通信接口566可以提供在各種模式或協(xié)議下的通信,所述各種模式或協(xié)議諸如為GSM語(yǔ)音呼叫、SMS、EMS或MMS消息傳送、CDMA、TDMA、PDC、WCDMA、CMDA2000、或GPRS等。這種通信可以例如通過(guò)射頻收發(fā)器568發(fā)生。此外,短距離通信可以諸如使用藍(lán)牙、WiFi或其它這種收發(fā)器(未示出)而發(fā)生。此外,GPS(全球定位系統(tǒng))接收器模塊570可以將附加的導(dǎo)航和位置相關(guān)無(wú)線數(shù)據(jù)提供給設(shè)備550,所述無(wú)線數(shù)據(jù)可以視情況而定被在設(shè)備550上運(yùn)行的應(yīng)用使用。
設(shè)備550還可以使用音頻編解碼器560聽(tīng)得見(jiàn)地通信,所述音頻編解碼器560可以從用戶接收口語(yǔ)信息并且將其轉(zhuǎn)換為可使用的數(shù)字信息。諸如通過(guò)例如設(shè)備550的頭戴式耳機(jī)中的揚(yáng)聲器,音頻編解碼器560可以同樣地為用戶生成可聽(tīng)聲音。這種聲音可以包括來(lái)自語(yǔ)音電話呼叫的聲音,可以包括記錄的聲音(例如,語(yǔ)音消息、音樂(lè)文件等),并且還可以包括由在設(shè)備550上操作的應(yīng)用所生成的聲音。
如該圖中所示,可以以許多不同的形式實(shí)現(xiàn)計(jì)算設(shè)備550。例如,計(jì)算設(shè)備550可以作為蜂窩電話580被實(shí)現(xiàn)。其還可以作為智能電話582、個(gè)人數(shù)字助理、或其它類似的移動(dòng)設(shè)備的一部分被實(shí)現(xiàn)。
在各種實(shí)施方式中,如果現(xiàn)有操作不成功(例如,如果確定未被執(zhí)行),則不執(zhí)行“響應(yīng)于”或者“由于”另一操作(例如,確定或識(shí)別)而被執(zhí)行的操作。被“自動(dòng)地”執(zhí)行的操作是在沒(méi)有用戶干預(yù)(例如,干預(yù)用戶輸入)的情況下被執(zhí)行的操作。在此文檔中用條件語(yǔ)言描述的特征可以描述為可選的實(shí)施方式。在一些示例中,從第一設(shè)備向第二設(shè)備“傳送”包括第一設(shè)備將數(shù)據(jù)放置到網(wǎng)絡(luò)中以供由第二設(shè)備接收,但是可能不包括第二設(shè)備接收數(shù)據(jù)。相反,從第一設(shè)備“接收”可以包括從網(wǎng)絡(luò)接收數(shù)據(jù),但是可能不包括第一設(shè)備傳送數(shù)據(jù)。
由計(jì)算系統(tǒng)“確定”能夠包括計(jì)算系統(tǒng)請(qǐng)求另一設(shè)備執(zhí)行確定并且將結(jié)果供應(yīng)給計(jì)算系統(tǒng)。而且,由計(jì)算系統(tǒng)“顯示”或者“呈現(xiàn)”能夠包括計(jì)算系統(tǒng)發(fā)送用于使另一設(shè)備顯示或者呈現(xiàn)所引用的信息的數(shù)據(jù)。
本說(shuō)明書(shū)中所描述的主題和操作的實(shí)施例能夠用數(shù)字電子電路或用計(jì)算機(jī)軟件、固件或硬件(包括本說(shuō)明書(shū)中所公開(kāi)的結(jié)構(gòu)及其結(jié)構(gòu)等同物)或者用它們中的一個(gè)或多個(gè)的組合加以實(shí)現(xiàn)。本說(shuō)明書(shū)中所描述的主題的實(shí)施例能夠作為被編碼在計(jì)算機(jī)存儲(chǔ)介質(zhì)上以用于由數(shù)據(jù)處理裝置執(zhí)行或者以控制數(shù)據(jù)處理裝置的操作的一個(gè)或多個(gè)計(jì)算機(jī)程序(即,計(jì)算機(jī)程序指令的一個(gè)或多個(gè)模塊)被實(shí)現(xiàn)??商孢x地或此外,能夠?qū)⒊绦蛑噶罹幋a在人工生成的傳播信號(hào)(例如,被生成來(lái)對(duì)信息進(jìn)行編碼以便傳輸?shù)竭m合的接收器裝置以供由數(shù)據(jù)處理裝置執(zhí)行的機(jī)器生成的電、光或電磁信號(hào))上。計(jì)算機(jī)存儲(chǔ)介質(zhì)可以是或者被包括在計(jì)算機(jī)可讀存儲(chǔ)設(shè)備、計(jì)算機(jī)可讀存儲(chǔ)基板、隨機(jī)或串行存取存儲(chǔ)器陣列或設(shè)備或者它們中的一個(gè)或多個(gè)的組合中。而且,雖然計(jì)算機(jī)存儲(chǔ)介質(zhì)不是傳播信號(hào),但是計(jì)算機(jī)存儲(chǔ)介質(zhì)可以是被編碼在人工生成的傳播信號(hào)中的計(jì)算機(jī)程序指令的源或目的地。計(jì)算機(jī)存儲(chǔ)介質(zhì)還可以是或者被包括在一個(gè)或多個(gè)單獨(dú)的物理組件或媒體(例如,多個(gè)CD、磁盤(pán)或其它存儲(chǔ)設(shè)備)中。
本說(shuō)明書(shū)中所描述的操作能夠作為由數(shù)據(jù)處理裝置對(duì)存儲(chǔ)在一個(gè)或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)設(shè)備上或者從其它源接收的數(shù)據(jù)所執(zhí)行的操作被實(shí)現(xiàn)。
術(shù)語(yǔ)“數(shù)據(jù)處理裝置”包含用于對(duì)數(shù)據(jù)進(jìn)行處理的所有類型的裝置、設(shè)備和機(jī)器,通過(guò)示例包括可編程處理器、計(jì)算機(jī)、片上系統(tǒng)或多個(gè)可編程處理器、計(jì)算機(jī)、片上系統(tǒng),或上述的組合。該裝置能夠包括專用邏輯電路,例如FPGA(現(xiàn)場(chǎng)可編程門陣列)或ASIC(專用集成電路)。除硬件之外,該裝置還能夠包括為所述的計(jì)算機(jī)程序創(chuàng)建執(zhí)行環(huán)境的代碼,例如,構(gòu)成處理器固件、協(xié)議棧、數(shù)據(jù)庫(kù)管理系統(tǒng)、操作系統(tǒng)、跨平臺(tái)運(yùn)行時(shí)環(huán)境、虛擬機(jī)或它們中的一個(gè)或多個(gè)的組合的代碼。該裝置和執(zhí)行環(huán)境能夠?qū)崿F(xiàn)各種不同的計(jì)算模型基礎(chǔ)設(shè)施,諸如web服務(wù)、分布式計(jì)算以及網(wǎng)格計(jì)算基礎(chǔ)設(shè)施。
計(jì)算機(jī)程序(還被稱為程序、軟件、軟件應(yīng)用、腳本或代碼)能夠用任何形式的編程語(yǔ)言(包括編譯或解釋語(yǔ)言、描述性或過(guò)程語(yǔ)言)編寫(xiě),并且它能夠被以任何形式(包括作為獨(dú)立程序或者作為適合于在計(jì)算環(huán)境中使用的模塊、組件、子例行程序、對(duì)象或其它單元)部署。計(jì)算機(jī)程序可以但未必對(duì)應(yīng)于文件系統(tǒng)中的文件。能夠在保持其它程序或數(shù)據(jù)的文件(例如,存儲(chǔ)在標(biāo)記語(yǔ)言文檔中的一個(gè)或多個(gè)腳本)的一部分中、在專用于所述的程序的單個(gè)文件中、或者在多個(gè)協(xié)調(diào)文件(例如,存儲(chǔ)一個(gè)或多個(gè)模塊、子程序或代碼的部分的文件)中存儲(chǔ)程序。能夠?qū)⒂?jì)算機(jī)程序部署成在一個(gè)計(jì)算機(jī)上或在位于一個(gè)站點(diǎn)處或者跨越多個(gè)站點(diǎn)分布并通過(guò)通信網(wǎng)絡(luò)互連的多個(gè)計(jì)算機(jī)上執(zhí)行。
本說(shuō)明書(shū)中所描述的過(guò)程和邏輯流程能夠由執(zhí)行一個(gè)或多個(gè)計(jì)算機(jī)程序的一個(gè)或多個(gè)可編程處理器來(lái)執(zhí)行,以通過(guò)對(duì)輸入數(shù)據(jù)進(jìn)行操作并生成輸出來(lái)執(zhí)行動(dòng)作。過(guò)程和邏輯流程還能夠由專用邏輯電路來(lái)執(zhí)行,并且裝置還能夠作為專用邏輯電路(例如,F(xiàn)PGA(現(xiàn)場(chǎng)可編程門陣列)或ASIC(專用集成電路))被實(shí)現(xiàn)。
作為示例,適合于執(zhí)行計(jì)算機(jī)程序的處理器包括通用和專用微處理器二者以及任何類型的數(shù)字計(jì)算機(jī)的任何一個(gè)或多個(gè)處理器。通常,處理器將從只讀存儲(chǔ)器或隨機(jī)存取存儲(chǔ)器或兩者接收指令和數(shù)據(jù)。計(jì)算機(jī)的必要元件是用于依照指令執(zhí)行動(dòng)作的處理器以及用于存儲(chǔ)指令和數(shù)據(jù)的一個(gè)或多個(gè)存儲(chǔ)器設(shè)備。通常,計(jì)算機(jī)還將包括或者在操作上耦合以從用于存儲(chǔ)數(shù)據(jù)的一個(gè)或多個(gè)大容量存儲(chǔ)設(shè)備(例如,磁盤(pán)、磁光盤(pán)、或光盤(pán))接收數(shù)據(jù)或者向一個(gè)或多個(gè)大容量存儲(chǔ)設(shè)備傳送數(shù)據(jù)或兩者。然而,計(jì)算機(jī)不必具有這些設(shè)備。而且,能夠?qū)⒂?jì)算機(jī)嵌入在另一設(shè)備(例如,移動(dòng)電話、個(gè)人數(shù)字助理(PDA)、移動(dòng)音頻或視頻播放器、游戲控制臺(tái)、全球定位系統(tǒng)(GPS)接收器或便攜式存儲(chǔ)設(shè)備(例如,通用串行總線(USB)閃存驅(qū)動(dòng)器)等)中。適合于存儲(chǔ)計(jì)算機(jī)程序指令和數(shù)據(jù)的設(shè)備包括所有形式的非易失性存儲(chǔ)器、媒體和存儲(chǔ)器設(shè)備,作為示例包括:半導(dǎo)體存儲(chǔ)器設(shè)備,例如,EPROM、EEPROM、和閃速存儲(chǔ)器設(shè)備;磁盤(pán),例如,內(nèi)部硬盤(pán)或可移除盤(pán);磁光盤(pán);以及CD-ROM和DVD-ROM盤(pán)。處理器和存儲(chǔ)器能夠由專用邏輯電路來(lái)補(bǔ)充或者并入專用邏輯電路。
為了提供與用戶的交互,能夠?qū)⒈菊f(shuō)明書(shū)中所描述的主題的實(shí)施例實(shí)現(xiàn)在具有用于向用戶顯示信息的顯示設(shè)備(例如,CRT(陰極射線管)或LCD(液晶顯示)監(jiān)視器)以及用戶能夠用來(lái)向計(jì)算機(jī)提供輸入的鍵盤(pán)和指示設(shè)備(例如,鼠標(biāo)或軌跡球)的計(jì)算機(jī)上。其它類型的設(shè)備也能夠被用來(lái)提供與用戶交互;例如,提供給用戶的反饋可以是任何形式的感覺(jué)反饋,例如,視覺(jué)反饋、聽(tīng)覺(jué)反饋或觸覺(jué)反饋;并且能夠以包括聲輸入、語(yǔ)音輸入或觸覺(jué)輸入的任何形式接收來(lái)自用戶的輸入。此外,計(jì)算機(jī)能夠通過(guò)向由用戶使用的設(shè)備發(fā)送文檔并從由用戶使用的設(shè)備接收文檔(例如,通過(guò)響應(yīng)于從web瀏覽器接收到的請(qǐng)求而向用戶的用戶設(shè)備上的web瀏覽器發(fā)送網(wǎng)頁(yè))來(lái)與用戶交互。
本說(shuō)明書(shū)中所描述的主題的實(shí)施例能夠被實(shí)現(xiàn)在計(jì)算系統(tǒng)中,所述計(jì)算系統(tǒng)包括后端組件(例如,作為數(shù)據(jù)服務(wù)器),或者包括中間件組件(例如,應(yīng)用服務(wù)器),或者包括前端組件(例如,具有用戶能夠用來(lái)與本說(shuō)明中所描述的主題的實(shí)施方式交互的圖形用戶接口或Web瀏覽器的用戶計(jì)算機(jī)),或一個(gè)或多個(gè)這種后端組件、中間件組件或前端組件的任何組合。本系統(tǒng)的組件能夠通過(guò)任何形式或介質(zhì)的數(shù)字?jǐn)?shù)據(jù)通信(例如,通信網(wǎng)絡(luò))來(lái)互連。通信網(wǎng)絡(luò)的示例包括局域網(wǎng)(“LAN”)和廣域網(wǎng)(“WAN”)、互聯(lián)的網(wǎng)絡(luò)(例如,互聯(lián)網(wǎng))、以及對(duì)等網(wǎng)絡(luò)(例如,自組織對(duì)等網(wǎng)絡(luò))。
計(jì)算系統(tǒng)能夠包括用戶和服務(wù)器。用戶和服務(wù)器通常彼此遠(yuǎn)離并且通常通過(guò)通信網(wǎng)絡(luò)交互。用戶和服務(wù)器的關(guān)系借助于在相應(yīng)的計(jì)算機(jī)上運(yùn)行并且彼此具有用戶-服務(wù)器關(guān)系的計(jì)算機(jī)程序來(lái)產(chǎn)生。在一些實(shí)施例中,服務(wù)器向用戶設(shè)備傳送數(shù)據(jù)(例如,HTML頁(yè)面)(例如,用于向與用戶設(shè)備交互的用戶顯示數(shù)據(jù)并且從與用戶設(shè)備交互的用戶接收用戶輸入的目的)。能夠在服務(wù)器處從用戶設(shè)備接收在該用戶設(shè)備處生成的數(shù)據(jù)(例如,用戶交互的結(jié)果)。
雖然本說(shuō)明書(shū)包含許多特定實(shí)施方式細(xì)節(jié),但是這些不應(yīng)該被解釋為對(duì)任何發(fā)明的或可能要求保護(hù)的范圍構(gòu)成限制,而是相反被解釋為特定于特定發(fā)明的特定實(shí)施例的特征的描述。還能夠在單個(gè)實(shí)施例中相結(jié)合地實(shí)現(xiàn)在此說(shuō)明書(shū)中在單獨(dú)的實(shí)施例背景下描述的特定特征。相反地,還能夠單獨(dú)地在多個(gè)實(shí)施例中或在任何適合的子組合中實(shí)現(xiàn)在單個(gè)實(shí)施例背景下描述的各種特征。而且,盡管特征可以被在上面描述為在特定組合中行動(dòng)并且同樣地甚至最初要求保護(hù),然而來(lái)自要求保護(hù)的組合的一個(gè)或多個(gè)特征能夠在一些情況下被從組合中刪除,并且所要求保護(hù)的組合可以涉及子組合或子組合的變化。
類似地,雖然在附圖中按特定次序描繪操作,但是這不應(yīng)該被理解為要求這些操作被以所示出的特定次序或以順序次序執(zhí)行,或者要求執(zhí)行所有圖示的操作,以實(shí)現(xiàn)所希望的結(jié)果。在特定情況下,多任務(wù)處理和并行處理可能是有利的。而且,上面所描述的實(shí)施例中的各種系統(tǒng)組件的分離不應(yīng)該被理解為在所有實(shí)施例中要求這種分離,并且應(yīng)該理解,所描述的程序組件和系統(tǒng)通常能夠被一起集成在單個(gè)軟件產(chǎn)品中或者封裝到多個(gè)軟件產(chǎn)品中。
因此,已經(jīng)對(duì)主題的特定實(shí)施例進(jìn)行了描述。其它實(shí)施例在以下權(quán)利要求的范圍內(nèi)。在一些情況下,權(quán)利要求中所記載的動(dòng)作能夠被以不同的次序執(zhí)行并且仍然實(shí)現(xiàn)所希望的結(jié)果。此外,附圖中所描繪的過(guò)程未必要求所示出的特定次序或順序次序以實(shí)現(xiàn)所希望的結(jié)果。在特定實(shí)施方式中,多任務(wù)處理和并行處理可能是有利的。