StreamingSystem (Google 流式團隊著)-c1.Streaming101-6

StreamingSystem (Google 流式團隊著)-c1.Streaming101-6

Time-agnostic

時間不敏感是指操作本身對於時間的相關性不大的,所有的處理都是基於數據驅動的。對於這樣的操作流式系統和批量系統都可以很好的處理,所以將花費比較少的時間在這個問題上。

Filtering (過濾)

過濾是一個很常見和基本的時間不敏感操作。例如圖1-5.過濾一些不能滿足條件的日誌(簡單解釋一下,其實就是通常的where或者filter的語句中內容)。所以過濾和數據是是無限的,無順序的,或者存在timeskew都無所謂的,因為一般來說他只是處理單條數據,無需要上下文。

StreamingSystem (Google 流式團隊著)-c1.Streaming101-6

Inner join(內連接)

另外一個時間不敏感的操作是內連接如圖,為了join兩個無限事件流,假如你只是關心兩個元素的關聯結果,那就是偶記上與時間無關,看到一個流中的數據後,簡單的來緩存到持久化存儲中,等待第二個流的數據到來(解釋一下,感覺這個說法有點牽強)

StreamingSystem (Google 流式團隊著)-c1.Streaming101-6

但是相對而言,外連接就就是時間敏感的操作。當你看到了一個流的數據,但是並不是很確定另外的數據是否到達,所以事實上,你需要一個超市機制,在這種情況下,就會變成時間敏感的。而且會轉化為一個窗口型的操作。後面會針對這個場景進行詳細的介紹。

估計算法(Approximation Algorithms)

第二個大類是估算算法,例如,TOP-N估計算法,流式的K-means等等。讀入無限的數據產出近似的數據,如圖1-7.近似算法專門針對無限流數據進行設計,來保證更低的開銷。但是存在的缺點,通常比較複雜,而且由於估算的原因,限制了應用場景。

StreamingSystem (Google 流式團隊著)-c1.Streaming101-6

值得注意的是,這些算法通常在設計中都有一些時間元素(如: 某些系統內時延)。並且因為算法會在數據到來時就處理,時間元素通常就是處理時間。這對算法能近似提供一些可證明的誤差邊界很重要。如果這些誤差邊界是根據數據按序到達來預測,那麼當你給算法輸入有不同事件時間偏差的無序數據時,這些算法將無法達到效果。這是需要注意的。

近似算法本身就是一個有意思的課題,但是他們作為時間不可知處理中的另一個示例(以算法本身的時間特徵為模),用起來非常直接因此我們目前不需要特別關注。


分享到:


相關文章: