ストレージの avro v/s thrift を評価しています。現時点では、Avro が選択されているようですが、ドキュメントには、シリアル化されたときにスキーマがデータと一緒に保存されると記載されています。これを回避する方法はありますか。データの生成と消費の両方を担当しているため、スキーマのシリアル化を回避できます。また、スキーマを使用したシリアル化されたデータのサイズの違いは、スキーマのないデータよりもはるかに大きいですか?
3 に答える
データと一緒にスキーマを保存する必要があると確信しています。これは、.avro ファイルを読み書きするときに Avro がそれを使用するためです。
http://docs.oracle.com/cd/NOSQL/html/GettingStartedGuide/avroschemas.htmlによると:
Avroバインディングを使用して、スキーマをOracle NoSQL Databaseレコードの値部分に適用します。これらのバインディングは、値を書き込む前に値をシリアル化し、読み取った後に値を逆シリアル化するために使用されます。これらのバインディングを使用するには、アプリケーションで Avro データ形式を使用する必要があります。これは、格納された各値がスキーマに関連付けられていることを意味します。
サイズの違いに関しては、スキーマを 1 回保存するだけでよいため、大きなスキームではそれほど大きな違いはありません。私のスキーマは 105.5KB を使用し (これは非常に大きなスキーマです。あなたのスキーマはそれほど大きくないはずです)、シリアル化された各値は 3.3KB を使用します。データの生のjsonだけで違いがどうなるかはわかりませんが、投稿したリンクによると:
各値は、サイズが 1 ~ 4 バイトの小さな内部スキーマ識別子以外のメタデータなしで保存されます。
しかし、それは単一の単純な値のためだけかもしれません。
これは私にとってHDFSにあります。