Карта Hazelcast занимает почти вдвое больше памяти даже после отключения резервного копирования

Я использую Hazelcast в качестве распределенного хранилища ключей и значений. У меня 650 миллионов ключей. Каждая запись в Hazelcast стоит 204 байта. Таким образом, он должен был потреблять всего ~ 130 ГБ памяти. Но он занимает почти вдвое больше памяти, чем должен, хотя мы отключили резервное копирование.

Файл Java (который запускает сервер, а также создает карту) выглядит следующим образом:

public class Driver {
    public static IMap<String, byte[]> createMap(String mapName, HazelcastInstance hzc){
        IMap <String, byte[]> map = hzc.getMap(mapName);
        return map;
    }
    public static void main(String[] args) {
        try {
            Config config = new XmlConfigBuilder(args[0]).build();
            HazelcastInstance hz = Hazelcast.newHazelcastInstance(config);
            IMap<String, byte[]> map = createMap("DBG", hz);
        } 
        catch (Exception e) {s
            e.printStackTrace();
        }
    }

}

В Hazelcast.xml мы внесли следующие изменения (как вы можете видеть в прикрепленном java-файле, имя нашей карты — DBG):

<map name="DBG">
    <in-memory-format>BINARY</in-memory-format>
    <backup-count>0</backup-count>
    <async-backup-count>0</async-backup-count>
    <time-to-live-seconds>0</time-to-live-seconds>
    <max-idle-seconds>0</max-idle-seconds>
    <eviction-policy>NONE</eviction-policy>
    <max-size policy="PER_NODE">0</max-size>
    <eviction-percentage>25</eviction-percentage>
    <min-eviction-check-millis>100</min-eviction-check-millis>
    <merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
</map>

person user3606212    schedule 03.03.2015    source источник
comment
Сколько узлов вы запускаете?   -  person noctarius    schedule 03.03.2015
comment
Я начал 128 узлов. Сегодня я проверил использование памяти Hazelcast. Даже если я храню только пару ключ-значение ‹1, 1›, она занимает 168 байт. Имеет ли это смысл? Я что-то упускаю? (Я проверил использование следующим образом: System.out.println(map.getEntryView(1).getCost());)   -  person user3606212    schedule 06.03.2015
comment
Конечно, это имеет смысл. Мы должны хранить дополнительную информацию о типе, мы сериализуем строки как utf8, есть статистика, такая как попадания, промахи, последний доступ и т. д. Вот ветка об этом: stackoverflow.com/questions/28809427/   -  person noctarius    schedule 10.03.2015
comment
Спасибо за ответ. Можно ли НЕ хранить некоторые метаданные. Например, мне не нужны хиты, промахи или время последнего доступа. Можно ли отключить их, изменив параметры xml/configuration?   -  person user3606212    schedule 14.03.2015
comment
@user3606212 user3606212, я думаю, что с картами Гц доступно два типа статистики. Статистика входа и статистика карты. Начиная с Hz 3.*.* мы можем отключить статистику карты из конфигурации, статистика включена = false. Однако не уверен, что мы можем отключить статистику входа.   -  person sutanu dalui    schedule 23.03.2015