2012-09-26 31 views
6

Używamy Hazelcast 2.3.1, w naszym pliku konfiguracyjnym hazelcast.xml używamy napisać tyle na Hazelcast IMAP:Hazelcast mapa jest zablokowana

<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> 

Mamy dwie klasy

  1. HazelcastObjectOperation który trzyma mapę i jest używany do umieszczania w niej obiektów.
  2. HazelcastObjectPersister, który rozszerza MapStore jest używany do utrwalania obiektów, gdy Hazelcast dzwoni pod numer 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(); 
     } 
    } 

Problem jest, gdy Hazelcast biegnie tej mapie i pobiera obiektów, które powinny być przechowywane w sposób storeAll klasy persister , że mapa jest zablokowana przez kilka sekund, a więc umieścić na tej mapie trwa teraz . Czy istnieje rozwiązanie tego problemu?

Odpowiedz

3

To była kwestia Hazelcast i ustalony przez: https://github.com/hazelcast/hazelcast/issues/293

Przy okazji: pamiętać, że zawsze lepiej jest używać set() zamiast put() jeśli nie trzeba starą wartość. Problem był związany z tym, że put() próbuje załadować starą wartość, jeśli zdefiniowano magazyn map. set() nie próbuje wczytać starej wartości, więc jest szybszy i czystszy.

Powiązane problemy