मैंने एक हेज़ेलकास्ट सेवा लागू की है जो मैपस्टोर फैक्ट्री और न्यूमैपलोडर के माध्यम से स्थानीय डेटाडब उदाहरणों में अपना डेटा संग्रहीत करता है। इस तरह से कुंजी यदि एक समूह को पुनः आरंभ करने के लिए आवश्यक है लोड किया जा सकता:हेज़ेलकास्ट और मैपडीबी - एक साधारण वितरित डेटाबेस को लागू करना
public class HCMapStore<V> implements MapStore<String, V> {
Map<String, V> map;
/** specify the mapdb e.g. via
* DBMaker.newFileDB(new File("mapdb")).closeOnJvmShutdown().make()
*/
public HCMapStore(DB db) {
this.db = db;
this.map = db.createHashMap("someMapName").<String, Object>makeOrGet();
}
// some other store methods are omitted
@Override
public void delete(String k) {
logger.info("delete, " + k);
map.remove(k);
db.commit();
}
// MapLoader methods
@Override
public V load(String key) {
logger.info("load, " + key);
return map.get(key);
}
@Override
public Set<String> loadAllKeys() {
logger.info("loadAllKeys");
return map.keySet();
}
@Override
public Map<String, V> loadAll(Collection<String> keys) {
logger.info("loadAll, " + keys);
Map<String, V> partialMap = new HashMap<>();
for (String k : keys) {
partialMap.put(k, map.get(k));
}
return partialMap;
}}
समस्या मैं अब का सामना करना पड़ रहा है कि hazelcast से MapLoader इंटरफ़ेस का loadAllKeys विधि पूरे क्लस्टर लेकिन हर की सभी चाबियाँ वापस जाने के लिए की आवश्यकता है नोड स्टोर केवल वस्तुओं का मालिक है।
उदाहरण: मेरे पास दो नोड्स हैं और स्टोर 8 ऑब्जेक्ट्स हैं, फिर उदा। नोड 2 के मैपडब में नोड 1 और 3 के मैपडब में 5 ऑब्जेक्ट्स संग्रहीत किए जाते हैं। मुझे लगता है कि कौन सा ऑब्जेक्ट स्वामित्व है जिसके द्वारा नोडेल का फैसला किया जाता है। अब पुनरारंभ करने पर नोड 1 लोड के लिए 5 कुंजी लौटाएगा AllKeys और node2 वापस आ जाएगा 3. Hazelcast 3 आइटमों को अनदेखा करने का निर्णय लेता है और डेटा 'खो गया' है।
इसका कोई अच्छा समाधान क्या हो सकता है? इनाम के लिए
अद्यतन: Here मैं hc मेलिंग सूची 2 विकल्प उल्लेख पर यह पूछा (मैं 1 अधिक जोड़ देंगे) और मुझे पता है कि अगर कुछ इस तरह पहले से ही hazelcast 3.2 या 3.3 के साथ संभव है करना चाहते हैं:
वर्तमान में मैपस्टोर इंटरफेस स्थानीय नोड से केवल डेटा या अपडेट प्राप्त करता है। क्या पूर्ण क्लस्टर की प्रत्येक स्टोरेज कार्रवाई के मैपस्टोर इंटरफ़ेस को सूचित करना संभव होगा? या शायद कुछ श्रोता जादू के साथ यह पहले से ही संभव है? हो सकता है कि मैं सभी वस्तुओं को एक विभाजन में रखने के लिए हेज़ेलकास्ट को मजबूर कर सकूं और प्रत्येक नोड पर 1 प्रतिलिपि रख सकूं।
यदि मैं उदा। 2 नोड्स तो मैपस्टोर इंटरफेस को मेरे स्थानीय डेटाबेस के साथ नोड 1 के लिए सही तरीके से कॉल किया जाता है और फिर नोड 2 के लिए। लेकिन जब दोनों नोड्स नोड 2 के डेटा में शामिल हो जाएंगे तो हेज़ेलकास्ट मानता है कि केवल मास्टर नोड सही हो सकता है। क्या मैं दोनों नोड्स से डेटा स्वीकार करने के लिए हेज़ेलकास्ट सिखा सकता हूं?
धन्यवाद - विकल्प अच्छा विचार कर रहे हैं, लेकिन मुझे पता है कि कैसे मैं ऐसा ही कुछ करना होगा चाहते हैं और यदि वह बिल्कुल संभव है। – Karussell
आपके प्रोजेक्ट को भी देखा :) https://github.com/jankotek/mapdb-hz-offheap – Karussell