सबसे पहले, आइए सेब के साथ सेब की तुलना करें:MongoDB के साथ पढ़ना और लिखना RDBMS में गैर-संकुल अनुक्रमणिका वाली तालिका पर प्राथमिक कुंजी द्वारा एकल पढ़ने और लिखने जैसा है।
तो चलिए बेंचमार्क को ठीक यही कहते हैं:http://mysqlha.blogspot.de/2010/09/mysql-versus-mongodb-yet-another-silly.html
और यह पता चला है, ठीक उसी आदिम ऑपरेशन की निष्पक्ष तुलना में गति अंतर बड़ा नहीं है। वास्तव में, MySQL थोड़ा तेज है। मैं कहूंगा, वे समकक्ष हैं।
क्यों? क्योंकि वास्तव में, दोनों प्रणालियाँ इस विशेष बेंचमार्क में समान कार्य कर रही हैं। प्राथमिक कुंजी द्वारा खोजी गई एक पंक्ति को वापस करना, वास्तव में इतना काम नहीं है। यह बहुत तेज ऑपरेशन है। मुझे संदेह है कि क्रॉस-प्रोसेस संचार ओवरहेड्स इसका एक बड़ा हिस्सा हैं।
मेरा अनुमान है, कि MySQL में अधिक ट्यून किए गए कोड MongoDB (कोई तार्किक ताले और शायद कुछ अन्य छोटी चीजें) के थोड़े कम व्यवस्थित ओवरहेड्स से अधिक हैं।
इससे एक दिलचस्प निष्कर्ष निकलता है:आप एक दस्तावेज़ डेटाबेस की तरह MySQL का उपयोग कर सकते हैं और इससे उत्कृष्ट प्रदर्शन प्राप्त कर सकते हैं।
यदि साक्षात्कारकर्ता ने कहा:"हमें दस्तावेज़ों या शैलियों की परवाह नहीं है, हमें बस एक तेज़ डेटाबेस की आवश्यकता है, क्या आपको लगता है कि हमें MySQL या MongoDB का उपयोग करना चाहिए?", मैं क्या उत्तर दूंगा?
मैं एक पल के लिए प्रदर्शन की अवहेलना करने और दो प्रणालियों की सापेक्ष ताकत को देखने की सलाह दूंगा। मोंगोडीबी के लिए स्केलिंग (रास्ता ऊपर) और प्रतिकृति जैसी चीजें दिमाग में आती हैं। MySQL के लिए, समृद्ध क्वेरी, समवर्ती मॉडल, बेहतर टूलिंग और परिपक्वता और बहुत कुछ जैसी और भी बहुत सी सुविधाएं हैं।
मूल रूप से, आप प्रदर्शन के लिए सुविधाओं का व्यापार कर सकते हैं। ऐसा करने को तैयार हैं? यह एक ऐसा विकल्प है जिसे आम तौर पर नहीं बनाया जा सकता है। यदि आप किसी भी कीमत पर प्रदर्शन का विकल्प चुनते हैं, तो दूसरी तकनीक जोड़ने से पहले पहले MySQL को ट्यून करने पर विचार करें।
यहां बताया गया है कि जब क्लाइंट प्राथमिक कुंजी द्वारा एकल पंक्ति/दस्तावेज़ पुनर्प्राप्त करता है तो क्या होता है। मैं दोनों प्रणालियों के बीच के अंतरों की व्याख्या करूँगा:
- क्लाइंट एक बाइनरी कमांड (समान) बनाता है
- क्लाइंट इसे टीसीपी (उसी) पर भेजता है
- सर्वर कमांड को पार्स करता है (समान)
- सर्वर कैश से क्वेरी प्लान को एक्सेस करता है (केवल SQL, MongoDB नहीं, हैंडलरसॉकेट नहीं)
- सर्वर बी-ट्री घटक को पंक्ति (समान) तक पहुंचने के लिए कहता है
- सर्वर बी-ट्री पथ पर एक भौतिक रीडोनली-लॉक लेता है जो पंक्ति (समान) की ओर जाता है
- सर्वर पंक्ति पर तार्किक लॉक लेता है (केवल SQL, MongoDB नहीं, हैंडलरसॉकेट नहीं)
- सर्वर पंक्ति को क्रमबद्ध करता है और इसे TCP (उसी) पर भेजता है
- क्लाइंट इसे (समान) deserializes
विशिष्ट SQL-आधार RDBMS'es के लिए केवल दो अतिरिक्त चरण हैं। इसलिए वास्तव में कोई अंतर नहीं है।