在Firebase模型中保存推送ID

时间:2018-01-10 09:56:33

标签: android firebase firebase-realtime-database

我在这里有两个火力问题:

在解析值时,以编程方式将ID复制到本地模型(从数据库中排除)是一个好习惯吗?

B /另一种解决方案是:

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

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

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

此致

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

这将使用 135字节。那个 45个字节比解决方案B少。现在假设您的数据库中有1000个帖子。您已在解决方案B上使用 45000字节更多。这足以存储大约300个帖子,但它会被额外的键属性占用。

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