Google cloud platform 使用GCP BigQuery进行事件寻源
我们正在构建一个存储客户购买历史记录的系统。主要是三个实体Google cloud platform 使用GCP BigQuery进行事件寻源,google-cloud-platform,google-bigquery,cqrs,event-sourcing,Google Cloud Platform,Google Bigquery,Cqrs,Event Sourcing,我们正在构建一个存储客户购买历史记录的系统。主要是三个实体 订单(订单状态不断变化时的可变数据) 返回值(由于返回值可能会发生状态更改,因此返回值也是可变的) 发票(不可变) 对于“订单”和“退货”,我们将从另一个GCP项目订阅pubsub事件。最后,我们需要所有事件的事件日志,以及“订单”和“退货”的当前状态。在我看来,BigQuery在存储事件方面会做得很好,因为它主要是一个只附加的数据库,可以帮助跟踪事件的时间。但是,BigQuery的一些用户只对最终状态感兴趣 Eg: Events
- 订单(订单状态不断变化时的可变数据)
- 返回值(由于返回值可能会发生状态更改,因此返回值也是可变的)
- 发票(不可变)
Eg:
Events | State
----------------
Order1 | created
Order1 | in_Progress
Order2 | created
Order1 | out_for_Delivery
So the current state would be
Events | State
----------------
Order1 | out_for_Delivery
Order2 | created
我可以看到如下一些选项
选项1:
将所有事件存储在BigQuery中。要创建最终状态,请在表顶部创建BQ视图,按时间戳排序并选择最新版本
选项2:
我读过一些关于投影查询(使用CQR)的文章,这些查询有助于在任何时间点构建应用程序状态。但我不确定这实际上是如何做到的
请在这里告诉我哪个选项更好,以及关于选项2的更多详细信息,选项2是构建“事件资源+CQR”类系统的标准实践
问候,,
Prasad。如果需要筛选表并仅显示事件的最后状态,使用视图是最简单和最好的选择。如果事件表中有时间戳列,则可以使用如下查询创建视图,例如:
SELECT
event,
state,
timestamp_column
FROM (
SELECT
event,
state,
timestamp_column,
ROW_NUMBER() OVER(PARTITION BY event ORDER BY timestamp_column DESC) AS rn
FROM
`your-event-table`
)
WHERE rn =1
此查询的基本功能是:
谢谢你,史蒂文斯。这绝对是选项1的答案。你知道如何使用CQRS来实现这一点吗?@Prasad Sawant我认为在BigQuery中这是不可能的。你能分享一下你在哪里找到的参考资料吗?不,我实际上没有找到BigQuery做事件来源的参考资料。但我想知道这是否可行。或者说事件源需要特殊的产品吗?BigQuery不像一个经典的事务数据库系统,所以有些体系结构根本不适合使用。基本上,您的第一种方法可以轻松解决您的问题。若您明确地需要使用CQR,那个么您的问题可能无法在BigQueryDo中解决,您仍然有一些问题吗?