当前位置:  开发笔记 > 编程语言 > 正文

MongoDB的ObjectIds是如何生成的?

如何解决《MongoDB的ObjectIds是如何生成的?》经验,为你挑选了3个好方法。

他们有点随机吗?

我的意思是......人们能够将它们分开吗?



1> Maxence..:

它们不是随机的,可以很容易地预测:

BSON ObjectID是一个12字节的值,包括一个4字节的时间戳(自纪元以来的秒数),一个3字节的机器ID,一个2字节的进程ID和一个3字节的计数器

http://www.mongodb.org/display/DOCS/Object+IDs



2> Chad Scira..:

下面是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:您拥有多少台服务器,以及每台服务器运行的进程数.



3> Oct..:

它们通常由驱动程序本身在客户端生成.例如,在ruby中,可以使用BSON :: ObjectID:

https://github.com/mongodb/bson-ruby/blob/master/lib/bson/object_id.rb#L369

您还可以生成自己的ObjectIds.如果要使用业务标识符,这尤其有用.

破碎性

使用驱动程序生成的ObjectIds时,为低

使用自己的业务ID时,根据其可预测性(登录,连续标识符......)略高


它很容易预测.你看过这个来源了吗?
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有