Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何为firestore中的文档创建自定义自动生成的ID_Reactjs_Firebase_Google Cloud Firestore - Fatal编程技术网

Reactjs 如何为firestore中的文档创建自定义自动生成的ID

Reactjs 如何为firestore中的文档创建自定义自动生成的ID,reactjs,firebase,google-cloud-firestore,Reactjs,Firebase,Google Cloud Firestore,对于我的项目,我需要易于共享的ID,因此firestores默认自动生成的ID将不起作用。 我正在寻找一种自动生成id的方法,如8329423,它将在0到9999999之间递增或随机选择。Firestore的自动id字段旨在从统计上保证没有两个客户端生成相同的值。这就是为什么它们如此之长:这是为了确保它们有足够的随机性(熵) 这使得Firestore可以完全在客户端确定这些密钥,而无需在服务器上查找它生成的密钥之前是否已在另一个客户端上生成。这反过来又有以下主要好处: 由于密钥是在客户端生成的,

对于我的项目,我需要易于共享的ID,因此firestores默认自动生成的ID将不起作用。

我正在寻找一种自动生成id的方法,如
8329423
,它将在0到9999999之间递增或随机选择。

Firestore的自动id字段旨在从统计上保证没有两个客户端生成相同的值。这就是为什么它们如此之长:这是为了确保它们有足够的随机性(熵)

这使得Firestore可以完全在客户端确定这些密钥,而无需在服务器上查找它生成的密钥之前是否已在另一个客户端上生成。这反过来又有以下主要好处:

  • 由于密钥是在客户端生成的,因此也可以在客户端未连接到任何服务器时生成密钥
  • 由于密钥是在客户端生成的,因此不需要往返服务器以生成新密钥。这大大加快了过程
  • 由于密钥是在客户端生成的,因此在生成密钥的客户端之间不存在争用。每个客户端只根据需要生成密钥
  • 如果这些好处对你的用例很重要,那么你应该强烈地考虑你是否可能创建一个比FixSt店已经拥有的更好的唯一ID。例如,Firestore的ID有62^20个唯一值,这就是为什么它们在统计上保证在很长一段时间内不会生成相同的值。您建议的0-9999999范围具有100万个唯一值,这更可能生成重复值

    如果您真的希望此方案用于ID,则需要将已经在服务器(可能在Firestore中)上提供的ID存储起来,以便在生成新密钥时可以对其进行检查。一种非常常见的方法是保留一个计数器,其中包含您在文档中已分发的最后一个ID。要生成新的唯一ID,请执行以下操作:

  • 从文档中读取最新的计数器值
  • 递增计数器
  • 将更新的计数器值写入文档
  • 在代码中使用更新的计数器值

  • 由于此读-更新-写操作是从多个客户端进行的,因此您需要为其使用一个事务。还请注意,客户机现在正在协调密钥生成,因此您将体验到可以生成的密钥数量的吞吐量限制。

    欢迎使用堆栈溢出。请带上这本书,同时阅读。堆栈溢出不是免费的脚本编写服务。您自己的研究和代码尝试是值得期待的。编辑问题以将代码包含在示例中。