本公開(kāi)涉及數(shù)據(jù)處理領(lǐng)域。具體地,本公開(kāi)涉及用于合并數(shù)據(jù)的系統(tǒng)和方法。
背景技術(shù):
本公開(kāi)提出了用于通過(guò)實(shí)時(shí)流計(jì)算融合大量計(jì)算以支持網(wǎng)絡(luò)相冊(cè)(Flickr)的神奇視圖(Magic View)的新型架構(gòu)。Magic View被設(shè)計(jì)為一種愉快的體驗(yàn),僅基于圖像內(nèi)容,它提供了基于用戶(hù)自己的照片流的示圖的對(duì)象和主題。為了實(shí)現(xiàn)該目的,本公開(kāi)中的系統(tǒng)使用針對(duì)實(shí)時(shí)計(jì)算和批量計(jì)算的單一表格,并推進(jìn)讀取的一致性。為了處理關(guān)于傳統(tǒng)架構(gòu)(稱(chēng)為L(zhǎng)ambda架構(gòu))的復(fù)雜度的問(wèn)題之一,所公開(kāi)的系統(tǒng)能夠顯著地簡(jiǎn)化實(shí)現(xiàn)方式而仍舊能夠?qū)崿F(xiàn)一種快速響應(yīng)的實(shí)時(shí)數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)可操作的規(guī)模為300億個(gè)記錄,其中5000萬(wàn)個(gè)記錄每天被遞增式增加和更新。
該系統(tǒng)允許以極低延遲,非常廣泛并深入地服務(wù)來(lái)自Lambda架構(gòu)的數(shù)據(jù)。該系統(tǒng)具有非常適度的硬件和軟件足跡(footprint)(這是一種概念模式)。該系統(tǒng)的設(shè)計(jì)還促進(jìn)精確的(surgical)實(shí)時(shí)更新和整體數(shù)據(jù)集的更新二者,同時(shí)維持高度的一致性和正確性。
我們面臨的挑戰(zhàn)是將數(shù)據(jù)從大的周期性靜態(tài)記錄集(回填)投射到服務(wù)系統(tǒng)的長(zhǎng)周轉(zhuǎn)時(shí)間。該問(wèn)題由于大數(shù)據(jù)集通常是以千萬(wàn)億字節(jié)大小為規(guī)模而尤其嚴(yán)重。Map-reduce(映射化簡(jiǎn))已經(jīng)可以很好地用于較快地創(chuàng)建和存儲(chǔ)回填。挑戰(zhàn)已成為如何在同樣合理的時(shí)間幀(若干小時(shí)或天,而非若干天或周)內(nèi)將這些回填投射到我們現(xiàn)有的服務(wù)棧(關(guān)鍵值存儲(chǔ)、RDBMS、和搜索引擎)。
此外,我們從不同的系統(tǒng)生成額外的、日益增長(zhǎng)的主數(shù)據(jù)記錄集,并且數(shù)據(jù)以高速率改變(大約1億次記錄更新/天),當(dāng)該數(shù)據(jù)與回填合并時(shí)可形成超過(guò)200億的記錄集。我們需要以低延遲經(jīng)由我們的API,采取統(tǒng)一的方式向數(shù)以千萬(wàn)的用戶(hù)同時(shí)服務(wù)該數(shù)據(jù),并維持高度的一致性和正確性。
最終,我們的數(shù)據(jù)中的一些數(shù)據(jù)由穩(wěn)定發(fā)展和改進(jìn)下的前沿算法生成。平均每6-8周,存在遍歷整個(gè)記錄集重新計(jì)算該數(shù)據(jù)的顯著用戶(hù)利益。這可能需要對(duì)我們的數(shù)據(jù)進(jìn)行完全的更新,同時(shí)繼續(xù)以低延遲和高規(guī)模服務(wù)新的更新。
HBase是開(kāi)源的分布式數(shù)據(jù)庫(kù),HBase作為靈活的大規(guī)模關(guān)鍵值數(shù)據(jù)存儲(chǔ)已經(jīng)很成熟,其可以促進(jìn)非常快速的批量加載(大于每秒400k條記錄),同時(shí)從實(shí)時(shí)更新寫(xiě)入同一HBase基礎(chǔ)設(shè)施(區(qū)域服務(wù)器、表格等)。隨后所造成的問(wèn)題是如何實(shí)際地合并這些“實(shí)時(shí)”源和“回填”源的數(shù)據(jù)。
我們實(shí)時(shí)地使用預(yù)測(cè)性活動(dòng)隊(duì)列來(lái)執(zhí)行這一點(diǎn),“緩存引(cache primer)”或“Warmr”(我們對(duì)其的稱(chēng)呼)觀察和掃描HBase以將實(shí)體投射到一個(gè)低延遲服務(wù)層(在我們的情況下為Redis)。
首先在下文介紹合并實(shí)時(shí)數(shù)據(jù)和回填數(shù)據(jù)的概念。有兩種類(lèi)別的數(shù)據(jù)單元,分別為“屬值(Values)”和“王牌(Trumps)”?!皩僦怠睘閷⒈煌渡涞椒?wù)層的實(shí)體的屬性(例如:拍攝照片的日期)。“王牌”表示從緩存中刪除實(shí)體的信號(hào)。所有的單元通過(guò)實(shí)時(shí)表示和回填表示之間的“同屬(sibling)”雙重引用來(lái)建模。該算法為:“王牌”始終勝過(guò)“屬值”(故有此名稱(chēng))且實(shí)時(shí)始終勝過(guò)回填。
我們所取得的作為Warmr中一部分的一項(xiàng)創(chuàng)新是最小化HBase掃描IO出同時(shí)保持上部分(above-the-fold)冷緩存(cold-cache)的低延遲(我們已在第95百分位實(shí)現(xiàn)了300ms)。為了達(dá)到這一點(diǎn),我們將HBase掃描結(jié)果的最大時(shí)間戳快照到緩存層。這允許我們?cè)诜€(wěn)態(tài)時(shí)只需為最近的數(shù)據(jù)變化(即,其時(shí)間戳在來(lái)自前次掃描的快照時(shí)間戳之后的單元)對(duì)HBase進(jìn)行高頻掃描。這增加了實(shí)時(shí)/回填優(yōu)先級(jí)分級(jí)/合并算法的復(fù)雜性。
由于“王牌”單元始終取得高于“屬值”單元的優(yōu)先級(jí),且“實(shí)時(shí)”單元始終勝過(guò)它們“回填”的同屬,我們有時(shí)需要在HBase上針對(duì)同一行運(yùn)行多次取值。所以例如,如果我們?cè)谀硞€(gè)時(shí)間范圍內(nèi)掃描并只找到了回填數(shù)據(jù),則我們必須針對(duì)任意可能的實(shí)時(shí)數(shù)據(jù)進(jìn)行及時(shí)(back-in-time)回查。通過(guò)把這部分“Warmar”封裝為一個(gè)HBase協(xié)同處理器,這種額外的HBase IO可以得到緩解。
有關(guān)這種“實(shí)時(shí)勝過(guò)回填”算法的問(wèn)題在于,實(shí)時(shí)“路徑(lane)”可能阻礙被寫(xiě)入回填的新的更新。我們通過(guò)統(tǒng)籌“清除”階段來(lái)解決該問(wèn)題,在該“清除”階段中,仔細(xì)挑選的實(shí)時(shí)數(shù)據(jù)集被周期性地移動(dòng)到回填單元。通過(guò)與在映射化簡(jiǎn)(map-reduce)中處理的起作用的批量數(shù)據(jù)的低水印數(shù)據(jù)時(shí)間戳仔細(xì)地協(xié)調(diào),這一點(diǎn)被完成。實(shí)踐中,我們的實(shí)時(shí)系統(tǒng)比我們的批量系統(tǒng)更容易出錯(cuò),所以以每天或每周的頻率運(yùn)行該過(guò)程具有校正數(shù)據(jù)的額外優(yōu)點(diǎn),該數(shù)據(jù)可能在實(shí)時(shí)處理期間已經(jīng)丟失。
回填清除檢查我們標(biāo)準(zhǔn)的存儲(chǔ)在磁盤(pán)上的、用來(lái)標(biāo)識(shí)最大時(shí)間段的數(shù)據(jù)集,我們已知該數(shù)據(jù)集是正確的,即不會(huì)仍然通過(guò)實(shí)時(shí)或數(shù)據(jù)處理流寫(xiě)入該數(shù)據(jù)集。該標(biāo)準(zhǔn)數(shù)據(jù)集的塊包括可能從實(shí)時(shí)數(shù)據(jù)流丟失的數(shù)據(jù)(該情況定期發(fā)生),所以我們將該數(shù)據(jù)加載至數(shù)據(jù)庫(kù)的批量部分。對(duì)于數(shù)據(jù)庫(kù)中相同標(biāo)識(shí)的時(shí)間段,我們隨后標(biāo)識(shí)任意實(shí)時(shí)更新,該實(shí)時(shí)更新可能“勝過(guò)”剛加載的標(biāo)準(zhǔn)批量數(shù)據(jù)并將該數(shù)據(jù)“公布”于批量列,以及將實(shí)時(shí)列中現(xiàn)在過(guò)期的數(shù)據(jù)消除。時(shí)序圖在圖6中示出。
該系統(tǒng)主要益處是實(shí)現(xiàn)、擴(kuò)大和調(diào)試比較簡(jiǎn)單。該系統(tǒng)從數(shù)據(jù)庫(kù)架構(gòu)強(qiáng)(strongly)解耦,所以它還提供了操作簡(jiǎn)易性。數(shù)據(jù)庫(kù)可以被“現(xiàn)場(chǎng)”更新,同時(shí)Warmr正在運(yùn)行并且Warmr將提供最終一致的結(jié)果;該系統(tǒng)額外的優(yōu)點(diǎn)是其允許大規(guī)模的經(jīng)解耦回填。
最后,該系統(tǒng)的規(guī)模是輕量級(jí)的;其實(shí)際的實(shí)現(xiàn)方式不需要很多用于將數(shù)十億的記錄存儲(chǔ)至大內(nèi)存緩存的硬件和存儲(chǔ)器。
該系統(tǒng)允許以極低延遲,非常廣泛并深入地服務(wù)來(lái)自Lambda架構(gòu)的數(shù)據(jù)。該系統(tǒng)具有非常適度的硬件和軟件足跡(這是一種概念模式)。該系統(tǒng)的設(shè)計(jì)還同時(shí)促進(jìn)精確的(surgical)實(shí)時(shí)更新和整體數(shù)據(jù)集的更新,同時(shí)維持高度的一致性和正確性。
網(wǎng)絡(luò)相冊(cè)曾試圖將我們的計(jì)算機(jī)視覺(jué)技術(shù)以一種愉快的方式呈現(xiàn)給用戶(hù)。神奇視圖(Magic View)基于自動(dòng)標(biāo)簽以分類(lèi)學(xué)的方式將用戶(hù)的照片進(jìn)行聚合和分組,并提供無(wú)縫的、“快速導(dǎo)航”視圖,例如,將用戶(hù)照片中所有的“貓”分為一組。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種用于合并數(shù)據(jù)的方法。該方法包括:獲得第一屬性值,其中第一屬性值表示數(shù)據(jù)項(xiàng)的方面;獲得述第一屬性有關(guān)的第二屬性值,其中第二屬性值表示數(shù)據(jù)項(xiàng)的方面;選擇將用來(lái)確定表示數(shù)據(jù)項(xiàng)的第三屬性值的方案;以及根據(jù)所選的方案以及第一屬性值和第二屬性值來(lái)確定所述第三屬性值。
附圖說(shuō)明
圖1示出了根據(jù)本教導(dǎo)的實(shí)施例的照片的神奇視圖(magic view)。
圖2示出了根據(jù)本教導(dǎo)的實(shí)施例的將照片添加到magic view類(lèi)別。
圖3示出了根據(jù)本教導(dǎo)的實(shí)施例的典型Lambda架構(gòu)的示例。。
圖4示出了根據(jù)本教導(dǎo)的實(shí)施例的系統(tǒng)的概覽和(相比于圖3中經(jīng)典的實(shí)現(xiàn)方式的)增強(qiáng)型Lambda架構(gòu)。
圖5示出了根據(jù)本教導(dǎo)的實(shí)施例的系統(tǒng)的概覽和(相比于圖3中經(jīng)典的實(shí)現(xiàn)方式的)另一增強(qiáng)型Lambda架構(gòu)。
圖6示出了根據(jù)本教導(dǎo)的實(shí)施例的用于合并數(shù)據(jù)的方法的時(shí)序圖。
圖7示出了根據(jù)本教導(dǎo)的實(shí)施例的用戶(hù)認(rèn)知的時(shí)間的圖表。
圖8描繪了可以用來(lái)實(shí)現(xiàn)專(zhuān)門(mén)實(shí)現(xiàn)本教導(dǎo)的系統(tǒng)的移動(dòng)設(shè)備架構(gòu);以及
圖9描繪了可以用來(lái)實(shí)現(xiàn)專(zhuān)門(mén)實(shí)現(xiàn)本教導(dǎo)的系統(tǒng)的計(jì)算設(shè)備架構(gòu)。
具體實(shí)施方式
圖1示出了根據(jù)本教導(dǎo)的實(shí)施例的照片的神奇視圖(magic view)。通過(guò)應(yīng)用我們前沿的計(jì)算機(jī)視覺(jué)技術(shù),網(wǎng)絡(luò)相冊(cè)的神奇視圖基于照片的內(nèi)容自動(dòng)地將用戶(hù)的照片流中的照片進(jìn)行分類(lèi)并且將其以無(wú)縫的視圖呈現(xiàn),從而解決整理用戶(hù)自己照片時(shí)的麻煩。這都是實(shí)時(shí)發(fā)生的。只要照片被上傳,該照片就被分類(lèi)并被置于神奇視圖中。圖2示出了根據(jù)本教導(dǎo)的實(shí)施例將照片添加到神奇視圖分類(lèi)。
最初的考慮是將這些聚合作為每日的、批量計(jì)算任務(wù)來(lái)計(jì)算。實(shí)驗(yàn)表明它沒(méi)有實(shí)時(shí)地達(dá)到實(shí)現(xiàn)工作的預(yù)期。另外的考慮包括使其整體地被流計(jì)算驅(qū)動(dòng),在空中建立聚合,但這沒(méi)有達(dá)到全面向用戶(hù)供應(yīng)歷史數(shù)據(jù)的預(yù)期。
當(dāng)照片被上傳時(shí),我們的計(jì)算機(jī)視覺(jué)流水線處理該照片,從而生成一組自動(dòng)標(biāo)簽(autotag),該自動(dòng)標(biāo)簽是圖像內(nèi)容的文本描述。當(dāng)我們具有對(duì)上傳照片中的自動(dòng)標(biāo)簽執(zhí)行流計(jì)算的現(xiàn)有架構(gòu)時(shí),神奇視圖需要數(shù)據(jù)存儲(chǔ),該數(shù)據(jù)存儲(chǔ)計(jì)算它們的每個(gè)用戶(hù)的聚合。另外,將必須維持這些聚合。如果照片被添加、移除、或更新,則該聚合將需要被精確地更新來(lái)反應(yīng)這一點(diǎn)。我們還將需要利用系統(tǒng)中全部120億張照片的自動(dòng)標(biāo)簽對(duì)系統(tǒng)進(jìn)行初始化,并針對(duì)流計(jì)算丟失圖像的情況運(yùn)行定期回填。
我們需要系統(tǒng),該系統(tǒng)針對(duì)網(wǎng)絡(luò)相冊(cè)上的超過(guò)120億張圖像創(chuàng)建每一用戶(hù)的神奇視圖分類(lèi),以及當(dāng)實(shí)時(shí)數(shù)據(jù)流入時(shí),利用從實(shí)時(shí)數(shù)據(jù)產(chǎn)生的數(shù)千萬(wàn)個(gè)標(biāo)簽來(lái)更新這些分類(lèi)。理想地,該系統(tǒng)必須允許我們有效但是單獨(dú)地管理批量數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù),該系統(tǒng)僅在被請(qǐng)求時(shí)計(jì)算最終狀態(tài)。我們轉(zhuǎn)向Yahoo的Hadhoo堆棧,來(lái)找出以我們所需的超大規(guī)模來(lái)建立這一點(diǎn)的方式。
由Apache HBase支持,我們開(kāi)發(fā)了一種新方案來(lái)融合來(lái)自批量和實(shí)時(shí)聚合的結(jié)果。使用HBase中的單一表格,我們能夠獨(dú)立地更新并管理系統(tǒng)的批量數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù),同時(shí)始終能夠提供一致的、正確的結(jié)果。
Pig和Oozie用于快速地計(jì)算和加載大規(guī)模、線下的批量計(jì)算。這些魯棒工具對(duì)于快速初始化系統(tǒng)以及定期回填任意丟失數(shù)據(jù)是很好的。Storm用于支持將數(shù)據(jù)實(shí)時(shí)提取到系統(tǒng),并被Java層調(diào)解,該Java層將寫(xiě)入分散到HBase。當(dāng)用戶(hù)請(qǐng)求查看他們的數(shù)據(jù)時(shí),最終的Java過(guò)程負(fù)責(zé)將批量數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)合并到其最終狀態(tài)。
該解決方案是對(duì)有時(shí)被稱(chēng)為L(zhǎng)ambda架構(gòu)的創(chuàng)新改進(jìn)。我們通過(guò)簡(jiǎn)化基本的Lambda架構(gòu)的一些復(fù)雜度,使得維護(hù)和開(kāi)發(fā)更為容易,改進(jìn)了該基本的Lambda架構(gòu)。
傳統(tǒng)的數(shù)據(jù)庫(kù)查詢(xún)是在其存儲(chǔ)的所有數(shù)據(jù)上進(jìn)行操作以獲取結(jié)果的函數(shù)。其可以被抽象為:
結(jié)果=查詢(xún)(數(shù)據(jù))
在2011年,公布了“如何打敗CAP定理(How to Beat the CAP Theorem)”的重要文章,其中公開(kāi)了“Lambda架構(gòu)”。Lambda架構(gòu)的核心利用實(shí)時(shí)數(shù)據(jù)庫(kù)和批量數(shù)據(jù)庫(kù)替代了傳統(tǒng)數(shù)據(jù)庫(kù),并且將查詢(xún)函數(shù)的框架修改為:
結(jié)果=合并(查詢(xún)(實(shí)時(shí)數(shù)據(jù))+查詢(xún)(批量數(shù)據(jù)))
圖3示出了典型的Lambda架構(gòu)的示例。該典型的Lambda架構(gòu)由它的記錄系統(tǒng)的“只附加”隊(duì)列所支持,該記錄由事件的實(shí)時(shí)流所提供。周期性地,隊(duì)列中的所有數(shù)據(jù)被提供至批量計(jì)算,該批量計(jì)算預(yù)處理數(shù)據(jù)以針對(duì)查詢(xún)對(duì)其進(jìn)行優(yōu)化,并且將這些聚合存儲(chǔ)到批量計(jì)算數(shù)據(jù)庫(kù)。實(shí)時(shí)事件流驅(qū)動(dòng)流計(jì)算機(jī),該流計(jì)算機(jī)將進(jìn)入事件處理至實(shí)時(shí)聚合中。隨后查詢(xún)經(jīng)由查詢(xún)合并器進(jìn)行,該查詢(xún)合并器查詢(xún)批量數(shù)據(jù)庫(kù)和實(shí)時(shí)數(shù)據(jù)庫(kù)二者,計(jì)算二者的合并并且存儲(chǔ)結(jié)果。
同時(shí),較新的Lambda架構(gòu)很受歡迎,并且已經(jīng)建立了若干具體實(shí)現(xiàn)方式。兩個(gè)重要的實(shí)例是分布式分析平臺(tái)druid和Twitter的Summingbird。兩種實(shí)現(xiàn)方式提取查詢(xún)合并器后面的數(shù)據(jù)庫(kù)。
這種類(lèi)型的架構(gòu)經(jīng)由最終一致性享有穩(wěn)定性和容錯(cuò)性。如果數(shù)據(jù)塊在實(shí)時(shí)計(jì)算中被略過(guò),則保證該數(shù)據(jù)塊將最終出現(xiàn)在批量計(jì)算數(shù)據(jù)庫(kù)中。
對(duì)Lambda架構(gòu)的批判集中于合并器的復(fù)雜度。合并器在多個(gè)方面存在弱點(diǎn):來(lái)自需要維持兩個(gè)(通常是非常不同的)數(shù)據(jù)庫(kù)的開(kāi)發(fā)者和系統(tǒng)的成本、查詢(xún)兩側(cè)的不同延遲以及隨后合并結(jié)果的復(fù)雜度。
雖然Lambda架構(gòu)好像自然地適合于我們的問(wèn)題,但是我們反對(duì)單獨(dú)的數(shù)據(jù)庫(kù)所帶來(lái)的成本和復(fù)雜度。替代的,我們使用HBase(BigTable類(lèi)型的非關(guān)聯(lián)性數(shù)據(jù)庫(kù))來(lái)實(shí)現(xiàn)單個(gè)數(shù)據(jù)庫(kù)系統(tǒng),該HBase將查詢(xún)函數(shù)簡(jiǎn)化為:
結(jié)果=合并器(查詢(xún)(數(shù)據(jù)))
通過(guò)利用單個(gè)數(shù)據(jù)庫(kù)支持該系統(tǒng),這解決了Lambda架構(gòu)的主要顧慮,顯著地簡(jiǎn)化了復(fù)雜度和代碼路徑。這是如何實(shí)現(xiàn)的呢?針對(duì)HBase中的單行數(shù)據(jù),我們具有實(shí)時(shí)列和批量列的概念。這兩種列的集合分別由實(shí)時(shí)子系統(tǒng)和批量子系統(tǒng)單獨(dú)管理。在查詢(xún)時(shí)間,我們執(zhí)行單獨(dú)的取值,并且合并器將從批量數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)組合最終的結(jié)果。
我們的具體實(shí)現(xiàn)方式是集中于使用HBase,作為多值存儲(chǔ)的關(guān)鍵。這通過(guò)Pig Latin中的批量計(jì)算來(lái)初始化,通過(guò)Storm實(shí)時(shí)更新,并且通過(guò)基于批量計(jì)算的回填過(guò)程來(lái)保證正確性。合并器可以是使用新型方案的Java過(guò)程,以最小化或甚至隱藏來(lái)自用戶(hù)的讀取延遲。
下文將公開(kāi)該系統(tǒng)的具體實(shí)現(xiàn)方式的細(xì)節(jié),仔細(xì)檢查關(guān)于延遲和可用性的結(jié)果并討論一些未來(lái)趨勢(shì)。
圖4示出了系統(tǒng)的概覽和(相比于圖3中經(jīng)典的實(shí)現(xiàn)方式)我們的增強(qiáng)型Lambda架構(gòu)。出于本討論的目的,便捷的概述是考慮在HBase中表示給定照片的當(dāng)前狀態(tài)的每一行。我們通過(guò)對(duì)每一行給出兩個(gè)列的集合(實(shí)時(shí)和批量)來(lái)實(shí)現(xiàn)我們的經(jīng)簡(jiǎn)化Lambda架構(gòu),這兩個(gè)列的集合由實(shí)時(shí)子系統(tǒng)(storm)和批量計(jì)算子系統(tǒng)(Pig Latin和Oozie)單獨(dú)地管理。合并器階段被抽象為在其自身硬件(Warmr)上運(yùn)行的單個(gè)Java過(guò)程,該Java過(guò)程計(jì)算HBase中的數(shù)據(jù),并將該數(shù)據(jù)發(fā)送至由站點(diǎn)的服務(wù)層使用的Redis緩存。
當(dāng)照片被上傳時(shí),我們的計(jì)算機(jī)視覺(jué)流水線處理該照片,從而生成一組自動(dòng)標(biāo)簽,該自動(dòng)標(biāo)簽是圖像內(nèi)容的文本描述。當(dāng)我們具有對(duì)上傳照片中的自動(dòng)標(biāo)簽執(zhí)行流計(jì)算的現(xiàn)有架構(gòu)時(shí),神奇視圖需要數(shù)據(jù)存儲(chǔ),該數(shù)據(jù)存儲(chǔ)計(jì)算它們的每個(gè)用戶(hù)的聚合。另外,將必須維持這些聚合。如果照片被添加、移除、或更新,則該聚合將需要被精確地更新來(lái)反應(yīng)這一點(diǎn)。我們還將需要利用系統(tǒng)中全部120億張照片的自動(dòng)標(biāo)簽對(duì)系統(tǒng)進(jìn)行初始化,并針對(duì)流計(jì)算丟失圖像的情況運(yùn)行定期回填。
神奇視圖中的HBase
在下文中,在系統(tǒng)中我們主要的表格的設(shè)置和生命周期,所有者-照片-自動(dòng)標(biāo)簽(owner_photo_autotags)被描述。在該表格中,我們具有每一行:行鍵,采用所有者標(biāo)識(shí)(owner_id)的md5總和以及對(duì)給定照片附加照片標(biāo)識(shí)(photo_id)和自動(dòng)標(biāo)簽,例如,md5(ownerId)_photoId_autotag;以及針對(duì)每個(gè)行鍵的列的集合,這些列可能被填充或者可能未被填充-實(shí)時(shí)-[得分、隱藏、刪除]以及批量-[得分、隱藏、刪除]。
典型的照片將具有一個(gè)或多個(gè)自動(dòng)標(biāo)簽。那么,照片的完整描述將是行的集合,該集合的行鍵(例如,在HBase中彼此相鄰)可以是md5(ownerId)_photoId_ski、md5(ownerId)_photoId_snow、md5(ownerId)_photoId_mountain。便利地,HBase提供掃描過(guò)濾器運(yùn)算符,該掃描過(guò)濾器運(yùn)算符允許我們使用簡(jiǎn)單的表達(dá)式(regex)(例如,md5(ownerId)_photoId_*),很容易地選擇針對(duì)給定照片的所有數(shù)據(jù)。遵循該邏輯,利用甚至更寬泛但是簡(jiǎn)單的表達(dá)式(例如,md5(ownerId)_*)使用掃描過(guò)濾器,可以實(shí)現(xiàn)對(duì)給定用戶(hù)選擇所有數(shù)據(jù)。
在HBase中讀取的一致性-Warmr
我們具有與HBase中的每一行相應(yīng)的列的兩個(gè)集合-批量屬性和實(shí)時(shí)屬性。針對(duì)這些集合中的每一個(gè)集合,我們維持若干個(gè)屬性。在一些實(shí)施例中,三個(gè)屬性可以作為列來(lái)表示:
得分-我們?cè)卺槍?duì)這一照片的自動(dòng)標(biāo)簽中具有的計(jì)算機(jī)視覺(jué)置信度。我們用該得分來(lái)進(jìn)行分類(lèi)。每當(dāng)計(jì)算機(jī)流水線被升級(jí)時(shí)該數(shù)值將被更新。
隱藏-用戶(hù)具有隱藏給定照片的自動(dòng)標(biāo)簽的選項(xiàng)。如果他們選擇了該選項(xiàng),則這會(huì)被設(shè)定為這里的一種標(biāo)志,并且該特定自動(dòng)標(biāo)簽的照片在神奇視圖中將不再示出。
刪除-如果照片已經(jīng)被刪除,則設(shè)置該標(biāo)志。這是很重要的,這使得如果用戶(hù)已經(jīng)刪除照片,則我們盡快地將該照片從在神奇視圖中移除。所以該標(biāo)志可以作為需要移除的信令。
在該實(shí)施例中,合并器(我們稱(chēng)之為Warmr)合并這六列中的所有數(shù)據(jù)。例如,為了確定每個(gè)屬性的最終值:在存在實(shí)時(shí)數(shù)據(jù)而不存在批量數(shù)據(jù)(或反之亦然)的情形下,則僅有一個(gè)值用來(lái)選擇;在二者均存在的情形下,我們始終選擇實(shí)時(shí)值。
在確定經(jīng)決定的值或最終值之后,系統(tǒng)可能未在長(zhǎng)期存儲(chǔ)中存儲(chǔ)該經(jīng)決定的值,但是可以將每個(gè)經(jīng)決定的值轉(zhuǎn)換到服務(wù)緩存上的“添加”或“刪除”。此外,該系統(tǒng)可以采用來(lái)自在掃描中返回的單元的最大時(shí)間戳,這樣在隨后的掃描中僅將返回新的數(shù)據(jù)。這維持了容易管理的持久狀態(tài),并且使?fàn)顟B(tài)機(jī)的復(fù)雜度最小化以維持批量系統(tǒng)和實(shí)時(shí)系統(tǒng)的簡(jiǎn)化。
在另一實(shí)施例中,系統(tǒng)在長(zhǎng)期存儲(chǔ)中(例如,在上述描述的表格中設(shè)置的附加列)存儲(chǔ)經(jīng)決定的值。
定期地運(yùn)行回填任務(wù)將定期掃過(guò)Hbase中行的集合(通常通過(guò)時(shí)間相關(guān)聯(lián))。由于該數(shù)據(jù)已經(jīng)“穩(wěn)定”,因此該任務(wù)將數(shù)據(jù)從實(shí)時(shí)列移動(dòng)到批量列,這使得讀取正確數(shù)據(jù)的挑選任務(wù)更為簡(jiǎn)單。
流計(jì)算-增量更新
針對(duì)神奇視圖,我們具有驅(qū)動(dòng)系統(tǒng)的三個(gè)流事件集合:
照片上傳,生成新的照片標(biāo)識(shí)(photoId)和與之相應(yīng)的自動(dòng)標(biāo)簽的集合。
自動(dòng)標(biāo)簽隱藏,對(duì)給定的自動(dòng)標(biāo)簽,這是將照片從神奇視圖聚合移除的信號(hào)。
照片刪除,這是將照片從所有神奇視圖聚合移除的信號(hào)。
照片替換,利用新的集合替換給定照片的自動(dòng)標(biāo)簽的一個(gè)集合。這些事件被饋送到Storm出口(spout)集合,其轉(zhuǎn)而將這些事件發(fā)送到我們的數(shù)據(jù)訪問(wèn)對(duì)象(Data Access Object)。
數(shù)據(jù)訪問(wèn)對(duì)象(Data Access Object,DAO)
數(shù)據(jù)訪問(wèn)對(duì)象是Java類(lèi),我們建立該Java類(lèi),用來(lái)交互和管理給定照片或自動(dòng)標(biāo)簽對(duì)象的實(shí)時(shí)列中的數(shù)據(jù)。數(shù)據(jù)訪問(wèn)對(duì)象將高等級(jí)事件(照片上傳、照片刪除和替換、和自動(dòng)標(biāo)簽隱藏)映射到HBase的獲取和放置操作的最小集合。在DAO中,我們還“擴(kuò)充(enrich)”自動(dòng)標(biāo)簽,作為給定圖像變化的自動(dòng)標(biāo)簽集合。這將支持神奇視圖中的分類(lèi)樹(shù),并且作為示例,它通常包括,在呈現(xiàn)出“滑雪”、“下雪”、和“山”的自動(dòng)標(biāo)簽時(shí),添加經(jīng)擴(kuò)充的“運(yùn)動(dòng)”標(biāo)簽。
在理想世界中,這些高等級(jí)操作將映射到原子事務(wù)。然而,實(shí)踐中,我們發(fā)現(xiàn)因?yàn)槲覀兛缍鄠€(gè)表格獲取和放置數(shù)據(jù),所以鎖定會(huì)導(dǎo)致極差的性能,并且實(shí)踐中,我們沒(méi)有看到針對(duì)事務(wù)的任何實(shí)際需求。
批量計(jì)算
系統(tǒng)初始化
我們考慮首先通過(guò)重演通過(guò)DAO的事件流的完整歷史,來(lái)對(duì)HBase中的表格進(jìn)行初始化。雖然這產(chǎn)生正確的結(jié)果,但是花費(fèi)了太長(zhǎng)的時(shí)間。為了加載10年值的數(shù)據(jù),我們計(jì)劃28天的加載時(shí)間。這主要?dú)w結(jié)于,如事務(wù)討論中所提到的,需要對(duì)每個(gè)事件的多個(gè)表格進(jìn)行寫(xiě)入和讀取。
替代地,我們嘗試預(yù)計(jì)算每個(gè)表格的數(shù)據(jù)并直接加載該數(shù)據(jù),該加載時(shí)間為7個(gè)小時(shí)。我們認(rèn)識(shí)到可以通過(guò)將批量數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)分離到不同的列來(lái)避免批量和實(shí)時(shí)的沖突,并且這導(dǎo)致本文的中心創(chuàng)新點(diǎn)。
回填
在網(wǎng)絡(luò)相冊(cè),我們具有在每天或每周的基礎(chǔ)上被轉(zhuǎn)儲(chǔ)到網(wǎng)格的SQL表格的若干靜態(tài)副本。我們參考作為網(wǎng)絡(luò)相冊(cè)ALL Raw或FLAR的元數(shù)據(jù)的集合。我們還建立用于將我們?cè)诰W(wǎng)絡(luò)相冊(cè)上的每個(gè)單獨(dú)圖像的小版本復(fù)制到網(wǎng)格并且將其存儲(chǔ)到順序文件中的系統(tǒng),即我們的照片像素?cái)?shù)據(jù)源。我們能夠在線下、詳盡的計(jì)算機(jī)視覺(jué)驅(qū)動(dòng)流水線中合并來(lái)自這些源(FLAR和照片像素)的數(shù)據(jù),從而完整地描述(直到給定的時(shí)間點(diǎn))留在神奇視圖中的所有數(shù)據(jù)和聚合。
合并器和清除器
通過(guò)選擇FLAR中的時(shí)間戳并與照片像素結(jié)合,我們可以選擇時(shí)刻計(jì)算還是持續(xù)較短時(shí)間段計(jì)算神奇視圖的數(shù)據(jù)。該時(shí)間段可以被用來(lái)生成回填任務(wù)較小數(shù)據(jù)集合;通過(guò)調(diào)整該時(shí)間段(例如,每天運(yùn)行),我們可以執(zhí)行快速運(yùn)行加載,對(duì)照片出現(xiàn)在神奇視圖中所需的時(shí)間設(shè)置合理的上限,以免實(shí)時(shí)處理丟失該照片。當(dāng)從HBase讀取單個(gè)行時(shí),我們需要合并來(lái)自實(shí)時(shí)列和批量列的數(shù)據(jù)。如果僅存在批量數(shù)據(jù)或?qū)崟r(shí)數(shù)據(jù),則選擇該數(shù)據(jù)是顯而易見(jiàn)的。如果同時(shí)存在批量數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù),則我們始終選擇實(shí)時(shí)數(shù)據(jù)。這看似合理,但是引起了細(xì)微的問(wèn)題。
假設(shè)照片計(jì)算機(jī)視覺(jué)標(biāo)簽經(jīng)由實(shí)時(shí)計(jì)算被添加,即,不存在批量數(shù)據(jù)。稍后,我們使用計(jì)算機(jī)視覺(jué)標(biāo)簽的新版本重新計(jì)算所有可用的照片,并且經(jīng)由批量加載來(lái)加載該數(shù)據(jù)(包括該照片)。即使在批量列中存在較新的數(shù)據(jù),我們也無(wú)法得到該數(shù)據(jù),因?yàn)楹喜⑵鲗⒅蛔x取實(shí)時(shí)列。在進(jìn)行批量加載后,我們通過(guò)對(duì)HBase中的所有數(shù)據(jù)運(yùn)行清除器過(guò)程來(lái)解決該問(wèn)題。
清除器僅訪問(wèn)每一行并查看針對(duì)實(shí)時(shí)數(shù)據(jù)的HBase時(shí)間戳是否比批量加載的時(shí)間更早。如果是,則我們刪除該行的實(shí)時(shí)數(shù)據(jù),因?yàn)樵摂?shù)據(jù)已經(jīng)在批量列中被獲取。以這種方式,批量計(jì)算的結(jié)果不會(huì)被“公布”直到清除器已運(yùn)行。
結(jié)果
生產(chǎn)吞吐量
在規(guī)模上,我們的架構(gòu)已經(jīng)能夠充裕地跟上生產(chǎn)負(fù)載。
為了通過(guò)批量計(jì)算初始化系統(tǒng),我們能夠經(jīng)由映射化簡(jiǎn),在25小時(shí)內(nèi)針對(duì)120億張照片(翻譯為230億個(gè)自動(dòng)標(biāo)簽行)的自動(dòng)標(biāo)簽信息運(yùn)行節(jié)流式加載(11個(gè)映射)。我們可以同時(shí)對(duì)HBase運(yùn)行回填,并在不影響緩存SLA內(nèi)的延遲的情況下同時(shí)服務(wù)用戶(hù)信息。
我們的驅(qū)動(dòng)神奇視圖的HBase實(shí)例被配置有跨23個(gè)區(qū)域服務(wù)器和1200區(qū)域的3個(gè)表格。在讀取側(cè),我們的DAO充裕地促進(jìn)每秒2150次HBase讀取(包括Storm讀取)和每秒400000次寫(xiě)入。我們的合并器(Warmr)驅(qū)動(dòng)大部分的寫(xiě)入;Warmr本身驅(qū)動(dòng)每秒1250次讀取,用于將用戶(hù)數(shù)據(jù)加載至服務(wù)緩存。
針對(duì)系統(tǒng)是如何工作的最重要的測(cè)量方式是用戶(hù)是怎樣認(rèn)知的。該系統(tǒng)最慢的部分是將來(lái)自HBase的數(shù)據(jù)尋呼(paging)至服務(wù)緩存;如圖7中所示,用戶(hù)認(rèn)知到“已完成”的中值時(shí)間是大約10ms。針對(duì)第99個(gè)百分位,該時(shí)間會(huì)突然達(dá)到半秒或甚至是一秒;這主要是由具有少見(jiàn)的超大集合的照片(數(shù)以萬(wàn)計(jì))的“超級(jí)(whale)”用戶(hù)造成的。
在本公開(kāi)中,我們提出了用于融合批量計(jì)算和實(shí)時(shí)計(jì)算的、新型簡(jiǎn)化的Lambda架構(gòu)。通過(guò)采用實(shí)時(shí)表格和批量表格并在Hbase中水平地將二者合并,我們能夠顯著地簡(jiǎn)化和鞏固查詢(xún)架構(gòu),減少移動(dòng)塊的數(shù)量并使故障點(diǎn)的數(shù)量最小化。此外,我們能夠在實(shí)踐中并且成規(guī)模地演示該系統(tǒng),其中我們能夠在產(chǎn)品預(yù)期內(nèi)很好地實(shí)現(xiàn)對(duì)數(shù)據(jù)的查詢(xún)。
上述描述的本教導(dǎo)可以根據(jù)各個(gè)實(shí)施例來(lái)實(shí)現(xiàn)。首先,雖然以上公開(kāi)描述了從屬于分辨率的三種類(lèi)型的示例性值,但是其他值(例如,描述圖像的對(duì)象或區(qū)域的特征值)也可以從屬于所公開(kāi)的發(fā)明方案。例如,在關(guān)聯(lián)的圖像中標(biāo)識(shí)的顏色二進(jìn)制對(duì)象(blob)可以具有實(shí)時(shí)值和批量值。類(lèi)似地,每個(gè)這樣的顏色二進(jìn)制對(duì)象的紋理特征也可以描述圖像并且具有實(shí)時(shí)值和批量值。這樣的實(shí)時(shí)特征值和批量特征值可以被存儲(chǔ)在與對(duì)應(yīng)的實(shí)時(shí)列和批量列的每一行中相同的配置中。取決于這些值的性質(zhì),用來(lái)合并的算法可以不同。
合并器可以基于根據(jù)不同的空中條件可被動(dòng)態(tài)選擇的方案來(lái)合并或調(diào)解與屬性相關(guān)聯(lián)的實(shí)時(shí)值和批量值。下文中,描述了用于基于實(shí)時(shí)數(shù)據(jù)和批量數(shù)據(jù)來(lái)確定屬性的最終值或經(jīng)決定值的一般方案。問(wèn)題本身可以被形式化為以下公式:
經(jīng)決定值=f(SR,SB);
其中,SR表示來(lái)自實(shí)時(shí)數(shù)據(jù)的值的集合;SB表示來(lái)自批量數(shù)據(jù)的值的集合;以及f()表示具有參數(shù)SR和SB的函數(shù)。通過(guò)該公式,屬性K的經(jīng)決定值可以基于屬性K的實(shí)時(shí)值或SRK以及屬性K的批量值或SBK來(lái)實(shí)現(xiàn)。計(jì)算屬性K的經(jīng)決定值的不同的實(shí)施例在下文被形式化。
在一個(gè)實(shí)施例中,系統(tǒng)可以使用以下方案來(lái)確定每個(gè)屬性的最終值或經(jīng)決定值:在存在實(shí)時(shí)數(shù)據(jù)的數(shù)據(jù)而不存在批量數(shù)據(jù)的數(shù)據(jù)(或反之亦然)的情況中,系統(tǒng)選擇一個(gè)可用的值作為經(jīng)決定值;在存在實(shí)時(shí)數(shù)據(jù)和批量數(shù)據(jù)二者的情況中,系統(tǒng)選擇實(shí)時(shí)數(shù)據(jù)作為經(jīng)決定值。該方案可以通過(guò)以下的一般公式來(lái)描述:
可以理解的是根據(jù)另一實(shí)施例,當(dāng)存在實(shí)時(shí)值和批量值二者時(shí),該系統(tǒng)可以選擇實(shí)時(shí)值或批量值作為經(jīng)決定值。在這種情況下對(duì)經(jīng)決定值的選擇可以被預(yù)定(例如,僅選擇實(shí)時(shí)值)或根據(jù)其他條件(例如,將要決定的屬性的具體類(lèi)型)。例如,針對(duì)與精確度相關(guān)聯(lián)的屬性,該系統(tǒng)在實(shí)時(shí)值和批量值二者都存在但數(shù)值上不一致時(shí)可以選擇勝過(guò)實(shí)時(shí)值的批量值。
在不同的實(shí)施例中,當(dāng)實(shí)時(shí)值和批量值二者是數(shù)值時(shí),該系統(tǒng)還可以基于使用實(shí)時(shí)值和批量值二者的計(jì)算來(lái)確定經(jīng)決定值。例如,實(shí)時(shí)值和批量值的加權(quán)和可以被用來(lái)計(jì)算經(jīng)決定值。該方法可以通過(guò)以下公式來(lái)描述:
屬性K的經(jīng)決定值=f(SRK,SBK)=aSRK+bSBK
可以理解的是,系數(shù)a和b的選擇可以基于應(yīng)用需求、特征的性質(zhì)或基于機(jī)器學(xué)習(xí)。
根據(jù)另一實(shí)施例,被用來(lái)確定屬性的經(jīng)決定值的值可以不是在其自身的實(shí)時(shí)版本和批量版本中的相應(yīng)值。例如,當(dāng)不存在SRK和SBK時(shí),該系統(tǒng)可以分配SRJ或SBJ作為經(jīng)決定值,其中SRJ是SRK的近似版本,SBJ是SBK的近似版本。例如,屬性K表示照片中某一區(qū)域的顏色,同時(shí)屬性J表示該照片相同區(qū)域的灰度等級(jí)。因此,SRJ/SBJ可以是SRK/SBK的粗略版本。
在其他實(shí)施例中,照片或其中區(qū)域的特征可以是分等級(jí)的。例如,照片中的二進(jìn)制對(duì)象可以具有多個(gè)特征,包括紋理、色調(diào)、顏色、亮度等。在該情況中,該二進(jìn)制對(duì)象(可以被表示為邊界)是等級(jí)比與二進(jìn)制對(duì)象相關(guān)聯(lián)的特征更高的特征。當(dāng)存在這種體制時(shí),在某個(gè)情況中,較高等級(jí)的特征值可以用于計(jì)算較低等級(jí)特征的經(jīng)決定值。形式上,這可以被描述為如下:
或
其中表示在特征等級(jí)中,特征J比特征K的等級(jí)高。以上公式提供了當(dāng)較高等級(jí)的特征值將要用于確定較低等級(jí)特征的經(jīng)決定值時(shí),關(guān)于是如何決定的不同可能性。可以理解的是,根據(jù)一些實(shí)施例,系統(tǒng)可以具有確定使用SRJ和SBJ還是將兩個(gè)值合并為經(jīng)決定值的函數(shù)的算法。
在另一實(shí)施例中,與多個(gè)特征相對(duì)應(yīng)的實(shí)時(shí)值和批量值可以被用來(lái)計(jì)算特定特征的經(jīng)決定值。例如,可以基于多個(gè)特征的實(shí)時(shí)值和批量值來(lái)計(jì)算特征A的經(jīng)決定值,該多個(gè)特征中可以包括特征A或者可以不包括特征A。
在一些實(shí)施例中,該系統(tǒng)還可以基于時(shí)間序列數(shù)據(jù)計(jì)算經(jīng)決定值。例如,該系統(tǒng)可以存儲(chǔ)之前在不同的時(shí)間實(shí)例處導(dǎo)出的值,例如,SRK(t-1)、SRK(t-2)、…SRK(t-M)。在時(shí)間t處,為了計(jì)算經(jīng)決定值,該系統(tǒng)可以選擇使用時(shí)間t處的SRK(如果它存在)或者依賴(lài)于時(shí)間序列SRK(t-1)、SRK(t-2)、…SRK(t-M)來(lái)導(dǎo)出經(jīng)決定值。在該情境中,該系統(tǒng)可以基于時(shí)間序列數(shù)據(jù)預(yù)測(cè)SRK(t)(或SBK(t)):
SBK(t)=g[SBK(t-1),…SBK(t-N)];
SRK(t)=h[SRK(t-1),…SRK(t-M)];
假設(shè)該系統(tǒng)存儲(chǔ)M個(gè)之前實(shí)例處的SRK以及N個(gè)之前實(shí)例處的SBK。這里的h和g表示基于時(shí)間序列數(shù)據(jù)預(yù)測(cè)當(dāng)前值的兩個(gè)函數(shù)。例如,預(yù)測(cè)函數(shù)可以是基于線性外插函數(shù)的。在以上的公式中,基于單個(gè)時(shí)間序列來(lái)執(zhí)行基于時(shí)間序列的預(yù)測(cè)。
在一些實(shí)施例中,當(dāng)預(yù)測(cè)經(jīng)決定值時(shí),可以基于時(shí)間上與實(shí)時(shí)值和批量值二者相對(duì)應(yīng)的時(shí)間序列數(shù)據(jù)來(lái)執(zhí)行預(yù)測(cè)。在該情況中,該系統(tǒng)可以基于在時(shí)間上相等的SRK(t)和SBK(t)二者來(lái)預(yù)測(cè)經(jīng)決定值,其中SRK(t)是基于實(shí)時(shí)值的時(shí)間序列來(lái)預(yù)測(cè)的,SBK(t)基于批量值的時(shí)間序列來(lái)預(yù)測(cè)的。SRK(t)和SBK(t)相等,這表示兩種預(yù)測(cè)是經(jīng)由外插法相交的。
合并實(shí)時(shí)數(shù)據(jù)和批量數(shù)據(jù)以導(dǎo)出經(jīng)決定值的其他實(shí)現(xiàn)方式也是可能的,并且都在本教導(dǎo)的范圍內(nèi)。
圖8描繪了可以用來(lái)實(shí)現(xiàn)實(shí)施本教導(dǎo)的專(zhuān)用系統(tǒng)的移動(dòng)設(shè)備架構(gòu)。在該示例中,在其上查詢(xún)被發(fā)送至系統(tǒng)的用戶(hù)設(shè)備是移動(dòng)設(shè)備800,包括但不限于智能手機(jī)、平板計(jì)算機(jī)、音樂(lè)播放器、手持游戲機(jī)、全球定位系統(tǒng)(GPS)接收器、和可穿戴計(jì)算設(shè)備(例如,眼鏡、手表等)或是采用任何其它形式的代理。該示例中的移動(dòng)設(shè)備800包括一個(gè)或多個(gè)中央處理單元(CPU)840、一個(gè)或多個(gè)圖形處理單元(GPU)830、顯示器820、存儲(chǔ)器860、通信平臺(tái)810(例如,無(wú)線通信模塊)、存儲(chǔ)裝置890以及一個(gè)或多個(gè)輸入/輸出(I/O)設(shè)備850。任意其他合適的組件(例如但不限于系統(tǒng)總線或控制器(未示出))也可以被包括在移動(dòng)設(shè)備800中。如圖8所示,可以將移動(dòng)操作系統(tǒng)870(例如,IOS、安卓(Android)、微軟視窗手機(jī)操作系統(tǒng)(Windows Phone))等,并且一個(gè)或多個(gè)應(yīng)用880可以從存儲(chǔ)裝置890加載到存儲(chǔ)器860中從而由CPU 840來(lái)運(yùn)行。應(yīng)用880可以包括瀏覽器或用于在移動(dòng)設(shè)備800上接收查詢(xún)結(jié)果的任意其他合適的移動(dòng)應(yīng)用。與查詢(xún)結(jié)果或其他內(nèi)容項(xiàng)的交互可以經(jīng)由I/O設(shè)備850實(shí)現(xiàn)并且被提供至系統(tǒng)。
為實(shí)現(xiàn)本公開(kāi)中描述的各種模塊、單元、和它們的功能,計(jì)算機(jī)硬件平臺(tái)可以被用作本文所描述的一個(gè)或多個(gè)元件的(一個(gè)或多個(gè))硬件平臺(tái)。這樣的計(jì)算機(jī)的硬件元件、操作系統(tǒng)和編程語(yǔ)言實(shí)際上是常規(guī)的,并且假設(shè)本領(lǐng)域技術(shù)人員對(duì)于其十分熟悉,以改編這些技術(shù)來(lái)實(shí)現(xiàn)如本文描述的合并數(shù)據(jù)。具有用戶(hù)接口元件的計(jì)算機(jī)可以被用來(lái)實(shí)現(xiàn)個(gè)人計(jì)算機(jī)(PC)或其他類(lèi)型的工作站或終端設(shè)備,但計(jì)算機(jī)如果被適當(dāng)程控則還可以作為服務(wù)器。相信本領(lǐng)域技術(shù)人員對(duì)于這樣的計(jì)算機(jī)設(shè)備的結(jié)構(gòu)、設(shè)計(jì)以及一般操作十分熟悉,因此附圖應(yīng)當(dāng)是不言自明的。
圖9描繪了可以用來(lái)實(shí)現(xiàn)實(shí)施本教導(dǎo)的專(zhuān)用系統(tǒng)的計(jì)算設(shè)備架構(gòu)。這種結(jié)合本教導(dǎo)的專(zhuān)用系統(tǒng)具有示出了包括用戶(hù)接口元件的硬件平臺(tái)的功能框圖。該計(jì)算機(jī)可以是通用計(jì)算機(jī)或?qū)S糜?jì)算機(jī)。二者都可被用來(lái)實(shí)施本教導(dǎo)的專(zhuān)用系統(tǒng)。該計(jì)算機(jī)900可以被用來(lái)實(shí)施本文所描述的合并數(shù)據(jù)技術(shù)的任何組件。例如,系統(tǒng)(如圖4和圖5中所示)可以經(jīng)由其硬件、軟件程序、固件或它們的組合在計(jì)算機(jī)(例如,計(jì)算機(jī)900)上實(shí)現(xiàn)。盡管出于方便只示出了一個(gè)這樣的計(jì)算機(jī),但與在此所描述的數(shù)據(jù)合并有關(guān)的計(jì)算機(jī)功能可以以分布式方式被實(shí)施在多個(gè)類(lèi)似的平臺(tái)上,以便分布處理負(fù)荷。
例如,計(jì)算機(jī)900包括COM端口950,這些COM端口950被連接至去往和來(lái)自與其連接以促進(jìn)數(shù)據(jù)通信的網(wǎng)絡(luò)。計(jì)算機(jī)900還包括以一個(gè)或多個(gè)處理器的形式的中央處理單元(CPU)920,以用來(lái)運(yùn)行程序指令。示例性計(jì)算機(jī)平臺(tái)包括內(nèi)部通信總線910、不同形式的程序存儲(chǔ)裝置和數(shù)據(jù)存儲(chǔ)裝置(例如,磁盤(pán)2970、只讀存儲(chǔ)器(ROM)930、或隨機(jī)存取存儲(chǔ)器(RAM)940),以用于各種數(shù)據(jù)文件由計(jì)算機(jī)處理和/或傳輸,以及可能地由CPU運(yùn)行的程序指令。計(jì)算機(jī)900還包括I/O部件960,支持計(jì)算機(jī)和其中的其他部件(例如,用戶(hù)接口元件980)之間的輸入/輸出流。計(jì)算機(jī)900還可以經(jīng)由網(wǎng)絡(luò)通信來(lái)接收程序和數(shù)據(jù)。
因此,如上面所概括的,數(shù)據(jù)合并的方法的各方面可以以編程的方式來(lái)實(shí)施。該技術(shù)的程序方面通??梢员豢醋魇强蓤?zhí)行代碼和/或相關(guān)聯(lián)的數(shù)據(jù)的形式的“產(chǎn)品”或“制品”,該可執(zhí)行代碼和/或相關(guān)聯(lián)的數(shù)據(jù)被承載于或?qū)嵤┯谝环N類(lèi)型的機(jī)器可讀介質(zhì)中。有形非暫態(tài)“存儲(chǔ)”類(lèi)型介質(zhì)包括可以在任意時(shí)間為軟件程序提供存儲(chǔ)的計(jì)算機(jī)、處理器等的任意或所有存儲(chǔ)器或其他存儲(chǔ)設(shè)備或與其相關(guān)聯(lián)的模塊例如,各種半導(dǎo)體存儲(chǔ)器、磁帶驅(qū)動(dòng)器、磁盤(pán)驅(qū)動(dòng)器等。
所有或部分軟件有時(shí)可以通過(guò)網(wǎng)絡(luò)(例如,互聯(lián)網(wǎng)或各種其他電信網(wǎng)絡(luò))進(jìn)行通信。舉例來(lái)說(shuō),這樣的通信可以實(shí)現(xiàn)將軟件從一個(gè)計(jì)算機(jī)或處理器加載到另一計(jì)算機(jī)或處理器中_,例如,從管理服務(wù)器或主機(jī)計(jì)算機(jī)加載到計(jì)算環(huán)境的(一個(gè)或多個(gè))硬件平臺(tái)或?qū)崿F(xiàn)計(jì)算環(huán)境或與數(shù)據(jù)合并有關(guān)的類(lèi)似功能的其他系統(tǒng)。因此,可以承載軟件元素的另一種類(lèi)型的介質(zhì)包括例如通過(guò)本地設(shè)備之間的物理接口、通過(guò)有線和光陸地網(wǎng)絡(luò)以及通過(guò)各種空中鏈路來(lái)使用的光波、電波、電磁波。運(yùn)載這樣的波的物理元件(例如,有線鏈路或無(wú)線鏈路、光鏈路等)也可以被看作是承載軟件的介質(zhì)。如本文所使用的,除非限制為有形的“存儲(chǔ)”介質(zhì),否則諸如計(jì)算機(jī)或機(jī)器“可讀介質(zhì)”之類(lèi)的術(shù)語(yǔ)指代參與向處理器提供指令以供運(yùn)行的任意介質(zhì)。
因此,機(jī)器可讀介質(zhì)可以采取許多形式,包括但不限于有形存儲(chǔ)介質(zhì)、載波介質(zhì)或物理傳輸介質(zhì)。舉例來(lái)說(shuō),非易失性存儲(chǔ)介質(zhì)包括可以被用來(lái)實(shí)現(xiàn)附圖中所示的系統(tǒng)或其任意部件的光盤(pán)或磁盤(pán)(例如,任意(一個(gè)或多個(gè))計(jì)算機(jī)中的任意存儲(chǔ)設(shè)備等)。易失性存儲(chǔ)介質(zhì)包括動(dòng)態(tài)存儲(chǔ)器(例如,這樣的計(jì)算機(jī)平臺(tái)的主存儲(chǔ)器)。有形傳輸介質(zhì)包括同軸電纜、銅線和光纖(包括形成計(jì)算機(jī)系統(tǒng)內(nèi)的總線的線)。載波傳輸介質(zhì)可以采取電信號(hào)或電磁信號(hào)、或者聲波或光波(例如,在射頻(RF)和紅外(IR)數(shù)據(jù)通信期間生成的那些)的形式。因此,計(jì)算機(jī)可讀介質(zhì)的常見(jiàn)形式包括例如:軟盤(pán)、柔性盤(pán)、硬盤(pán)、磁帶、任意其他磁介質(zhì)、CD-ROM、DVD或DVD-ROM、任意其他光介質(zhì)、穿孔卡片紙帶、具有孔圖案的任意其他物理存儲(chǔ)介質(zhì)、RAM、PROM和EPROM、FLASH-EPROM、任意其他存儲(chǔ)器芯片或卡盤(pán)、傳輸數(shù)據(jù)或指令的載波、傳輸這樣的載波的電纜或鏈路、或計(jì)算機(jī)可以從其讀取程序代碼和/或數(shù)據(jù)的任意其他介質(zhì)。這些形式的計(jì)算機(jī)可讀介質(zhì)中的許多介質(zhì)可以在將一個(gè)或多個(gè)指令的一個(gè)或多個(gè)序列運(yùn)載到處理器以供運(yùn)行時(shí)被涉及。
本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,本教導(dǎo)可服從于各種修改和/或改進(jìn)。例如,盡管上面所描述的各個(gè)組件的實(shí)現(xiàn)方式可以被實(shí)施于硬件設(shè)備中,但其也可以被實(shí)現(xiàn)為僅為軟件的方案(例如,現(xiàn)有服務(wù)器上的安裝程序)。此外,本文所公開(kāi)的主機(jī)和客戶(hù)端節(jié)點(diǎn)的單元可以被實(shí)現(xiàn)為固件、固件/軟件組合、固件/硬件組合或硬件/固件/軟件組合。
盡管前面已經(jīng)對(duì)被認(rèn)為構(gòu)成本教導(dǎo)和/或其他示例的部分進(jìn)行了描述,但應(yīng)當(dāng)理解可以對(duì)其做出各種修改,本文所公開(kāi)的主題可以以各種形式和示例來(lái)實(shí)現(xiàn),并且這些教導(dǎo)可以被應(yīng)用在大量的應(yīng)用中,而本文只公開(kāi)了其中的一些應(yīng)用。所附權(quán)利要求旨在保護(hù)落入本教導(dǎo)的真實(shí)范圍內(nèi)的任何和全部應(yīng)用、修改和變化。
本教導(dǎo)涉及用于數(shù)據(jù)處理的方法、系統(tǒng)、和程序。特別地,本教導(dǎo)針對(duì)用于調(diào)解或合并實(shí)時(shí)數(shù)據(jù)與批量數(shù)據(jù)的方法、系統(tǒng)、和程序。在一個(gè)示例中,公開(kāi)了在具有處理器、存儲(chǔ)裝置、和能夠連接到網(wǎng)絡(luò)的通信平臺(tái)的機(jī)器上實(shí)現(xiàn)的、用于合并數(shù)據(jù)的方法。第一屬性值被獲得。第一屬性值表示數(shù)據(jù)項(xiàng)的方面。與第一屬性有關(guān)的第二屬性值被獲得。第二屬性值表示數(shù)據(jù)項(xiàng)的方面。選擇將用來(lái)確定表示數(shù)據(jù)項(xiàng)的第三屬性值的方案。第三屬性值根據(jù)所選的方案以及第一和第二屬性值被確定。