【发布时间】:2019-01-06 17:57:32
【问题描述】:
最近我创建了一个以 Firebase 作为后端的 Android 应用程序。我的应用程序中有读写选项。每次我将数据上传到 Firebase 时,都会生成一个自动键名。我想给键名一个特定的数字,比如 1,2,3,4。这怎么可能?
Firebase 结构:
【问题讨论】:
标签: java android firebase firebase-realtime-database
最近我创建了一个以 Firebase 作为后端的 Android 应用程序。我的应用程序中有读写选项。每次我将数据上传到 Firebase 时,都会生成一个自动键名。我想给键名一个特定的数字,比如 1,2,3,4。这怎么可能?
Firebase 结构:
【问题讨论】:
标签: java android firebase firebase-realtime-database
你想做的事是错的,不要去做。 Firebase 正在为您创建此 ID 以防止覆盖这些值/对象。如果 2 个或更多 ppl 将同时添加新记录,他们可能会覆盖它。如果您仍然认为应该这样做,我建议您重新考虑您所做的事情,因为它是错误的。
【讨论】:
我建议您不要使用 1, 2, 3, 4 作为节点的键。对于 Firebase 实时数据库,使用顺序 ID 是一种反模式,因为它肯定会导致可扩展性问题。
可扩展性来自 Firesbase 如何将数据分散到其存储层。所以顺序 id 有更多的哈希冲突,这意味着你会更快地达到写入限制。具有更随机的 id 可确保写入在存储层中均匀分布。
如果您有兴趣,here 可以找到push() 方法背后的算法。
如果您有兴趣实现自己的机制,可以查看UUID,它可以帮助您为 Firebase 数据库节点生成唯一密钥,而无需使用 push() 方法。
import java.util.UUID;
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userRef = rootRef.child("Users");
//key = userRef.push().getKey();
key = UUID.randomUUID().toString();
这是另一种方法,但我强烈建议您使用那些推送的 id,因为它们基于时间并且完全在客户端生成,无需咨询服务器。
【讨论】: