Пользовательская сериализация gemfire не помогает

1

Я использую gemfire как свой кеш. Размер кучи кеша значительно превышает 100 ГБ. Я обнаружил, что, когда мы помещаем данные в кеш-гейм-код от клиента, он будет сериализовывать данные и отправлять их на сервер, а на сервере данные хранятся в сериализованной форме. Проблемы:

  1. Когда я пытаюсь выполнить любой вызов функции на сервере, он начинает десериализацию данных, и это очень трудоемко, иногда требуется больше часа, чтобы перебирать объекты в кеше. (Количество объектов близко к 6 миллионам).
  2. Я попытался использовать серийную сериализацию gemfire (класс DataSerializer). И объем памяти, который требуется после того, как все данные находятся в кеше, составляет около 60 ГБ, что является тем же самым, если бы я использовал сериализацию по умолчанию Java.
  3. Я попытался использовать библиотеку под названием Kryo https://github.com/EsotericSoftware/kryo, и это очень помогает, но я до сих пор не понимаю, почему сериализация gemfire не помогает мне, поскольку я сериализую каждый атрибут класса индивидуально поэтому не должно быть никакого бремени для написания заголовков классов и любых других метаданных.

Любая помощь могла бы быть полезна.

Теги:
deserialization
serialization
gemfire

2 ответа

1
Лучший ответ

Вы изучали использование параметра read-serialized=true в файле cache cache.xml? Установка этого атрибута в значение true позволит серверу выполнять операции с кэшированными объектами без необходимости десериализации сначала. Узнайте больше об этом в документации Pivotal.

  • 0
    Я полагаю, вы говорите об автоматической сериализации PDX. Эта опция недоступна в версии Gemfire 6.5. Поэтому я не могу установить опцию read-serialized=true .
0

Вивек,

если размер объекта слишком велик, это поможет использовать функцию распространения Delta Gemfire https://pubs.vmware.com/vfabric5/index.jsp?topic=/com.vmware.vfabric.gemfire.6.6/getting_started/quickstart_examples/delta_propagation.html

Это все равно будет иметь сериализацию/десериализацию, но разница будет с клиентской стороны, которую вы только отправляете "то, что изменилось в объекте" на сервер, и теоретически это то, что реплицируется на другие серверы и клиенты, если вы иметь список интересов, зарегистрированный на клиентах.

Я также обнаружил, что нормальный PUT в кэше клиента намного более эффективен, чем использование выполнения функции (onRegion или onServers и т.д.),

Ещё вопросы

Сообщество Overcoder
Наверх
Меню