2013-02-11 94 views
26

According to this thread, जेडिस जावा से रेडिस का उपयोग करना चाहते हैं तो उपयोग करने के लिए सबसे अच्छी बात है।क्या Redis के लिए एक एम्बेड करने योग्य जावा विकल्प है?

हालांकि, मैं सोच रहा था कि क्या कोई पुस्तकालय/पैकेज हैं जो पहले से ही रेडिस में मौजूद हैं, लेकिन समान सर्वर सेट अप करने की आवश्यकता के बिना जावा एप्लिकेशन में सीधे एम्बेडेड किए जा सकते हैं। (यानी, वेब सर्वर के लिए जेटी का उपयोग करना)।

अधिक सटीक होना, मैं कुशलता से निम्न कार्य करने में सक्षम होना चाहते हैं:

  1. एम उपयोगकर्ताओं के एक बड़े सेट (एम पहले से ज्ञात नहीं है) कर रहे हैं।
  2. एन वस्तुओं का एक बड़ा सेट है।
  3. हम चाहते हैं कि उपयोगकर्ता एक समय में एक उपयोगकर्ता/आइटम की जांच करें, जो संग्रहीत परिणाम (सामान्य डेटाबेस में) उत्पन्न करता है।
  4. प्रत्येक बार उपयोगकर्ता आने पर, हम उस उपयोगकर्ता को उस आइटम को असाइन करना चाहते हैं मौजूदा परिणामों की कम से कम संख्या जिसे उपयोगकर्ता ने पहले ही नहीं देखा है। यह सभी आने वाले उपयोगकर्ताओं पर वस्तुओं का अनुमानित राउंड-रॉबिन असाइनमेंट बनाता है, जब हम केवल सभी वस्तुओं को लगभग उसी समय देखते हुए देखते हैं।

उपर्युक्त समानांतर फैशन में होता है। जब एम और एन बड़े होते हैं, तो रेडिस एसक्यूएल प्रश्नों की तुलना में उपरोक्त अधिक कुशलता से पूरा करता है। क्या एक एम्बेडेड जावा लाइब्रेरी का उपयोग करके ऐसा करने का कोई तरीका है जो रेडिस सर्वर शुरू करने से थोड़ा हल्का है?

मुझे पता है कि जावा की समवर्ती पुस्तकालयों का उपयोग करके कोड का ढेर लिखना संभव है जो लगभग अनुमान लगाएगा (और कुछ हद तक, मैंने यह किया है), लेकिन यह वही नहीं है जो मैं यहां देख रहा हूं।

उत्तर

11

project voldemort पर एक नज़र डालें। यह लिंक्ड-इन द्वारा निर्मित एक वितरित कुंजी-मूल्य स्टोर है, और यह एम्बेडेड होने की क्षमता का समर्थन करता है।

त्वरित प्रारंभ मार्गदर्शिका में सर्वर एम्बेडेड बनाम स्टैंड-अलोन चलाने का एक छोटा सा उदाहरण है।

VoldemortConfig config = VoldemortConfig.loadFromEnvironmentVariable(); 
VoldemortServer server = new VoldemortServer(config); 
server.start(); 

मुझे रेडिस के बारे में बहुत कुछ पता नहीं है, इसलिए मैं उनकी सुविधा को फीचर से तुलना नहीं कर सकता। प्रोजेक्ट में हमने वोल्डमॉर्ट का इस्तेमाल किया, हमने इसका परिणाम पढ़ने के लिए रीडोनली बैकिंग स्टोर का इस्तेमाल किया। इसने हमें हमारे प्रसंस्करण डेटा-सेंटर में एक द्वि-दैनिक डेटाबेस "प्रीकंपाइल" करने और किनारे डेटा-केंद्रों तक "इसे जहाज" करने की अनुमति दी। इस तरह प्रत्येक किनारे डेटा सेंटर में इसके डेटासेट की स्थानीय प्रति थी।

