मेरे पास जावा वेब ऐप है जो किसी तृतीय-पक्ष वेब सेवा का बैक-एंड उपयोग करता है। वेब सेवा को कॉल करना विलंबता बनाता है, जो भी संभव हो से बचने के लिए महत्वपूर्ण है। साथ ही, मेरे ऐप को केवल प्रति दिन एक निश्चित संख्या में वेब सेवा कॉल करने की अनुमति है, इसलिए जब तक पूरी तरह से आवश्यकता न हो तो वेब सेवा कॉल न करना सबसे अच्छा है।memcached-like key/value cache जो RAM और disk दोनों का उपयोग करता है
मेरा वर्तमान समाधान मेमकैड में वेब सेवा परिणामों को कैश करना है, और यह अच्छी तरह से काम करता है। असल में, हम वेब सेवा परिणामों को कैश करने के लिए रैम का उपयोग कर रहे हैं।
हालांकि, हम इसे अगले स्तर पर ले जाना चाहते हैं। हमारे पास डिस्क स्पेस भी है जिसे हम वेब सेवा परिणामों को कैशिंग करने के लिए डिस्क कैश के रूप में उपयोग करना चाहते हैं। मुझे एक प्रणाली चाहिए जहां पहले हम रैम कैश की जांच करेंगे (जिसे मेमकैच किया जा सकता है, लेकिन ऐसा नहीं होना चाहिए)। जब एक रैम कैश मिस होता है, तो हम डिस्क कैश की जांच करने के लिए वापस आते हैं। और जब डिस्क कैश मिस होती है, तो हम फिर वेब सेवा को कॉल करने के लिए वापस आ जाएंगे। जब भी हम नए वेब सेवा परिणामों को पुनर्प्राप्त करते हैं, तो हम रैम कैश और डिस्क कैश दोनों को अपडेट करेंगे।
एक संभावना एसक्यूएल डेटाबेस का उपयोग सिस्टम के टुकड़े के रूप में करना होगा जो भंडारण के लिए डिस्क का उपयोग करता है। लेकिन यह आदर्श से कम लगता है। डेटाबेस को बहुत सारे बच्चों की देखभाल की आवश्यकता होती है। वे अक्सर फ़ाइलों को शामिल करते हैं (या तो डीबी स्वयं या लेनदेन लॉग) जो बाध्य किए बिना बढ़ते हैं, इसलिए आपको यह प्रबंधित करने की आवश्यकता होती है कि क्या होता है जब इन बढ़ती फाइलें फाइल सिस्टम को अंतरिक्ष से बाहर निकलने का कारण बनती हैं।
सिस्टम के डिस्क-आधारित भाग के लिए मैं जो चाहता हूं वह कुछ ऐसा है जहां मैं इसे बता सकता हूं कि कितनी डिस्क स्थान का उपयोग करना है, और यह गारंटी देगा कि इससे कभी भी इसका अधिक उपयोग नहीं होगा। और जब यह अंतरिक्ष से बाहर हो जाता है, तो यह स्वचालित रूप से कम से कम हाल ही में उपयोग किए जाने वाले कुंजी-मूल्य जोड़े को फेंकना शुरू कर देगा। मुझे निश्चित रूप से एसीआईडी की आवश्यकता नहीं है, इसलिए कोई लेनदेन लॉग नहीं होना चाहिए।
तो मैं देख रहा हूँ या तो: 1) एक डिस्क-आधारित मुख्य मान भंडारण प्रणाली है कि "विफलता" जब Memcached एक कैश याद आती है या 2) एक एकल प्रणाली है कि Memcached और जगह लेंगे है के रूप में कार्य कर सकते हैं रैम कैश और डिस्क कैश दोनों प्रदान करें।
अन्य महत्वपूर्ण गुण जो मैं चाहता हूं: 1) मेमकैच की तरह, मुझे एक कैशिंग सिस्टम चाहिए जिसके लिए कोई बच्चों की देखभाल की आवश्यकता नहीं है। 2) Memcached की तरह, मैं चाहता हूं कि कैश कई सर्वरों पर शेड करे, प्रत्येक ऑब्जेक्ट बिल्कुल एक सर्वर पर रह रहा है। 3) Memcached की तरह, मुझे कुछ ऐसा करना चाहिए जो प्लग इन करने और उपयोग करने में काफी आसान हो। मैं यह काम करने के लिए कोड का एक टन लिखना नहीं चाहता।
अन्य सिस्टम जिन्हें मैंने पहले ही देखा है: 1) मेरा मानना है कि रेडिस बिल को फिट नहीं करता है, क्योंकि इसकी डिस्क कैश रैम में क्या है इसका एक दर्पण है। मैं चाहता हूं कि रैम कैश डिस्क कैश का एक छोटा सबसेट हो। 2) EhCache में "लगातार डिस्क स्टोर है जो वीएम पुनरारंभ के बीच डेटा संग्रहीत करता है", लेकिन यह ऊपर वर्णित जैसा ही नहीं है।
अपाचे जेसीएस (जावा कैशिंग सिस्टम) ऐसा लगता है कि यह एक अच्छा फिट हो सकता है, इसलिए मुझे इसका इस्तेमाल करने वाले लोगों के बारे में राय सुनना अच्छा लगेगा।
धन्यवाद। यह वह समाधान हो सकता है जिसे मैं ढूंढ रहा हूं। अब मैं देखता हूं कि आप डिस्कस्टोर को कॉन्फ़िगर कर सकते हैं और maxElementsOnDisk पैरामीटर निर्दिष्ट कर सकते हैं। –