如何在 hazelcast 中创建共享数据结构的异步备份?
How to create asynchronous backups of shared data structures in hazelcast?
我正在尝试通过一个简单的 for 循环将 x 个对象添加到分布式 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>
async-backups 不会阻止您的调用,因此设置 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);
我正在尝试通过一个简单的 for 循环将 x 个对象添加到分布式 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>
async-backups 不会阻止您的调用,因此设置 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);