【发布时间】:2019-11-19 11:27:47
【问题描述】:
我有以下软件组件:
- Amazon Kinesis 事件流
- 示例事件表:
product-purchase-events
- 示例事件表:
- BigQuery 数据库接收+存储事件
- 查询示例:
SELECT count(*) as count, DATE(timestamp) as day FROM product-purchase-events GROUP BY day
- 查询示例:
- 公开 API 的微服务会运行一组预定义的 BigQuery 查询
- 示例端点:
GET /product-purchase-event/?step=DAY
- 示例端点:
- 公共网络应用使用查询 API 来展示漂亮的图表
事实:BigQuery 每次查询的费用和固定费用非常昂贵。
问题:如果有人向GET /product-purchase-event 端点发送垃圾邮件,每次调用都会执行一个新查询,这意味着在 100 万次垃圾邮件查询后我会收到一份非常好的账单。
我的问题:您能保护 BigQuery 的垃圾邮件吗?我知道有 24 小时缓存,但我希望数据尽可能实时。
我还知道还有其他解决方案,例如 Amazon Redshift,它按小时而不是按查询计费,但我想知道是否可以使用 BigQuery 解决这个垃圾邮件问题。似乎大多数人只在内部使用它,这意味着没有外部人员可以执行查询,所以垃圾邮件不是问题。
【问题讨论】:
-
赞成@shollyman 的回答。如果不考虑延迟,则可以选择定期将数据聚合到一个小得多的表中并将 Web 前端连接到汇总表。 BigQuery 缓存在这种情况下有效。但如果你真的收到 100 万个垃圾邮件请求,我相信你仍然会超出 BigQuery 查询配额。 shollyman 提出了一些缓存结果的方法,你应该考虑一下。
标签: sql google-bigquery amazon-kinesis