FORMAT COMPARISON
BSON vs MessagePack
BSONとMessagePackはどちらもバイナリのドキュメント風データを表せますが、BSONはMongoDB由来の型付き文書表現、MessagePackは汎用のオブジェクト直列化形式です。
BSONとMessagePack、どちらを選ぶ?
MongoDBのドキュメントやObjectId、日付などBSON固有の型を扱うならBSONを使います。MongoDB外のアプリ間でコンパクトなオブジェクト交換をしたい場合はMessagePackを検討し、拡張型と受信側の型対応を合意してください。
BSON向き
MongoDB文書データのシリアライズ・BSON対応アプリ間での文書データ交換
- 日付やバイナリなどJSONにない型を扱う
- BSONを直接読み書きするドライバーやツールを使う
MessagePack向き
JSONに似たデータのバイナリシリアライズ・対応するアプリ間での構造化データ交換
- JSONの配列・マップ・基本型をバイナリで扱う
- 拡張型やタイムスタンプを対応ライブラリ間で交換する
基本情報を比較
BSONとMessagePackの主な違いを確認できます。
| 項目 | BSON | MessagePack |
|---|---|---|
| 拡張子 | .bson | .msgpack、.mpk |
| MIME Type | application/bson | application/octet-stream |
| 主な用途 | MongoDB文書データのシリアライズ・BSON対応アプリ間での文書データ交換 | JSONに似たデータのバイナリシリアライズ・対応するアプリ間での構造化データ交換 |
| 圧縮 | none | none |
| 開く方法 | MongoDBのmongorestoreやBSON対応ツール・ライブラリで読み込みます。中身を確認する場合はBSONをExtended JSONなどへ変換して表示します。バイナリファイルをテキストエディタで編集しないでください。 | MessagePack対応ライブラリやデコーダーで読み込みます。内容確認には診断表示やJSON相当の表示へ変換しますが、バイナリ値や拡張型がどう表示されるかも確認してください。 |
| 書き出し・変換 | JSONへ変換する際、日付・ObjectId・バイナリなどは標準JSONに対応する型がないため、Extended JSONの表記やアプリ固有の表現に置き換わる場合があります。往復変換が必要なら型情報が保たれる方法を選び、実データで確認します。 | JSONへ変換すると、バイナリ値や拡張型は標準JSONに直接対応しないため、配列・文字列・独自タグなどの表現に置き換わることがあります。往復変換では型と数値の範囲、タイムスタンプ、マップキー、拡張型を実データで照合します。 |
用途別の選び方
作りたいものや使う場面から選べます。
日付やバイナリなどJSONにない型を扱う
MongoDB文書データのシリアライズ・BSON対応アプリ間での文書データ交換
BSON向きBSONを直接読み書きするドライバーやツールを使う
MongoDB文書データのシリアライズ・BSON対応アプリ間での文書データ交換
BSON向きJSONの配列・マップ・基本型をバイナリで扱う
JSONに似たデータのバイナリシリアライズ・対応するアプリ間での構造化データ交換
MessagePack向き拡張型やタイムスタンプを対応ライブラリ間で交換する
JSONに似たデータのバイナリシリアライズ・対応するアプリ間での構造化データ交換
MessagePack向き確認ポイント 1
BSONは長さ付きの文書・配列と、日付、ObjectId、Decimal128などの明示的な型を定義します。MessagePackはマップ・配列・数値・文字列・バイナリ等の汎用型とアプリ定義extension型を持ちます。
使い分け確認ポイント 2
BSONはMongoDBの文書モデルやツールとの連携に適します。MessagePackは特定データベースを前提としない汎用シリアライズに使われます。
使い分け選ぶ理由を詳しく
- BSONとMessagePackはバイト形式も型の表現も異なり、そのまま読み替えられません。日付、整数幅、10進数、ObjectId、extension値を明示して変換し、往復テストしてください。