SQL से NoSQL में जाने के लिए किस आकार का डेटा फायदेमंद हो जाता है?


24

एक रिलेशनल डेटाबेस प्रोग्रामर (ज्यादातर समय) के रूप में, मैं इस बारे में लेख पढ़ता हूं कि कैसे रिलेशनल डेटाबेस स्केल नहीं करते हैं, और NoSQL सॉल्यूशंस जैसे MongoDB करते हैं। जैसा कि मैंने अब तक विकसित किए गए अधिकांश डेटाबेसों को मध्य पैमाने पर छोटा किया है, मुझे कभी भी कोई समस्या नहीं हुई है जिसे कुछ अनुक्रमण, क्वेरी ऑप्टिमाइज़ेशन या स्कीमा रिडिजाइन द्वारा हल नहीं किया गया है।

किस तरह के आकार से मैं MySQL को संघर्ष करते हुए देखूंगा। कितनी पंक्तियाँ?

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


4
आपको शायद इस धारणा के तहत श्रम नहीं करना चाहिए कि MySQL उन पंक्तियों की संख्या के लिए ऊपरी सीमा है जो एक रिलेशनल डेटाबेस संभाल सकता है। आप वास्तव में दो प्रश्न पूछ रहे हैं: MySQL स्ट्रिंग से बाहर कब चलता है? और SQL RDBMS क्षमता की सीमाएं क्या हैं? आप कौन सा उत्तर चाहते हैं?
ब्लरफुल

जवाबों:


13

कितना बड़ा डेटा?

दो महत्वपूर्ण सीमाएं हैं:

  1. पूरा डेटा रैम में फिट होता है
  2. पूरे सूचकांक डेटा राम में फिट बैठता है

तेजी से SSDs के साथ पहली दहलीज एक मुद्दे से थोड़ा कम हो गई, जब तक कि आपके पास उच्च ट्रैफ़िक का पागलपन न हो।

पेट की गैस

RDBMSes को स्केल करने में एक समस्या यह है कि डिज़ाइन द्वारा वे ACID हैं, जिसका अर्थ है लेन-देन और पंक्ति स्तर के ताले (या कुछ पुराने / सरल RDBMSes में टेबल स्तर)। यदि आपके पास एक ही समय में बहुत सारे डेटा को संशोधित करने के लिए बहुत सारे प्रश्न हैं, तो यह सीमित कारक हो सकता है। NoSQL समाधान आमतौर पर अंतिम स्थिरता मॉडल के लिए जाते हैं।

डेटा आकार पर RDBMS स्केल कैसे होता है?

यह पूरी तरह से सच नहीं है कि आरडीबीएमएस डेटा आकार पर स्केल नहीं कर सकता है, दो विकल्प हैं: ऊर्ध्वाधर विभाजन और क्षैतिज विभाजन (उर्फ शार्पिंग)।

ऊर्ध्वाधर विभाजन मूल रूप से अलग-अलग DB सर्वरों पर असंबंधित तालिकाओं को रख रहा है, इस प्रकार ऊपर वर्णित थ्रेसहोल्ड के नीचे हर एक का आकार रखते हुए। यह सादा SQL कम सीधे आगे और कम कुशल का उपयोग करके इन तालिकाओं में शामिल हो जाता है।

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

दोनों प्रकार के विभाजन के मामले में, यदि आप चरम सीमा पर जाते हैं, तो आप मूल रूप से NoSQL डेटाबेस जैसी ही स्थिति के साथ समाप्त होते हैं।


9
Oracle, PostgreSQL, MySQL, MS SQL Server और Sybase, सभी बिना किसी काम के क्लाइंट के बिना रिमोट सर्वर पर टेबलों में शामिल होने में सक्षम हैं।
ब्लरफुल

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

2
@vartec तो आप अपने मेल डेटाबेस से मेरे 2 साल पुराने मेल को छोड़ना चाहते हैं क्योंकि मैं इसे हर महीने केवल एक बार खोजता हूं जबकि मेरा मुख्य काम केवल अंतिम दस मेल हैं?
जोहान्स

3
@wobbily_col संकेत: यह नहीं है। जब तक आप स्थिरता, विश्वसनीयता या स्थायित्व के बारे में परवाह नहीं करते हैं। उस मामले में, आप बहुत सारी चीजें बंद कर सकते हैं जो एक को दूसरे की तुलना में तेजी से बनाते हैं, या यदि आप चाहते हैं तो इसके विपरीत। लगता है कि हर एक पर डिफ़ॉल्ट कॉन्फिग क्या हैं? (बेशक, MySQL डेटा सुरक्षा का शिखर नहीं है ...)
जेवियर

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

