gpt4 book ai didi

java - 文档的路径对 Firestore 自动生成的随机 ID 有影响吗?

转载 作者:行者123 更新时间:2023-12-02 10:25:13 26 4
gpt4 key购买 nike

如果我想在将文档保存到 Firestore 之前了解该文档的(随机)ID(无需编写自定义代码),我可以执行以下操作:

String id = db.collection("collection-name").document().getId();

如果我在上面的代码中给出“collection-name”,但使用该id将文档保存到集合“some-”,会有什么不同吗?其他集合”

换句话说,集合名称(或更一般地说,文档的路径)与 Firestore 生成的随机 ID 有任何关系吗?

Firestore ID 的生成方式是否与 The 2^120 Ways to Ensure Unique Identifiers 中描述的类似?

以下代码对于自动生成 Firestore 文档的已知 ID 有多好:

private static SecureRandom RANDOMIZER = new SecureRandom();
.
.
.
byte[] randomId = new byte[120];
RANDOMIZER.nextBytes(randomId);
// Base64-encode randomId

最佳答案

Cloud Firestore 生成的文档 ID 是在客户端生成的,完全随机,并且不依赖于您生成它们的集合。

如果您深入研究(开源)SDK,您可以亲自看到这一点。例如,在 Android SDK 中,以下是 source for CollectionReference.add() :

final DocumentReference ref = document();
return ref.set(data)

因此,ID 的生成留给了 document method :

public DocumentReference document() {
return document(Util.autoId());
}

哪些委托(delegate)给Util.autoId():

private static final int AUTO_ID_LENGTH = 20;

private static final String AUTO_ID_ALPHABET =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

private static final Random rand = new Random();

public static String autoId() {
StringBuilder builder = new StringBuilder();
int maxRandom = AUTO_ID_ALPHABET.length();
for (int i = 0; i < AUTO_ID_LENGTH; i++) {
builder.append(AUTO_ID_ALPHABET.charAt(rand.nextInt(maxRandom)));
}
return builder.toString();
}

如上所述:纯粹的客户端随机性,具有足够的熵以确保全局唯一性。

关于java - 文档的路径对 Firestore 自动生成的随机 ID 有影响吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54007373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com