Hazelcast 3.4: как избежать десериализации из ближайшего кеша и получить исходный элемент

Начиная с версии 3.X Hazelcast возвращает копию исходного объекта, которая хранится на распределенной карте с включенным ближним кешем, в отличие от версии 2.5, где был возвращен исходный объект.

Такое поведение позволяло локально изменять записи, хранящиеся на карте, и операции GET выполнялись быстро.

Теперь, в версии 3.X, он хранит двоичный объект в ближайшем кеше и вызывает десериализацию при каждом GET, что значительно влияет на производительность. Можно ли настроить ближний кэш карты Hazelcast 3.4.2 так, чтобы он возвращал ссылку на исходный объект, а не копию исходной записи?


person Dmitry    schedule 15.06.2015    source источник


Ответы (2)


В разделе <near-cache>, если вы установите

  • <in-memory-format>OBJECT</in-memory-format>
  • А ТАКЖЕ
  • <cache-local-entries>true</cache-local-entries>

вы должны получить тот же экземпляр.

Это работает как для клиента, так и для участника.

person nilskp    schedule 16.06.2015
comment
Согласно их документу, в этом случае объект будет десериализован и снова сериализован - дополнительные затраты на производительность. - person Dmitry; 16.06.2015
comment
@Dmitry Я тестировал, и он работает. Где в документации вы это видите? - person nilskp; 16.06.2015
comment
docs.hazelcast.org/docs/latest/manual/html/ Кроме того, при отладке кода Hazelcast можно увидеть, что внутри NearCache есть ConcurrentMap, который хранит CacheRecord, где значение хранится как BINARY. - person Dmitry; 16.06.2015
comment
@Dmitry, который описывает поведение map, а не near-cache. Убедитесь, что эти две настройки находятся в разделе <near-cache>, а не непосредственно в разделе <map>. - person nilskp; 16.06.2015
comment
О, вы хотите настроить представление в памяти около кеша. Это сработало! Однако в примере в документации к кэшу этот параметр конфигурации опущен. Большое тебе спасибо. - person Dmitry; 16.06.2015

Не думаю, что есть возможность получить оригинал. Чтобы избежать десериализации, вы можете попробовать установить

<in-memory-format>OBJECT</in-memory-format> 

в <near-cache> конфигурации. Таким образом, hazelcast будет хранить данные в <near-cache> в объектной форме, и десериализация не потребуется. Но я предполагаю, что это сработает, только если вы настроили <near-cahce> на стороне клиента, потому что, если <near-cache> находится на узле, вам все равно потребуется сериализация для передачи объекта от узла к клиенту.

person wantstoknow    schedule 16.06.2015
comment
Будьте осторожны при совместном использовании изменяемого объекта :) - person pveentjer; 17.06.2015