2016-06-16 4 views
2

Здравствуйте, у меня есть один вопрос относительно последних версий и сериализации Hazecast. Позволяет иметь следующий класс:Hazelcast Сериализация вложенных объектов

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

Оба класса Address и CustomerDetails реализуют DataSerializeable. Путь мы сериализация их на данный момент:

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

В некоторых примерах онлайн увидел, что способ, которым они сериализация тот же класса является:

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

} 

Я провел некоторые испытания производительности по сравнению с парой milion records я не смог наблюдать значительную разницу в производительности.

Каков рекомендуемый способ сериализации вложенных объектов. Может кто-то прокомментировать это в отношении последней версии 3.6 Hazelcast.

Спасибо

+0

В последнем примере отсутствует строка, в которой размер будет выписан до деталей. Кроме того, ваш первый фрагмент кода делает сериализацию, специфичную для коллекции, последняя имеет тип Collection-type-agnostic. Если у вас есть f.e. ленивые списки из спящего режима, вы не хотите сериализовать объект списка, а элементы. –

+0

Благодарим вас за исправление. Я хотел бы знать, есть ли какая-то заметная разница, когда дело доходит до производительности. Мое впечатление, что в то время как out.writeObject() называется Hazelcast, просматривает сверхурочную работу сериализатора, который следует использовать в отличие от примера № 2. Можем ли мы сказать, что может быть заметная разница в производительности, или мы говорим о незначительная разница. В моем случае мы не используем ленивые коллекции. Должны ли мы пойти с примером один или пример два. Спасибо. –

+0

Перейдите к # 1, если вы хотите сохранить тип реализации коллекции, иначе перейдите к # 2; производительность должна быть немного лучше (но она, вероятно, потеряна при шуме ввода-вывода, и почему вы не настраиваете тест, чтобы попробовать его с собственным профилем данных?). –

ответ

2

В эти дни нет заметной разницы, так как мы оптимизировали сериализаторы для ArrayList, LinkedList, HashMap. Таким образом, вы получаете почти то же преимущество, что и почерк. Классы Serializer

ArrayList можно найти здесь: https://github.com/hazelcast/hazelcast/blob/master/hazelcast/src/main/java/com/hazelcast/internal/serialization/impl/ArrayListStreamSerializer.java

Глядя на код, вы увидите, что это даст вам почти такое же преимущество.

Смежные вопросы