की / वैल्यू स्टोर डेटाबेस क्या है?


56

मैं NoSQL के लिए विकिपीडिया पृष्ठ को देख रहा हूं और यह Key / Value store डेटाबेस पर कई विविधताओं को सूचीबद्ध करता है, लेकिन मुझे इस संदर्भ में Key / Value store द्वारा इसका क्या अर्थ है, इस पर कोई विवरण नहीं मिल सकता है। क्या कोई मुझे स्पष्टीकरण दे सकता है या लिंक दे सकता है? इसके अलावा, मैं ऐसे डेटाबेस का उपयोग कब करूंगा?


3
हाय @ indyK1ng ... मुझे लगता है कि आपने साइट पर कुछ सवाल पूछे हैं, लेकिन लगता है कि आपने प्रश्नों पर बहुत अधिक टिप्पणी नहीं दी है। साइट समुदाय के इंटरेक्शन पर केंद्रित है और हमारे द्वारा किए जाने वाले तरीकों में से एक अच्छी गुणवत्ता के उत्तर को स्वीकार करने और जवाब देने में मदद करता है जब उत्तर हमारी मदद नहीं करते हैं। मैं आपको उत्तर देने के लिए प्रोत्साहित करना चाहूंगा या कमेंट्री जोड़ना चाहूंगा जहां वे मदद नहीं करते हैं। धन्यवाद!
jcolebrand

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

1
तो क्या आप उन प्रकार के प्रश्न पूछने से रोक रहे हैं? मेटा पर जाएं, जांच करें। हम उन सवालों को भी पूछना चाहते हैं। या क्या आप इस बात का इरादा रखते हैं कि आप इस बारे में अधिक जानकारी चाहते थे कि NoSQL कैसे काम करता है? मैं इसमें भी जा सकता हूं, लेकिन यह महसूस नहीं किया कि यह इस सवाल का दायरा था।
jcolebrand

1
इसके अलावा, स्वीकार करना कोई पाप नहीं है, भले ही आप यहां न हों, और यह Google या इस तरह से लोगों की मदद करता है। मैं यह नहीं कह रहा हूं "मेरे सभी उत्तरों को स्वीकार करें, मुझे प्रतिनिधि की आवश्यकता है" जैसा कि आप देख सकते हैं कि क्या आप मेरी प्रोफ़ाइल पर जाते हैं, मैं नहीं। मुझे यह देखने में अधिक दिलचस्पी है कि भविष्य के उपयोगकर्ता "यह वही है जो पूछनेवाला उपयोगी पाया गया" द्वारा प्रदान की गई दिशा से लाभ उठा सकता है।
jcolebrand

@jcolebrand मैंने सोचा था कि इस प्रकार के प्रश्नों को विषय से हटकर माना जाता है, नाम परिवर्तन से। इसीलिए इस सवाल और मेरे कुछ अन्य प्रश्नों को जिस तरह से शब्दबद्ध किया गया था, वह इस विषय पर होगा। मुझे यह बताने के लिए धन्यवाद, मुझे मौका मिलते ही मैं और अधिक सक्रिय होना शुरू कर दूंगा (कॉलेज मेरा समय लेने की पूरी कोशिश कर रहा है, मैं अभी नेतृत्व कर रहा हूं;))।
indyK1ng

जवाबों:


42

क्या आप एक कुंजी / मूल्य जोड़ी की अवधारणा से परिचित हैं? यह मानते हुए कि आप जावा या C # से परिचित हैं, यह भाषा में मानचित्र / हैश / डेटाेबल / KeyValuePair के रूप में है (अंतिम C # के मामले में है)

जिस तरह से यह काम करता है वह इस छोटे से नमूना चार्ट में प्रदर्शित होता है:

Color        Red
Age          18
Size         Large
Name         Smith
Title        The Brown Dog

जहां आपके पास एक कुंजी (बाएं) और एक मूल्य (दाएं) है ... ध्यान दें कि यह एक स्ट्रिंग, इंट, या पसंद हो सकता है। अधिकांश KVP ऑब्जेक्ट आपको किसी भी ऑब्जेक्ट को दाईं ओर संग्रहीत करने की अनुमति देते हैं, क्योंकि यह सिर्फ एक मूल्य है।

