2014-07-23 3 views
24

तो मैं यह पता लगाने में कठोर प्रयास कर रहा हूं कि क्या नोएसक्यूएल वास्तव में ऑटो-शेर्डिंग के बाहर इतना मूल्य ला रहा है और UNSTRUCTURED डेटा को संभालने में सक्षम है।क्या एक मशीन पर संरचित डेटा के लिए आरडीबीएमएस पर नोएसक्यूएल के लिए कोई वास्तविक लाभ है?

मान लीजिए कि मैं एक ही मशीन पर अपने संरचित डेटा को फिट कर सकता हूं या एसक्यूएल के लिए एक प्रभावी 'ऑटो-शेरिंग' सुविधा है, तो कोई भी नोएसक्यूएल विकल्प क्या फायदे हैं? मैं निम्नलिखित निर्धारित किया है:

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

  2. की-मूल्य आधारित (Redis, Memcached, आदि) - कि लगता है - एक अलग उपयोग के मामले, कैशिंग के लिए आदर्श नहीं बल्कि जटिल प्रश्न

  3. स्तंभ (कैसेंड्रा, HBase, आदि) में कार्य करता है बड़ा लाभ यहाँ और अधिक कैसे डेटा डिस्क पर संग्रहीत किया जाता है, और ज्यादातर बल्कि सामान्य उपयोग से एकत्रित के लिए उपयोगी है

  4. ग्राफ़ (Neo4j, OrientDB, आदि) - सबसे पेचीदा, दोनों किनारों और नोड्स के उपयोग एक दिलचस्प वैल के लिए बनाता है ue-proposition, लेकिन सामान्य उपयोग के बजाय अत्यधिक जटिल संबंधपरक डेटा के लिए अधिकतर उपयोगी है।

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

यदि एसक्यूएल की एक समान 'ऑटो-शेरिंग' क्षमता है, तो एसक्यूएल संरचित डेटा के लिए कोई ब्रेनर नहीं होगा? मुझे लगता है यह होगा, लेकिन मैं समुदायों की राय चाहते हैं ...

नोट: यह एक सामाजिक नेटवर्क, ई-कॉमर्स साइट, सीएमएस आदि

उत्तर

2

स्कीमा की तरह एक ठेठ CRUD आवेदन के संबंध में है बिना भंडारण (या स्कीमा मुक्त)। संग्रहण 'घोषित' स्कीमा को संशोधित किए बिना भंडारण को संशोधित करने की क्षमता (मूल रूप से रिकॉर्ड में नए फ़ील्ड जोड़ें)। आरडीबीएमएस को 'फ़ील्ड' की स्पष्ट घोषणा की आवश्यकता होती है और नए 'फ़ील्ड' से पहले सहेजा जाने से पहले स्कीमा में स्पष्ट संशोधन की आवश्यकता होती है। एक स्कीमा-फ्री स्टोरेज इंजन तेजी से एप्लिकेशन परिवर्तनों की अनुमति देता है, अतिरिक्त फ़ील्ड को सहेजने के लिए ऐप कोड को संशोधित करता है, या फ़ील्ड का नाम बदलता है, या फ़ील्ड छोड़ देता है और किया जाता है।

पारंपरिक RDBMS लोक पर विचार स्कीमा से मुक्त एक नुकसान क्योंकि उनका तर्क है कि लंबे समय पर एक भंडारण क्वेरी करने के लिए की जरूरत है और विषम रिकॉर्ड (कुछ कुछ क्षेत्रों है, कुछ अन्य क्षेत्रों है) से निपटने के लिए यह कठिन बना देता है संभाल। लेकिन स्टार्ट-अप के लिए स्कीमा-फ्री भारी रूप से आकर्षक है, क्योंकि तेजी से पुनरावृत्ति और समय-समय पर बाजार सभी महत्वपूर्ण है (और अक्सर सही है)।

+3

हाय। मैं वास्तव में स्टार्टअप के बारे में चिंतित हूं जो इतनी जल्दी में होगा कि उनके पास एक sqlplus कमांड चलाने के लिए समय भी नहीं होगा ... – Sebas

+0

@ सेबास: एक वैकल्पिक तालिका चलाने के बजाए इसके लिए और भी कुछ है। मेरी इच्छा है कि मैं अपने कई ऐप्स को केवल ऐप कोड को संशोधित करके बदल सकता हूं जो रिकॉर्ड सहेजता है। मुझे गलत मत समझो, मैं एक मोंगो फैनबॉय के काफी विपरीत हूं। व्यक्तिगत रूप से मुझे लगता है कि रेल डिग्रेशन जैसे देव मॉडल आरडीबीएमएस के शीर्ष पर बहुत चपलता ला सकते हैं। लेकिन मुझे क्रेडिट देना है कि स्कीमा-फ्री * करता है * एक तेज़ और कम घर्षण देव अनुभव करता है। –

+0

