【发布时间】:2019-05-28 22:02:13
【问题描述】:
我使用 MapLoader 将数据从数据存储区初始加载到 Hazelcast (InitialLoadMode = EAGER)。我需要从在此加载过程开始时为加载而创建的物化视图中加载此数据,并且在加载完成后,我需要删除此物化视图。
有什么方法可以告诉 Hazelcast 在我开始使用 MapLoader 加载数据之前触发我的代码创建此视图?
在初始加载完成后,Hazelcast 有什么方法可以通知?我查看了听众,但我只看到了那些关于单一价值的人。
我想出的唯一方法是在 MapLoader.loadAllKeys() 中创建物化视图(它保证它只会执行一次,并且它会在任何人可以从地图中获取某些东西之前执行,因此在任何人之前可以无意中调用加载过程),然后在其他地方调用 getMap("") (我使用 EAGER),当它完成时,删除实体。
有更好的方法吗?
【问题讨论】:
-
据我了解,您需要使用 MapLoader 加载(一次?在应用程序启动时?)一些键集合。并且您需要尝试从地图中读取的其他线程在加载完成时等待。对吗?
-
我需要创建用于执行初始加载的数据库实体(与 MapLoader 一样),然后在加载完成后删除这些数据库实体。所以我需要在加载开始之前运行一段代码,然后在加载完成后运行另一段代码。
-
数据库中的实体是在应用程序启动时添加的还是由其他事件添加的?
-
这是正常 Hazelcast 初始加载过程的一部分,我需要创建与此过程相关的实体。地图由 Hazelcast 使用 MapLoaders 加载,它们有自己的生命周期。我需要在加载开始之前创建这些实体(并且它可以随时由任何缓存客户端触发)并在它结束后删除它们。此外,我只需要为整个集群执行一次,而不是为每个集群成员执行一次。