चूँकि आपके पास हमेशा किसी विशेष ऑब्जेक्ट के लिए एक अद्वितीय कुंजी होगी जिसे आप वापस करना चाहते हैं, आप बस उस अद्वितीय कुंजी के लिए डेटाबेस को क्वेरी कर सकते हैं और परिणाम प्राप्त कर सकते हैं जो भी नोड के पास वस्तु है (यही कारण है कि यह वितरित सिस्टम के लिए अच्छा है। चूँकि अन्य एनओडी के लिए मतदान जैसी अन्य चीजें शामिल हैं, जो अन्य नोड्स रिटर्न से मेल खाने वाले मान को वापस करने के लिए)।

अब ऊपर मेरा उदाहरण बहुत ही सरल है, इसलिए यहां केवीपी का थोड़ा बेहतर संस्करण है

user1923_color    Red
user1923_age      18
user3371_color    Blue
user4344_color    Brackish
user1923_height   6' 0"
user3371_age      34

तो जैसा कि आप देख सकते हैं कि साधारण कुंजी पीढ़ी को उपयोगकर्ता का उपयोगकर्ता संख्या, अंडरस्कोर और ऑब्जेक्ट "उपयोगकर्ता" डालना है। फिर, यह एक साधारण भिन्नता है, लेकिन मुझे लगता है कि हम यह समझना शुरू कर देते हैं कि जब तक हम बाईं ओर के हिस्से को परिभाषित कर सकते हैं और इसे लगातार स्वरूपित किया जा सकता है, तब तक हम मूल्य को बाहर निकाल सकते हैं।

ध्यान दें कि मुख्य मूल्य पर कोई प्रतिबंध नहीं है (ठीक है, कुछ सीमाएं हो सकती हैं, जैसे कि पाठ-केवल) या मूल्य संपत्ति पर (आकार प्रतिबंध हो सकता है) लेकिन अभी तक मेरे पास वास्तव में जटिल प्रणाली नहीं है। चलो कोशिश करते हैं और थोड़ा आगे जाते हैं:

app_setting_width      450
user1923_color         Red
user1923_age           18
user3371_color         Blue
user4344_color         Brackish
user1923_height        6' 0"
user3371_age           34
error_msg_457          There is no file %1 here
error_message_1        There is no user with %1 name
1923_name              Jim
user1923_name          Jim Smith
user1923_lname         Smith
Application_Installed  true
log_errors             1
install_path           C:\Windows\System32\Restricted
ServerName             localhost
test                   test
test1                  test
test123                Brackish
devonly
wonderwoman
value                  key

आपको यह विचार मिलता है ... उन सभी को वितरित नोड्स पर एक बड़े पैमाने पर "तालिका" में संग्रहीत किया जाएगा (यह सब इसके पीछे गणित है) और आप बस नाम से आवश्यक मूल्य के लिए वितरित प्रणाली पूछेंगे।

बहुत कम से कम, यह मेरी समझ है कि यह कैसे काम करता है। मेरे पास कुछ चीजें गलत हो सकती हैं, लेकिन यह मूल बातें है।


अनिवार्य विकिपीडिया लिंक http://en.wikipedia.org/wiki/Associative_array


1
संपादित करने के बजाय मैं केवल इस लिंक को शामिल करने जा रहा हूँ en.wikipedia.org/wiki/Distributed_hash_table और इंगित करें कि यह वह जगह है जहाँ NoSQL स्केलेबिलिटी का जादू आता है, और आपके पास दो विकल्प हैं: या तो गणित को समझें कि यह क्यों है काम करता है, या विश्वास है कि सिस्टम को लागू करने वाले लोग इस पर गणित को समझते हैं। क्योंकि वे और अधिक विस्तार में इन चीजों के बारे में बात करते हैं मैं भी MongoDB और कई अन्य NoSQL समूहों के लिए सोता पॉडकास्ट की सिफारिश twit.tv/floss
jcolebrand

फिर कुंजी / मूल्य डेटाबेस और पारंपरिक पंक्ति उन्मुख डेटाबेस के बीच अंतर क्या है?
स्केन

