MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

क्या सर्वर-साइड जावास्क्रिप्ट फ़ंक्शन में mongoDB में प्रदर्शन समस्याएँ हैं?

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

eval आदेश

eval का दोष यह है कि यह केवल एक नोड पर चलता है। यह संकुल वातावरण में इसकी उपयोगिता को बहुत कम कर देता है। शार्प किए गए संग्रह के साथ, यह बिल्कुल भी काम नहीं करता है!

डिफ़ॉल्ट रूप से, यह एक वैश्विक लॉक भी बनाता है जो स्क्रिप्ट के चलने तक डेटाबेस को पूरी तरह से अनुपयोगी बना देता है। इसे nolock . से रोका जा सकता है तर्क (जब तक कि स्क्रिप्ट स्वयं कुछ ऐसा नहीं करती जो वैश्विक लॉक बनाता है)।

सम्माये का जवाब कुछ गंभीर सुरक्षा चिंताओं की भी व्याख्या करता है।

यह वास्तव में किसी भी नियमित ऑपरेशन के लिए उपयोग की जाने वाली किसी चीज़ की तुलना में एक परीक्षण- और प्रशासन उपकरण से अधिक है।

सर्वर पर .js फ़ाइलों को एक मोंगो शेल इंस्टेंस के माध्यम से चलाना

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

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

$where से ढूंढें -ऑपरेटर

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

जब $where के उपयोग से बचा नहीं जा सकता है, तो कम से कम खोज-क्वेरी के कुछ सामान्य टूल का उपयोग करने का प्रयास करें ताकि दस्तावेज़ों के सेट को कम किया जा सके, जिन्हें $ जहाँ फ़ंक्शन को पास करने की आवश्यकता होती है।

MapReduce

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

इसमें भी वही कमी है जो $जहां:जब तक आप फ़िल्टर नहीं करते, आपको प्रत्येक दस्तावेज़ के लिए एक नहीं बल्कि कम से कम दो जावास्क्रिप्ट फ़ंक्शन चलाने होंगे।

लेकिन MapReduce कम से कम वितरित चल सकता है और इसे समानांतर किया जा सकता है।

tl;dr:

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. idObject का उपयोग करके तिथि के अनुसार फ़िल्टर करें

  2. sudo chown -R `id -u` /data/db . का अर्थ

  3. किसी अन्य मॉडल में परिभाषित नेवला डेटाबेस की स्कीमा कैसे प्राप्त करें?

  4. मैं $Project के साथ मौजूदा स्ट्रिंग से नए फ़ील्ड कैसे बना सकता हूं?

  5. मोंगोडब एक संग्रह से अन्य संग्रह में सभी क्षेत्रों में फ़ील्ड पर रेगेक्स जांचें