Firestore:如果两个侦听器监听相同的查询 firebase 维护两个不同的查询快照?

Posted

技术标签:

【中文标题】Firestore:如果两个侦听器监听相同的查询 firebase 维护两个不同的查询快照?【英文标题】:Firestore: If two listeners listening the same query firebase maintains two different query snap shots? 【发布时间】:2019-07-16 06:57:34 【问题描述】:

我们正在建立一个工作门户。我们有一个applications 集合,当用户申请工作时,我们会在其中创建一个文档。

现在,从 android 应用客户端,我在两个不同的活动中收听同一个集合。我也开启了本地持久化。

现在,Firebase 是否了解它是由两个活动触发的同一个查询并为侦听器维护一个查询快照,还是创建两个快照?

【问题讨论】:

【参考方案1】:

现在,Firebase 是否能够理解来自两个活动的相同查询并为侦听器维护一个查询快照,还是创建两个快照?

既然您说您已启用本地持久性,这意味着 Firebase 将在用户设备上创建所请求文档的本地副本。因此,启用这种持久性后,在离线时,执行相同查询的活动数量并不重要,您将始终从缓存中获取数据。

正如@brianbhsu 在他的评论中指出的那样,在在线时,您将始终查询在线 Firestore 实例,以便始终获得最新数据。

正如 Frank van Puffelen 在他的回答中提到的,Firestore 不会自动在本地存储所有可用数据:

How does Firestore persistence really work?

@Mangesh 如果您使用两个不同的Query 对象从两个不同的活动中进行查询,那么这些查询将被视为两个不同的查询。

【讨论】:

谢谢。客户端如何决定在其本地持久性中存储哪些数据?是否基于我在活动中创建的侦听器? 您无法选择要存储的数据,要么全有,要么全无。不客气,干杯! 我现在对全有或全无的部分感到困惑。如果数据库中有 10 个集合和一百万个文档,那么客户端将拥有整个数据库吗?如果某些集合用于内部目的怎么办。阻止用户访问其他用户文档的安全规则在这里如何工作?官方文档说,“启用持久化后,Cloud Firestore 会缓存从后端接收到的每个文档,以供离线访问。” 您不能只存储数据库的一部分。如果您有 10 个集合,则所有 10 个都将存储在缓存中。您无法告诉 Firestore 将哪个集合存储或不在缓存中。如果您有数百万份文件,几乎不可能一次获得所有文件。而且文档是正确的。 @AlexMamo 感谢您更新您的答案!我撤回了反对票。

以上是关于Firestore:如果两个侦听器监听相同的查询 firebase 维护两个不同的查询快照?的主要内容,如果未能解决你的问题,请参考以下文章

React Hooks + Firebase Firestore onSnapshot - 正确使用带有反应钩子的 Firestore 监听器

子集合的 Firestore 监听器

我应该啥时候分离我的 Firestore 监听器? [复制]

Firestore 分页数据 + 快照监听器

当您的 Web 应用程序在后台时,Firestore 实时侦听器

Firestore 查询侦听器可以“侦听”云功能吗?