1
तथ्य यह है कि अक्सर भारी संख्या में स्तंभों के बजाय केवल दो (या तीन, या कुछ और, मेटाडेटा पर निर्भर) स्तंभ होते हैं, और प्रकार अक्सर निश्चित होते हैं। पारंपरिक RDBMS में KVP स्टोर बनाने का कोई कारण नहीं है, सिवाय इसके कि यह मूल रूप से स्कीमालेस है।
jcolebrand

यह मेरे लिए अस्पष्ट है कि आप user1923_color: red, user1923_age: 18, ...विरोध क्यों करेंगे user1923: {color: red, age: 18, ...}
एरोथ

1
MongoDB के बारे में FLOSS
एलिजोनमार्क

25

SQL शब्दों में, एक NoSQL डेटाबेस दो स्तंभों के साथ एक एकल तालिका है: एक (प्राथमिक) कुंजी है, और दूसरा मान है। और वह यह है, कि सभी NoSQL जादू है।

आप एक मुख्य कारण के लिए NoSQL का उपयोग करेंगे: स्केलेबिलिटी।

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

केवल बाहर की सबसे बड़ी वेबसाइटें वास्तव में पूर्ण NoSQL क्षमता का लाभ उठा रही हैं, यानी, फेसबुक, जिसमें कैसेंड्रा के हजारों सर्वर चल रहे हैं ।

मैं SQL, NoSQL और ORM की तुलना करते हुए इस ब्लॉग पोस्ट को पढ़ने की जोरदार सलाह देता हूं:

http://seldo.com/weblog/2010/07/12/in_defence_of_sql


यही कारण है कि मुझे अपना उत्तर संपादित करना चाहिए, यह समझाने के लिए कि स्केलेबिलिटी कैसे काम करती है ... मैं कल रात उस हिस्से की व्याख्या करना भूल गया।
jcolebrand

2
मैं NoSQL का उपयोग करने के लिए एक और अच्छा मामला होगा तर्क स्कीमा लचीलापन है। मानगो और केवीपी जैसे डीबी को इस बात की परवाह नहीं है कि आपके पास क्या है। यदि आप डेटाबेस खोजते हैं और इसका कोई विशेष क्षेत्र नहीं है, तो यह कुछ भी वापस नहीं करेगा।
स्नोबर्न

13

मुझे लगता है कि आपके पास NoSQL आंदोलन और गैर-संबंधपरक डेटाबेस मॉडल की बुनियादी समझ है।

की-वैल्यू स्टोर गैर-संबंध डेटाबेस मॉडल में से एक है, जैसे कि ग्राफ, दस्तावेज़ उन्मुख डेटाबेस मॉडल।

मुख्य मूल्य भंडार और NoSQL आंदोलन

सामान्य तौर पर, एसक्यूएल विशेष रूप से संरचित डेटा से निपटने में कामयाब रहा और विभाग की आवश्यकताओं के अनुसार अत्यधिक गतिशील प्रश्नों की अनुमति दी।

हालांकि इस विशिष्ट क्षेत्र में SQL के लिए अभी भी कोई वास्तविक प्रतियोगी नहीं हैं, हर रोज़ वेब अनुप्रयोगों में उपयोग-मामला एक अलग है। आपको बाहरी तालिकाओं और यूनियनों, यूनियनों और जटिल गणनाओं से भरपूर प्रश्नों की अत्यधिक गतिशील रेंज नहीं मिलेगी। आप आमतौर पर सोचने का एक बहुत ही वस्तु उन्मुख तरीका पाएंगे। विशेष रूप से एमवीसी के रूप में इस तरह के पैटर्न को अपनाने के साथ, बैक-एंड में डेटा आमतौर पर एक डेटाबेस के लिए मॉडल नहीं किया जा रहा है, लेकिन तार्किक अखंडता के लिए जो लोगों को विशाल सॉफ्टवेयर-इन्फ्रास्ट्रक्चर को समझने में सक्षम होने में मदद करता है। इन ऑब्जेक्ट-ओरिएंटेड मॉडल को रिलेशनल डेटाबेस में डालने के लिए जो किया जा रहा है, वह सामान्यीकरण की एक बड़ी मात्रा है जो टेबल के जटिल पदानुक्रम की ओर जाता है और ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के पीछे मुख्य विचार के खिलाफ पूरी तरह से चलता है।

