java - Android Room 相对于 Cloud Firestore 在持久本地存储方面的优势是什么?

标签 java android firebase google-cloud-firestore

我的 Android 应用程序使用大量结构化数据来向用户提供合适的推荐,因此本地数据库似乎比较合适。 Room/DAO/ViewModel 看起来是一个很好的架构,并且对底层实现有足够的抽象。里面的数据不会经常改变,而且当它改变时,它只会单向流动:从服务器向下流动到用户设备中的本地数据库,而不是相反;大多数查询由本地数据提供服务是有意义的,即使该应用可能会定期在线。

我使用 Google Firebase 处理后端服务,并使用 Cloud Firestore 数据库存储服务器端数据。 Firestore 提供用户数据的本地缓存,供离线使用——这比实现和同步我自己的数据库要简单得多。有充分的理由避免这种方法吗?

还有几个类似的问题,比如: How reliable is Firestore as an offline persistence mechanism?Partial offline sync in Firebase Cloud Firestore .我认为这是不同的,因为我不是在寻找长期的离线持久性,而是在寻找可靠的本地副本以避免不必要的数据传输。

最佳答案

这两种类型的数据库之间存在巨大差异。 Room持久性库在 SQLite 上提供了一个抽象层,以允许更强大的数据库访问,同时 Cloud Firestore是一个灵活、可扩展的实时数据库,适用于移动、Web 和服务器开发。

Firestore 并不是像您可以使用 Room 那样用作离线数据库,它实际上被设计为在线实时数据库,可以在断开连接的短期到中期工作。 Cloud Firestore 使用 SQLite 作为其持久性机制。因此,如果您说您的用户大部分时间都在线,那么您应该不会遇到性能或耐用性方面的问题。

The data within isn't going to change very often, and when it does it only flows one-way:

如果您在某个时间点决定更改此流程,请记住,当用户的设备离线时,尚未同步到服务器的待处理写入将保留在队列中。如果您在没有联机同步它们的情况下执行过多的写入操作,该队列将快速增长并且它不仅会减慢写入操作,还会减慢您的读取操作。

因此,如果您考虑使用 Cloud Firestore 的 offline persistence feature ,请注意,这实际上在 Android 和 iOS 上默认启用,因此您无需执行任何操作。

并回答您最初的问题:

What is the advantage of Android Room over Cloud Firestore for persistent local storage?

我已经说过,这两个数据库是不同的并且用于不同的目的,但对于您的用例(考虑在合理的限制内使用),Firestore 数据库的缓存副本将帮助您。

关于java - Android Room 相对于 Cloud Firestore 在持久本地存储方面的优势是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54130128/

相关文章:

java - Android扩展Activity

java - 单击 recyclerView 中的下一个按钮后加载下一个项目

javascript - 如何在云功能中获取 firebase 数据库数据?

java - GridBagLayout 为什么第三列更大?

java - 按钮的返回方法不起作用

java - 检查数组中是否存在范围内的所有值的最佳方法是什么? ( java )

java - Web 服务 - Java 还是 .NET?

android - 如何使用 Dagger 2 BindsOptionalOf

java - gradle无法在Jar类型任务中指定jar文件

reactjs - 刷新部署在 firebase 托管上的构建,以更改路由或检测到存在的新构建