2016-06-17 11 views
2

"コーダー"の目的を理解することができません。私の理解は、特定のオブジェクトをバイト形式でどのようにコード化するか、等価性とハッシュコードを評価する方法をデータフローに「教える」ためにコーダーを選択することです。選択したコーダーがパフォーマンスに大きな影響を及ぼしますか?

デフォルトでは、おそらく誤って、ほとんどの私のカスタムクラスに「シリアライズ可能な実装」という言葉を入れてしまう傾向があります。これには、データフローが不平を言っていないという利点があります。しかし、これらのクラスのいくつかは巨大なオブジェクトであるため、パフォーマンスが低下するのではないかと疑問に思っています。代わりに、等価性とハッシュコードなどを判断するために使用できるフィールドを1つまたは2つ指定するカスタムコーダーを実装する必要があります。これは意味をなさない?別の言い方をすれば、デフォルトのシリアルコーダの代わりにカスタムコーダ(1つまたは2つの小さなプリミティブフィールドを使用する)を作成すると、非常に大きなクラスのパフォーマンスが向上しますか?

答えて

2

Javaのシリアル化は、他の形式のエンコーディングと比較して非常に遅く、パフォーマンスの問題を引き起こす可能性があります。ただし、オブジェクトの一部をシリアライズするということは、プロセス間でオブジェクトが送信されるときに残りのオブジェクトがドロップされることを意味します。

直列化を使用して、ほとんど同じように簡単に、あなたは自動的にあなたのクラスからアブロスキーマを推測します

@DefaultCoder(AvroCoder.class) 

これをアノテーションで、あなたのクラスをAvroCoderを使用することができることをはるかに良いです。これはジェネリック型では機能しないので、その場合はカスタムコーダーを使用することをお勧めします。

関連する問題