Firestore同步到底能做什么?

时间:2019-06-20 08:43:19

标签: firebase google-cloud-firestore

https://firebase.google.com/docs/firestore说:

  

与实时数据库一样,Cloud Firestore使用数据同步来更新任何已连接设备上的数据。

我试图弄清楚这种“数据同步”由什么组成。

https://firebase.google.com/docs/firestore/manage-data/enable-offline说:

  

启用持久性后,Cloud Firestore会缓存从后端收到的每个文档以供脱机访问。

只要后端发生更改,Cloud Firestore是否会更新该缓存? 例如,如果我的缓存中有某个文档,该文档是否 在后端更改该文档时自动更新(a)或 (b)每当我进行使用该文档的查询时,我碰巧都在线 当时?

更新

我要重申我的最后一段,因为它被误解了 至少一个人。

想象一下以下情况:

  • 我有一部智能手机。为了使事情变得简单,假设使用智能手机 一直在线。
  • 此智能手机上安装了一个包含Firestore SDK的移动应用。
  • 该应用已启用Firestore缓存。
  • 该缓存包含1000个文档。

现在我的问题是:这些文件之一是否在云中更改(不是在 智能手机),Firestore SDK在什么情况下会更新 文件在缓存中?它会(a)尽快自动更新文件吗 在云端更改之后,或(b)下次更新文档时, 移动应用程序会查询使用该文档的信息吗?

2 个答案:

答案 0 :(得分:0)

我认为突出显示的两个段落都是简单明了的解释,并回答您的问题:

  

只要后端发生更改,Firestore是否会更新该缓存?

是的,如果您处于脱机状态并且某些文档已更改,则重新联机后,您将获得所有已更改的文档,反之亦然;如果您在本地(在缓存中)更改某些文档,则当您重新联机时,所有更改后的文档将发送到Firebase服务器。

如果您有一个查询返回10个文档,则意味着您与10个文档保持同步,这基本上意味着如果这10个文档中的文档被更改,则仅针对该更改触发您的侦听器。

  

在后端更改文档时自动进行文档更新(a)

是的,首先,在您的缓存中,当您重新联机后,也在Firebase服务器上。

  

每当我使用该文档进行查询时,我碰巧当时处于在线状态吗?

无论何时在线和文档更改,都会实时收到通知。

编辑:

  

如果这些文档之一在云中(而不是在智能手机上)更改,那么Firestore SDK在什么情况下会更新缓存中的文档?是(a)在云上进行更改后不久自动更新文档,还是(b)下次移动应用程序使用文档进行查询时更新文档?

只要您与这些文档保持同步,它就会在文档更改的第二时刻发生。同步的意思是,您在代码中使用get()调用来获取这些文档,或者您正在实时侦听文档更改。只需创建对文档或查询的引用,而无需使用侦听器,则不会以任何方式通知您。

  

下次移动应用程序使用文档进行查询时更新文档吗?

由于您在线且与文档同步,因此不正确,会立即触发侦听器。

编辑2:

简而言之,每当文档发生更改时,就会调用一个侦听器。 “下一次应用程序执行查询”是不正确的句子,因为在创建查询并附加侦听器时,您始终与数据库同步,并且在文档更改时会立即收到通知。 不是,文档在数据库中链接在一起,当我查询(在某个时间点)时,我得到了更改,不,在更改发生时,您总是会收到通知。这就是实时数据库的优点,可以在发生更改时通知它:)

答案 1 :(得分:0)

如果启用了本地缓存,则Firestore会自动将它收到的所有文档存储在该本地缓存中。

仅当您的应用通过调用phase angleke = pyasl.KeplerEllipse(1.3, 2., e=0.5, Omega=70., i=10.0, w=110.0, ??? ) 来请求文档时,才会发生这种情况。 Firestore不会自动代表您请求文件。因此,如果您的应用程序不请求文档,则缓存将不会更新。