Я использую 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>