संपादित करें: अपने प्रश्न को दोबारा पढ़ने के बाद, मैं Gauva's Table जोड़ना चाहता था - यह तालिका डेटास्ट्रक्चर कुछ भी आपकी तलाश कर सकता है और जो आपको कई नो-एसक्यूएल डेटाबेस के साथ मिलता है, उसके समान है।

+0

बहुत दिलचस्प लगता है ... तो मैं बस स्थानीय लुकअप और सामान के लिए एक एक नोड उदाहरण चला सकता हूँ? मैं इसकी जांच करुँगा। –

+0

@AndrewMao हां यह एक एकल नोड का समर्थन करता है। और मैंने गौवा की टेबल डेटा संरचना के लिए भी एक लिंक जोड़ा। शुभकामनाएं और खुश शिकार :-) – eSniff

-5

Google की गुवा लाइब्रेरी एक ही (और अधिक) के अनुकूल संस्करण प्रदान करती है जो रेडिस प्रदान करता है।

https://code.google.com/p/guava-libraries/wiki/CollectionUtilitiesExplained

उदा

 
    Guava      Redis 
    Sets.intersection(a,b) sinter a b 
    a.count()     scard a 
    Sets.difference(a,b)  sdiff a b 
    Sets.union(a,b)   sunion a b 

मल्टीसेट रेडिस सॉर्ट-सेट के लिए एक उचित सीधा प्रॉक्सी है।

+1

यह निश्चित रूप से प्रश्न का उत्तर नहीं देता है। जबकि गुवा एक बेहद उपयोगी सामान्य पुस्तकालय है, यह एक महत्वपूर्ण मूल्य स्टोर प्रदान नहीं करता है। इन तरीकों के परिणाम अभी भी किसी भी तरह से बने रहना होगा। – gyorgyabraham

+2

@gyabraham वास्तव में, कई उपयोग मामलों में रेडिस डेटा को जारी नहीं रख रहा है, कुछ अन्य डेटाबेस ऐसा कर रहा है। यह सिर्फ उन प्रश्नों की गणना करने के लिए एक तेज़ तरीका के रूप में उपयोग किया जाता है जो डेटाबेस का उपयोग करके लगभग असंभव होगा। किसी भी मामले में, अमरूद वास्तव में रेडिस की विशेषताओं को प्रतिस्थापित नहीं कर सकता है। –

+1

जेडिस रेडिस के लिए सिर्फ एक जावा एपीआई है। जावा प्रक्रिया के बाहर डेटाबेस को अभी भी स्पष्ट रूप से शुरू करने की आवश्यकता है। –

4

Hazelcast कई वितरित डेटा संरचना कार्यान्वयन प्रदान करता है जिसे रेडिस सेवाओं के शुद्ध जावा विकल्प के रूप में उपयोग किया जा सकता है। फिर आप अपने आवेदन को चलाने के लिए सभी आवश्यक निर्भरताओं के साथ एक "जार" भेज सकते हैं। आपको अपने स्वयं के आवेदन में रेडिस के सापेक्ष थोड़ा अलग प्राइमेटिव्स के लिए समायोजन करना पड़ सकता है।

इस स्पेस में वाणिज्यिक समाधानों में Teracotta's Enterprise Ehcache और Oracle Coherence शामिल हैं।

0

एलएमडीबी (लाइटनिंग मेमोरी डेटाबेस) पर एक नज़र डालें, क्योंकि मुझे बिल्कुल वही चीज़ चाहिए। मैं एक कंटेनर में एक ड्रॉपविज़ार्ड एप्लिकेशन तैनात करता हूं, और रेडिस या अन्य बाहरी निर्भरता जोड़ना दर्दनाक है। ऐसा अच्छा लगता है, अच्छी गतिविधि है। fyi, हालांकि, मैंने अभी तक उत्पादन में इसका उपयोग नहीं किया है।

https://github.com/lmdbjava/lmdbjava