文档说Firebase push生成一个唯一的密钥,我想知道这个密钥在我的整个数据库(甚至是GuId)中是唯一的,还是只在推送它的节点中
我正在构建我的数据库(根据他们的指南,我把它弄平了):
users {
-KIH-uFo_2jW16Ue8JNH { //User-Key
username : "Johnny Dummy"
gender : "male"
}
}
items {
-KIH-uFo_2jW16Ue8JNH { //User-Key
-KIH6iaw5uAS856i6-u9 : { //Item-Key
itemname : "Item Dummy"
count : 3
}
}
}
因此,当我获取所有用户的所有项目时,Item-Key的唯一性范围对我来说很重要
答案 0 :(得分:6)
统计上几乎不可能获得重复的push-Ids。为了实现它:
其中一位核心开发人员撰写了一篇博文,介绍了如何生成它们:https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html
"推送ID包含120位信息。前48位是时间戳,它既降低了碰撞的可能性,又允许连续创建的推送ID按时间顺序排序。时间戳之后是72位随机性,这确保即使两个人在完全相同的毫秒内创建推送ID也极不可能生成相同的ID。对随机性的一个警告是,如果客户在同一毫秒内创建多个推送ID,为了保持按时间顺序排序,我们只需增加'随机比特一个。"
答案 1 :(得分:2)
它在整个数据库中都是唯一的。来自文档:
使用唯一名称生成新的子位置,并向其返回Firebase引用。这对一个孩子来说很有用 数据库位置表示项目的集合。请参阅保存列表 数据
您可以选择将值传递给push(),值将为 立即写入生成的位置。如果你没有通过 push()的值,没有写入,孩子将保持为空 除非写入使用set()。
push()生成的唯一名称以a为前缀 客户端生成的时间戳,以便生成结果列表 按时间顺序排序。