Firebase firestore生成两个相同随机密钥的机会有多大?

Firebase firestore生成两个相同随机密钥的机会有多大?,firebase,firebase-realtime-database,google-cloud-firestore,Firebase,Firebase Realtime Database,Google Cloud Firestore,我正在处理一个项目和firestore随机键,在这个场景中,这些都很重要,所以我的问题是,firebase firestore或实时数据库生成两个或多个相同随机变量的机会有多大?根据此博客链接: 如何生成推送ID 推送ID是客户端生成的字符串标识符。他们 是时间戳和一些随机位的组合。时间戳 确保它们按时间顺序排列,而随机位确保 每个ID都是唯一的,即使成千上万的人在创建推送 同时使用ID 推送ID中有什么? 推送ID包含120位信息。前48位是a 时间戳,它既减少了碰撞的机会,又允许 连续创建的

我正在处理一个项目和firestore随机键,在这个场景中,这些都很重要,所以我的问题是,firebase firestore或实时数据库生成两个或多个相同随机变量的机会有多大?

根据此博客链接:

如何生成推送ID 推送ID是客户端生成的字符串标识符。他们 是时间戳和一些随机位的组合。时间戳 确保它们按时间顺序排列,而随机位确保 每个ID都是唯一的,即使成千上万的人在创建推送 同时使用ID

推送ID中有什么? 推送ID包含120位信息。前48位是a 时间戳,它既减少了碰撞的机会,又允许 连续创建的按时间顺序排序的推送ID。时间戳 然后是72位随机性,这确保了即使是两个 在同一毫秒内创建推送ID的人非常困难 不太可能生成相同的ID。对随机性的一个警告是 如果客户创建 在同一毫秒内有多个推送ID,我们只是“增加”了 一个一个的随机位

将120位信息(时间戳+随机性)转换为 可以用作Firebase密钥的ID,我们基本上对其进行base64编码 转换为ASCII字符,但我们使用修改后的base64字母表 确保ID在订购时仍能正确排序 按字典顺序排列(因为Firebase键是按字典顺序排列的)


根据此博客链接:

如何生成推送ID 推送ID是客户端生成的字符串标识符。他们 是时间戳和一些随机位的组合。时间戳 确保它们按时间顺序排列,而随机位确保 每个ID都是唯一的,即使成千上万的人在创建推送 同时使用ID

推送ID中有什么? 推送ID包含120位信息。前48位是a 时间戳,它既减少了碰撞的机会,又允许 连续创建的按时间顺序排序的推送ID。时间戳 然后是72位随机性,这确保了即使是两个 在同一毫秒内创建推送ID的人非常困难 不太可能生成相同的ID。对随机性的一个警告是 如果客户创建 在同一毫秒内有多个推送ID,我们只是“增加”了 一个一个的随机位

将120位信息(时间戳+随机性)转换为 可以用作Firebase密钥的ID,我们基本上对其进行base64编码 转换为ASCII字符,但我们使用修改后的base64字母表 确保ID在订购时仍能正确排序 按字典顺序排列(因为Firebase键是按字典顺序排列的)


虽然Gastón Saillén关于Firebase实时数据库中按键的回答是100%正确的,但我将尝试添加更多细节

当使用DatabaseReference的方法时,它会生成一个具有时间成分的密钥,因此从理论上讲,两个事件可以在同一毫秒内发生,但两个用户在完全相同的时刻以完全相同的随机性生成密钥的可能性非常小。还请注意,这些密钥完全在客户端生成,无需咨询Firebase服务器。如果你感兴趣的话,这是你的答案。最后,我可以告诉你,到目前为止,我还没有听说有人报告钥匙碰撞问题


因此,与Fireabase实时数据库密钥不同,云Firestore ID实际上完全是随机的。没有时间成分包括在内。当您在不传递任何参数的情况下调用CollectionReference的方法或CollectionReference的方法时,Firestore中使用的唯一ID的内置生成器会生成随机且高度不可预测的ID,从而防止命中后端基础结构中的某些热点。如果您在Firebase控制台中检查集合中的文档,这也是没有订单的原因。在这种情况下,ID之间的冲突不太可能发生,您可以/应该假设它们是完全唯一的。这就是他们设计的目的。关于这个算法,你可以从这里查看Frank van Puffelen的答案。因此,您不必担心此ID。

虽然Gastón Saillén关于Firebase实时数据库中按键的回答是100%正确的,但我将尝试添加更多细节

当使用DatabaseReference的方法时,它会生成一个具有时间成分的密钥,因此从理论上讲,两个事件可以在同一毫秒内发生,但两个用户在完全相同的时刻以完全相同的随机性生成密钥的可能性非常小。还请注意,这些密钥完全在客户端生成,无需咨询Firebase服务器。如果你感兴趣的话,这是你的答案。最后,我可以告诉你,到目前为止,我还没有听说有人报告钥匙碰撞问题

因此,与Fireabase实时数据库密钥不同,云Firestore ID实际上完全是随机的。没有时间成分包括在内。当您在不传递任何参数的情况下调用CollectionReference的方法或CollectionReference的方法时,Firestore中使用的唯一ID的内置生成器会生成随机且高度不可预测的ID,从而防止命中后端基础结构中的某些热点。如果您在Firebase控制台中检查集合中的文档,这也是没有订单的原因。在这种情况下,ID之间的冲突不太可能发生,您可以/应该假设它们是完全唯一的。这就是他们设计的目的。关于算法,你可以检查Frank van Puffelen的