【问题标题】:Sending data from website to BigQuery using Pub/Sub and Cloud Functions使用 Pub/Sub 和 Cloud Functions 将数据从网站发送到 BigQuery
【发布时间】:2019-12-10 16:04:07
【问题描述】:

这就是我想要完成的事情

  1. 访问者登陆我的网站
  2. Javascript 收集一些信息并发送命中
  3. 处理命中并将其插入 BigQuery

这就是我计划的解决方法

  1. 命中发送到 Cloud Functions HTTP 触发器(使用 Ajax)
  2. Cloud Functions 向 Pub/Sub 发送消息
  3. Pub/Sub 使用 Pub/Sub 触发器将数据发送到另一个 Cloud Function
  4. 第二个 Cloud Function 将命中处理到 Biguery 行并将其插入 BigQuery

有没有更简单的方法来解决这个问题?

需要考虑的其他一些细节

  • 每天大约有 100 万次点击
  • 不想使用 Cloud Dataflow,因为它会增加成本
  • 不能(可能)跳过 Pub/Sub,因为当有人离开网站时会发送一些点击,并且请求可能没有足够的时间来处理所有内容。

【问题讨论】:

  • 我真的认为您不需要 pub/sub 中间步骤。插入 pub/sub 的时间与将其写入 BQ 的时间大致相同。
  • @jimmartens 我想找出答案的唯一方法是设置并运行一些测试。刚刚使用类似的设置找到了本指南,尽管medium.com/@ridwanfajar/…
  • 您有什么要求?你想优化什么?速度(命中和写入 BQ 之间的持续时间)是否值得关注?是不是成本太高了?是否需要可扩展性(您的目标是在 12 个月内达到 1000 万次点击)?今天,您的架构是最具可扩展性、稳健性和弹性的!
  • BQ 中的数据最多应在几分钟内可用。即使点击将用户带到新页面的链接,点击也需要进入数据库。使用 Dataflow 的成本会太高。每天有 100 万次点击,所以每年有 3.65 亿次点击。

标签: google-bigquery google-cloud-functions google-cloud-dataflow google-cloud-pubsub


【解决方案1】:

您可以执行 Big Query 流式传输,这个更便宜并且您避免达到加载作业配额1000 per table per day

另一种选择是,如果您不介意加载数据需要花费大量时间,您可以将所有信息存储在 Cloud Storage 存储桶中,然后使用 transfer 加载所有数据。您可以对其进行编程,以便每天上传数据。该解决方案专注于批处理环境,您将在其中将所有信息存储在一侧,然后将其传输到最终目的地。如果您只想流式传输您提到的解决方案是可以的。

您可以选择更适合您的特定用途的选项。

【讨论】:

  • 需要几乎实时,因此流媒体当然是唯一的选择。但问题是我很可能需要实现某种中间层或缓冲区,因为在同一个 HTTP 请求中进行流式传输可能需要很长时间才能完成。
猜你喜欢
  • 2021-12-04
  • 2020-02-26
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 2022-01-01
  • 2020-06-22
相关资源
最近更新 更多