我目前正在开发注册系统原型。它非常简单,基本上只是一个写入MongoDB的.NET表单。针对数据库条目的高效唯一密钥生成
我卡与什么是产生每个用户的唯一ID /密钥的有效方式。这些ID必须是人性化的,例如7个字符长的字母数字字符串,例如A1B2C3X。
我到目前为止看到只使用一个简单的函数来生成一个随机字符串,然后检查数据库,看看它是否是唯一的(如果不是重复,直到你找到一个独一无二的)的解决方案。随着数据库条目数量的增长,这当然会越来越计算成本。
我的想法是预先计算的唯一ID设置和存储在另一个数据库。然后,当我需要向用户数据库中添加一个新条目时,我可以从我的id数据库中“持续”弹出一个id,并知道它不存在于用户数据库中,而无需搜索它。
我确定有人必须做过这样的事情。有没有更好的办法?我不知道我为什么这么挣扎。非常感谢您的意见。
由MongoDB驱动程序提供的ObjectId是否对您的用例太不友好? – 2012-03-11 12:39:21
我正在建议@EkinKoc的建议(如果你有40个字符,那么这就是要走的路)。但是,如果您只需要7个字符,那么您所概述的方法应该比使用单独的数据库密钥存储区弹出值更便宜*,更简单,并且更少出错。在随机的7个字符的字母数字字符串上碰撞的几率几乎为零。这是一个罕见的边缘情况,你不应该优化。 (无论如何用户创建是很少见的,数据库唯一性检查对于相对较少的进程来说足够快)。 – 2012-03-11 12:42:37
@ BenLee:碰撞的概率随着比例的变化而变化:) – 2012-03-11 12:44:06