对于类似于URL缩短服务的应用程序,我想创建不可猜测的ID,我想你们都很熟悉。以下是这样一个ID的示例:http://example.com/sd23t9。有什么好的、高效的技术可以生成这些ID,并在将它们作为主键插入数据库表时减少(或不产生)冲突风险?编辑:Piskvor当然提出了一个很好的观点。我应该提到,在达到36^6限制之前,冲突风险最小。编辑2:嗯,算了吧,他的观点当然比那更有启发性。预先生成一个带有ID的表,也许是最有效的技术(就像我已经在其他地方读到的那样)?如果我受到36^6和非连续约束的限制,这是否是最有效的技术?
[a-z0-9]{6}
,根据你提供的例子,总会存在碰撞风险。当你有2,176,782,336个ID时,就会出现100%的碰撞(没有更多可用的密钥)。由于生日悖论,你会很快遭遇碰撞:http://en.wikipedia.org/wiki/Birthday_effect#Cast_as_a_collision_problem 。在这样一个小的密钥空间中,没有办法避免碰撞 - 相反,你需要采用某种碰撞恢复方案(例如,在不重复的情况下生成ID - 随着密钥空间被填满,这将变得越来越慢)。 - Piskvor left the building