在BSON Java实现中,ObjectId由3个部分组成(源代码:http://grepcode.com/file/repo1.maven.org/maven2/org.mongodb/mongo-java-driver/2.9.0/org/bson/types/ObjectId.java#ObjectId.%3Cinit%3E%28int%2Cint%2Cint%29):
XXXX XXXX XXXX
-------------------------
time machine&pid inc
(每个 X 代表一个字节)
这与文档(文档:http://docs.mongodb.org/manual/core/object-id/)中描述的内容略有不同。
XXXX XXX XX XXX
--------------------------
time machine pid inc
(每个 X 代表一个字节)
谁能告诉我为什么java驱动程序没有遵循规范?
谢谢!
我会把它作为答案,因为它的评论有点长。
有几个JIRA链接
:- https://jira.mongodb.org/browse/JAVA-81
- https://jira.mongodb.org/browse/JAVA-337
第二个承认规范在Java下是不同的,但没有提到为什么。
如果我猜测可能是由于 Java 中 PID 和机器 ID 的工作方式,它可能与:https://jira.mongodb.org/browse/JAVA-586 有关。
你可能会在谷歌群上找到更好的答案:mongodb-user,因为维护者在那里闲逛。
我希望 ObjectID 的初衷是生成一个相当唯一的主键,而不是打包驱动程序随后开始解析为数据的字段。
随着MongoDB生态系统的发展,一些开发人员发现从多个驱动程序解释ObjectID以及确保生成的ID的一致性非常有用。
如果您查看 BSON 规范,您会发现旧驱动程序使用的 UUID 有一些子类型,以及互操作性的各种更改。 例如,在 PYTHON-387 上提到了支持 C# 和 Java 驱动程序的"遗留"字节顺序和字节序。
根据MongoDB问题跟踪器中的JAVA-337,Java驱动程序的ObjectID不一致计划在3.0 Java驱动程序版本中解决。
我无法解释为什么它们不同,但我可以告诉你,Python 驱动程序使用与 Java 驱动程序相同的方法生成对象 ID:
https://github.com/mongodb/mongo-python-driver/blob/master/bson/objectid.py