【问题标题】:Difference between Firestore Query stream & get?Firestore 查询流和获取之间的区别?
【发布时间】:2018-10-14 22:32:01
【问题描述】:

我打算使用 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 函数。

【问题讨论】:

    标签: firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    是的,使用 stream 而不是 get 将减少 Cloud Function 的内存消耗!我亲身体验过:当我将 get 替换为 stream 时,我的函数内存从 1GB 变为 200MB。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-27
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 2019-06-08
      • 1970-01-01
      相关资源
      最近更新 更多