gpt4 book ai didi

java - Ignite 线程池使用 - 如何正确地将数据并行放入缓存中?

转载 作者:行者123 更新时间:2023-11-29 04:21:17 25 4
gpt4 key购买 nike

正如文档中所述,Ignite 提供了系统线程池来处理缓存相关操作。我的问题是数据放置,但流式和批量加载不是解决方案,因为数据来自多个客户端通过 REST 查询,并且需要对每个查询进行快速写入确认。

所以我正在寻找一种并行执行 cache.put() 操作的方法。第一个问题是——简单的 cache.put() 不是并行执行的吗?我发现我可以调用 Ignite 自定义 ExecutorService,如下所示:

 ExecutorService exec = ignite.executorService();
<...>
exec.submit(new IgniteRunnable() {
@Override public void run() {
System.out.println("data put");
cache.put(i, somedataobj);
}});

然后所有放置操作在所有节点上并行执行(因为我在所有节点的控制台输出中看到“数据放置”)。但是我认为并行放置不是一个合适的方法,因为数据首先发送到工作节点,然后才被放入。

另一种方法是像这样使用 Java 普通固定线程池:

        ExecutorService exec = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
long startTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
int t = i;
DataClass dataobj = data().build();
exec.submit(new IgniteRunnable() {
@Override public void run() {
System.out.println("data put");
cache.put(t, dataobj);
}});

}

exec.shutdown();
exec.awaitTermination(0, TimeUnit.MILLISECONDS);
long stopTime = System.currentTimeMillis();
long elapsedTime = stopTime - startTime;
System.out.println(elapsedTime);

但随后我遇到了另一个问题 - 数据加载速度非常快(我得到的 elapsedTime 很小),但出现在缓存中的时间很晚(当我通过 ignite visor 执行 cache -a 时,我看到缓存如何规模正在增长)

如何正确地并行放置数据?如何使用 Ignite 系统线程池并行放置数据?

最佳答案

关于java - Ignite 线程池使用 - 如何正确地将数据并行放入缓存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49003821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com