为什么 bson java 实现使用 4 字节 inc 字段



在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

最新更新