FORMAT COMPARISON
Avro vs CBOR
Apache Avroはスキーマに従ってレコードを符号化し、reader/writer schemaの解決やコンテナファイルを提供します。CBORはJSONデータモデルを拡張する汎用バイナリ形式で、バイト列やタグ等を直接表現します。
AvroとCBOR、どちらを選ぶ?
管理されたスキーマ、レコード単位の型定義、スキーマ進化を含むデータ基盤ではAvroを検討します。IETF仕様に沿う汎用バイナリ値、タグやプロトコルデータを扱う場合はCBORが適することがあります。対象システムのスキーマ配布、決定的エンコード要件、実装対応を確認してください。
Avro向き
スキーマ付きレコードデータのシリアライズと交換
- イベントやレコードをスキーマとともに扱うデータ連携
CBOR向き
制約のある機器や通信での構造化データ交換・COSEやIoTプロトコルなどでのデータ表現
- JSONに似たデータを小さなバイナリ表現で扱う
- 標準タグやアプリケーション定義タグで値の意味を示す
基本情報を比較
AvroとCBORの主な違いを確認できます。
| 項目 | Avro | CBOR |
|---|---|---|
| 拡張子 | .avro | .cbor |
| MIME Type | application/avro | application/cbor |
| 主な用途 | スキーマ付きレコードデータのシリアライズと交換 | 制約のある機器や通信での構造化データ交換・COSEやIoTプロトコルなどでのデータ表現 |
| 圧縮 | schema_serialization | none |
| 開く方法 | Avro対応ツールでスキーマ、フィールド、型、レコード内容を確認します。 | CBORライブラリやデコーダーで読み込み、診断表記またはJSON相当の表示へ変換して確認します。タグやバイト列など、JSONに直接対応しない値は変換時の表現を確認してください。 |
| 書き出し・変換 | JSONやParquetへ変換する場合は、フィールド名、型、null、論理型、スキーマ互換性を確認します。 | JSONへ変換すると、バイト列やタグ付き値などはJSONに直接対応しないため、ツール固有の表記になることがあります。署名・ハッシュ・キャッシュキーに使う場合はRFC 8949の決定的符号化など、プロトコルで合意した符号化規則を適用します。 |
用途別の選び方
作りたいものや使う場面から選べます。
イベントやレコードをスキーマとともに扱うデータ連携
スキーマ付きレコードデータのシリアライズと交換
Avro向きJSONに似たデータを小さなバイナリ表現で扱う
制約のある機器や通信での構造化データ交換・COSEやIoTプロトコルなどでのデータ表現
CBOR向き標準タグやアプリケーション定義タグで値の意味を示す
制約のある機器や通信での構造化データ交換・COSEやIoTプロトコルなどでのデータ表現
CBOR向き確認ポイント 1
Avroのデータ符号化にはwriter schemaが必要で、Object Container Fileはスキーマを含められます。CBORは各アイテムを型付きバイナリで表し、マップやタグを扱えますが、アプリ固有のスキーマ互換運用は別途定義します。
使い分け確認ポイント 2
Avroはrecord、union、enum、logical type等をスキーマで定義し、読み取り時にwriter/reader schemaを解決できます。CBORはバイト列、整数、配列、マップ、タグなどのデータモデルを定義し、特定のレコードスキーマ方式を強制しません。
使い分け選ぶ理由を詳しく
- どちらも相互にバイト互換ではありません。AvroからCBORへ移すときはschema、union、logical type、既定値と欠損を、CBORから移すときはtag、byte string、整数幅、決定的エンコード、未知拡張値を検証してください。