Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何向hazelcast中的分布式队列添加对象?_Java_Networking_Distributed Computing_Hazelcast - Fatal编程技术网

Java 如何向hazelcast中的分布式队列添加对象?

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 =

当队列存储在与执行代码的节点不同的节点上(并且在该队列的配置中设置为0)时,向hazelcast中的分布式队列添加项目的速度非常慢(读取:66个项目/秒;这正常吗?)。是否有任何方法可以从所有者节点添加项目?我使用Hazelcast的方法有什么根本性的错误吗

此操作大约需要15秒:

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));