【问题标题】:Does Firebase query everytime from serverFirebase 是否每次都从服务器查询
【发布时间】:2018-05-25 05:22:06
【问题描述】:
我在我的 Android 应用中使用 Cloud Firestore 数据库。 (我正在使用 Android SDK)。当应用程序启动时,我会查询登录的用户数据,并且按照文档所述,副本会存储在本地。
如果文档数据没有变化,当我查询.get文档时,Firebase会一直查询服务器还是从本地副本返回?我问的原因是 Firebase 数据库是基于事务的,我不想不必要地多次读取相同的数据....
【问题讨论】:
标签:
java
android
firebase
google-cloud-firestore
【解决方案1】:
与实时数据库数据不同,Cloud Firestore 符合the documentation:
对于 Android 和 iOS,默认启用离线持久化。
因此,您将始终在用户的设备上拥有 Cloud Firestore 数据库的本地副本。这意味着用户可以在设备离线时查询数据库。
Firebase 总是查询服务器还是从本地副本返回?
不管你数据库中的数据是否不断变化,用户在线时总是从服务器查询数据,离线时总是从缓存中查询数据。如果您正在考虑更改此行为,您现在需要在未连接到服务器时停止从缓存中检索数据,因为您无法强制从缓存中检索数据,而您已连接到服务器。
Firebase 数据库是基于事务的
当您谈论Firestore Transactions 时,这并不意味着您会多次读取相同的数据(文档)。但是,如果您要使用事务,则需要牢记一些事项。关于您的要求,其中最重要的一项是:
客户端离线时事务会失败。
因此,交易不支持离线使用,也无法缓存或保存以备后用。这是因为事务绝对需要与服务器进行往返通信,以确保事务中的代码成功完成。
【解决方案2】:
适用于 Android 的 Firestore SDK 具有默认启用的 local cache。如果服务器上没有更新,读取操作将来自缓存。