我正在使用Aerospike AsyncClient和Aerospike UDF模块在Aerospike 2节点集群中使用多线程插入1000万条记录。我遵循的步骤是:
>
创建了一个由10个线程组成的executor服务,所有线程都将使用相同的AsyncClient
运行循环1000万次,并使用下面的代码调用execute命令
对于(int 1-0;i<10000000;i++){final int j=i;executorService.execute(new Runnable(){public void run(){put(“test”,“binname”,“setname”,j,list1,list2,aerospikeClient);}});}
private void put(String namespace,String setName,String binName,String keyVlaue,List campaignsIdsToBeAdd,List campaignsIdToBeRemoved,AsyncClient aerospikeClient.execute(writePolicy,new WriteHandler(),Key,“Aerospike_UDF”,“update_record”,value.get(campaignsIdsToBeAdd),value.get(campaignsIdToBeRemoved),value.get(binName));}
public void closed(){system.out.println(“===1”);
if(aerospikeClient != null && aerospikeClient.isConnected())
aerospikeClient.close();
if(executorService != null && !executorService.isShutdown())
executorService.shutdown();
}
executor、service和AsyncClient立即停止,之后没有插入发生,并且丢失了提交的数据。
有谁能帮我解决这个问题吗?或者建议我使用AsyncClient和Aerospike udf函数的更好方法。
我尝试使用同步客户端来完成这一操作,但它需要70分钟来插入所有值,但我希望在5分钟内完成。当我尝试在多个线程之间使用同步客户端时,它会引发客户端超时异常
看来您运行的UDF比常规的读/写操作慢。因此,即使您等待异步调用完成,也可能需要花费5分钟以上的时间。您需要调整集群的大小以满足性能需要。因此,您也需要考虑非编程的替代方案。
问题内容: 等待所有任务完成的最简单方法是什么?我的任务主要是计算,所以我只想运行大量的作业-每个内核上一个。现在,我的设置如下所示: 实现可运行。这似乎是正确执行的任务,但代码崩溃上用。这很奇怪,因为我玩了一些玩具示例,而且看起来很奏效。 包含数以万计的元素。我应该使用其他方法吗?我正在寻找尽可能简单的东西 问题答案: 最简单的方法是使用单行代码执行所需的操作。用你的话来说,你需要修改或包装以实
问题内容: 我只希望我的主线程在退出之前等待我所有的(p)线程完成。 线程来回移动的原因很多,我真的不想跟踪所有线程-我只想知道线程什么时候消失了。 wait()对子进程执行此操作,在没有子进程时返回ECHILD,但是wait(似乎不与(p)个线程一起工作)。 我真的不想麻烦保留每个未完成线程的列表(随它们来来去去),然后必须在每个线程上调用pthread_join。 有没有一种快速而又肮脏的方式
我想在C#中处理子目录和文件的文件系统/文件夹。我正在使用TPL库中的任务。这个想法是递归地执行它并为每个文件夹创建一个任务。主线程应该等待子线程完成,然后打印一些信息。事实上我只是想知道扫描何时完成。我已经开始使用线程池,然后切换到TLP。做了一些简单的例子。经过一些尝试从简单的代码到越来越臃肿的代码我被困在这里: 主线程有时仍然过早地继续,而不是在完成所有其他线程之后继续。(我对C#比较陌生,
当在postgres中进行并发更新时,我得到一个 错误:由于并发更新,无法序列化访问 有没有办法让事务等到另一个事务完成,而不是因错误而失败? 这是我的测试案例: 并且另一个会话(会话2)同时发生 如何使事务等待上一个事务完成再执行。截至目前,它不会执行,它只会报告错误,这让我在服务器上管理故障逻辑。是否有可以使用类似事务队列的东西?或者也许是一个语句,用于检查是否有其他事务正在进行,然后等待它解
问题内容: 我需要一次执行一些任务4,如下所示: 全部完成后如何获得通知?现在,我想不出什么比设置一些全局任务计数器并在每个任务结束时减少它,然后无限循环监视此计数器为0更好的了。或获取期货的列表,并在无限循环中对所有期货进行isDone监视。什么是不涉及无限循环的更好的解决方案? 问题答案: 基本上在你致电之后:
我有一个简单的Java程序,它使用SpringWebClient发送多个请求。每个都返回一个mono,我使用的是response。subscribe()以检查结果。 但是,我的主执行线程在处理所有请求之前完成,除非我添加一个长线程。睡眠()。 对于CompletableFutures,您可以使用:CompletableFuture。allOf(期货)。join(); 有没有办法等待所有单声道的完成