[英]Get IMap entries on same node as Predicate keys [Hazelcast]
我正在使用Hazelcast 3.6 IMap來分布式存儲大量數據(我已經在1B項目上進行了測試)。 我想通過鍵加入2個IMap實例,但是似乎沒有任何內置功能可以做到這一點。 因此,如果密鑰相等,我將使用@PatritionAware
將這些映射的條目存儲在同一節點中,然后使用Set<K> localKeySet();
柵格的每個成員上的第一張地圖。 此后,我嘗試從同一節點上的第二個映射中獲取值,以避免網絡傳輸謂詞鍵。 但是似乎getAll(Set<K> keys)
不在同一節點上執行此操作。 有人已經有同樣的問題嗎? 是否可以基於Hazelcast功能解決該問題?
請參見下面的代碼示例
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); } ...
我猜您正在尋找的是EntryProcessor
。 該EP還必須實現HazelcastInstanceAware
才能訪問其他數據結構。 應用數據親和力仍然很重要,就像您已經做過的那樣,以確保屬於一起的數據存儲在同一分區內,以便可以訪問。
有關EntryProcessor的更多信息,請參閱文檔( http://docs.hazelcast.org/docs/3.6/manual/html-single/#entry-processing-with-imap-methods ),並在我們的示例中找到示例倉庫( https://github.com/hazelcast/hazelcast-code-samples/tree/master/distributed-map/entry-processor )。
隨時詢問更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.