MongoDB बनाम कैसेंड्रा [बंद]


738

मैं यह आकलन कर रहा हूं कि सबसे अच्छा प्रवासन विकल्प क्या हो सकता है।

वर्तमान में, मैं एक JPG ब्लॉब्स में संग्रहीत मेरे अधिकांश डेटा के साथ एक MySQL (क्षैतिज विभाजन) पर हूँ। मेरे पास कोई जटिल एसक्यूएल प्रश्न नहीं है (जब से मैंने अपने डीबी का विभाजन किया है उसके बाद पहले से ही पलायन कर चुका हूं)।

अभी, ऐसा लगता है कि MongoDB और Cassandra दोनों संभावित विकल्प होंगे। मेरी स्थिति:

  • हर क्वेरी में बहुत सारे पढ़े जाते हैं, कम नियमित लिखते हैं
  • "बड़े पैमाने पर" स्केलेबिलिटी के बारे में चिंतित नहीं हैं
  • सरल सेटअप, रखरखाव और कोड के बारे में अधिक चिंतित हैं
  • हार्डवेयर / सर्वर लागत को कम करें

4
एक आधिकारिक प्रदर्शन बेंचमार्क आँकड़े उपलब्ध हैं। कैसंड्रा बनाम मोंगोबीडी बनाम एचबीएस
रवि

1
> हर क्वेरी में बहुत सारे रीड्स, कम नियमित लिखते हैं => CQRS के लिए देखें (अपने रीड्स को अलग किए बिना इवेंट सोर्सिंग के बिना, लेकिन जांचें कि क्या आप अपने रीड मॉडल async को अपडेट कर सकते हैं .. सिंक भी काम कर सकता है .. यह आपके उपयोग पर निर्भर करता है -करस)
बोड्रिन

2
यह वास्तव में एक महान प्रश्न है। मुझे आश्चर्य है कि क्या इसका कोई अद्यतन संस्करण है? यह अभी बहुत पुराना है
स्लैशडॉटिर

जवाबों:


584

हर क्वेरी में बहुत कम, नियमित रूप से लिखते हैं

दोनों डेटाबेस रीड्स पर अच्छा प्रदर्शन करते हैं जहां हॉट डेटा सेट मेमोरी में फिट बैठता है। दोनों भी कम-कम डेटा मॉडल पर जोर देते हैं (और इसके बजाय विकृति को प्रोत्साहित करते हैं), और दोनों दस्तावेज़ों या पंक्तियों पर अनुक्रमित प्रदान करते हैं , हालांकि MongoDB के सूचकांक वर्तमान में अधिक लचीले हैं।

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

एनालिटिक्स के लिए, MongoDB एक कस्टम मानचित्र / कार्यान्वयन को कम करता है; कैसेंड्रा देशी Hadoop सपोर्ट प्रदान करता है, जिसमें Hive (Hadoop मैप / कम पर बनाया गया SQL डेटा वेयरहाउस) और Pig (एक Hadoop- विशिष्ट विश्लेषण भाषा जो कई थिंक मैप्स SQL ​​के लिए एक बेहतर फिट है) को शामिल करता है। कैसेंड्रा स्पार्क के उपयोग का भी समर्थन करता है ।

"बड़े पैमाने पर" स्केलेबिलिटी के बारे में चिंतित नहीं हैं

यदि आप एक एकल सर्वर को देख रहे हैं, तो MongoDB शायद एक बेहतर फिट है। स्केलिंग के बारे में अधिक चिंतित लोगों के लिए, कैसेंड्रा के नो-सिंगल-पॉइंट-ऑफ-फेल आर्किटेक्चर को स्थापित करना आसान होगा और अधिक विश्वसनीय होगा। (MongoDB का वैश्विक लेखन लॉक अधिक दर्दनाक भी हो जाता है।) कैसेंड्रा भी कई डेटा सेंटरों के लिए समर्थन सहित आपकी प्रतिकृति कैसे काम करती है, इस पर बहुत अधिक नियंत्रण देती है।

सरल सेटअप, रखरखाव और कोड के बारे में अधिक चिंतित हैं

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

यदि आप वर्तमान में JSON ब्लब्स का उपयोग कर रहे हैं, तो MongoDB आपके उपयोग के मामले का एक बहुत अच्छा मेल है, यह देखते हुए कि यह डेटा स्टोर करने के लिए BSON का उपयोग करता है। आप अपने वर्तमान डेटाबेस में अधिक समृद्ध और अधिक उपयोगी डेटा रख पाएंगे। यह मानगो के लिए सबसे महत्वपूर्ण जीत होगी।