मैं आपके द्वारा विकसित विचार के खिलाफ बहस नहीं कर रहा हूं। मैं मुख्य "घर्षण" पर सहमत नहीं हूं, "समय लेने वाली" लोगों को नियमित रूप से rdbms के खिलाफ लोगों को अपमानित करता है। मैं बस इसे समझ में नहीं आता। यह बहुत तेज है और बिल्कुल प्रतिबंधित नहीं है ... जब तक कि आप किसी प्रकार के जावा जटिल ढांचे का उपयोग नहीं कर रहे हैं, लेकिन फिर भी, आप एक सही झटका होगा ... आपने मुझे अपनी टिप्पणी के साथ हंसी बना दिया :) – Sebas

0

आपने हमें यह मानने के लिए कहा कि या तो डेटा एक मशीन पर फिट हो सकता है, या आपके डेटाबेस में एक प्रभावी ऑटो-शेर्डिंग सुविधा है।

धारणा है कि अपने SQL डेटा एक स्वत: sharding सुविधा है साथ जा रहे हैं, इसका मतलब है कि आप एक क्लस्टर चलाने के बारे में बात कर रहे हैं। जब भी आप मशीनों के समूह को चला रहे हों तो आपको गलती सहनशीलता के बारे में चिंता करनी होगी।

उदाहरण के लिए, आप आवेदन समारोह के द्वारा अपने डेटा sharding का सबसे सरल दृष्टिकोण का उपयोग कर रहे हैं, और और सर्वर एक पर अपने उपयोगकर्ता खाते डेटा के सभी भंडारण कर रहे हैं सर्वर बी पर अपने उत्पाद सूची

यह है मान लीजिए यदि सर्वर ए चला जाता है और आपके कोई भी उपयोगकर्ता लॉगिन नहीं कर सकता है तो आपके व्यवसाय के लिए स्वीकार्य है?

यह आपके व्यवसाय के लिए स्वीकार्य है सर्वर बी नीचे चला जाता है और कोई भी चीज़ें खरीद सकते हैं तो क्या होगा?

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

कई नोएसक्यूएल डेटाबेस स्वचालित रूप से प्रतिकृति और विफलता को संभाल लेंगे। कुछ बहुत कम विन्यास के साथ, बॉक्स से बाहर कर देंगे। एक परिचालन बिंदु से यह एक बड़ा लाभ है।

पूर्ण प्रकटीकरण: मैं FoundationDB में एक इंजीनियर हूँ, एक NoSQL डेटाबेस automatically sharding, प्रतिकृति, और असफल-पर बहुत कम विन्यास के साथ संभालती है। इसमें SQL layer भी है, इसलिए आपको संरचित डेटा छोड़ना नहीं है।

17

आप एक ही सर्वर पर बंद शुरू कर रहे हैं, तो NoSQL के कई फायदे खिड़की के बाहर चले जाते हैं। सबसे लोकप्रिय नोएसक्यूएल के सबसे बड़े फायदे कम समय के साथ उच्च उपलब्धता हैं। अंतिम स्थिरता आवश्यकताओं के साथ-साथ प्रदर्शन सुधार भी हो सकता है। यह वास्तव में आपकी जरूरतों पर निर्भर करता है।

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

  2. की-मूल्य की दुकान - कैशिंग, यहाँ एक उत्कृष्ट उपयोग मामला है जब आप जहां डाटा ज्यादातर पढ़ा जाता है उच्च मात्रा वेबसाइट के लिए एक माध्यम के चल रहे हैं, एक अच्छा कैशिंग रणनीति अकेले आप 4-5 बार उन प्राप्त कर सकते हैं एक सर्वर द्वारा संभाला गया।

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

  4. ग्राफ - मैं ग्राफ डेटाबेस से परिचित नहीं हूं, इसलिए यहां टिप्पणी नहीं कर सकता।

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

छोटे से मध्यम भार के लिए वास्तव में सबसे अच्छा तरीका नहीं है। अधिकतर परिदृश्य अधिकतर पढ़े जाते हैं, इसलिए प्रतिकृति-सेट होने पर आपके पास अतिरिक्त पढ़ने वाले नोड्स होते हैं जब आपके पास 3-5 सर्वर होते हैं। इस परिदृश्य में मोंगो डीबी महान है, मास्टर नोड स्वचालित रूप से निर्वाचित है, और फेलओवर बहुत तेज़ है। मैंने देखा है कि एकमात्र अजीबता यह है कि जब 2014 के आखिर में अज़ूर नीचे चला गया, और सर्वरों में से केवल एक ही आया, तो दूसरे दो लगभग 40 मिनट बाद आए। प्रतिकृति के साथ किसी भी दिए गए पढ़ने का अनुरोध पूरी तरह से एक सर्वर द्वारा संभाला जा सकता है। आपकी डेटा संरचनाएं सरल हो जाती हैं, और डेटा हानि की संभावना कम हो जाती है।

