[図解] MongoDB の ObjectID の保有情報(日付)を調べた

Pocket

MongoDB の ObjectID は、ドキュメントを挿入すると自動的に生成される ID で、挿入データと一緒に保存される。
本書では、この ObjectID が保有している情報と、構成(生成規則)を説明していく。

ObjectId は12バイトで構成され、各値は以下のとおり。(公式サイトより

  • 4バイトのUnixエポックからの経過秒数
  • 3バイトのマシン識別子
  • 2バイトのプロセスID
  • 3バイトの初期値がランダムなカウンター

ObjectID の構成

OjbectID は ID というだけあって、当然ユニークなのだが、正確には「ユニークの可能性が高い」ということらしい。

詳細は、以下のサイトに委ねるが、大まかに幾つかピックアップすると、
mongodb – 重複するMongo ObjectIdが2つの異なるコレクションで生成される可能性はありますか?

  • カウンタオーバーフロー
    カウンタに3バイトあります。16,777,216(2 ^ 24)個の文書を1秒間に同じマシン上に挿入した場合
  • カウンター非インクリメント
    いくつかのMongoDBドライバーはカウンターバイトの数を増やす代わりに乱数を使用する。このような場合、1 / 16,777,216のチャンスがあるが、これらの2つのIDが同じ秒で生成された場合(IDの時刻セクションが次の秒に更新される前)。
  • マシンとプロセスハッシュを同じ値にする
    同時に2つの異なるマシン上の2つのカウンタが同じ秒で同じ値を生成する場合

ということで、ユニークな可能性が非常に高く、実質的にユニークとみなして良いという感じ。

以上

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です