2010-03-01 19 views
16

की तुलना में महत्वपूर्ण मूल्य जोड़ी noSQL डीबी की तेज़ क्यों हैं, मुझे यह सलाह दी गई है कि मैं एक रिलेशनल डेटाबेस को प्रतिस्थापित करने के लिए कुंजी/वैल्यू जोड़ी डेटा सिस्टम की जांच करता हूं।परंपरागत रिलेशनल डीबी

जो मुझे काफी समझ में नहीं आता है यह है कि यह प्रश्नों की दक्षता में सुधार कैसे करता है। जो मैं समझता हूं उससे आप बहुत सारी सूचनाओं को फेंकने जा रहे हैं जो आपके संरचना डेटाबेस को कुंजी और मूल्यों की एक बड़ी लंबी सूची में बदलकर प्रश्नों को और अधिक कुशल बनाने में मदद करेंगे?

क्या मैंने पूरी तरह से इस बिंदु को याद किया है?

+0

आप क्यों "... एक रिलेशनल डेटाबेस को प्रतिस्थापित कर रहे हैं जिसे मैं उपयोग कर रहा हूं।" ?? –

+0

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

+2

अच्छे हार्डवेयर पर एक ठीक से कॉन्फ़िगर किया गया रिलेशनल डेटाबेस, अधिकांश भारों का सामना करने में सक्षम होगा। –

उत्तर

22

एक संबंधित डेटाबेस का मुख्य लाभ संबंधित जानकारी को जोड़ने और अनुक्रमणित करने की क्षमता है। अधिकांश 'नोएसक्यूएल' सिस्टम एक रिलेशनल बीजगणित या एक महान क्वेरी भाषा प्रदान नहीं करते हैं।

आपको खुद से पूछने की क्या ज़रूरत है, स्विचिंग मेरे इच्छित उपयोग मामले के लिए समझ में आता है?

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

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

फायदे और नुकसान हैं। व्यक्तिगत रूप से, मैं दोनों के मिश्रण का उपयोग करता हूं। सही नौकरी के लिए सही उपकरण का उपयोग करें, जो पोस्टग्रेएसक्यूएल या MySQL होने से अधिक बार समाप्त हो सकता है।

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

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

11

दक्षता तीन मुख्य क्षेत्रों से आता है:

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

मेरी आँख करने के लिए, किसी एक आवश्यकता है कि "हमारे नए डेटा हमारे आरडीबीएमएस के लिए बहुत अधिक हो जाएगा" के साथ आप के लिए आ रहा है या तो संख्या है कि दावे का बैक अप करने के लिए है या स्वीकार करते हैं वे सिर्फ नए चमकदार कोशिश करना चाहते हैं चाहिए। NoSQL meritless है? शायद ऩही। क्या यह जावा को ऊपर की ओर चालू करने जा रहा है क्योंकि जावा 1.0 को प्रचारित किया गया था? शायद ऩही।

नई चीजों की जांच करने में कोई हानि नहीं है, केवल 50 वर्षीय, अच्छी तरह से स्थापित, अच्छी तरह से समझी गई तकनीक के पक्ष में उनके खेत पर शर्त न लगाएं।

9

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

डेटाबेस प्रदर्शन में सबसे बड़ा कारक डेटा पढ़ने/लिखने के लिए आवश्यक I/O ऑपरेशन की संख्या होगी। अधिकांश डेटाबेस सिस्टम समान डेटा संरचनाओं का उपयोग करते हैं (यानी बी-पेड़) जो ओ (लॉग (एन)) I/Os में अनचाहे डेटा को पुनः प्राप्त कर सकते हैं। टिकाऊ अपडेट देने के लिए डेटा को डिस्क पर लिखा जाना होगा: अधिकांश सिस्टम अनुक्रमिक रूप से ऐसा करते हैं, जो सबसे तेज़ तरीका है।

तो, एक कुंजी-मूल्य स्टोर कहां क्षमता प्राप्त कर सकता है?

  1. गैर-सामान्यीकृत डेटा। एक ही पंक्ति में सभी डेटा डालने का मतलब है कोई भी शामिल नहीं है।
  2. कम CPU ओवरहेड। एक कुंजी-मूल्य स्टोर क्वेरी प्रोसेसिंग/ऑप्टिमाइज़ेशन, सुरक्षा जांच, बाधा जांच इत्यादि की सीपीयू लागत से बचाता है
  3. स्टोर को प्रक्रिया में रखना आसान है (एक अलग सर्वर के रूप में चल रहे SQL सर्वर के विपरीत) यह आईपीसी ओवरहेड को खत्म करता है।

अधिकांश आरडीबीएमएस सिस्टम किसी कुंजी-वैल्यू स्टोर की तरह दिखने वाले कुछ के शीर्ष पर बनाए जाते हैं ताकि आप इसे मध्यस्थ को काटकर देख सकें।

2

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

संबंधित मुद्दे