科学アプリケーションからデータを保存するにはバイナリ形式を設計する必要があります。このデータは、他のアプリケーションでは容易に読み取ることができないバイナリ形式でエンコードする必要があります(クライアントの一部の要件です)。結果として、独自のバイナリ形式、そのエンコーダとそのデコーダを構築することにしました。Protobufバイナリ形式のデザイン:パフォーマンスとvarint
protobufを含む多くのバイナリ形式からインスピレーションを得ています。 protobufが埋め込まれたメッセージの長さをエンコードする方法です。 https://developers.google.com/protocol-buffers/docs/encodingによれば、埋め込まれたメッセージのサイズは、最初はvarintとしてエンコードされています。 しかし、埋め込まれたメッセージをエンコードする前に、そのサイズはまだわかりません(varintとしてエンコードされた多数の整数を含む埋め込みメッセージの例を考えてください)。その結果、メッセージをディスクに書き込む前にメッセージを完全に符号化して、そのサイズを知る必要があります。 このメッセージは膨大であると想像してください。結果として、効率的な方法でそれを符号化することは非常に困難である。埋め込まれたメッセージが書き込まれたら、このサイズを完全なintとしてエンコードしてファイルのこの部分に戻すことができますが、varintのniceプロパティが緩和されています.32ビットまたは64ビット整数。したがって、varintを使用してGoogleの実装に戻る:
実装方法がありませんか?この方式は大きなメッセージでは効率が悪いですか?
科学データと大きなファイルについては、HDF5もご覧ください。大量のデータがある場合、そのパフォーマンスはしばしばprotobufよりも優れています。 – jpa