2011-02-28 15 views
7

मैं memcahced (विशेष रूप से Enyim memcached client) और मैं सक्षम करना चाहते हैं का उपयोग कर रहा कैश में एक कुंजी अन्य चाबियाँ, यानी पर निर्भर बनाने के लिए करता है, तो कुंजी एककुंजी बी पर निर्भर है आइटम, तो जब भी कुंजी बी हटा दिया गया है या बदला गया है, कुंजी ए भी अमान्य है।Memcached निर्भर

यदि संभव हो मैं भी सुनिश्चित करें कि डेटा अखंडता क्लस्टर में एक नोड के मामले में बनाए रखा है विफल रहता है, यानी अगर कुंजी बी कुछ बिंदु अनुपलब्ध पर है, कुंजी एक अभी भी अगर अवैध होना चाहिए बनाने के लिए चाहते हैं कुंजी बी अमान्य होना चाहिए।

this post के आधार पर मेरा मानना ​​है कि यह संभव है, लेकिन मैं स्वयं को यह समझाने के लिए पर्याप्त एल्गोरिदम को समझने के लिए संघर्ष कर रहा हूं कि यह कैसे काम करता है।

क्या कोई मेरी मदद कर सकता है?

उत्तर

0

मुझे नहीं लगता कि यह एक सीधा समाधान है लेकिन अपनी memcache कुंजी में नामस्थानों की एक प्रणाली बनाने का प्रयास करें, उदा। http://www.cakemail.com/namespacing-in-memcached/। संक्षेप में, कुंजी उत्पन्न होती हैं और अन्य memcached कुंजी के वर्तमान मान होते हैं। नेमस्पेसिंग समस्या में विचार एक निश्चित नामस्थान के भीतर मौजूद कुंजियों की पूरी श्रृंखला को अमान्य करना है। यह नामस्थान कुंजी के मूल्य को बढ़ाने जैसे कुछ द्वारा हासिल किया जाता है, और पिछले नामस्थान मान का संदर्भ देने वाली कोई भी कुंजी कुंजी पुन: उत्पन्न होने पर मेल नहीं खाती है।

आपकी समस्या थोड़ा अलग दिखता है, लेकिन मुझे लगता है कि कुंजी एक की स्थापना करके, कुंजी बी "नाम स्थान में होने की अगर एक नोड बी अनुपलब्ध था तो कुंजी एक के पूर्ण namespaced कुंजी की गणना जैसे

"Key A|Key B:<whatever Key B value is>" 

अवास्तविक लौटाते हैं, इस प्रकार आप यह निर्धारित है कि बी उपलब्ध नहीं है और के लिए कुंजी एक कैश देखने रद्द करने के लिए अनुमति देता है।

7

मैं हाल ही में मेमकैड का उपयोग कर रहा हूं और मुझे यकीन है कि आप जो भी कर रहे हैं, वह डिस्काउंट के साथ संभव नहीं है "जैसा है" लेकिन क्लाइंट साइड से संभाला जाना आवश्यक है। साथ ही डेटा प्रतिकृति सर्वर की तरफ होनी चाहिए और क्लाइंट से नहीं, ये 2 अलग-अलग डोमेन हैं। (कम से कम memcached के साथ, डेटा भंडारण तर्क की कमी को देखते हुए। हालांकि memcached का बिंदु बस इतना है कि, bettter प्रदर्शन के लिए चरम minimalism)

डेटा प्रतिकृति (भौतिक असफल क्लस्टर नोड के खिलाफ सुरक्षा) के लिए आपको जांच करनी चाहिए इसके बजाय http://www.couchbase.org/get/couchbase/current membased।

deps एल्गोरिदम के लिए, मैं क्लाइंट में ऐसा कुछ देख सकता था: किसी दिए गए कुंजी के लिए एक संदिग्ध अतिरिक्त कुंजी है जो आश्रित कुंजी की सूची/सरणी रखती है।

# - delete a key, recursive: 
function deleteKey(keyname): 
    deps = client.getDeps(keyname) # 
    foreach (deps as dep): 
     deleteKey(dep) 
     memcached.delete(dep) 
    endeach 
    memcached.delete(keyname) 
endfunction 

# return the list of keynames or an empty list if the key doesnt exist 
function client.getDeps(keyname): 
    return memcached.get(key_name + "_deps") or array() 
endfunction 

# Key "demokey1" and its counterpart "demokey1_deps". In the list of keys stored in 
# "demokey1_deps" there is "demokey2" and "demokey3". 
deleteKey("demokey1"); 
# this would first perform a memcached get on "demokey1_deps" then with the 
# value returned as a list of keys ("demokey2" and "demokey3") run deleteKey() 
# on each of them. 

चीयर्स