NoSQL बनाम अन्य SQL Drupal Setups


14

MySQL, DrGal में PostGRE SQL या MSSQL पर NoSQL (पूर्व MongoDB) चलाने के क्या फायदे हैं? क्या केवल स्टोरेज का उपयोग करने से प्राप्त लाभ या कुछ Drupal कॉन्फ़िगरेशन को बदलने की आवश्यकता है?


यह एक प्रश्न है, जिसके लिए केरोली नेगी ने "आधिकारिक" उत्तर दिया। वह निश्चित रूप से ड्रुपल के साथ MongoDB का उपयोग करने का लाभ जानता है।
kiamlaluno

मेरे मन को पढ़ें .. अन्य विकल्पों में बहुत दिलचस्पी है अगर पर्याप्त लाभ हैं, और निश्चित रूप से पेशेवरों के साथ विपक्ष है।
केविन

जवाबों:


13

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

Drupal 7 की वर्तमान स्थिति में, आपके पास होगा:

  • SQL पर संग्रहीत इकाई का आधार तालिका (यानी, उपयोगकर्ता तालिका, नोड तालिका, आदि)
  • सभी फ़ील्ड SQL में संग्रहीत
  • अपनी बेस टेबल से संस्थाओं के गुण MongoDB में डुप्लिकेट किए गए

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

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

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

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


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

मेरी बात बिल्कुल: हमारा स्कीमा सामान्यीकृत है, और इसके परिणामस्वरूप बहुत ही खराब क्वेरी प्रदर्शन है। क्वेरी प्रदर्शन को बेहतर बनाने के लिए, आपको स्कीमा को अलग करना होगा। हमारे मामले में MongoDB का उपयोग करने का मुख्य लाभ यह है कि यह किसी प्रकार का "स्वचालित विकृति इंजन" है।
डेमियन टूरनॉड

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

@ पियरे: डेमियन ने कुछ दसवीं हजार संस्थाओं के बारे में बात की , जो तालिका पंक्तियों की तुलना में पूरी तरह से अलग बात हो सकती है। उदाहरण के लिए, आपके पास उस इकाई पर 10 या अधिक फ़ील्ड हो सकते हैं, तो आपके पास 10 अतिरिक्त तालिकाएँ हैं जिन्हें हर बार एक अलग क्वेरी से क्वेरी करने की आवश्यकता होती है, जब ऐसी इकाई लोड होती है। और MongoDB इन अतिरिक्त तालिकाओं को प्रतिस्थापित कर सकता है, इकाई आधार तालिका को नहीं।
बेर्दिर

2
किसी भी मॉड्यूल को MySQL में फ़ील्ड्स की अपेक्षा नहीं करनी चाहिए। Drupal 7 पर फ़ील्ड को क्वेरी करने का एकमात्र तरीका EntityFieldQuery है। यदि यह फ़ील्ड तालिकाओं को सीधे क्वेरी कर रहा है, तो मॉड्यूल में एक बग खोलें। मैं इस समय उन किसी भी मॉड्यूल को नहीं जानता।
डेमियन टुर्नॉड

7

MongoDB और समान को अपेक्षाकृत लचीले तरीके से संरचित (श्रेणीबद्ध) डेटा संग्रहीत करने के लिए डिज़ाइन किया गया है।

उदाहरण के लिए Drupal 7, उपयोग करते समय field_sql_storage, प्रत्येक फ़ील्ड को बहुत ही टेबल मिलती हैं। जब आप किसी सामग्री प्रकार में 10 फ़ील्ड संलग्न करते हैं, तो आप अपने डेटाबेस में 10 तालिकाओं के साथ समाप्त होते हैं। जब आप उस नोड को लोड करते हैं, field_sql_storageतो प्रति फ़ील्ड और प्रति नोड (या उपयोग करते समय कई नोड्स node_load_multiple) पर एक क्वेरी निष्पादित करेगा ।

जब आप mongodb_field_storage का उपयोग करते हैं , तो आप नोड के सभी क्षेत्रों को एक ही दस्तावेज़ में संग्रहीत कर सकते हैं और एक क्वेरी के साथ प्राप्त कर सकते हैं।

आप MongoDB में वॉचडॉग, सत्र, कैश, ब्लॉक जैसी अन्य चीजें भी स्टोर कर सकते हैं ।

आपको अभी भी MySQL की आवश्यकता है, MongoDB इसे (केवल विशिष्ट भागों के लिए) प्रतिस्थापित नहीं करता है।

एक और लाभ यह है कि यह MongoDB के साथ पैमाने पर करना आसान है , आप कई सर्वरों को उनके बीच डेटा साझा करने के लिए क्लस्टर में जोड़ सकते हैं।


हाय बेरदीर! क्या आपको पता है कि यदि मैं प्रदर्शन के लिए परीक्षण करने के लिए एक मौजूदा प्रॉजेक्ट में MongoDB को छोड़ देता हूं तो क्या मैं बिना परिणाम के मॉड्यूल को सक्षम और अक्षम कर सकता हूं? मैं मोंगो की कोशिश करना चाहता हूं, लेकिन क्या होगा अगर यह काम नहीं करता है या कुछ और? क्या यह कोशिश करना सुरक्षित है? (मुझे पता है कि आप इसकी गारंटी नहीं दे सकते लेकिन मुझे आश्चर्य है कि ज्यादातर मामलों में क्या होता है)
बेटो एविगा

1
ठीक है, एक शुरुआत के लिए, आप इसे केवल ड्रॉप नहीं कर सकते। प्रत्येक फ़ील्ड ने कॉन्फ़िगर किया है कि आपके द्वारा उपयोग किए जाने वाले कौन से स्टोरेज बैकएंड में आपको अपने फ़ील्ड को फिर से बनाना / फिर से बनाना होगा, अपने विचार फिर से बनाने होंगे (जैसे कि उन्हें efq_views बैकएंड का उपयोग करने की आवश्यकता है ), शायद आपके अपने प्रश्न यदि आपने फ़ील्ड डेटा तालिकाओं के विरुद्ध प्रत्यक्ष प्रश्न लिखे हैं। प्रारंभिक स्थापना के लिए नई स्थापना में समान संरचना को फिर से बनाना आसान हो सकता है।
बेर्दिर

धन्यवाद बरदीर! मैंने कुछ दिनों पहले MongoDB की कोशिश की थी, लेकिन प्रदर्शन में ध्यान देने योग्य लाभ नहीं था, लेकिन मुझे उन चीजों / परिवर्तनों के बारे में भी जानकारी नहीं थी जो आप अभी मुझे बता रहे हैं। मैंने सोचा था कि "MongoDB को बड़ी साइटों में फर्क करना चाहिए"। मैं फिर से MongoDB की कोशिश करूँगा।
बेटो एविगा

5

पेशेवरों विपक्ष के साथ आते हैं।

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

कई मॉड्यूल मोंगोडेब के साथ काम करने में सक्षम नहीं होंगे, इसलिए आप इंटरऑपरेबिलिटी को ढीला कर देंगे।

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

मुझे लगा कि मैंने पहले ही इसका जवाब दे दिया था, एसओ पर लगभग डुप्लिकेट है

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