86
पूरी तरह से अलग, एक टिप्पणी काफी बड़ी नहीं है, लेकिन ... कैसेंड्रा एक रैखिक रूप से स्केलेबल है (बार-बार पढ़ने और लिखने वाला) डायनेमो / गूगल बिगिटेबल हाइब्रिड है जो डेटा आकार की परवाह किए बिना तेजी से लिखता है। यह सुविधा सेट न्यूनतम है, जो कि एक महत्वपूर्ण कुंजी मूल्य स्टोर से थोड़ा परे है। MongoDB स्थायित्व की कीमत पर एक भारी फ़ीचर्ड (और तेज़) डॉक्यूमेंट स्टोर है और लिखता रहता है के बारे में गारंटी देता है (क्योंकि वे तुरंत डिस्क पर नहीं लिखे गए हैं)। वे अलग-अलग दर्शन के साथ अलग जानवर हैं, MongoDB एक RDMS प्रतिस्थापन के करीब ...
माइकल

28
हालांकि कैसंड्रा निचले स्तर पर है, लेकिन uber स्केलिंग (ट्विटर / डिग / फेसबुक देखें) के लिए अनुमति देता है, लेकिन आप अपने डेटा को कैसे बाहर रखना चाहते हैं, इस बारे में विचार-विमर्श करने जा रहे हैं, माध्यमिक इंडेक्स बनाएं आदि, क्योंकि कोई लचीली क्वेरी की अनुमति नहीं है।
माइकल

11
क्योंकि सभी ने कैसेंड्रा के संबंध में यहां ट्विटर का उल्लेख किया है: वे ट्वीट्स को जारी रखने के लिए कैसेंड्रा का उपयोग नहीं कर रहे हैं, वे अभी भी यहां MySQL का उपयोग करते हैं ( Engineering.twitter.com/2010/07/cassandra-at-twitter-today.html )। ठीक है, लेकिन मैं कल्पना कर सकता हूं कि वे अभी भी कैसंड्रा में अन्य उद्देश्यों के लिए बहुत सारे डेटा संग्रहीत करते हैं।
एच 6।

7
ऐसा लगता है कि मानगो 2.2 में वैश्विक लेखन ताला हटा दिया गया हो सकता है ...
मैट किसान

16
अपनी परियोजना के लाइव होने से पहले ही, मैं मोंगोदब के दर्द बिंदुओं को महसूस कर रहा हूं। हॉट बैकअप एक बुनियादी आवश्यकता है। लिनक्स सर्वर में एक हॉट बैकअप करने के लिए, आपको पहले LVM पार्टीशन (इतना सामान्य नहीं) विभाजन करना होगा और अपने बैकअप सत्र से पहले एक स्नैपशॉट लेना होगा। एक और आसान तरीका है Mongodb सशुल्क बैकअप सेवा का उपयोग। लेकिन, वह सेवा महंगी है (2.3 $ / जीबी / महीना)। जल्द ही आपको गलती सहिष्णुता के लिए एक प्रतिकृति की आवश्यकता होगी। ओपन सोर्स संस्करण के साथ, नोड्स केवल स्पष्ट पाठ के रूप में डेटा का आदान-प्रदान कर सकते हैं। SSL के लिए आपको Entprise Edition के साथ जाना होगा। और वह 10,000 डॉलर है। अलविदा मोंगोदब। कैसंड्रा के लिए मेरे कोड को फिर से दिखाना।
कार्तिक शकर

146

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

मैं कहता हूं कि कैसंड्रा, ट्विटर जैसी बड़े पैमाने पर परियोजनाओं के साथ उपयोग करने के कारण, बेहतर स्केलिंग कार्यक्षमता है, हालांकि मोंगोबीडी टीम वहां समानता पर काम कर रही है। मुझे यह बताना चाहिए कि मैंने कैसंड्रा का उपयोग ट्रायल-रन चरण से परे नहीं किया है, इसलिए मैं विस्तार से बात नहीं कर सकता।

मेरे लिए असली जीवनानंद, जब हम NoSQL डेटाबेस का आकलन कर रहे थे, तो क्वेरी थी - कैसंड्रा मूल रूप से सिर्फ एक विशाल कुंजी / मूल्य की दुकान है, और क्वेरी थोड़ा काल्पनिक है (कम से कम MongoDB की तुलना में), इसलिए प्रदर्शन के लिए आपके पास होगा मैनुअल इंडेक्स के एक प्रकार के रूप में काफी डेटा का डुप्लिकेट। दूसरी ओर, MongoDB, "उदाहरण के द्वारा क्वेरी" मॉडल का उपयोग करता है।

