MongoDB のID生成の規則を教えてください。
MongoDBでは、ドキュメントの一意な識別子を表すためにObjectId型が使用され、ID生成の規則となっています。ObjectIdは12バイトの値で、以下の情報を含みます。
- タイムスタンプ(4バイト): ObjectIdの生成時刻を示し、秒単位で表現される。これによりObjectIdの時刻順序が保証され、ある程度はドキュメントの挿入順序を反映できる。
- マシン識別子(3バイト):ObjectIdを生成したマシンの識別子を表す。これにより、異なるマシンから生成されたObjectIdが衝突しないようにしている。
- プロセスのID (2バイト): オブジェクトIDを生成したプロセスの識別子をあらわす. 同じコンピュータ上にある複数のプロセスが生成したオブジェクトIDが衝突しないようにする.
- 同一秒内で発行されたObjectIdが衝突しないよう、同一プロセス内で同一秒間に生成されたObjectIdのカウンタを表す3バイトのカウンター
ObjectIdの先頭4バイトに ObjectId のタイムスタンプ部分が占められているため、ObjectId は生成時間の先後に応じてソートすることができます。これは、問い合わせやインデックスに非常に有用で、問い合わせとソートの効率を上げることができます。
システム間の時刻同期が取れていない分散システムでは、生成されたObjectIdに含まれる作成時刻情報によってObjectIdの生成順序が正確にならない場合があります。時刻順序に厳密な要件がある場合は、独自のID生成ポリシーの使用を検討してください。