5

このApacheAvro(シリアル化フレームワーク)は初めてです。シリアル化とは何かは知っていますが、avro、thrift、protocol buffers、

  1. これらの個別のフレームワークの代わりにJavaシリアル化APIを使用できないのはなぜですか?Javaシリアル化APIに欠陥がありますか。

  2. avroまたはその他のシリアル化フレームワークで「スキーマが変更されたときにコード生成プログラムを実行する必要がない」という以下のフレーズの意味は何ですか。

これらすべてを理解するのを手伝ってください!

4

3 に答える 3

3

1. Javaシリアル化の問題は、コードに依存しないことです。あなたのクラスの構造と密接に結びついている意味。他のシリアル化フレームワークは、この種の状況を回避するのに役立つ柔軟性/制御を提供します。java標準メカニズムにはwriteObjectreadObjectメソッドを介してシリアル化を制御する方法がありますが、他のfwkがより洗練された方法で対処しているという問題があります。

次に、Javaシリアル化の出力を他の言語(プラットフォーム)と交換することはできません。

少なくとも最後のではなく。Javaのシリアル化では、可能な限りコンパクトな結果が得られないため、ネットワークを介したデータの転送などを実行すると、パフォーマンスが低下する可能性があります。他のプロトコル(OracleのPOFやプロトコルバッファなど)は、より小さな出力を生成するようにさらに最適化されています。

2. 2番目の質問に関しては、シリアル化されたクラスの構造が変更された場合にコードを生成するプリコンパイルジョブを実行する必要がないことを意味していると思います。私は個人的に、ある種のコンパイル時のコード生成を強制するフレームワークを嫌います。生成されたコードを見なければならないという煩わしさは嫌いですが、それは私と私のocdだけです。

于 2013-01-10T12:26:27.340 に答える
3

これらの個別のフレームワークの代わりに Java シリアライゼーション API を使用できないのはなぜですか。Java シリアライゼーション API に欠陥があるのでしょうか。

特に知らない限り、Javaシリアライゼーションを使用できると思います。

使わない主な理由は

  • パフォーマンスの問題があることがわかります。
  • 言語間でデータを交換する必要があります。Java シリアライゼーションは Java 専用です。

スキーマが変更されたときにコード生成プログラムを実行する必要がない

これは、コードを再生成してコンパイルすることなく、古いモデルまたは新しいモデルでシリアル化されたデータを読み取ることができることを意味すると推測しています。つまり、モデルの変更に寛容です。

ところで: 私が使用するデータ モデルは通常 a) 非常に単純な b) 最大のパフォーマンスを必要とするため、フレームワークを使用せずに独自のシリアル化を作成します (または独自のフレームワークを作成します)。モデルが非常に単純で、頻繁に変更します。

要するに、できないことがわかっている場合を除き、最初に Java シリアライゼーションを試してください。

さまざまなシリアル化方法で行った比較

于 2013-01-10T12:17:11.993 に答える
1

Avro が得意とする 2 つの主な機能: Hadoop の MapReduce と通信プロトコル構造です。私はこれを MapReduce に使用し、特定のスキーマにすべて準拠する単一のファイルに多数のデータ インスタンスを配置します。各レコードは非常に効率的に保存され、マーカーは個々のレコードの輪郭を描きます。Hadoop はこれを使用して、Map タスクと Reduce タスクの間でデータをやり取りします。データと一緒にフィールド名を保存するよりもはるかに優れています。これらのファイルは、分散コンピューティング環境で処理するために、簡単に複数の部分に分割できます。スキーマはファイルに埋め込まれているため、読み手はデータがどのように見えるかを知る必要はありません。Avro はどの言語にも関連付けられておらず、Avro データを読み取るための言語 API がいくつかあります。単一の複雑なオブジェクトを書き出す場合は、Java のシリアル化または Avro が機能します。より多くの電力と効率が必要で、何百万もの個々のインスタンスを使用している場合は、Avro が適切な代替手段です。Java API を使用してこれを行うことができると確信していますが、なぜそれほど苦労するのでしょうか。

スキーマ解決ルールによってスキーマを進化させるメカニズムがあります。Java オブジェクトをスキーマに変換するツールもあります。

開始するのに最適な場所は次のとおりです。http://avro.apache.org/docs/current/spec.html 要点を理解するには、数回読む必要があります。Avro パッケージに付属のツールのいくつかを使用しようとした後で、もう一度お読みください。Avro はコツをつかむのに時間がかかります。JSON はデータ仕様言語としてのみ使用され、データの保存には使用されません。API または JSON ファイルを使用してスキーマを生成できます。柔軟性が高く、トラブルに巻き込まれるのに十分なロープ - それだけの価値があります。

于 2013-01-24T15:03:46.743 に答える