将数据转换为发布订阅事件
Transform data to pubsub events
我有一个数据流管道收集用户数据,如导航、购买、crud 操作等。我有这个要求能够实时识别模式,然后调度其他服务可以侦听的 pubsub 事件以提供用户实时提示、优惠或促销。
我正在考虑开始按用户 ID 对事件进行分组,然后如果匹配的模式创建一个 PCollection,其中包含需要通过 pubsub 触发的事件名称。
这是正确的方法吗?有没有更好的方法?
对于某些用例,肯定可以。
如果您使用 session based windowing in combination with early firings(每个元素到达时触发)。每次新元素到达时,您都可以获得识别模式所需的所有数据。
但是,根据推送用户数据的速率和会话的大小,这可能会导致在 PCollection 中保存大量数据并重复此模式匹配很多(在相同的数据上),因为您必须重用会话中的所有数据。此外,您不能使用在此会话 .
之前到达的 元素
有时,为每个用户保留一个状态(无需为该会话的所有用户数据重做模式匹配)可能会更好。使用状态实际上将消除使用窗口的需要。
新流程现在看起来像这样:
对于到达的每个元素:
获取当前状态
计算新状态(基于旧状态和新元素)
如果需要,向 PubSub 发送消息。
要保持状态,您可以使用 BigTable 或 Datastore.
我有一个数据流管道收集用户数据,如导航、购买、crud 操作等。我有这个要求能够实时识别模式,然后调度其他服务可以侦听的 pubsub 事件以提供用户实时提示、优惠或促销。
我正在考虑开始按用户 ID 对事件进行分组,然后如果匹配的模式创建一个 PCollection,其中包含需要通过 pubsub 触发的事件名称。
这是正确的方法吗?有没有更好的方法?
对于某些用例,肯定可以。
如果您使用 session based windowing in combination with early firings(每个元素到达时触发)。每次新元素到达时,您都可以获得识别模式所需的所有数据。
但是,根据推送用户数据的速率和会话的大小,这可能会导致在 PCollection 中保存大量数据并重复此模式匹配很多(在相同的数据上),因为您必须重用会话中的所有数据。此外,您不能使用在此会话 .
之前到达的 元素有时,为每个用户保留一个状态(无需为该会话的所有用户数据重做模式匹配)可能会更好。使用状态实际上将消除使用窗口的需要。 新流程现在看起来像这样:
对于到达的每个元素:
获取当前状态
计算新状态(基于旧状态和新元素)
如果需要,向 PubSub 发送消息。
要保持状态,您可以使用 BigTable 或 Datastore.