對資料串流的一些粗淺看法

最近三個月,我學習了資料串流的知識。我認為,資料串流並不是一個讓你知道名詞之後,就直覺地了解那是什麼的東西。目前現有的資料串流方案很多,例如有 Apache Kafka ,但我沒有一下子就摸得上手,不是不懂得怎麼操作的問題,而是在於雖知道操作方法卻不知道如何以這個軟體元件為本,來做出有用的東西。所以,我先花許多時間閱讀概念性的、談資料串流的書籍。

首先,資料串流主要是一串資料依序出現時,它是一種呈現,並且擁有一些特質。你可以從一個簡單的程式找到資料串流的影子:例如,一個 C 語言寫的程式,從 1 加總到 100 。在迴圈裡頭,你有一個 int i 變數會出現 1, 2, ..., 100 等觀察值,並且有一個 int sum 來蒐集這些觀察值的總和,而這是從迴圈的觀點來看的。換一個觀點,從 int i 的觀點來看,在這個變數裡頭,可以在一段時間之內,出現介於 1 和 100 之間的數字,因此,所有 int i 是統計學所提的隨機變數,所有 int i 的觀察值總共是一個資料串流。

以上述的例子,資料串流上頭,我們可以考慮一些特質:

  1. 當觀察值一筆一筆出現時,每一筆數值只能處理一次,而且需要使用累進式的演算法,處理各種統計值,包括平均數、變異數、標準差、二個資料串流之間的相關係數等等。
  2. 雖然觀察值是一次出現一筆,並且一段時間之內,透過同一個隨機變數,輪番出現各種不同的觀察值,不過,如果運用 window 技術以一串陣列變數保留最近若干個觀察值,可以做更多豐富的運算。
  3. 考慮到有關於資料到達率,與隨機變數的資料分布,會發現資料串流的後續處理程式,需要根據統計學的知識處理事情。
  4. 承上,統計程式的演算法不再只求精確值,而是可以求近似解(,或者可能是我誤會:也許統計本來都是走近似解路線),於是演算法的合格水準擴展為 estimate algorithm 。這是因為資料串流的處理意涵,傾向於等到累積處理過的資料數目越多時,所求得的近似解越接近實際解,而不求初期立刻準確。若要寫從頭到尾每一步都算得準確的程式是很難的,會消耗很多心力,而且每遇到一丁點錯誤,就要花更多心力檢查程式及改寫程式。而近似評估法,相對於前者,是比較容易做到的事情。

於是,雖然讀得相當少,至少對資料串流有些概念了。我回想之前接觸 Apache Kafka 的極少的經驗,覺得:以它擔任資料串流管理系統的立場,在一個 topic 上定義的資料串流就是一個 sliding window (預設值好像是每一筆觀察值二天之後過期,所以是一個長度為二天的 sliding window ),消耗相當的記憶體空間數量,來提供這一批觀察值可以被許多個 consumer 取用。

以上是我對於資料串流的一點點理解。

廣告

About 黃耀賢 (Yau-Hsien Huang)

熱愛 Erlang ,並且有相關工作經驗。喜歡程式語言。喜歡邏輯。目前用 Python 工作。
本篇發表於 Uncategorized 並標籤為 。將永久鏈結加入書籤。