firebase - Firestore 查询流和获取之间的区别?
问题描述
我打算使用 NodeJS api 从 Firestore 数据库中查询大量数据。使用流 api (https://cloud.google.com/nodejs/docs/reference/firestore/0.13.x/Query?#stream)而不是常规查询获取(https://cloud.google. com/nodejs/docs/reference/firestore/0.13.x/Query?#get )?
我的印象是流式传输在内存消耗方面更有效。
我的查询环境是 Firebase 函数。
解决方案
是的,使用stream
overget
会减少 Cloud Function 的内存消耗!我亲身体验过:当我将 get 替换为 stream 时,我的函数内存从 1GB 变为 200MB。
提供更多详细信息:使用 Node.js Admin SDK,以访问您的数据:
- 首先定义一个查询。您可以指定一个集合并添加 where、offset、limit、startAfter 来更准确地描述您需要的数据。如果不添加任何说明符,则查询整个集合。
- 然后通过以下 3 个函数之一获取相应的结果:
- get,它返回包含与您的查询匹配的所有文档的快照(如果您没有限制查询,则返回整个集合)。如果您不想爆炸内存,您绝对需要在查询中添加限制子句。
- onSnapshot,它创建一个侦听器,它将为您提供与您的查询匹配的文档。我注意到它会发送一大批初始的所有文档,然后在创建文档时发送它们。所以它可以爆炸你的记忆,你不知道什么时候停止听,所以我不在 Cloud Functions 中使用它(但我真的很喜欢它在客户端,另一个故事)
- stream,它为您提供了一个 Node.js 可读流。您可以使用此流,它逐个提供文档,因此对您的记忆很好。
推荐阅读
- .net - 使用 Microsoft.Azure.ActiveDirectory.GraphClient 更改用户密码
- javascript - 在多维数组上使用 javascript forEach 和拼接
- reactjs - 类型“{}”上不存在属性“背景”-React Router 模式
- asp.net-mvc - Dot Net Core 2 代码将 .plist 文件提供给 ios 设备以安装 iOS 应用程序
- apache-spark - 数据框加入pyspark抛出语法错误
- python - 加快python API请求
- typescript - Kibana 生成持续不断的错误流
- rest - Freeradius 3.0.20 重播 rlm_rest 响应
- node.js - 在我的 react-native 前端使用 Node.js API
- python-3.x - 对于 OpenCV 人脸检测和识别,人脸是否略微失真是否重要?