Плагин сжатия данных в памяти#
Описание#
Плагин cache-object-compression-plugin позволяет уменьшить объемы хранимой и передаваемой между серверными узлами информации за счет сжатия бинарного представления хранимых данных.
Данные сжимаются при операциях записи и распаковываются при операциях чтения.
Существующие данные будут сжаты только при их явной перезаписи.
Конфигурация#
Предварительно перенесите плагин из
$IGNITE_HOME/libs/optionalв$IGNITE_HOME/libs.Для активации плагина необходимо дополнить
IgniteConfigurationследующим образом:Java#IgniteConfiguration cfg = ... cfg.setPluginProviders(new CacheObjectCompressionPluginProvider(cfg));где
cfg- один из доступных вариантов конфигурации сжатия:new Lz4CacheObjectCompressionPluginConfiguration(...)— сжатие на основе библиотеки LZ4;new SnappyCacheObjectCompressionPluginConfiguration(...)— сжатие на основе библиотеки Snappy;new ZstdCacheObjectCompressionPluginConfiguration(...)— сжатие на основе библиотеки Zstandard;null— только распаковка ранее сжатых данных.
Алгоритм сжатия можно менять. После смены алгоритма требуется перезагрузить кластер. При этом ранее сжатые данные продолжат распаковываться.
Выбрать подходящий алгоритм можно, ориентируясь на сравнительные тесты.
XML-конфигурация#
Пример XML-конфигурации плагина:
Примечание
value="10" — уровень сжатия.
value="300" — размер записи, начиная с которого будет проводиться попытка сжатия.
<bean class="com.sbt.ignite.compress.CacheObjectCompressionPluginProvider">
<constructor-arg>
<bean class="com.sbt.ignite.compress.config.Lz4CacheObjectCompressionPluginConfiguration">
<constructor-arg type="int" value="10"/>
<constructor-arg type="int" value="300"/>
</bean>
</constructor-arg>
</bean>
<bean class="com.sbt.ignite.compress.CacheObjectCompressionPluginProvider">
<constructor-arg>
<bean class="com.sbt.ignite.compress.config.SnappyCacheObjectCompressionPluginConfiguration">
<constructor-arg type="int" value="300"/>
</bean>
</constructor-arg>
</bean>
<bean class="com.sbt.ignite.compress.CacheObjectCompressionPluginProvider">
<constructor-arg>
<bean class="com.sbt.ignite.compress.config.ZstdCacheObjectCompressionPluginConfiguration">
<constructor-arg type="int" value="10"/>
<constructor-arg type="int" value="300"/>
</bean>
</constructor-arg>
</bean>
Метрики#
Эффективность сжатия, помимо явной оценки утилизации ресурсов, можно оценить в реальном времени с помощью события EVT_CACHE_OBJECT_TRANSFORMED.
Пример конфигурации
IgniteConfiguration cfg = ...
cfg.setIncludeEventTypes(EventType.EVT_CACHE_OBJECT_TRANSFORMED);
CacheObjectTransformedEvent содержит информацию о:
исходных (несжатых) данных, метод
getOriginal();сжатых данных, метод
getTransformed();типе операции, метод
isRestore().
Пример оценки эффективности сжатия
ignite.events().remoteListen(
(uuid, evt) -> {
assertTrue(evt instanceof CacheObjectTransformedEvent);
// Пользовательский код оценки эффективности сжатия.
return true;
},
null,
EventType.EVT_CACHE_OBJECT_TRANSFORMED);