首页 > 解决方案 > 如何使用云功能将 PubSub 数据存储到大查询?

问题描述

我再次请求您的帮助。

先说一下我现在的情况。

  1. 我有一个连接到“云物联网核心”并使用 mqtt 发送数据的设备。
  2. 然后数据会转到 Pub/Sub 主题。
  3. 然后触发“云功能”,将数据存储在“Firestore”中
  4. 另一个“云功能”被触发,它会向我发送一封电子邮件,其中包含 Firestore 中存储的数据。

数据大小约为 1 KB,我预计每月发送约 10K 条消息

我需要这些数据来创建我正在使用“Google Data Studio”的仪表板

为了将我的数据放入其中,我安装了 Firebase 扩展“Stream Collections to BigQuery”以将数据发送到“BigQuery”。从那里我只需单击几个按钮即可自动将数据从 BigQuery 流式传输到“Google Data Studio”

到目前为止一切正常,但如您所见,我将数据存储了 4 次。一次通过电子邮件,一次在 Firestore 中,一次在 BigQuery 和 Data Studio 中。从长远来看,所有这些都将花费大量资金,因为存储的数据每个月都会翻倍。

我需要你们提供一些关于最佳实践的建议。

当数据到达 Pub/Sub 时,有没有办法将数据直接存储在 BigQuery 中?如果是这样,我还可以发送包含数据作为附件的电子邮件吗?

BigQuery 是一个很好的解决方案还是我应该使用“Cloud SQL”?

要将数据保存在 Firestore 中,我可以在云函数中执行以下操作。BigQuery 有类似的方法吗?

    firestore.collection("put Collection name here").doc(put document name here).set({
        'name' : name
        'age' : age

    }).then((writeResult) => {
        //console.log('Successfully executed set'); 
        return;
    }).catch((err) => {
        console.log(err);
        return;
    });

标签: google-cloud-firestoregoogle-bigquerygoogle-cloud-functionsgoogle-cloud-sqlgoogle-data-studio

解决方案


当数据到达 Pub/Sub 时,有没有办法将数据直接存储在 BigQuery 中?

是的,您可以使用Dataflow构建流式传输管道,如不同文档项或博客中所述:

但您也可以在由 Pub/Sub 触发的 Cloud Function 中使用Node.js Client for BigQuery。但是,可以认为这不会“直接存储数据”......

如果是这样,我还可以发送包含数据作为附件的电子邮件吗?

如果您使用云函数,这很容易,例如使用专用的“触发电子邮件”Firebase 扩展

nodemailer您也可以使用该包直接从 Cloud Function 发送电子邮件,请参阅此官方 Cloud Function 示例

BigQuery 是一个很好的解决方案还是我应该使用“Cloud SQL”?

这完全取决于您的确切用例......网上有很多文献:https ://www.google.com/search?client=firefox-bd&q=difference+between+Cloud+SQL+and+BigQuery

但是,由于您将使用 Data Studio,因此经典答案是使用 BigQuery,因为它最适合分析。但同样,这取决于您的确切用例。

(请注意,仅此问题可能会在 SO 上关闭,因为它是基于意见的)。

要将数据保存在 Firestore 中,我可以在云函数中执行以下操作。BigQuery 有类似的方法吗?

是的,如上所述,在您的 Cloud Function 中使用Node.js Client for BigQuery 。


推荐阅读