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

标签 java hazelcast

我使用 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/

相关文章:

Java - 像普通代码一样运行字符串

java - 基本类型到 int 的转换

hazelcast - hazelcast 配置文件 v3.6 异常

java - 集中缓存服务器。 (Ehcache 或 Hazelcast)

java - 验证我的 hazelcast xml 配置文件已被提取的最佳方法

java - haarcascade_frontalface_alt.xml 不工作

java - 需要在 Windows 2008 R2 上的压缩文件中按天导出 IIS 日志和 Tomcat 日志

GlassFish 上的 JavaMail 和 Mandril

session - hazelcast tomcat session 不从应用程序上下文加载类

java - HazelcastInstanceAware 不适用于嵌套对象