Firebase推送唯一范围
文档说Firebase push生成了一个唯一的密钥,我想知道这个密钥在我的整个数据库(甚至是GuId)中是唯一的,还是仅在它被推送的节点中是唯一的 我正在这样构建我的数据库(根据他们的指南,我将其压平):Firebase推送唯一范围,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,文档说Firebase push生成了一个唯一的密钥,我想知道这个密钥在我的整个数据库(甚至是GuId)中是唯一的,还是仅在它被推送的节点中是唯一的 我正在这样构建我的数据库(根据他们的指南,我将其压平): 因此,当我获取所有用户的所有项目时,Item Key的唯一性范围对我来说很重要,它在整个数据库中是唯一的。从文件中: 使用唯一名称生成新的子位置,并返回对其的Firebase引用。当一个家庭的孩子 数据库位置表示项的集合。请参见保存列表 数据 您可以选择将一个值传递给push(),该值将 立
因此,当我获取所有用户的所有项目时,Item Key的唯一性范围对我来说很重要,它在整个数据库中是唯一的。从文件中: 使用唯一名称生成新的子位置,并返回对其的Firebase引用。当一个家庭的孩子 数据库位置表示项的集合。请参见保存列表 数据 您可以选择将一个值传递给push(),该值将 立即写入生成的位置。如果你没有通过考试 值设置为push(),则不写入任何内容,子项将保持为空 除非使用set()写入 push()生成的唯一名称的前缀是 客户端生成的时间戳,以便生成的列表 按时间顺序排序
从统计上看,几乎不可能获得重复的推送ID。为了让它发生:
“推送ID包含120位信息。前48位是时间戳,它既减少了冲突的机会,又允许连续创建的推送ID按时间顺序排序。时间戳后面是72位随机性,这确保即使两个人以完全相同的毫秒创建推送ID也极不可能生成相同的ID。对随机性的一个警告是,如果客户机在同一毫秒内创建多个推送ID,为了保持时间顺序,我们只需将随机位“递增”一个。“新文档说,push通过混合客户端时间和服务器时间来生成密钥,显然,客户端时间可以从多个客户端同时使用重复,如果在“服务器”上获取服务器时间的操作也同时发生在每个节点上,那么服务器时间戳实际上可能会重复得太多,时间戳以毫秒为单位,在这一年左右的时间里,我一直在使用Firebase,从来没有见过重复的密钥。再次从文档中“每次调用push()时,您的数据库都会生成一个唯一的ID,如messages/users/”,Firebase在这里通过
push()
生成的密钥在统计上保证是唯一的。从这个意义上讲,它们类似于guid/uuid。但除此之外,它们也是按时间顺序排列的,文档试图解释这一点。如果这让人困惑,你可以忽略这一部分,记住它们是独一无二的。
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
}
}
}