1

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-driver が仕様に従わなかった理由を誰か教えてもらえますか?

ありがとう!

4

3 に答える 3

1

コメントには少し長いので、これを回答にします。

これへの JIRA リンクがいくつかあります。

2 つ目は、Java では仕様が異なることを認めていますが、その理由については言及していません。

Java の PID とマシン ID が原因であると推測すると、https ://jira.mongodb.org/browse/JAVA-586 に関連している可能性があります。

メンテナーがたむろしているので、Google Group: mongodb-user でより良い答えを見つけることができます。

于 2012-12-08T14:41:52.917 に答える
1

ObjectID の本来の目的は、ドライバーがデータとして解析を開始するフィールドをパックするのではなく、合理的に一意の主キーを生成することだったと思います。

MongoDB エコシステムが進化するにつれて、一部の開発者は、生成された ID の一貫性を確保するだけでなく、複数のドライバーから ObjectID を解釈することが有用であることに気付きました。

BSON 仕様を見ると、古いドライバーで使用される UUID のサブタイプがいくつかあり、相互運用性のためのさまざまな変更があることがわかります。たとえば、PYTHON-387には、C# および Java ドライバーの「レガシー」バイト オーダーとエンディアンをサポートするという記述があります。

MongoDB イシュー トラッカーのJAVA-337に従って、Java ドライバーの ObjectID の不一致は、3.0 Java ドライバー リリースで対処される予定です。

于 2013-03-01T14:17:02.143 に答える
0

それらが異なる理由を説明することはできませんが、Python ドライバーが Java ドライバーと同じアプローチを使用してオブジェクト ID を生成することはわかります。

https://github.com/mongodb/mongo-python-driver/blob/master/bson/objectid.py

于 2012-12-08T14:29:02.223 に答える