gpt4 book ai didi

java - 查明 MapLoader 何时在 Hazelcast 中完成(急切)加载

转载 作者:行者123 更新时间:2023-12-02 07:35:26 29 4
gpt4 key购买 nike

我使用 MapLoader 将数据从数据存储初始加载到 Hazelcast (InitialLoadMode = EAGER)。我需要从一个物化 View 中加载这些数据,该 View 是为了在加载过程开始时进行加载而创建的,并且在加载完成后,我需要删除这个物化 View 。

有什么方法可以告诉 Hazelcast 在开始使用 MapLoader 加载数据之前触发创建此 View 的代码吗?

初始加载完成后,Hazelcast 有什么办法可以通知您吗?我查看了听众,但只看到了有关单一值的内容。

我想到的唯一方法是在 MapLoader.loadAllKeys() 中创建物化 View (它保证它只会执行一次,并且它将在任何人可以从 map 中获取某些内容之前执行,因此在任何人之前执行)可能会无意中调用加载过程),然后在其他地方调用 getMap("") (我使用 EAGER),当它完成时,删除该实体。

有更好的方法吗?

最佳答案

如果您需要完全控制初始化过程,那么您可能需要在没有 MapLoader 的情况下手动填充 map :

public class MapWrapper {

private Lock lock = hazelcastInstance.getLock("map-lock");
private IAtomicLong mapIsLoaded = ...;
ICountDownLatch latch = hazelcastInstance.getCountDownLatch("map-loaded");

public MapWrapper() {
latch.trySetCount(1);
}

public void initialize() {
lock.lock();
// Loading:
try {
// Skip loading if map already loaded (ensure only once for cluster)
if(mapIsLoaded.get() == 1) {
return;
}
mapIsLoaded.set(0);
// Here code to load your map, clean database:
initializeDatabase();
loadMap();
cleanDatabase();
} finally {
latch.countdown();
mapIsLoaded.set(1);
lock.unlock();
}
}

public Map getMap() {
// Blocking until loading is completed:
latch.await();
return hazelcastInstance.getMap(...);
}
}

关于java - 查明 MapLoader 何时在 Hazelcast 中完成(急切)加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56342488/

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