2016-08-25 51 views
1

我有一個數據流管道,用於收集導航,購買,crud動作等用戶數據。我有這個要求能夠實時識別模式,然後發送其他服務可以偵聽的pubsub事件爲用戶提供實時提示,優惠或促銷活動。將數據轉換爲pubsub事件

我正在考慮按用戶ID開始分組事件,然後如果匹配一個模式來創建一個包含需要通過pubsub觸發的事件名稱的PCollection。

這是正確的做法嗎?有沒有更好的辦法?

回答

2

這個當然可以在某些使用情況下工作

如果您使用session based windowingearly firings(每個元素到達時觸發)。每當新元素到達時,您都可以擁有識別模式所需的全部數據。

然而,取決於被推用戶數據的速率和會話的大小,這可能會導致保持在PCollection大量的數據,並重復這種模式匹配很多(在相同的數據),因爲你必須重用會話中的所有數據。此外,您不能使用在此會話之前到達的元素

有時,您可能會更好爲每個用戶保留一個狀態(無需重新爲此會話在用戶的所有數據上進行模式匹配)。使用狀態實際上將消除使用窗口工作的需要。 新工藝現在看起來是這樣的:

對於到達的每個元素:

  1. 取當前狀態

  2. 計算新的狀態(基於舊狀態和新元素)

  3. 如果需要,將消息發送到PubSub。

爲了保持你的狀態,你可以使用BigTable的數據存儲

+0

是的,會話窗口將保存大量的數據並且一遍又一遍地運行相同的模式可能會非常昂貴...對於從BigTable或Datastore獲得狀態,我擔心速度,但我認爲它值得檢查。 – chchrist

+0

Bigtable可以縮放。當操作全部在相同的雲區內完成時,單位數毫秒的響應時間是常態。還有批量操作來提高吞吐量。我們可以在您的閒暇時間討論這一切。 –

+0

還沒玩過Bigtable呢。我會放棄它。我想和你討論一下。 – chchrist