Select查询是否使用Firestore上的所有文档大小?

时间:2019-06-24 11:13:44

标签: javascript firebase google-cloud-firestore

我在Cloud Firestore上有大量文档,每个文档也很大。我需要将它们全部下载到前端应用程序,以便仅从每个位置读取一个属性。

检索所有文档将占用大量带宽,并且互联网连接速度较慢的计算机将需要10到30秒的下载时间。我需要更快地完成此操作,因此我考虑使用SELECT查询来仅获取location属性,但是我的问题是:整个文档信息是否仍下载到前端,然后切掉不需要的属性,还是只从后端获取位置信息?

如果是后者,则获取所有文档所需的时间会更少,因为每个文档的大小都将小得多(因为仅检索位置)。谁能确认它是如何工作的?

如果有人对如何实现这一点有其他想法,那将是很好的。

谢谢

Carlino

1 个答案:

答案 0 :(得分:1)

  

是整个文档信息仍然下载到前端,然后分割掉不需要的属性,还是仅从后端获取该位置?

是的,它已下载了整个文档,但未进行任何切片。 Cloud Firestore侦听器在文档级别上触发。无法仅通过文档中的特定字段来触发或拆分文档以仅获取一个属性。这是整个文档,或者什么也没有。因此,Firestore客户端SDK总是返回完整的文档。不幸的是,尽管服务器端SDK的select()方法中确实存在此选项,但无法通过客户端SDK仅请求文档的一部分。

  

如果是后者,则获取所有文档所需的时间会更少,因为每个文档的大小都将小得多(因为仅检索位置)。谁能确认它是如何工作的?

并非如此,因为您不能仅获得文档的单个属性。

  

如果有人对如何实现这一点有其他想法,那将是很好的。

在这种情况下,常用的方法是denormalize the data。这意味着您应该创建一个新集合,在其中应存储相同的文档,但是这些文档将仅包含一个属性。在这种情况下,文档的大小将很小。