Firestore查询流与&之间的区别得到?

时间:2018-05-04 12:22:49

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

我计划使用NodeJS api从Firestore数据库查询大量数据。使用stream 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功能。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:-1)

区别在于您获取数据的频率:

  1. 调用get会尽快获取一次数据。
  2. 尽快调用stream一次获取数据,并在数据更新时为您提供数据。
  3. 如果您在用户界面中显示数据,并且希望在数据库中发生更改时自动更新数据,则后者非常方便。

    为了更好地解释这一点,我建议在getting datalistening for realtime updates上使用Firebase文档。