2016-04-01 24 views
0

Büyük miktarda veri dağıtımı yapmak için Hazelcast 3.6 IMap kullanıyorum (1B öğelerinde test ettik). 2 IMap örneğine anahtarlarla katılmak istiyorum, ancak bunu yapmak için yerleşik bir işlev yok gibi görünüyor. Bu nedenle, bu eşlemelerin girişlerini aynı düğümde saklamak için kullanıyorum ve daha sonra, ilk eşlemenin Set<K> localKeySet(); kodunu kullanarak her düğümün üyesi. Bundan sonra, aynı anahtardaki ikinci eşlemeden, aynı zamanda, anahtar anahtarlarının ağ tarafından aktarılmasını önlemek için değerler almaya çalışıyorum. Ancak getAll(Set<K> keys) aynı düğümde bunu yapmıyor gibi görünüyor. Hiç kimse aynı sorunu yaşıyor mu? Hazelcast işlevselliğine dayalı olarak çözmek mümkün mü?Öntanımlı anahtarlar olarak aynı düğüme IMap girişleri alın [Hazelcast]

Ne aradığınız bir EntryProcessor olduğunu tahmin

 

public class PartitionAwareKey implements PartitionAware, Serializable { 

    private Integer key; 

    public PartitionAwareKey(Integer key) { 
     this.key = key; 
    } 

    @Override 
    public Integer getPartitionKey() { 
     return this.key; 
    } 
} 
 



public class FindDataWithPredicateTask implements HazelcastInstanceAware, Serializable, Callable>> { 
... 
    @Override 
    public IMap call() throws Exception { 
     IMap map1 = hazelcastInstance.getMap("map1"); 
     Set localKeySet = map1.localKeySet(); 

     IMap, String> map2 = hazelcastInstance.getMap("map2"); 

     return map2.getAll(localKeySet); 
    } 
... 
 

cevap

0

aşağıdaki kod örneğine bakın. Bu EP, diğer veri yapılarına erişim sağlamak için HazelcastInstanceAware'u da uygulamak zorundadır. Birbirine ait verilerin erişilebilir olması için aynı bölüm içinde saklandığından emin olmak için halihazırda yaptığınız gibi veri yakınlığını uygulamak hala önemlidir.

EntryProcessor hakkında daha fazla bilgiyi belgelerde (http://docs.hazelcast.org/docs/3.6/manual/html-single/#entry-processing-with-imap-methods) bulabilirsiniz ve örnekler depomuzda (https://github.com/hazelcast/hazelcast-code-samples/tree/master/distributed-map/entry-processor) bulabilirsiniz.

Daha fazla bilgi talep etmek için çekinmeyin.

+0

Cevabınız için teşekkürler! 'HazelcastInstanceAware' ile 'EntryPeocessor' uygulama ve her düğüm için' hazelcastInstance.getMap ("map1") çağrısı ile bir işlem gönderdikten sonra '' PartitionWideEntryWithPredicateOperation var: birden çok bölümlerde bir çağrı yapamazsınız! '. Harita tuşları 'PartitionAware'ı uyguluyor, bu yüzden sadece yerel anahtarlarla (aynı düğümden veya aynı bölümden) giriş mümkün mü? – yevtsy

+0

IMap :: localKeySet nedir? – noctarius

+0

Daha önce de belirttiğim gibi, bir önceki adıma geçtiğim ‛IMAP: lokalKeySet‛ haritasına çağırmak istiyorum. Lütfen sorunun kod örneğine bakın. Ancak ‛EntryProcessor‛ yöntem ‛getMap using kullanılması durumunda, önceki yorumda yayınladığım istisna atar – yevtsy