Как создать асинхронные резервные копии общих структур данных в Hazelcast? - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь добавить x количество объектов с помощью простого цикла for в распределенную очередь Hazelcast (IQueue).

        HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
        BlockingQueue<String> configs = hazelcastInstance.getQueue("test"); 
        for(int i = 0; i<1000;i++) {
            configs.add("Some string"+i);
        }

Изменение значений и в конфигурации (см. Ниже) не делаетне может повлиять на скорость выполнения.Я бы предположил, что увеличение блокирует операции вставки, а увеличение - нет (на самом деле цикл должен выполняться так же быстро, как если бы операция #add находилась в локальной очереди).Однако время выполнения цикла for одинаково.Даже если я установлю оба значения в 0. Почему это (это кластер из двух узлов с одним узлом в другом виртуальном компьютере)?

<?xml version="1.0" encoding="UTF-8"?>
<hazelcast xsi:schemaLocation=
  "http://www.hazelcast.com/schema/config hazelcast-config-3.7.xsd"
  xmlns="http://www.hazelcast.com/schema/config"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <network>
        <port auto-increment="true" port-count="20">5701</port>
        <join>
            <multicast enabled="false">
        </multicast>
        <tcp-ip enabled="true">
            <member>172.105.66.xx</member> 
        </tcp-ip>
        </join>
    </network>

    <queue name="test">
        <statistics-enabled>false</statistics-enabled>
        <max-size>0</max-size>
        <backup-count>0</backup-count>
        <async-backup-count>1</async-backup-count>
        <empty-queue-ttl>-1</empty-queue-ttl>
    </queue>
</hazelcast>

1 Ответ

1 голос
/ 17 июня 2019

Асинхронное резервное копирование не блокирует ваши вызовы, поэтому в настройке 0 или 1 должна быть минимальная разница. Установка другого значения не имеет смысла в кластере из 2 узлов.

Разница заключается в том, чтоесли владелец раздела с вашей структурой данных является локальным или удаленным.Проблемы с производительностью в таком случае обычно вызваны задержкой в ​​сети между вызывающим (ваш тест) и владельцем структуры данных (удаленный экземпляр Hazelcast).

HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
IQueue<String> configs = hazelcastInstance.getQueue("test"); 
for(int i = 0; i<1000;i++) {
    configs.add("Some string"+i);
}
Member localMember = hazelcastInstance.getCluster().getLocalMember();
Member partitionOwner = hazelcastInstance.getPartitionService().getPartition(configs.getName()).getOwner();
boolean localCall = localMember.equals(partitionOwner);
System.out.println("Local calls to IQueue: " + localCall);
...