उदाहरण के लिए, मान लें कि आपको उपयोगकर्ताओं के संग्रह (RDMS तालिका के समतुल्य के लिए MongoDB parlance) मिला है। MongoDB अभिलेखों को दस्तावेज़ के रूप में संग्रहीत करता है, जो मूल रूप से बाइनरी JSON ऑब्जेक्ट हैं। उदाहरण के लिए:

{
   FirstName: "John",
   LastName: "Smith",
   Email: "john@smith.com",
   Groups: ["Admin", "User", "SuperUser"]
}

यदि आप उन सभी उपयोगकर्ताओं को ढूंढना चाहते हैं जिन्हें स्मिथ कहा जाता है, जिनके पास व्यवस्थापक अधिकार हैं, तो आप सिर्फ एक नया दस्तावेज़ बनाएंगे (जावास्क्रिप्ट का उपयोग करके व्यवस्थापक कंसोल पर, या अपनी पसंद की भाषा का उपयोग करके उत्पादन में):

{
   LastName: "Smith",
   Groups: "Admin"
}

... और फिर क्वेरी चलाते हैं। बस। तुलना, RegEx फ़िल्टरिंग आदि के लिए जोड़े गए ऑपरेटर हैं, लेकिन यह सब बहुत सरल है, और विकी-आधारित प्रलेखन बहुत अच्छा है।


54
अद्यतन (data अगस्त २०११): अमेज़ॅन आयरलैंड ईसी २ डेटा सेंटर में कल रात बिजली से संबंधित घटना हुई थी, और हमारे सर्वर रिकवरी को सुलझाने में, मुझे एक बहुत महत्वपूर्ण बिंदु मिला: यदि आपको दो सर्वरों का प्रतिकृति सेट मिल गया है (और वे 'सेटअप करना आसान है), सुनिश्चित करें कि आपके पास एक आर्बिटर नोड है, इसलिए यदि एक नीचे जाता है, तो दूसरा घबराता नहीं है और माध्यमिक मोड में स्टाल करता है! मेरा विश्वास करो, यह एक बड़े डेटाबेस के साथ हल करने के लिए पीछे का दर्द है।
रिचर्ड के।

8
@Richard K ने जो कहा, उसे जोड़ने के लिए, आपके पास एक प्रतिकृति सेट में नोड्स (प्राथमिक + द्वितीयक) की संख्या होने पर आर्बिटर नोड होना चाहिए।
अमरेश्वर

डेटा एनालिटिक्स पर अधिक एकत्रीकरण होने पर मोंगोडब पर विचार करें।
user1503117 14

As long as you think about indexes carefully, it can absolutely scream along, speed-wise.तब तक इंतजार करें जब तक कि आपकी शारीरिक याददाश्त पूरी न हो जाए और ओएस पेज
फाल्टिंग लॉल

117

पारंपरिक डेटाबेस और NoSQL डेटा स्टोर के बीच चयन क्यों करें? दोनों का उपयोग करें! NoSQL समाधान (प्रारंभिक सीखने की अवस्था से परे) के साथ समस्या लेन-देन की कमी है - आप MySQL के लिए सभी अद्यतन करते हैं और MySQL पढ़ता है के लिए एक NoSQL डेटा स्टोर आबाद - तो आप प्रत्येक प्रौद्योगिकी की ताकत से लाभ। यह अधिक जटिलता जोड़ता है, लेकिन आपके पास पहले से ही MySQL पक्ष है - मिश्रण में केवल MongoDB, Cassandra, आदि जोड़ें।

NoSQL datastores आम तौर पर उसी तरह के चश्मे के लिए एक पारंपरिक DB की तुलना में बेहतर तरीके से पैमाने पर होता है - एक कारण है कि Facebook, Twitter, Google और अधिकांश स्टार्ट-अप NoSQL समाधानों का उपयोग कर रहे हैं। यह सिर्फ नई तकनीक पर उच्च हो रही geeks नहीं है।


8
मैं पूरी तरह सहमत हूँ। मैं आगामी उत्पाद है कि मैं वास्तुशिल्प में से एक में mongodb + mysql का उपयोग कर रहा हूं। यह आगामी वित्तीय उत्पाद क्लाउड है। mysql का उपयोग किया जाता है जहां हमें बिल्कुल लेन-देन की क्षमताओं की आवश्यकता होती है। mongodb का उपयोग गैर-कंप्यूटिंग जटिल डेटा संरचनाओं को संग्रहीत करने के लिए किया जाता है, जिसे केवल आवश्यकता होने पर ऊपर खींचने की आवश्यकता होती है। अभी तक अच्छा काम कर रहा है। :)
राम रेल-एन-रिएक्ट

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

