2012-01-04 6 views
18

मैं एक technical blog में निम्न पाठ फायदे और NoSQLआरडीबीएमएस की तुलना में "स्केलिंग आउट" पर नोएसक्यूएल बेहतर क्यों है?

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

मैं आरडीबीएमएस और नोएसक्यूएल की स्केलेबिलिटी के बारे में उलझन में आया।

मेरे भ्रम हैं:

  1. क्यों आरडीबीएमएस कम बाहर पैमाने पर करने के लिए कर सकते हैं? और अधिक सस्ते खरीदने के बजाय बड़े सर्वर खरीदने का कारण।
  2. क्यों NoSQL स्केल आउट करने में सक्षम है?

उत्तर

24

आरडीबीएमएस में एसीआईडी ​​(http://en.wikipedia.org/wiki/ACID) है और लेनदेन का समर्थन करता है। इन अवधारणाओं के कारण आरडीबीएमएस के साथ "आउट" स्केलिंग करना मुश्किल है।

नोएसक्यूएल समाधान आमतौर पर रिकॉर्ड-स्तर परमाणुता प्रदान करते हैं, लेकिन गारंटी नहीं दे सकते कि संचालन की श्रृंखला सफल होगी (लेनदेन)।

यह नीचे आता है: डेटा अखंडता और समर्थन लेनदेन रखने के लिए, एक बहु-सर्वर आरडीबीएमएस को डेडलॉक को रोकने/संभालने के दौरान, सभी संभावित लेन-देन और लिखने के लिए एक तेज़ बैकएंड संचार चैनल होना आवश्यक होगा।

यही कारण है कि आप आमतौर पर केवल 1 मास्टर (लेखक) और एकाधिक दास (पाठक) देखते हैं।

+1

रावेनडीबी [लेनदेन का समर्थन करता है] (http://ravendb.net/documentation/docs-api-transactions), हालांकि पारंपरिक अर्थ में नहीं। – vcsjones

+0

धन्यवाद, यह मुझे समझ में आता है। क्या मैं पूछ सकता हूं कि लेनदेन के समर्थन की कमी नोएसक्यूएल का नुकसान है? और क्या कोई ऐसा मामला है कि लेनदेन का समर्थन इतना महत्वपूर्ण या कम उपयोग नहीं है ताकि समर्थन की कमी यह नुकसान न हो? – xiaohan2012

+4

यदि आपको इसकी आवश्यकता होती है तो यह एक नुकसान होगा :(नोस्क्ल बनाम एसक्यूएल एक व्यापारिकता है जो स्केलेबिलिटी की आसानी है, बनाम लेनदेन प्रबंधन की आसानी है। इसलिए यदि आप कहते हैं कि मुझे लेनदेन की आवश्यकता है और एसक्यूएल पर जाना है, तो स्केलेबिलिटी अभी मुश्किल हो गई है, अगर आप नोस्कल जाते हैं और फिर गहन लेनदेन समर्थन चाहते हैं, जीवन tuff होने जा रहा है। –

6

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

नोएसक्ल सिस्टम अलग-अलग व्यापार बंद करता है। उदाहरण के लिए वे गारंटी नहीं देते हैं कि एक दूसरा सत्र पहले सत्र द्वारा तुरंत डेटा को देखेगा। इस प्रकार प्रत्येक उपयोगकर्ता के लिए उपलब्ध डेटा बनाने की प्रक्रिया से कुछ डेटा संग्रहीत करने के लेनदेन को डीकॉप्लिंग करना। Google "अंततः संगत"। इसलिए एक लेनदेन को किसी भी (या बहुत कम) इंटर नोड संचार के लिए इंतजार करने की आवश्यकता नहीं है। इसलिए वे बड़ी मात्रा में नोड्स का अधिक आसानी से उपयोग करने में सक्षम हैं।

+1

आरडीबीएमएस सिस्टम में इस तरह के विभिन्न ट्रेड-ऑफ को भी कॉन्फ़िगर किया जा सकता है, लेकिन बहुत से लोग इसे नहीं जानते हैं। देखें: http://tqdev.com/2016-trading-durability-for-performance-without-nosql – mevdschee

15

तो जब मैं नोएसक्यूएल बनाम आरडीबीएमएस स्वयं की बात करता हूं तो वास्तविक वास्तविक रेखा को समझने की कोशिश कर रहा हूं, और हमेशा एक प्रतिक्रिया के साथ समाप्त होता है जो इसे काफी कटौती नहीं करता है। मेरी खोज में नोएसक्यूएल और एसक्यूएल के बीच वास्तव में 2 प्राथमिक अंतर हैं, केवल 1 ही एक वास्तविक लाभ है।

  1. एसिड बनाम आधार - NoSQL आम तौर पर, एसक्यूएल की एसिड सुविधाओं में से कुछ बाहर छोड़ देता है एक तरह से 'धोखा दे' यह प्रोग्रामर के लिए अमूर्त की इस परत को छोड़ कर उच्च प्रदर्शन करने के लिए रास्ता नहीं है। यह पहले से ही पिछले पोस्टर्स द्वारा कवर किया गया है।

  2. क्षैतिज स्केलिंग - नोएसक्यूएल का असली लाभ क्षैतिज स्केलिंग, उर्फ ​​शेर्डिंग है।नोएसक्यूएल 'दस्तावेज' को ध्यान में रखते हुए 'स्वयं निहित' ऑब्जेक्ट की तरह हैं, ऑब्जेक्ट्स अलग-अलग सर्वरों पर पंक्तियों में शामिल होने के बारे में चिंता किए बिना अलग-अलग सर्वरों पर हो सकते हैं, जैसा रिलेशनल मॉडल के मामले में है।

चलो कहते हैं कि हम इस तरह एक ऑब्जेक्ट प्रदान करना चाहते हैं:

post { 
    id: 1 
    title: 'My post' 
    content: 'The content' 
    comments: { 
     comment: { 
     id: 1 
     } 
     comment: { 
     id: 2 
     } 
     ... 

    views: { 
     view: { 
     user: 1 
     } 
     view: { 
     user: 2 
     } 
     ... 
    } 
} 

NoSQL में, उस वस्तु मूल रूप से संग्रहीत किया जाएगा है के रूप में है, और इसलिए स्वयं के एक प्रकार के रूप में एक ही सर्वर पर निवास कर सकते हैं - अन्य ऑब्जेक्ट्स से डेटा के साथ जुड़ने की आवश्यकता के बिना, अन्य डीबी सर्वरों पर रहने वाले किसी भी वस्तु के बिना-युक्त वस्तु।

हालांकि, रिलेशनल डीबी के साथ, पोस्ट को comments तालिका से टिप्पणियों के साथ-साथ views तालिका के दृश्यों के साथ जुड़ने की आवश्यकता होगी। यह एसक्यूएल ~ यूएनटीआईएल ~ डीबी में एक समस्या नहीं होगी, डीबी को shards में तोड़ दिया गया है, जिस स्थिति में 'टिप्पणी 1' एक डीबी सर्वर पर हो सकता है, जबकि 'टिप्पणी 2' अभी तक एक और डीबी सर्वर पर हो सकता है। इससे आरडीबीएमएस में एक ही वस्तु को बनाना मुश्किल हो जाता है जिसे नोएसQL डीबी में क्षैतिज रूप से स्केल किया गया है।

क्या कोई भी डीबी विशेषज्ञ इन बिंदुओं की पुष्टि या बहस करेंगे?

+1

क्या होगा यदि आरडीबीएमएस में टिप्पणियों, टिप्पणियों सहित पोस्ट डेटा रखने के लिए एक ही तालिका है? – Anand

+1

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

-1

कोई एसक्यूएल, के लिए 1. संग्रह से संबंधित सभी बच्चे एक ही स्थान पर हैं और इसी तरह एक ही सर्वर पर हैं और किसी अन्य सर्वर से डेटा देखने के लिए कोई भी ऑपरेशन नहीं है।

2. कोई स्कीमा नहीं है इसलिए किसी भी सर्वर पर लॉक की आवश्यकता नहीं है और लेनदेन हैंडलिंग ग्राहकों को छोड़ दी गई है।

उपर्युक्त 2 नो-एसक्यूएल में स्केलिंग के बहुत सारे ओवरहेड बचाता है।

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

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