BSON パーサー
BSON(Binary JSON)はMongoDBがドキュメントの保存に使用するバイナリシリアライゼーションフォーマットです。ObjectId、Date、Binary、Decimal128などの追加型でJSONを拡張しています。このツールはBSONファイルを解析し、型情報付きでコンテンツをJSONとして表示します。
仕様
よくあるユースケース
- MongoDBダンプファイル(.bson)の検査
- メッセージキューやキャッシュ内のBSONデータのデバッグ
- MongoDBワイヤプロトコルキャプチャの分析
- 外部ツール用にBSONをJSONに変換
- ドキュメント構造と型の監査
機能
- ドラッグ&ドロップまたはファイル選択でBSONバイナリファイルを解析
- 16進数エンコードされたBSONデータをデコード
- ObjectId、Date、Binary、Regex、Decimal128を含むすべてのBSON型を表示
- 拡張JSON表記でJSONに変換
- ドキュメントメタデータ(サイズ、フィールド数、最大深度)を表示
- ドキュメント内のすべてのObjectIdと日付を一覧表示
- バイナリフィールドのサイズと拡張型を表示
- 生バイナリ検査用Hexビューアー
例
シンプルなBSONドキュメント
試してみる →単一フィールドの最小限のBSONドキュメント: {"hello":"world"}
16 00 00 00 02 68 65 6c 6c 6f 00 06 00 00 00 77 6f 72 6c 64 00 0016進数エンコードされたBSON
試してみる →文字列、数値、ブール値を含むBSONドキュメント: {"name":"Alice","age":30,"active":true}
27 00 00 00 02 6e 61 6d 65 00 06 00 00 00 41 6c 69 63 65 00 10 61 67 65 00 1e 00 00 00 08 61 63 74 69 76 65 00 01 00ヒント
- 16進数エンコードされたBSONデータを直接貼り付けて解析できます。
- BSONファイルは以下のコマンドで作成できます: mongoexport --collection=users --out=users.bson
- ObjectIdにはタイムスタンプが含まれています。以下で取得できます: new ObjectId().getTimestamp()
- BSONはJSONより多くの型をサポートします: 日付、バイナリ、正規表現、10進数。
- MongoDBのBSONドキュメントの最大サイズは16MBです。
解説 BSON パーサー
BSON(Binary JSON)はMongoDBがドキュメントの保存と転送に内部的に使用するバイナリシリアライゼーションフォーマットです。JSONがすべてのデータを文字列、数値、ブール値、配列、オブジェクトとして表現するのに対し、BSONはデータベースに必要な追加の型で拡張されています: ObjectId(12バイトの一意識別子)、Date(ミリ秒精度のタイムスタンプ)、Binary(任意のバイト配列)、Decimal128(正確な10進数演算)、および正規表現です。
BSONドキュメントはレングスプレフィックス形式です。つまり、各ドキュメントと埋め込みドキュメントは4バイトのサイズフィールドで始まります。これにより、パーサーは完全にデコードせずにドキュメントをスキップでき、効率的なスキャンとインデックス作成が可能になります。各要素には型バイト、C文字列としてのフィールド名、そして型固有のエンコーディングでの値がタグ付けされています。
MongoDBはドキュメントを内部的にBSONとして保存し、ワイヤプロトコルで転送し、mongodumpで.bsonファイルとしてエクスポートします。BSONの理解は、MongoDBアプリケーションのデバッグ、ダンプファイルの分析、ワイヤプロトコルの操作に不可欠です。拡張JSON形式は、BSON型情報を保持する人間が読める表現を提供します。
BSONは必ずしもJSONより小さいわけではありません。短い文字列や小さな数値は、型バイトと長さプレフィックスのオーバーヘッドのため、BSONの方が実際に大きくなる場合があります。BSONの利点はサイズではなく速度です。レングスプレフィックス形式により高速なトラバーサルが可能になり、拡張型は日付、バイナリデータ、高精度10進数をエンコーディング規約なしにネイティブサポートします。
ObjectIdはMongoDBドキュメントのデフォルト_idとして使用される12バイトのBSON型です。4バイトのタイムスタンプ(エポックからの秒数)、5バイトのランダム値(マシン/プロセスごとに一意)、3バイトのインクリメンティングカウンターで構成されています。この設計により、分散サーバー間で調整なしに一意性が保証されます。埋め込みタイムスタンプにより、ObjectId.getTimestamp()でドキュメントの作成時刻を取得できます。
mongodumpで作成されるMongoDBダンプファイル(.bson)は、生のBSONドキュメントが連結されたものです。このツールに16進数エンコードされたBSONデータを貼り付けて個々のドキュメントを解析できます。あるいは、MongoDB Database Toolsに含まれるbsondumpユーティリティを使用して、コマンドラインで.bsonファイルをJSONに変換し一括検査することもできます。