我在GCP上,我有一个用例,我想接收来自远程机器的大量事件流。为了组成一个最后的事件-我需要摄入和";"组合";类型X的事件,以及类型Y和Z的事件。
事件类型X架构:SrcPortProcessID
事件类型Y架构:目的端口ProcessID
事件类型Z架构:进程IDProcessName
我目前正在使用云SQL(PostgreSQL(来存储我的大部分关系数据。我想知道我是否应该在这个用例中使用BigQuery,因为我预计会发生大量此类事件,而且我可能有对这些数据进行分析的未来计划。
我还想知道如何对这些事件进行建模。我关心的是";JOIN";在这些事件之间;JOIN";ed事件将是:SrcPort、SrcProcessID、SrcProcessorName、DstPort、DstProcessID、DstPProcessName
当";最终事件";已完成,我想将其发布到PubSub。
我可以创建一个去规范化的表,只在事件发生时进行部分更新(BigQuery在更新性能方面做得怎么样?(,然后在完成后发布到pubsub。
或者,我可以将这些作为原始事件存储在单独的";表";,然后JOIN定期完成事件,然后发布到pubsub。
我不确定PostgreSQL在存储和处理大量事件方面有多好。
BigQuery吸引我的地方是轻松处理大容量的舒适性。
如果您在Postgres上已经有了这个功能,我建议您应该将BigQuery视为一个补充系统,用于存储重复的数据以进行分析。
BigQuery为您提供了降低成本和提高查询性能的不同方法:
- 阅读有关分区和集群的内容,记住这一点;扫描";只有您感兴趣执行";事件完成">
- 您可以使用计划查询定期运行MERGE语句,以实现表的具体化(您可以根据需要随时进行计划(
- 您可以在某些情况下使用"物化视图">
BigQuery可以很好地处理批量导入和频繁插入(如http日志记录(。每隔几秒钟插入约100或约1000行的段的bigquery效果良好。
您创建最终视图的想法肯定会有所帮助。在BigQuery中存储数据比处理数据便宜,所以保留一组原始数据不会有什么坏处。
如何建模或构建事件取决于您。