postgresql - BigQuery 是否适合频繁更新部分数据?
问题描述
我在 GCP 上,我有一个用例,我想从远程机器接收大量事件流。要组成最终事件 - 我需要摄取并“组合”X 类型的事件以及 Y 和 Z 类型的事件。
事件类型 X 架构:SrcPort ProcessID
事件类型 Y 架构:DstPort ProcessID
事件类型 Z 架构:ProcessID ProcessName
我目前正在使用 Cloud SQL (PostgreSQL) 来存储我的大部分关系数据。我想知道是否应该在这个用例中使用 BigQuery,因为我预计会有大量此类事件,而且我可能有未来计划对这些数据进行分析。
我也想知道如何为这些事件建模。我关心的是这些事件之间的“JOIN”,所以“JOIN”ed事件将是:SrcPort、SrcProcessID、SrcProcessName、DstPort、DstProcessID、DstProcessName
当“最终事件”完成后,我想将其发布到 PubSub。
我可以创建一个去规范化的表,只根据事件进行部分更新(BigQuery 在更新性能方面的表现如何?),然后在完成后发布到 pubsub。
或者,我可以将这些作为原始事件存储在单独的“表”中,然后定期 JOIN 完成事件,然后发布到 pubsub。
我不确定 PostgreSQL 在存储和处理大量事件方面有多好。
BigQuery 吸引我的地方是轻松处理大量数据的舒适性。
解决方案
如果您已经在 Postgres 上拥有此功能,我建议您应该将 BigQuery 视为一个补充系统,用于存储数据副本或用于分析目的。
BigQuery 为您提供不同的方法来降低成本和提高查询性能:
- 阅读有关按小时分区和集群的信息,记住这一点,您只“扫描”您感兴趣的分区以执行“事件完成”。
- 您可以使用计划查询定期运行 MERGE 语句以生成物化表(您可以根据需要多次计划)
- 您可以在某些情况下使用物化视图
推荐阅读
- javascript - Rails 的社交分享按钮 gem 的问题
- sql - 协助 SQL Server 2016 中的 JSON 函数
- php - 使用 Haraka 邮件服务器配置 PHP
- react-final-form - 反应最终形式,解析浮点输入?
- laravel - laravel 中的 3 列引用同一个表
- c# - C# TCP 套接字在失去连接后重新绑定和监听
- c# - ASP.Net WebApi netcore 2.2 访问本地文件
- kubernetes - 升级到最新 K8 版本后,工作节点显示为 NotReady
- javascript - 纯Javascript | 将类添加到
- 元素
- firebase - 如何以编程方式从 Firebase 中获取应用程序的崩溃率?