6

Hazelcast 2.3.1 を使用しており、hazelcast.xml 構成ファイルで、Hazelcast IMap に後書きを使用しています。

 <map name="HazelcastObjectOperations.objectMap">
         <backup-count>1</backup-count>
         <map-store enabled="true">
             <class-name>persister.HazelcastObjectPersister</class-name>
             <write-delay-seconds>10</write-delay-seconds>
         </map-store>
 </map>
 <properties>
      <property name="hazelcast.map.cleanup.delay.seconds">5</property>
 </properties>

私たちは2つのクラスを持っています

  1. HazelcastObjectOperationマップを保持し、オブジェクトをマップに配置するために使用されます。
  2. HazelcastObjectPersisterこれは、Hazelcast が呼び出しているときにオブジェクトを永続化するために MapStore を拡張するために使用されstoreAll()ます。
public class HazelcastObjectOperation {

    protected final IMap<Long, MyHzcObj> objectMap;
    private final HazelcastInstance instance;

    public HazelcastObjectOperation() {
        this.instance = Hazelcast.getDefaultInstance();
        this.objectMap = this.instance.getMap("HazelcastObjectOperations.objectMap" );
    }

    public void save( final MyHzcObj object ) {
        long start = System.currentTimeMillis();
        IdGenerator generator = Hazelcast.getIdGenerator("generator");
        this.objectMap.put( generator.newId(), object );
        long end = System.currentTimeMillis();
    }
}

問題は、Hazelcast がこのマップを実行し、永続化クラスの storeAll メソッドに格納する必要があるオブジェクトを取得するときに、マップが数秒間ロックされるため、今回はこのマップへの配置が続くことです。この問題の解決策はありますか?

4

1 に答える 1

3

これは Hazelcast の問題であり、https ://github.com/hazelcast/hazelcast/issues/293 によって修正されました。

ところで、古い値が必要ない場合は、set()代わりに使用することをお勧めします。put()この問題はput()、マップストアが定義されている場合に古い値をロードしようとすることに関連していました。set()古い値をロードしようとしないため、より高速でクリーンです。

于 2012-10-03T08:52:22.133 に答える