13

मुझे नहीं लगता कि डेटा का आकार एकमात्र कारक है। "डेटा मॉडल" भी एक बहुत महत्वपूर्ण हिस्सा है।

ई-कॉमर्स कैटलॉग पेज (Solr, ElasticSearch), वेब एनालिटिक्स डेटा (Riak, Cassandra), शेयर की कीमतें (Redis), सामाजिक नेटवर्क (Neo4J, FleetDB) में संबंध कनेक्शन केवल कुछ उदाहरण हैं जब एक NoSQL समाधान चमकता है।

NoSQL सॉल्यूशन या RDBMS पर विचार करते समय डेटा के आकार की तुलना में IMHO, डेटा मॉडल की महत्वपूर्ण भूमिका होती है।


9
ठीक ठीक। यह सब "बड़ा डेटा" bla bla बकवास बकवास है और पूरे "NoSQL बड़े डेटा के लिए!" सामान भी है। NoSQL बड़े डेटा सेट के लिए अच्छा है क्योंकि यह एक पारंपरिक RDBMS से तेज़ है, लेकिन यह बहुत बड़ी सुविधा ट्रेडऑफ़ के कारण तेज़ है। कई डेटा मॉडल को उन ट्रेड ऑफ को काफी नुकसान होगा जबकि कुछ ठीक काम करेंगे। यह जानने की बात है कि जब आप NoSQL पर जाते हैं तो क्या खो रहे हैं और केवल NoSQL का उपयोग डेटा के लिए कर रहे हैं जो इस तरह के नुकसान को झेल सकता है।
जिमी हॉफ

1
हालांकि यह सच है, यह पूछे गए सवाल का जवाब नहीं है।
वार्त

यह न केवल उत्तर है, बल्कि सत्य भी नहीं है। आप केवल JSON डेटा प्रकार का उपयोग करके SQL डेटाबेस में तालिका की तरह एक दस्तावेज़ बना सकते हैं और SQL डेटाबेस को NoSQL पर चमकदार बना सकते हैं।
येवगेनी अफानसैयेव

6

यदि रिलेशनल डेटाबेस स्केल नहीं करते हैं, तो कुछ भी नहीं करता है। स्केलिंग समस्याओं के बारे में चिंता न करें।

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

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

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

इसमें से किसी का भी डेटा की मात्रा से कोई लेना-देना नहीं है। कुंजी डेटा के संगठन की प्रकृति है। यदि एक रिलेशनल लेआउट मदद करता है, तो एक आरडीबीएमएस वह है जो आप चाहते हैं। यदि नहीं, तो कुछ प्रकार का बल्क स्टोरेज थोड़े समय से लेकर क्वाड्रिलियन तेजी से कुछ भी होने वाला है।

ध्यान दें कि यदि डेटा का इन सेटों में से एक मेमोरी में फिट होने के लिए बहुत बड़ा हो जाता है, तो आपका गैर-SQL डेटाबेस किसी भी अधिक काम नहीं करता है। एक और समस्या है जब आपको एक समय में एक से अधिक ब्लॉक से डेटा की आवश्यकता होती है; आप यह कर सकते हैं यदि , और केवल अगर, सभी ब्लॉक एक ही बार में स्मृति में फिट होते हैं। और उपयोगकर्ता को लोड करने के दौरान इंतजार करना होगा।

यदि आपका रिलेशनल डेटाबेस आपको समस्याएँ उत्पन्न करने वाला है, तो इससे पहले कि आप इसमें बहुत अधिक डेटा डाल दें। एकमात्र स्केलिंग समस्या जो आपके प्रोग्राम के साथ हो सकती है जब डेटा का ब्लॉक जिसे आप nosql DB के लिए असेंबल कर रहे हैं - यदि आपको एक का उपयोग करना है - तो इसके लिए बहुत बड़ा हो जाता है। (स्मृति त्रुटियों के बारे में पढ़ें। नई भाषाएँ कभी-कभी स्मृति के साथ अजीब काम करती हैं।)


0

मुझे लगता है कि NoSQL या वितरित समाधान पर जाने का पहला कारण सभी डेटा का आकार नहीं है, लेकिन तालिकाओं का आकार। क्या वितरित समाधान अच्छी तरह से तालिकाओं को अलग-अलग नोड्स में विभाजित करते हैं तब जब आपको तालिकाओं को क्वेरी करने की आवश्यकता होती है, प्रत्येक नोड तालिका के उनके टुकड़े को संसाधित करेगा।

