個人的なシリアライザの特徴表(作成中)
概要
個人的なシリアライザの特徴表です。
目的
シリアライザの比較で「速度」や「サイズ」といったベンチマーク的なものを見かけることがあります。
しかしシステムに採用する際はそれだけでなく、下記のような複数の基準でトレードオフを判断することが多いと思いますので、その参考用の表を作っておきます。
(まだ足りていない大事な視点があるかも。ご一報いただけると助かります。
https://twitter.com/shirouzu/status/1158303979970822144 )
- IDL/スキーマを使うか
・IDLなし=お手軽に使えます。
・IDLあり=共通スキーマを正確に定義でき、特に複数のプログラムで交換する時に助かります。 - リリース後の仕様追加/変更の柔軟さ
多用されるソフトの場合、リリース後に仕様追加が無いことは稀です。
多くはそれなりに変更に耐えますが、一切変更を許さないものも稀にあります。(XDR)。
また利用機会は多くありませんが、要素名の変更不可(msgpack)や、要素削除の一部不可(protobuf2 required)もあります。 - 安全性
・型検査をどのレイヤーでだれが担保しているか。
・プリミティブ単位の検査か、全てのデータ構造を検査しているか - 性能
・エンコード後のサイズ
・エンコード/デコードのそれぞれの速度 - ワイヤーフォーマット
・型情報が含まれているか
・要素名が含まれているか
・読みやすさ(通信データでは生である程度読みたい場合も)
・エンディアンをどこで吸収しているか(and 高効率なエンディアンタイプがあるか) - その他
・サポートしてる言語(メジャーなものは概ね存在)
・表現不能なパターンがある場合、その回避法
・サイズ制限があるか(2GB or 4GBのものが多い)
特徴表(作成中)
googleスプレッドシート