फिर से मेरे अपने उदाहरण में, एक मध्यम आकार के वर्गीकृत साइट के लिए, डेटा का विशाल बहुमत एक संग्रह से संबंधित है ... इसकी खोज की जाती है, और उस संग्रह से प्रदर्शित होती है। इस उपयोग के मामले में एक दस्तावेज़ स्टोर संरचित/सामान्यीकृत डेटा से कहीं बेहतर काम करता है। ऑब्जेक्ट्स को संग्रहीत करने का तरीका एप्लिकेशन में उनके प्रतिनिधित्व के करीब है। एक संज्ञानात्मक डिस्कनेक्ट कम है और यह बस काम करता है।

तथ्य यह है कि एसक्यूएल जॉइन ऑपरेशंस प्रदर्शन को मारता है, खासकर जब उन लोगों में डेटा एकत्रित करते हैं। एक उपयोगकर्ता के लिए एक ही प्रश्न के लिए यह ठीक है, यहां तक ​​कि उनमें से एक दर्जन के साथ भी। जब आप हजारों एक साथ उपयोगकर्ताओं के साथ दर्जनों जुड़ते हैं, तो यह अलग हो जाता है। इस बिंदु पर आपको कई विकल्पों में है ...

  • कैशिंग - कैशिंग हमेशा एक महान दृष्टिकोण है, और कम अक्सर अपने डेटा परिवर्तन, बेहतर दृष्टिकोण। यह मिश्रित रिकॉर्ड रखने के लिए MongoDB, RethinkDB या ElasticSearch जैसे कुछ का उपयोग करने के लिए memcache/redis उदाहरणों के सेट से कुछ भी हो सकता है। यहां चुनौती आपके कैश किए गए डेटा को अपडेट या अमान्य करने के लिए नीचे आती है।

  • माइग्रेटिंग - डेटा डेटा स्टोर में आपके डेटा को माइग्रेट करना जो आपकी आवश्यकताओं का बेहतर प्रतिनिधित्व करता है, भी एक अच्छा विचार हो सकता है। यदि आपको बड़े पैमाने पर लिखने, या बहुत बड़े पैमाने पर पढ़ने के परिदृश्यों को संभालने की आवश्यकता है, तो कोई भी SQL डेटाबेस जारी नहीं रख सकता है। आप कभी एसक्यूएल पर फेसबुक या ट्विटर की पसंद को संभाल सकते हैं।

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


निजी राय आगे

मेरे लिए, मैं सुरक्षा तंत्र है कि SQL प्रदान करता है की तरह। कोर डेटा के लिए केंद्रीय स्टोर के रूप में यह मेरी पहली पसंद है। मैं आरडीबीएमएस के बेवकूफ भंडारण के रूप में व्यवहार करता हूं, मुझे किसी दिए गए प्लेटफॉर्म से बंधना पसंद नहीं है। मुझे लगता है कि कई लोग अपने डेटा को अधिक सामान्य करने की कोशिश करते हैं। प्रायः मैं एक एक्सएमएल या जेएसओएन फ़ील्ड को एक टेबल में जोड़ूंगा ताकि डेटा के अतिरिक्त टुकड़े स्कीम किए बिना संग्रहीत किए जा सकें, विशेष रूप से यदि कभी पूछताछ की संभावना नहीं है ... तो मेरे पास एप्लिकेशन ऑब्जेक्ट में मेरी ऑब्जेक्ट्स में गुण होंगे उन क्षेत्रों में स्टोर करें। एक अच्छा उदाहरण भुगतान हो सकता है ... यदि आप वर्तमान में एक सिस्टम का उपयोग कर रहे हैं, या एकाधिक सिस्टम (पेपैल, Google, अमेज़ॅन इत्यादि के साथ सीसी के लिए एक) तो लेनदेन का विवरण वास्तव में आपके रिकॉर्ड को प्रभावित नहीं करता है, क्यों बनाएं इस विस्तृत डेटा को स्टोर करने के लिए 5+ टेबल।

जब डेटा दस्तावेज़ स्टोर के लिए एक प्राकृतिक फिट है, तो मैं कहता हूं कि इसके लिए जाएं ... यदि आपके प्रश्नों का विशाल बहुमत किसी रिकॉर्ड या संग्रह के लिए बेहतर फिट बैठता है, तो इसे कम करें। इसे अपने प्राथमिक डेटा में दर्पण के रूप में रखना बहुत अच्छा है।

लिखने के लिए भारी डेटा के लिए आप कई प्रणालियों को खेलना चाहते हैं ... यह आपकी आवश्यकताओं पर भारी निर्भर करता है ... क्या आपको तेज़ हॉट-क्वेरी प्रदर्शन की आवश्यकता है? लोचदार खोज के साथ जाओ। क्या आपको पूर्ण विशाल क्षैतिज पैमाने, एचबीएस या कैसंद्रा की आवश्यकता है।

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

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

अधिक: http://www.mongodb.com/nosql-explained

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

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