【问题标题】:Hazelcast mapstore based on map nameHazelcast mapstore 基于地图名称
【发布时间】:2015-12-04 19:47:12
【问题描述】:

我有一个 Hazelcast 实例,它根据地图名称组织数据。地图名称是动态的,所以在 Hazelcast 实例启动之前我不知道它们会是什么。我现在想通过 MapStore 功能将这些数据存储在数据库中,但保留我使用地图名称设置的组织。在查看 MapStore 功能时,我看不到任何方法来检索对象来自的地图或地图名称。看起来我得到的只是 MapStore 实现中的键值对。

从更广泛的角度来看,是否有任何方法可以获得有关需要存储的键值对的任何信息(不仅仅是地图名称)?我想传递一些有关如何存储数据的知识...我知道调用 map.put(..) 时的信息,但我不知道如何将这些信息传递给 MapStore 调用...

【问题讨论】:

  • 您可以在密钥中添加额外的信息吗?

标签: hazelcast hazelcast-imap


【解决方案1】:

我只需要类似的东西,发现您可以实现 com.hazelcast.core.MapStoreFactory 接口,其 'newMapStore' 方法为您提供地图名称和配置中的属性.从那里“新”您自己的 MapStore 实现传递地图名称。

public class MyMapStoreFactory implements MapStoreFactory {

    @Override
    public MapStore newMapStore(String mapName, Properties properties) {
        return new MyMapStoreImplementation(mapName, properties);
    }
}

并像这样在 hazelcast.xml 配置中配置这个工厂类:

<map name="MapX*">
    <map-store enabled="true" initial-mode="EAGER">
        <factory-class-name>MyMapStoreFactory</factory-class-name>
    </map-store>
</map>

请注意地图名称上的通配符,并且一旦您设置了 ,该 元素就不能出现。

用 Hazelcast 3.6.1 测试过,效果很好。

【讨论】:

    【解决方案2】:

    据我了解,hazelcast 没有开箱即用的支持。以下是我能想到的几种解决方法:

    1. 将额外信息(映射名称、如何存储数据等)封装在上下文对象中,并将其存储在与您的键对应的不同 Java 映射中。稍后在您的 MapStore 实现中使用此映射来检索有助于您持久化键值对的相应信息。

    你把操作可能看起来像。

    hzMap.put(key, value);
    Context context = new Context();
    context.setHowToStoreData();
    context.setMapName();
    // any othe rother information
    context.xxx();
    // create a unique context key which can be later deduced from (key,value) pair.
    contextKey = getUniqueContextKey(key, value);
    contextMap.put(contextKey, context);
    

    在您的 MapStore 实现中,您可以使用此 contextMap 来检索其他值。

    1. 第二种方法是将信息封装在(键,值)对中。您可以创建一个名为 CacheEntry 的新类来存储缓存值以及其他信息。然后,您可以稍后从 iMap 本身检索缓存值以及其他信息。

    你把操作可能看起来像。

    CacheEntry<YourValueClass> cacheEntry = new CacheEntry<YourValueClass>();
    cacheEntry.setValue(value);
    cacheEntry.howToStoreData(..);
    cacheEntry.setMapName(..);
    imap.put(key, cacheEntry);
    

    在您的 MapStore 实现中,您可以使用该值(将是一个 CacheEntry 对象)本身来检索附加信息以及实际的 valueYourValueClass 的实例)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多