我在这里有 2 个 firebase 问题:
A/在解析值时,以编程方式将 ID 复制到本地模型(从数据库中排除)是否是一种好的做法?
- 来自 Firebase 的 Frank 建议解决方案:Save userId on model Firebase
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/