6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【MongoDB】ObjectIDを構成するもの

Last updated at Posted at 2024-08-09

はじめに

開発環境ですがObjectIDを変更したがために発生した不具合を調査した経験からObjectIDを深堀ってみようと思いたちました。

ObjectIDとは

MongoDBのObjectIDは、12バイトのデータから構成される識別子で、ドキュメントごとに一意のIDを生成します。ドキュメントを生成する際にObjectIDを指定しなければ自動で生成されます。

ObjectIDを構成する要素

ただの文字列ではなく3つの要素から構成されていました。

  • タイムスタンプ(最初の4バイト)
    • Unixタイムスタンプ
  • マシン識別子(3バイト)とプロセスID(2バイト)
    • 一意のマシンID。MongoDBインスタンスが稼働しているサーバーを識別するために使用される。プロセスID。同じマシン上で複数のプロセスが同時にObjectIDを生成しても、IDの衝突が防がれる
  • カウンター(最後の3バイト)
    • 同じ秒内で生成されたObjectIDが重複しないようにするためのランダムカウンター

分解してみる

例:66b5b3d8735ba322ebdbd755

頭から下記の通りに分解できます。
タイムスタンプ: 66b5b3d8(2024-08-07 12:22:48 UTC)
マシンID+プロセスID: 735ba322eb
カウンター: dbd755

大小がある

ObjectIDには大小関係がありました。主にタイムスタンプ部分によって決定されます。これにより、ObjectIDを使ってドキュメントの生成時刻の順序を比較したり、ソートしたりすることができます。

まとめ

MongoDBに限らず他のIDなどにはタイムスタンプや自動増分などの概念がありました。勉強になりました!

最後に

私の働いている会社で経験の有無を問わず採用を行っています。
興味のある方は是非カジュアル面談から応募してみてください!

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?