他们有点随机吗?
我的意思是......人们能够将它们分开吗?
答案 0 :(得分:36)
它们不是随机的,很容易预测:
BSON ObjectID是12字节的值 由4字节时间戳组成 (自纪元以来的秒数),一个3字节 machine id,一个2字节的进程id和a 3字节计数器
答案 1 :(得分:12)
继承了MongoDB ObjectID(http://jsfiddle.net/icodeforlove/rN3zb/)
的javascript实现function ObjectIdDetails (id) {
return {
seconds: parseInt(id.slice(0, 8), 16),
machineIdentifier: parseInt(id.slice(8, 14), 16),
processId: parseInt(id.slice(14, 18), 16),
counter: parseInt(id.slice(18, 24), 16)
};
}
因此,如果您有足够的内容,他们会泄漏有关您的基础架构的相关信息。而且你也知道所有事物的对象创建日期。
IE:您拥有多少台服务器,以及每台服务器运行的进程数。
答案 2 :(得分:11)
它们通常由驱动程序本身在客户端生成。例如,在ruby中,可以使用BSON :: ObjectID:
您还可以生成自己的ObjectIds。如果您想使用业务标识符,这将特别有用。
答案 3 :(得分:1)
MongoDB数据库驱动程序默认情况下会生成一个ObjectID标识符,该标识符分配给每个文档的_id字段。在许多情况下,ObjectID可用作应用程序中的唯一标识符。
ObjectID是一个96位数字,其组成如下:
一个4字节的值,表示自Unix纪元以来的秒数(直到2106年才用完秒数)
3字节的机器标识符(通常从MAC地址派生)
2字节的进程ID,和
3字节计数器,以随机值开头。
答案 4 :(得分:0)
摘自MongoDB官方文档links
它显示:
ObjectId
ObjectId很小,可能唯一,可以快速生成,并且 下令。 ObjectId值由12个字节组成,其中前四个 字节是反映ObjectId创建的时间戳。 具体来说:一个4字节的值,表示自Unix时代以来的秒数,
一种 5字节随机值,
一个3字节的计数器,以随机数开头 值。
在MongoDB中,存储在集合中的每个文档都需要一个 充当主键的唯一_id字段。如果插入的文件 省略_id字段,MongoDB驱动程序会自动生成一个 _id字段的ObjectId。