1

ストレージの avro v/s thrift を評価しています。現時点では、Avro が選択されているようですが、ドキュメントには、シリアル化されたときにスキーマがデータと一緒に保存されると記載されています。これを回避する方法はありますか。データの生成と消費の両方を担当しているため、スキーマのシリアル化を回避できます。また、スキーマを使用したシリアル化されたデータのサイズの違いは、スキーマのないデータよりもはるかに大きいですか?

4

3 に答える 3

0

データと一緒にスキーマを保存する必要があると確信しています。これは、.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にあります。

于 2013-08-02T19:21:57.650 に答える