1
यहाँ एक प्रश्न का लिंक दिया गया है, जिसमें मैंने sql और nosql दोनों डेटाबेसों को आर्किटेक्ट करने के तरीके के बारे में पूछा: dba.stackexchange.com/questions/102053/… मैं आपके पास कुछ अंतर्दृष्टि का उपयोग कर सकता हूँ
j

वह पहले से ही अच्छे के लिए लेनदेन से बच गया है => अब अनंत स्केलेबिलिटी संभव हो सकती है .. अन्यथा -> नहीं :)
बोड्रिन

1
यदि आपका डेटा वितरित किया जाता है तो यह एक अच्छा समाधान नहीं है
एस्टेवन वर्बेल

60

मैं शायद एक अजीब आदमी होने जा रहा हूं, लेकिन मुझे लगता है कि आपको MySQL के साथ रहने की आवश्यकता है। आपने एक वास्तविक समस्या का वर्णन नहीं किया है जिसे आपको हल करने की आवश्यकता है, और MySQL / InnoDB एक उत्कृष्ट भंडारण बैक-एंड है यहां तक ​​कि बूँद / आगजनी डेटा के लिए भी।

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

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


13
वह शार्किंग का उपयोग कर रहा है, जिसका अर्थ है कि उसका डेटा मैन्युअल रूप से सर्वरों में विभाजित है। Mongodb शारडिंग को स्वचालित कर सकता है, जो एक लाभ हो सकता है।
fabspro

18
वह आरडीबीएमएस में ज्यादातर जॉन्स ब्लॉब्स को भी स्टोर कर रहा है - रिलेशनल डिज़ाइन (फीचर्स) बेकार।
दामिर सुद्रेविक

4
डेटा मॉडल और स्वचालित शार्किंग वास्तव में अलग-अलग हैं, लेकिन डेटाबेस चुनते समय, आपको स्टोरेज इंजन को पहले देखना होगा , और बाकी घंटियाँ और सीटी दूसरी। स्टोरेज इंजन लोड स्पाइक के तहत कैसा प्रदर्शन करने वाला है? डेटा इनफ्लो स्पाइक के तहत ऑटोशेयरिंग फीचर कैसा प्रदर्शन करने वाला है? इससे पहले कि आप इन महत्वपूर्ण पहलुओं के लिए डेटाबेस पर नियंत्रण छोड़ दें, आप यह सुनिश्चित कर लेंगे कि यह कार्य के लिए सक्षम होने वाला है।
कोस्टजा

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

20

मैंने Cassandra का उपयोग नहीं किया है, लेकिन मैंने MongoDB का उपयोग किया है और मुझे लगता है कि यह बहुत बढ़िया है।

यदि आप साधारण सेटअप के बाद हैं, तो यह है: आप बस MongoDB को अनटार करें और मोंगॉड डेमन को चलाएं और यह है ... यह चल रहा है।

जाहिर है कि यह केवल एक स्टार्टर है, लेकिन आपको शुरू करने के लिए यह आसान है।


22
AFAIK, कैसेंड्रा के लिए भी लागू होता है। अनार, दमन चलाओ। परीक्षण क्लस्टर सेटअप और उत्पादन के लिए तैयार है!
15:55 बजे

13

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

मेरा मानना ​​है कि मंगोडब और कैसेंड्रा दोनों लगभग किसी भी नियमित लिनक्स हार्डवेयर पर चलेंगे, इसलिए आपको उस क्षेत्र में बहुत अवरोध नहीं करना चाहिए।

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

मंगोलोड का उपयोग करने वाली साइटों की सूची बहुत प्रभावशाली है , और मुझे पता है कि ट्विटर ने बस कैसेंड्रा का उपयोग करने के लिए स्विच किया।


4
दिन के अंत में यह सेब बनाम संतरे की तुलना है। दोनों डेटाबेस की अपनी ताकत है। यहाँ कुछ बातों पर विचार करने के लिए कर रहे हैं - वस्तु मॉडल, माध्यमिक अनुक्रमित, लिखने क्षमता, उच्च avaialability आदि एक ब्लॉग पोस्ट को MongoDB और कैसेंड्रा यहाँ के बीच उच्च स्तरीय रणनीतिक मतभेद बताते है - scalegrid.io/blog/cassandra-vs-mongodb
Dharshan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.