我正在设计一个使用MongoDB进行存储的应用程序.您可能知道mongo提供的ObjectId数据类型是12字节十六进制.我想向用户展示一个更友好的用户ID.
我查看了几个选项,如PHP的uniqid()及其中的几个变体但我不相信它们,因为随机性的冲突(参见生日问题).
对于这种操作,Redis看起来对我很有吸引力(参见INCR).这需要Web应用程序在每次需要创建新记录时调用redis.我只需要在redis中使用大约15-20个计数器,这些计数器的占用空间很小,因此复制永远不会成为问题.此外,应用程序可以使用套接字连接到它,以避免tcp开销.
我想错了吗?还有什么我应该考虑的吗?
谢谢,亚历克斯
"应该"是一个如此强烈的词......
我会说,如果你保持redis,你可以用它作为计数器.您可能会发现它对其他事情也很有用.但是如果你考虑为原子计数器安装和维护redis,那么这似乎有点过头了.
显然,Mongo也可以使用如何创建自动递增字段的原子计数器:
使用"计数器模型",例如:
db.counters.insert({_id: "userId", next: 0});
var userCounter = db.findAndModify({
query: {_id: "userId"},
update: {$inc: {next: 1}}
});
Run Code Online (Sandbox Code Playgroud)
您现在可以userCounter.next用作您的ID.
话虽如此,如果我是你,我想我会继续保持_id作为一个Mongo ObjectID并为自动增加的id保留一个单独的属性.
| 归档时间: |
|
| 查看次数: |
2094 次 |
| 最近记录: |