2016-06-16 10 views
2

こんにちは私は、最新のHazecastのバージョンとシリアル化に関して1つの質問があります。Hazelcastシリアル化ネストされたオブジェクト

class Customer implements DataSerializeable { 
    List<Address> adresses; 
    CustomerDetails details; 
} 

AddressクラスとCustomerDetailsクラスの両方でDataSerializeableが実装されています。我々は現時点ではそれらをシリアライズする方法は次のとおりです。

public void writeData(ObjectDataOutput out) throws IOException { 
    address.writeData(out); 
    short size = details.size(); 
    out.writeShort(size); 
    for (CustomerDetail detail: details) { 
     detail.writeData(out); 
    } 

} 

私はのカップルの上にいくつかのパフォーマンス・テストを実行しました:いくつかの例では

public void writeData(ObjectDataOutput out) throws IOException { 
    out.writeObject(address); 
    out.writeObject(details); 
} 

オンライン私は、彼らが同じクラスをシリアル化する方法があることを見ました私はパフォーマンスの大きな違いを観察することができませんでした。

ネストされたオブジェクトのシリアル化を行う推奨方法は何ですか。誰かが最新のHazelcastバージョン3.6に関してそれについてコメントすることができます。

たちはArrayListの、LinkedListの、HashMapのためのシリアライザを最適化したので、目立った違いはありません

+0

詳細の前にサイズが書き出される最後の例には行がありません。それ以外では、最初のコードスニペットはコレクション固有のシリアル化を行い、最後のコードスニペットはコレクション型に依存しません。 f。休止状態からの怠惰なリストは、リストオブジェクトを直列化するのではなく、要素を直列化します。 –

+0

ありがとうございました。私はそれがパフォーマンスになると顕著な違いがあることを知りたいと思います。私の印象は、out.writeObject()が呼び出されている間、Hazelcastは例2とは対照的に使用されるシリアライザを見過ごしているということです。パフォーマンスに顕著な差があるか、無視できる差。私の場合は、遅延コレクションを使用していません。例1または例2にする必要があります。ありがとうございました。 –

+0

コレクションの実装タイプを保持する場合は#1、そうでない場合は#2を使用します。パフォーマンスは非常にわずかに向上するはずです(I/Oノイズで失われている可能性がありますが、自分のデータプロファイルで試してみるためのテストを設定していないのはなぜですか?)。 –

答えて

2

これらの日ありがとうございます。そうすれば、手書きとほぼ同じ利点が得られます。

のArrayListシリアライザクラスは、ここで見つけることができます:https://github.com/hazelcast/hazelcast/blob/master/hazelcast/src/main/java/com/hazelcast/internal/serialization/impl/ArrayListStreamSerializer.java

は、それはあなたに、ほぼ同じ利益をあげることを、あなたが表示されます、コードを見てみます。

関連する問題