मैं किसी कुंजी-मान (यहां केवी) डेटा स्टोर का उपयोग करने के प्रश्न का उत्तर नहीं दे सकता लेकिन मैं आपको कुछ उदाहरण दिखा सकता हूं, और अपने स्टैक ओवरफ्लो उदाहरण का उत्तर दे सकता हूं।
डेटाबेस पहुंच के साथ, आपको जो कुछ चाहिए वह एक केवी स्टोर है। उदाहरण के लिए, उपयोगकर्ता उपयोगकर्ता नाम "जो" के साथ लॉग इन करता है। तो आप अपने डेटाबेस में "उपयोगकर्ता: जो" देखते हैं और अपना पासवर्ड पुनर्प्राप्त करते हैं (निश्चित रूप से हैश)। या हो सकता है कि आपके पास "उपयोगकर्ता: पास: जो" के तहत उसका पासवर्ड हो, यह वास्तव में कोई फर्क नहीं पड़ता। यदि यह स्टैक ओवरफ़्लो था और आप पृष्ठ http://stackoverflow.com/questions/6935566/when-to-use-a-key-value-store-for-web-development
प्रस्तुत कर रहे थे, तो आप "प्रश्न: 6935566" देखेंगे और इसका उपयोग करेंगे। यह देखना आसान है कि कैसे केवी स्टोर आपकी अधिकांश समस्याओं को हल कर सकते हैं।
मैं कहना चाहूंगा कि एक केवी स्टोर पारंपरिक आरडीएमएस द्वारा प्रदान की गई कार्यक्षमता का सबसेट है। ऐसा इसलिए है क्योंकि पारंपरिक आरडीएमएस का डिज़ाइन कई स्केलिंग मुद्दों को प्रदान करता है, और आम तौर पर आपके द्वारा स्केल किए जाने पर विशेषताओं को खो देता है। केवी स्टोर इन सुविधाओं के साथ नहीं आते हैं, इसलिए वे आपको सीमित नहीं करते हैं। हालांकि, इन विशेषताओं को अक्सर किसी भी तरह से बनाया जा सकता है, जिसे कोर से स्केलेबल बनाया जा सकता है (क्योंकि यह तुरंत स्पष्ट हो जाता है यदि वे नहीं हैं)।
हालांकि इसका मतलब यह नहीं है कि ऐसी चीजें हैं जो आप नहीं कर सकते हैं। उदाहरण के लिए आप पूछताछ का जिक्र करते हैं।यह कई केवी स्टोर्स का एक झगड़ा है, क्योंकि वे आम तौर पर मूल्य के अज्ञेयवादी होते हैं (हमेशा सत्य नहीं, उदाहरण, रेडिस और अधिक) और जो भी आप ढूंढ रहे हैं उसे ढूंढने का कोई तरीका नहीं है। इससे भी बदतर, वे इसे जल्दी से करने के लिए डिज़ाइन नहीं किए गए हैं, वे वास्तव में कुंजी से वास्तव में तेज़ी से देख रहे हैं।
इस समस्या का एक समाधान आपकी चाबियों को शब्दावली से क्रमबद्ध करना और सीमा प्रश्नों की अनुमति देना है। यह अनिवार्य रूप से है "मुझे प्रश्न के बीच सब कुछ दें: 1 और प्रश्न: 5"। अब वह उदाहरण काफी बेकार है, लेकिन सीमा प्रश्नों के कई उपयोग हैं।
आपने कहा कि आप सभी घरों को $ 100 000 से अधिक चाहते हैं। यदि आप ऐसा करने में सक्षम होना चाहते हैं तो आप कीमतों से घरों का सूचकांक बनायेंगे। कहो कि आपके पास निम्नलिखित घर हैं।
house:0 -> {"color":"blue","sold":false,"city":"Stackoverville","price":500000}
house:1 -> {"color":"red","sold":true,"city":"Toronto","price":150000}
house:2 -> {"color":"beige","sold":false,"city":"Toronto","price":40000}
house:3 -> {"color":"blue","sold":false,"city":"The Blogosphere","price":110000}
एसक्यूएल में आप प्रत्येक फ़ील्ड को कॉलम में स्टोर करेंगे बल्कि इसे सभी में (इस मामले में JSON) दस्तावेज़ में स्टोर करेंगे। और SELECT * FROM houses WHERE price > 100000
हो सकता है। यह सब ठीक और बेवकूफ लगता है, लेकिन अगर कोई इंडेक्स नहीं बनाया गया है, तो इसके लिए आपकी मेज में हर घर को देखने और इसकी कीमत की जांच करने की आवश्यकता है, यदि आपके पास कुछ मिलियन घर हैं, तो धीमा हो सकता है। तो एक केवी स्टोर के साथ आपको एक इंडेक्स की भी आवश्यकता है। मुख्य अंतर यह है कि SQL डेटाबेस चुपचाप धीमी चीज करेगा, जहां केवी स्टोर सक्षम नहीं होगा।
यदि आपके पास सीमा प्रश्न नहीं हैं तो आपको अपने सूचकांक को एक ही दस्तावेज़ में चिपकाना होगा, जो इसे सुरक्षित रूप से दर्द को अद्यतन करता है और इसका मतलब है कि आपको प्रत्येक क्वेरी के लिए संपूर्ण अनुक्रमणिका डाउनलोड करना होगा, फिर से, स्केलेबिलिटी सीमित करना ।
house:index:price -> [{"price":500000,"id":"0"},{"price":150000,"id":"1"},{"price":110000,"id":"3"},{"price":40000,"id":"2"}]
लेकिन आप रेंज प्रश्नों (अक्सर कहा जाता keyscans) अगर आप इस तरह एक सूचकांक बना सकते हैं:
house:index:price:040000 -> 2
house:index:price:110000 -> 3
house:index:price:150000 -> 1
house:index:price:500000 -> 0
और फिर आप house:index:price:100000
और house:index:price::
(के बीच कुंजी अनुरोध कर सकता है ':' चरित्र '9' के बाद चरित्र है) और आपको [3,1,0]
मिलेगा जो सभी घर $ 100 000 से अधिक महंगा है (वे क्रम में भी मददगार हैं)। इसके बारे में एक और अच्छी बात यह है कि वे आपके क्लस्टर के "विभाजन" पर होंगे, इसलिए यह प्रश्न एक ही समय के साथ गाएगा (साथ ही छोटे अतिरिक्त स्थानांतरण ओवरहेड) के साथ ही होगा या दो हो जाएंगे यदि आपकी सीमा खत्म हो जाती है एक सर्वर सीमा (लेकिन इन्हें समानांतर में किया जा सकता है!)।
तो यह दिखाता है कि केवी स्टोर में क्वेरी कैसे करें। आप किसी भी चीज से पूछ सकते हैं जिसे स्ट्रिंग के रूप में आदेश दिया जा सकता है (बस कुछ भी) और इसे बहुत तेज़ी से देखें। यदि आपके पास रेंज क्वेरी नहीं हैं तो आपको अपनी पूरी इंडेक्स को एक कुंजी के नीचे स्टोर करने की आवश्यकता होगी जो बेकार है, लेकिन यदि आपके पास रेंज पूछताछ है तो यह बहुत अच्छा है, और बहुत तेज़ है। यहां एक और जटिल उदाहरण है।
मुझे टोरंटो में बेचे गए घर चाहिए जो $ 100 000 से कम हैं। मुझे बस अपनी अनुक्रमणिका तैयार करना है। (मैंने इसे और अधिक सार्थक बनाने के लिए कुछ घरों में जोड़ा) पहली बार सोचा कि आप हर संपत्ति के लिए एक और इंडेक्स बना सकते हैं, लेकिन आपको जल्दी से एहसास हो जाएगा कि इसका मतलब है कि आपको हर बेचे गए घर का चयन करना होगा और इसे डेटाबेस से डाउनलोड करना होगा। (यह मेरा मतलब था जब मैंने कहा कि स्केलिंग की समस्याएं तुरंत स्पष्ट हैं।) समाधान एक बहु-सूचकांक का उपयोग करना है। एक बार बनाया गया आप वास्तव में इच्छित मूल्यों का चयन कर सकते हैं।
house:index:sold:city:price:f~Fooville~000010:5 -> ""
house:index:sold:city:price:f~Toronto~040000:2 -> ""
house:index:sold:city:price:f~Toronto~140000:4 -> ""
house:index:sold:city:price:t~Stackoverville~500000:0 -> ""
house:index:sold:city:price:t~The Blogosphere~110000:3 -> ""
house:index:sold:city:price:t~Toronto~150000:1 -> ""
अब, अंतिम उदाहरण के विपरीत मैंने आईडी को कुंजी में रखा था। यह दो घरों के समान गुणों की अनुमति देता है। मैं उन्हें मूल्य में विलय कर सकता था लेकिन फिर एक हटाने वाली अनुक्रमणिका जोड़ना अधिक कठिन हो जाता है। मैंने अपने डेटा को ~
से अलग करना भी चुना। ऐसा इसलिए है क्योंकि यह सभी पत्रों के बाद शब्दावली से है, यह सुनिश्चित करना कि पूरा नाम सॉर्ट किया जाएगा और मुझे हर शहर को एक ही लंबाई में पैड नहीं करना है। एक उत्पादन प्रणाली में मैं शायद बाइट 255 या 0 का उपयोग करता हूं।
अब श्रेणी house:index:sold:city:price:f~Toronto~100000
- house:index:sold:city:price:f~Toronto~~
क्वेरी से मेल खाने वाले सभी घरों का चयन करेगी। और ध्यान देने योग्य महत्वपूर्ण बात यह है कि क्वेरी संख्याओं की संख्या के साथ रैखिक रूप से स्केल होती है। इसका मतलब यह है कि आपको उन सभी गुणों के लिए एक इंडेक्स बनाना है जिन्हें आप इंडेक्स करना चाहते हैं (हालांकि हमारे उदाहरण में इंडेक्स बेचे जाने के लिए भी काम करता है, और बेचे गए शहर के प्रश्न)। यह बहुत सारे काम की तरह प्रतीत हो सकता है लेकिन अंत में आप महसूस करते हैं कि यह सिर्फ इतना है कि आप इसे कर रहे हैं, न कि आपके डेटाबेस। मुझे यकीन है कि हम बात जल्द ही बाहर आ रहा इस तरह के लिए पुस्तकालयों देखना शुरू कर देंगे कर रहा हूँ: डी
विषय थोड़ा खींच के बाद, मैं पता चला है:
- एक केवी की दुकान से कुछ का उपयोग करता है।
- एक केवी स्टोर में क्वेरी कैसे करें।
मुझे लगता है कि आप पाएंगे कि केवी स्टोर कई अनुप्रयोगों के लिए पर्याप्त हैं और अक्सर पारंपरिक आरडीएमएस की तुलना में बेहतर प्रदर्शन और उपलब्धता प्रदान कर सकते हैं। कहा जा रहा है कि, हर ऐप अलग है और इसलिए, मूल प्रश्न का उत्तर देना असंभव है।
बहुत यकीन है कि आप कुंजी-मूल्य स्टोर पर फ़िल्टर कर सकते हैं यदि आप चाहते थे - स्टोर के कार्यान्वयन पर और शायद अपनी खुद की चालाकी पर निर्भर करता है। –