他们有点随机吗?
我的意思是......人们能够将它们分开吗?
它们不是随机的,可以很容易地预测:
BSON ObjectID是一个12字节的值,包括一个4字节的时间戳(自纪元以来的秒数),一个3字节的机器ID,一个2字节的进程ID和一个3字节的计数器
http://www.mongodb.org/display/DOCS/Object+IDs
下面是MongoDB ObjectID的javascript实现(http://jsfiddle.net/icodeforlove/rN3zb/)
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:您拥有多少台服务器,以及每台服务器运行的进程数.
它们通常由驱动程序本身在客户端生成.例如,在ruby中,可以使用BSON :: ObjectID:
https://github.com/mongodb/bson-ruby/blob/master/lib/bson/object_id.rb#L369
您还可以生成自己的ObjectIds.如果要使用业务标识符,这尤其有用.
使用驱动程序生成的ObjectIds时,为低
使用自己的业务ID时,根据其可预测性(登录,连续标识符......)略高