Java 如何向hazelcast中的分布式队列添加对象?
当队列存储在与执行代码的节点不同的节点上(并且在该队列的配置中设置为0)时,向hazelcast中的分布式队列添加项目的速度非常慢(读取:66个项目/秒;这正常吗?)。是否有任何方法可以从所有者节点添加项目?我使用Hazelcast的方法有什么根本性的错误吗 此操作大约需要15秒:Java 如何向hazelcast中的分布式队列添加对象?,java,networking,distributed-computing,hazelcast,Java,Networking,Distributed Computing,Hazelcast,当队列存储在与执行代码的节点不同的节点上(并且在该队列的配置中设置为0)时,向hazelcast中的分布式队列添加项目的速度非常慢(读取:66个项目/秒;这正常吗?)。是否有任何方法可以从所有者节点添加项目?我使用Hazelcast的方法有什么根本性的错误吗 此操作大约需要15秒: public static void main(String[] args) throws ExecutionException { HazelcastInstance hazelcastInstance =
public static void main(String[] args) throws ExecutionException {
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
IQueue<String> configs = hazelcastInstance.getQueue("configs");
for(int i = 0; i<1000;i++) {
configs.add("Some string"+i);
}
}
publicstaticvoidmain(字符串[]args)抛出ExecutionException{
HazelcastInstance=Hazelcast.newHazelcastInstance();
IQueue configs=hazelcastInstance.getQueue(“configs”);
对于(int i=0;i有两种方法可以优化队列。队列可以以二进制或对象形式存储条目。在上面可以定义备份数量,备份越多越慢。默认复制备份数量为1。这意味着对于每个pu,除了put之外,您将有一个复制。可能使用二进制形式的条目存储时,提高性能最多的是序列化。Java序列化非常慢。请改用DataSerialized或IdentifiedDataSerialized
您需要aso来检查某些慢速网络的网络延迟。对于1000次插入的网络通信,您将只有1-2毫秒的延迟。这将是1000-2000毫秒,这是1-2秒的网络等待时间
对于批量管道,只要插入顺序不重要,您可以并行插入
队列可以有异步备份,这将再次提高一点性能
更新:
在应用程序的正常运行过程中,很少会出现一个单独的场景。因此,不要逐个插入这1000个值,而是执行以下操作:
List arrayList=新建arrayList()
for(int i=0;iconfigs.put(t));
现在您正在并行插入。我更新了关于备份的帖子。我已经尝试过了。并行执行批处理操作是什么意思?在不同的线程中?@cobby看到了更新。您还测量了两台服务器之间的网络延迟吗?是的,它是13ms,这清楚地解释了性能缓慢的原因。谢谢lot mate!您对队列备份问题有何看法?@cobby indead:)使用这种软件,您通常应该将延迟控制在1毫秒以下。但这在很大程度上取决于您的承受能力。parallelStream()将速度提高了两倍左右。只需收集本地列表中的对象并使用configs.addAll()执行批插入即可大约乘以100:)
<?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="configs">
<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>
for(int i=0;i<1000;++i) {
arrayList.add("myString " + i);
}
arrayList.paralelstream().forEach(t->configs.put(t));