【问题标题】:What is the advantage of Android Room over Cloud Firestore for persistent local storage?对于持久本地存储,Android Room 与 Cloud Firestore 相比有何优势?
【发布时间】:2019-06-05 09:47:41
【问题描述】:

我的 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。我认为这是不同的,因为我不是在寻找长期的离线持久性,而是在寻找可靠的本地副本以避免不必要的数据传输。

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

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

    Firestore 并非像您使用 Room 一样用作离线数据库,它实际上是作为在线实时数据库设计的,可以在断开连接的中短时间段内工作。 Cloud Firestore 使用 SQLite 作为其持久性机制。因此,如果您说您的用户将主要在线,那么您不应该遇到性能或耐用性问题。

    其中的数据不会经常变化,而且当它发生变化时,它只会单向流动:

    如果您在某个时间点决定更改此流程,请记住,当用户的设备离线时,尚未同步到服务器的待处理写入会保留在队列中。如果你在没有上网同步的情况下进行了太多的写操作,那么这个队列会增长得很快,它不仅会减慢写操作的速度,还会减慢你的读操作。

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

    回答你最初的问题:

    对于持久本地存储,Android Room 与 Cloud Firestore 相比有何优势?

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

    【讨论】:

    • 这很有趣,谢谢。在 Activity 和 Cloud FireStore 之间存在一些抽象层是否仍然有意义(例如 Activity -> ViewModel -> Repository -> FireStore API?还是 FireStore 中固有的抽象?
    • 不客气,是的,您可以为此使用ViewModel。简单地使用 Firestore 并不包含任何抽象。
    猜你喜欢
    • 2017-01-12
    • 2011-12-06
    • 2017-08-04
    • 2017-09-29
    • 1970-01-01
    • 2013-09-22
    • 2012-05-17
    • 2016-07-04
    • 2011-03-13
    相关资源
    最近更新 更多