तथ्य यह है कि SQL डेटा के जटिल सेटों के लिए मनमाने ढंग से गतिशील प्रश्नों के लिए अनुमति देता है, केवल ऑब्जेक्ट ओरिएंटेड डेटा के लगातार भंडारण के लिए SQL डेटाबेस का उपयोग करके बेकार पेश किया जा रहा है, जो कि इन दिनों मूल रूप से सबसे अधिक अनुप्रयोग है।

यह वह जगह है जहां कुंजी मूल्य स्टोर खेल में आते हैं। Key value stores allow the application developer to store schema-less data. This data is usually consisting of a string which represents the key and the actual data which is considered to be the value in the "key - value" relationship। डेटा आमतौर पर प्रोग्रामिंग भाषा (एक स्ट्रिंग, एक पूर्णांक, एक सरणी) या एक वस्तु का कुछ प्रकार का आदिम है जो प्रोग्रामिंग भाषाओं द्वारा कुंजी मूल्य स्टोर में बाइंडिंग द्वारा मार्शल्ड किया जा रहा है। यह निश्चित डेटा मॉडल की आवश्यकता को प्रतिस्थापित करता है और ठीक से स्वरूपित डेटा की आवश्यकता को कम सख्त बनाता है।

They all allow storage of arbitrary data which is being indexed using a single key to allow retrieval। "सरल" दुकानों के लिए सबसे बड़ा अंतर वह तरीका है जो आप कर सकते हैं (या हो सकता है) विभिन्न दुकानों को प्रमाणित या एक्सेस कर सकते हैं (यदि संभव हो तो)। हालांकि डेटा को स्टोर करने और पुनः प्राप्त करने में गति लाभ सामान्य SQL डेटाबेस पर विचार करने का एक कारण हो सकता है, कुंजी-मूल्य स्टोर का उपयोग करते समय एक और बड़ा लाभ यह है कि एम्बेडेड एसक्यूएल स्ट्रिंग्स की तुलना में जब कोड साफ और सरल दिखने लगता है। आपकी प्रोग्रामिंग भाषा यह कुछ ऐसा है जो लोग हाइबरनेट या सक्रिय रिकॉर्ड जैसे ऑब्जेक्ट-रिलेशनल मैपिंग फ़्रेमवर्क से लड़ते हैं। ऑब्जेक्ट रिलेशनल मैपर्स होने से मूल रूप से SQL डेटाबेस और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा के बीच बहुत अधिक जटिल कोड जोड़कर एक महत्वपूर्ण मूल्य स्टोर का अनुकरण करने लगता है।

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

when would I use such a database? Could someone explain or link an explanation to me?
इसके वास्तुशिल्प निर्णय के अधिक, और एक बहस का विषय ... आपको स्केलेबिलिटी, प्रदर्शन आदि जैसे कई कारकों पर विचार करना होगा ...

नीचे की स्लाइड्स / लेख देखें और आपको एक आइडिया मिलेगा, कब, क्यों और क्यों नहीं है अहम वैल्यू स्टोर :)


12

दूसरों ने इसे समझाया है, लेकिन मैं वैसे भी एक छुरा लेने जा रहा हूं।

एक कुंजी / मान डेटाबेस प्राथमिक कुंजी द्वारा डेटा संग्रहीत करता है। यह हमें विशिष्ट रूप से एक बाल्टी में रिकॉर्ड की पहचान करने देता है। चूंकि सभी मूल्य अद्वितीय हैं, इसलिए लुकअप अविश्वसनीय रूप से तेज़ हैं: यह हमेशा एक सरल डिस्क की तलाश है।

मान किसी भी तरह का मूल्य है। डेटा को संग्रहीत करने का तरीका डेटाबेस के लिए अपारदर्शी है। जब आप किसी कुंजी / मान स्टोर में डेटा स्टोर करते हैं, तो डेटाबेस XML, JSON, टेक्स्ट या एक छवि के बारे में नहीं जानता या देखभाल नहीं करता है। वास्तव में, हम एक कुंजी / मूल्य की दुकान में क्या कर रहे हैं, यह समझने के लिए ज़िम्मेदारी बढ़ रही है कि डेटा हमारे डेटाबेस से कैसे प्राप्त होता है जो हमारे डेटा को पुनः प्राप्त करता है। चूंकि आपके पास प्रति बाल्टी के बारे में चिंता करने के लिए केवल चाबियों की एक श्रृंखला है, इसलिए कई सर्वरों में कुंजियों को फैलाना बहुत आसान है और वितरित प्रोग्रामिंग तकनीकों का उपयोग करना संभव है ताकि इस डेटा को जल्दी से एक्सेस किया जा सके (हर सर्वर डेटा की एक श्रेणी संग्रहीत करता है) ।

