android - 在 Firebase 模型中保存推送的 ID

标签 android firebase firebase-realtime-database

我在这里有 2 个 firebase 问题:

A/在解析值时,以编程方式将 ID 复制到本地模型(从数据库中排除)是否是一种好的做法?

B/另一种解决方案是:

  • 生成新 key
  • 使用该键并将其复制到模型中
  • 将模型(和 key )保存到数据库
val newPostRef = ref.child("posts").push()
val key = newPostRef.key
newPostRef.setValue(Post(key, "title", "content"))

像这样,帖子 ID 将由数据库模型保存并使用 getValue(Post::class) 自动解析。

我觉得这不是一个好的解决方案,但请告诉我原因:)

问候

最佳答案

两种方案都保证了数据的一致性,但在数据库大小方面,方案A优于方案B。

通过使用解决方案 B,您的数据库结构将如下所示:

"posts":{
    "nTY5U5NJJbPTJaPksPRNqau15H53" : {
      "message" : "Hello World",
      "sender" : "Rosário Pereira Fernandes",
      "key" : "nTY5U5NJJbPTJaPksPRNqau15H53"
    }
}

这应该使用大约 180 字节 的磁盘空间。请注意,此 key 在您的节点上重复了两次。为什么不删除它以节省空间?

使用解决方案 B,您将拥有一个较小的数据库:

"posts":{
    "nTY5U5NJJbPTJaPksPRNqau15H53" : {
      "message" : "Hello World",
      "sender" : "Rosário Pereira Fernandes"
    }
}

这将使用大约 135 个字节。这比解决方案 B 少 45 个字节。现在想象一下,如果您的数据库中有 1000 个帖子。在解决方案 B 中,您将使用更多的 45000 字节。这足以存储大约 300 多个帖子,但它被额外的键属性占用了。

不要忘记 Firebase Database has some price limitations存储 GB 和下载 GB。通过使用解决方案 B,您将比使用解决方案 A 更快地达到此限制。

关于android - 在 Firebase 模型中保存推送的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48184670/

相关文章:

java - 为什么应用程序重新启动时该值没有保存到 SharedPreferences 中?

android - 使用 "match_parent"将图像对齐到顶部

firebase - 从Google Sheets脚本重新排列Firebase实时数据库中显示的值

ios - 无法仅重新加载选定的单元格

node.js - 如何在不使用NodeJS的情况下向Firebase添加数据?

java - 当无法使用 Android 将数据写入 Firebase 数据库时如何获取错误消息

android - project_create.sh:第4行:android:找不到命令(cygwin&android&jni)

android - fragment 中的单选按钮空指针执行

java - Firebase数据库如何从1个引用中获取一些值并等于2个引用来获取其键和值

java - 如果有子键,如何直接从根获取子节点的值