将日期存储在缓存中,并在用户登录时将其保存在 Firebase 的实时数据库中?

问题描述 投票:0回答:1

我正在Android上创建一个习惯应用程序,我想将离线习惯数据存储在缓存中,以便客户端可以创建、编辑、按日期搜索、评分、养成习惯,如果他们喜欢,可以使用以下方式登录他们的 Google 帐户并将所有习惯缓存保存在数据库中

如何做到这一点?

我知道 Firebase 仅在从实时数据库检索时才存储在缓存中

habitsRef = FirebaseDatabase.getInstance().getReference("users")
habitsRef.keepSynced(true)

habitsRef.addListenerForSingleValueEvent(object : ValueEventListener {
    override fun onDataChange(snapshot: DataSnapshot) {
        for(dataSnapshot in snapshot.children) {
            println("******************* Load **************")
            println(dataSnapshot)
        }
    }

    override fun onCancelled(error: DatabaseError) {
      println("************Error*****************")
    }
})

如果我创建一个 Sqlite 来将所有习惯存储在缓存中,那么工作量将增加一倍,因为我需要将所有内容保存在 Firebase 中,如果我在 Sqlite 中执行查询,我也必须在 Firebase 中执行...

或者我应该更改实现而不是 Firebase 使用另一个数据库来实现此目的?

android firebase firebase-realtime-database
1个回答
0
投票

您可以通过调用

goOffline()
明确告诉 Firebase SDK 保持离线状态,如有关管理和检测连接状态的文档中所示。然后您可以写入数据库,所有数据将存储在缓存中,当用户登录其 Google 帐户时,您可以调用
goOnline()
来启用将其同步到云托管数据库。

也就是说,这对于 Firebase 实时数据库来说并不是理想的方法,因为其 SDK 的性能将随着本地不同步写入的数量线性恶化。如果您想采用这种方法,最好使用 Firestore - 因为即使有许多本地写入,该 SDK 也会保留最新的快照,以实现快速的本地性能。


另一种选择(也是更惯用的做法)是不要尝试禁用本地写入,而是:

  1. 当用户第一次启动应用程序时,立即创建匿名用户帐户
  2. 使用该 UID 写入数据库。
  3. 当用户想要登录时链接 Google 登录帐户

这样,UID 在步骤 1 中就已已知(并且在步骤 3 中不会更改),并且您可以将用户数据保存到本地 Firebase 和云端。

© www.soinside.com 2019 - 2024. All rights reserved.