Firestore 查询流和获取之间的区别?

ova*_*ris 9 firebase google-cloud-functions google-cloud-firestore

我打算使用 NodeJS api 从 Firestore 数据库查询大量数据。使用流 api ( https://cloud.google.com/nodejs/docs/reference/firestore/0.13.x/Query?#stream ) 而不是 reqular query get ( https://cloud.google. com/nodejs/docs/reference/firestore/0.13.x/Query?#get )?

我的印象是流媒体在内存消耗方面更高效。

我的查询环境是 Firebase 函数。

Lou*_*let 9

是的,使用streamoverget会减少你的云函数的内存消耗!我亲身经历过:当我用流替换 get 时,我的函数的内存从 1GB 变成了 200MB。

提供更多详细信息:使用 Node.js Admin SDK,为了访问您的数据:

  • 首先定义一个查询:指定一个集合并添加where, offset, limit,startAfter来更精确地描述您需要的数据。如果不添加任何说明符,您将查询整个集合。
  • 然后,您可以通过以下 3 个函数之一获取相应的结果:
    • get,它返回一个快照,其中包含与您的查询匹配的所有文档(如果您不限制查询,则返回整个集合)。如果您不想消耗内存,则绝对需要在查询中添加限制子句。
    • Stream,它为您提供 Node.js 可读流。您可以使用这个流,它一一提供文档,因此对您的记忆有好处。
    • onSnapshot,它创建一个侦听器,该侦听器将为您提供与您的查询匹配的文档。我注意到它发送了所有文档的初始大批量,然后在创建文档时发送它们。所以它会爆炸你的记忆,你不知道什么时候停止听,所以我不在Cloud Functions中使用它(但我真的很喜欢它在客户端,另一个故事)