डेटा के लिए इस दृष्टिकोण का एक दोष यह है कि खोज करना बहुत मुश्किल काम है। आपको या तो अपने बकेट ओ 'डेटा में हर रिकॉर्ड को पढ़ने की जरूरत है या फिर आपको खुद ही सेकेंडरी इंडेक्स बनाने की जरूरत है ।

कुंजी / मान डेटाबेस का उपयोग करने के लिए कुछ कारण हो सकते हैं:

  • जब लेखन प्रदर्शन आपकी सर्वोच्च प्राथमिकता है। मोज़िला टेस्ट पायलट डेटा को तेज़ी से रिकॉर्ड करने के लिए एक कुंजी / मान डेटाबेस का उपयोग करता है।
  • जब रीड केवल पीके द्वारा होने की गारंटी है।
  • जब आप एक फ्लैट डेटा मॉडल के साथ काम कर रहे हैं।
  • जब आप एक अमीर, जटिल डेटा मॉडल के साथ काम कर रहे होते हैं, जिसे RDBMS में मॉडल नहीं किया जा सकता है।

कुंजी / मान डेटाबेस का उपयोग करने के कई कारण हैं जैसे कि RDBMS का उपयोग करना है और एक के ऊपर एक को सही ठहराने के लिए कई तर्क हैं। यह देखना महत्वपूर्ण है कि आप अपने डेटा को कैसे क्वेरी कर रहे हैं और यह समझें कि डेटा एक्सेस पैटर्न कैसे आप डेटा डालने और संग्रहीत करने जा रहे हैं।

बस याद रखें कि एक कुंजी / मूल्य डेटाबेस सिर्फ एक प्रकार का NoSQL डेटाबेस है।


8

यदि आपके पास एक संबंधपरक डेटाबेस है, तो आप आसानी से इसके साथ प्रयोग कर सकते हैं:

create table keyvalue (my_key varchar2(255), my_value varchar2(255));
create unique index ix_keyvalue on keyvalue (my_key, my_value);

1979 से बर्कले डीबीएम एक अच्छा उदाहरण होने के साथ सभी डेटाबेस का उपयोग किया जाता था । तब से, चीजें उन्नत हुई हैं (आप किसी भी आरडीबीएमएस में प्रति कुंजी कई मान रख सकते हैं )। कई अनुप्रयोगों के लिए एक कुंजी-मूल्य की दुकान पर्याप्त है (जैसे कि यह कैसे Sendmail अपने उपनामों को संग्रहीत करता है)। लेकिन यदि आप अपने आप को अपने स्वयं के कोड में मान को पूर्व-प्रसंस्करण करते हैं (या अपने "कुंजी" बनाने के लिए स्ट्रिंग को संक्षिप्त करते हैं), तो शायद मूल्य को एक सीमांकक पर विभाजित करना या इसे पार्स करना, इससे पहले कि आप इसका उपयोग कर सकें, आप शायद इसके साथ बेहतर हो जाएंगे। एक RDBMS और वास्तव में इसे इस तरह से संग्रहीत करना।


अभी भी गीयस के जवाब से स्पष्ट नहीं है कि नया 'NoSQL' की-वैल्यू डीबी क्या कर सकता है जो उसने ऊपर वर्णित तालिका में नहीं किया है। एक अलग सर्वर नोड्स पर टेबल को एक अलग टेबल पर विभाजित करने के अलावा।
ग्यारो

2
बंटवारा मुख्य है, और इसे छूट न दें, अंतर। जब आपके पास डेटा का एक टन है जो समानांतर प्रक्रिया में सक्षम हो रहा है, तो यह कई सर्वरों पर वापस हो सकता है।
user441521
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.