假设你想要一组1到2位的十六进制数字,也就是256个数字。只需使用一个小集合来解决问题,但任何大小的字符串都可以使用该方法。因此,在这种情况下,您有一个潜在的N或256个数字。每当出现新数据记录时,您将“生成”一个新的ID。所以它开始并随机给出 af,然后是 1d,然后是 8a等等。直接而幼稚的方法是按顺序生成所有数字,然后打乱它们并从集合中弹出。当您只有256个数字时,这样做很好。但如果您有数百万或数十亿个数字,则不实用,因为您可能会有许多浪费的已生成ID长时间未被使用。我想避免这种情况。因此,我的问题是,有没有一种更快速的方法来创建这样的唯一键字符串,而不需要预先生成所有键,并且不需要按顺序递增1。也就是说,关键字应该看起来是随机的。我能想象的一种方法是使用trie存储已使用/生成的值。然后,当您要获取新值时,生成一个随机值,然后检查trie以查看它是否已经使用过。虽然我不知道如何衡量其效率,但一旦您开始耗尽ID并降到集合中的最后几个ID,它似乎表现非常糟糕。您将生成许多已经生成的ID,并为每个ID遍历字典树,因此速度会很慢。我想知道是否有一种更有效的方法可以在不预先生成所有数字的情况下实现这一点。此外,数据记录不会用于计算ID,因为记录可能非常大且复杂。也许有一种方法可以随机遍历(并生成)字典树,以这种方式生成ID,因为您最终在trie中处于唯一的随机位置。也许是这样,我不知道。另外,我对哈希技术不太精通,因此不知道是否有任何好的方法可用。
1
、2
、3
等,但是将结果哈希为 ID,会怎样呢?这样,ID 将是唯一的,并且仅在需要时生成,但是它们在脚本之外没有任何明显的含义或顺序(我猜哈希可以转换回数字,如果您需要数字而不是字符串)。 - CertainPerformance