google-cloud-firestore - 如何使用云功能将 PubSub 数据存储到大查询?
问题描述
我再次请求您的帮助。
先说一下我现在的情况。
- 我有一个连接到“云物联网核心”并使用 mqtt 发送数据的设备。
- 然后数据会转到 Pub/Sub 主题。
- 然后触发“云功能”,将数据存储在“Firestore”中
- 另一个“云功能”被触发,它会向我发送一封电子邮件,其中包含 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;
});
解决方案
当数据到达 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 。
推荐阅读
- postgresql - 为什么空字符串值在 UPDATE 上不起作用?
- r - 为 R 中的 5-李克特量表生成所有可能总体的算法(每个级别的累积频率为 0.1)
- botframework - 网站部署期间发生错误 - Bot 框架
- javascript - 剑道事件不会持续触发
- python - 如何将 Django 数据库连接到 Sql 服务器?
- node.js - node js webpack未定义的环境变量
- c# - 如何使用 .cs.t4 文件生成代码
- java - 构造时的 java.time.temporal.ValueRange 错误
- python - 像素点变换的性能
- java - 无法在 recylerview(cardview) 上设置 onclick