RDBMSs ऐसा कर सकते हैं, लेकिन ऐसा करने के लिए NoSQL डेटाबेस की नई लहर का निर्माण किया गया है। Oracle, MSSQL, MySQL ने अपने केंद्रीकृत मॉडल को लिया और इसे वितरित वातावरण में काम करने के लिए इसे ट्वीक किया। हालाँकि, वे अभी भी सख्त ACID नियमों का पालन करते हैं, जबकि कुछ नए डेटाबेस सख्त नियमों का पालन नहीं करते हैं, जैसे कि अंतिम स्थिरता।

वहाँ डेटा की एक निर्धारित राशि नहीं है जहाँ आपको एक दूसरे को चुनना चाहिए। क्या जरूरतों को ध्यान में रखा जाना चाहिए डेटाबेस की जरूरत है और उपयोग की मात्रा प्राप्त करता है। NoSQL डेटाबेस बड़े डेटा-सेट को अधिक तेज़ी से संसाधित कर सकते हैं जबकि रिलेशनल डेटाबेस आपको विश्वास दिलाता है कि आपका डेटा ACID सिद्धांतों के साथ सही है।


0

यह उल्लेख करने में भी सार्थक हो सकता है कि आपके डेटा मॉडल का चीजों पर बड़ा प्रभाव है। यदि आप अपने आप को पेड़ की संरचना के कुछ रूप बनाने की आवश्यकता पाते हैं (यानी आपके पास एक मेज पर एक विदेशी संदर्भित कुंजी है जिसमें एक जटिल प्राथमिक कुंजी में विदेशी कुंजी है) तो आपको संभवतः ऐसा करने के लिए डेटाबेस के किसी रूप में ऐसा करना चाहिए जो उन लोगों को संभालता है डेटा के प्रकार वास्तव में अच्छी तरह से (जैसे mongodb या couchdb)।

जैसे अन्य लोगों ने कहा है कि आपको यह भी ध्यान रखना चाहिए कि आपके आवेदन में क्या हो रहा है। यदि आपको वास्तव में कई तालिकाओं में ACID की आवश्यकता है तो आपको वास्तव में RDBMS के साथ चिपके रहने की आवश्यकता है, लेकिन अगर आपके पास कुछ ऐसा है जहाँ आपके पास कुछ थोड़ा बासी डेटा हो सकता है और आपको NoSQL स्कीमा के लचीलेपन की आवश्यकता होती है (यदि आप इसे पसंद करते हैं तो इसे योजनाबद्धता कहें) अभी भी निहित स्कीमा का कोई रूप है) तो आप एक NoSQL स्टोर को हथियाने पर विचार कर सकते हैं ( http://www.10gen.com/customers/craigslist यहां एक उदाहरण है कि क्रैगिस्लिस्ट को क्यों स्विच किया गया ... लेकिन माना जाता है कि वे संग्रहित हैं ~ 10TB डेटा, जो मुझे पता है कि आपके छोटे से मध्यम आकार के डेटाबेस आकार में बिल्कुल फिट नहीं है। लेकिन उपयोग मामला सहायक हो सकता है)।

ध्यान रखें कि NoSQL सिस्टम RDMS को बदलने के लिए आवश्यक नहीं हैं, लेकिन कई उदाहरणों में आप Polyglot Persistence के विचार से अपने RDBMS को पूरक कर सकते हैं और आप अपने अधिकांश डेटा को RDBMS में संग्रहीत कर सकते हैं, लेकिन विशिष्ट आला उदाहरणों में आप अपने कुछ को लोड कर सकते हैं NoSQL स्टोर के कुछ रूप में डेटा।


0

Mongoकई कंप्यूटर / नोड पर स्थापित किया जा सकता है। शार्पिंग केPostgreSQL लिए बिल्ट-इन टूल प्रदान नहीं करता है, हालांकि साइटस चारों ओर है।

MongoDB 64 टेराबाइट तक के डेटाबेस का समर्थन करता है और दस्तावेज़ का आकार 16 मेगाबाइट है।

MySQL में 256 टेराबाइट्स की डेटाबेस सीमा है, 64 टेराबाइट्स एक टेबल के लिए अधिकतम आकार और 4 गीगाबाइट्स की रिकॉर्ड सीमा है।

PostgreSQL की डेटाबेस पर कोई सीमा नहीं है (4 टेराबाइट्स परीक्षण के लिए कहीं मौजूद है) और इसकी एक तालिका में किसी भी एक क्षेत्र के आकार के लिए 1 गीगाबाइट की सीमा है और फिर से 64 टेराबाइट्स एक तालिका के लिए अधिकतम आकार है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.