Я не притворяюсь, но после потерянного дня я наконец нашел решение, которое обходит это.Я не могу сказать, является ли это функцией или просто проблемой для сообщения.
Во всяком случае в Hazelcast, если вы введете IMap значение как ArrayList , таким образом, будет сериализованВход по входу.Это означает, что если у нас есть 100 записей одного и того же экземпляра A, который равен 6 КБ, у нас будет 600 КБ с Hazelcast.Вот короткий RAW-код, который подтверждает мой ответ.
Чтобы обойти или избежать этого с помощью сериализации Java, вы должны обернуть ArrayList в объект, это поможет.
(только с Serializable, без других реализаций)
@Test
public void start() throws Exception {
HazelcastInstance client = produceHazelcastClient();
Data data = new Data();
ArrayList<Data> datas = new ArrayList<>();
IntStream.range(0, 1000).forEach(i -> {
datas.add(data);
});
wirteFile(datas,"DataLeoBefore","1");
client.getMap("data").put("LEO", datas);
Object redeserialized = client.getMap("data").get("LEO");
wirteFile(redeserialized,"DataLeoAfter","1");
}
public void wirteFile(Object value, String key, String fileName) {
try {
Files.write(Paths.get("./" + fileName + "_" + key), SerializationUtils.serialize(((ArrayList) value)));
} catch (IOException e) {
e.printStackTrace();
}
}