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

问题描述 投票:0回答:1

对于我的项目,我需要可以轻松共享的ID,因此firestores默认自动生成的ID不起作用。 我正在寻找一种自动生成id的方法,如8329423,它将在0到9999999范围内递增或随机选择。

reactjs firebase google-cloud-firestore
1个回答
1
投票

Firestore的自动ID字段旨在统计保证两个客户端不会生成相同的值。这就是为什么它们只要它们是:它是为了确保它们中有足够的随机性(熵)。

这允许Firestore完全在客户端确定这些密钥,而无需在服务器上查看它之前生成的密钥是否已在其他客户端上生成。而这又有以下主要优点:

  1. 由于密钥是在客户端生成的,因此当客户端未连接到任何服务器时也可以生成密钥。
  2. 由于密钥是在客户端生成的,因此不需要到服务器的往返来生成新密钥。这大大加快了这个过程。
  3. 由于密钥是在客户端生成的,因此在生成密钥的客户端之间不存在争用。每个客户端只需根据需要生成密钥。

如果这些好处对您的用例很重要,那么您应该强烈考虑是否可能创建比Firestore更好的唯一ID。例如,Firestore的ID具有62 ^ 20个唯一值,这就是为什么它们在统计上保证永远不会在很长一段时间内生成相同的值。您建议的0 - 9999999范围有100万个唯一值,这更有可能产生重复。

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

  1. 从文档中读取最新的计数器值。
  2. 增加柜台。
  3. 将更新的计数器值写入文档。
  4. 在代码中使用更新的计数器值。

由于此读取更新写入发生在多个客户端,因此您需要使用事务处理。另请注意,客户端现在正在协调密钥生成,因此您将体验到可以生成的密钥数量的吞吐量限制。

© www.soinside.com 2019 - 2024. All rights reserved.