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

YCSB के साथ MongoDB को बेंचमार्क कैसे करें?

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

हालांकि, आपके MongoDB परिनियोजन के वास्तविक प्रदर्शन की उचित समझ होना एक अच्छा विचार है:ताकि आप अपनी एप्लिकेशन आवश्यकताओं के आधार पर सटीक रूप से प्रावधान कर सकें; ताकि आप वास्तव में विभिन्न DBaaS प्रदाताओं की तुलना यह सुनिश्चित करने के लिए कर सकें कि आपको "हिरन के लिए सबसे अधिक" मिल रहा है।

यह ब्लॉग आपके MongoDB क्लस्टर पर कुछ बुनियादी प्रदर्शन बेंचमार्क चलाने के लिए एक प्राइमर है। यह YCSB बेंचमार्क परीक्षणों को कॉन्फ़िगर और चलाने और परिणामों की व्याख्या करने के तरीके के विवरण में जाता है। इसके लिए प्रेरणा हाल ही में MongoDB ब्लॉग से MongoDB 3.0 में प्रदर्शन में सुधार के बारे में मिली।

YCSB Yahoo! पर विकसित एक लोकप्रिय जावा ओपन-सोर्स विनिर्देश और प्रोग्राम सूट है! विभिन्न NoSQL डेटाबेस के सापेक्ष प्रदर्शन की तुलना करने के लिए। इसके कार्यभार का उपयोग NoSQL डेटाबेस के विभिन्न तुलनात्मक अध्ययनों में किया जाता है।

YCSB की स्थापना

यह और बाद के अनुभाग आपको अपने पसंदीदा DBaaS प्रदाता सिस्टम पर YCSB परीक्षणों को सेटअप, कॉन्फ़िगर और चलाने के लिए चरण दर चरण प्रक्रिया के माध्यम से मार्गदर्शन करेंगे।

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

चरण:

  • यदि आपके सिस्टम पर Java, Maven या git पहले से इंस्टॉल नहीं है, तो उन्हें इंस्टॉल करें। अपने विशिष्ट OS के लिए उपलब्ध दस्तावेज़ देखें। सुनिश्चित करें कि आपने अपने जावा संस्करण के साथ संगत मावेन संस्करण स्थापित किया है। परीक्षण करें कि सभी निर्भरताएँ ठीक से काम कर रही हैं। उदाहरण के लिए
$ javac -version
javac 1.8.0_25
$ mvn -version
Apache Maven 3.3.1 (cab6659f9874fa96462afef40fcf6bc033d58c1c; 2015-03-14T01:40:27+05:30)
Maven home: /usr/local/Cellar/maven/3.3.1/libexec
Java version: 1.8.0_25, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.10.2", arch: "x86_64", family: "mac"
$ git --version
git version 1.9.5 (Apple Git-50.3)
  • जैसा कि YCSB के Github पेज द्वारा सुझाया गया है, आप YCSB का टार आर्काइव प्राप्त कर सकते हैं। लेकिन हम इसे स्रोत से बनाने की सलाह देते हैं। कदम YCSB के MongoDB README में प्रलेखित हैं। यह बाद में आपके क्लाउड प्रदाता के लिए MongoDB प्रमाणीकरण सक्षम करने में हमारी सहायता करेगा।
git clone git://github.com/brianfrankcooper/YCSB.git
cd YCSB
mvn clean package
  • ध्यान दें:यदि आपका `mvn clean package` या `mvn clean install` "मैपकीपर" पैकेज का पता लगाने में त्रुटियों के कारण कमांड विफल हो जाता है, pom.xml में "मैपकीपर" प्रविष्टियों के 2 उदाहरणों को हटाएं या टिप्पणी करें। जड़ स्तर पर। अधिक जानकारी के लिए इस जीथब मुद्दे को देखें।
  • बिल्ड के सफल होने के बाद, अब आप YCSB परीक्षण चलाने के लिए तैयार हैं!

प्रमाणीकरण सक्षम करना

अधिकांश MongoDB प्रदाता डिफ़ॉल्ट रूप से MongoDB प्रमाणीकरण प्रदान करते हैं और इसे अक्षम करने का कोई तरीका नहीं है। दुर्भाग्य से, YCSB वर्तमान में MongoDB प्रमाणीकरण का समर्थन नहीं करता है। क्लाइंट कार्यान्वयन स्वयं अधिकतर, अब, बहिष्कृत API कॉल का उपयोग करता है। अपनी जरूरतों को पूरा करने के लिए, हमने एक नई MongoDB विशिष्ट YCSB प्रॉपर्टी, 'mongodb.auth' को जोड़ा है। इसका समर्थन करने के लिए कोड की कुछ पंक्तियों के साथ। परिवर्तन बहुत सरल हैं और एक अंतर यहां पाया जा सकता है। डिफ़ॉल्ट MongoDB विशिष्ट YCSB गुण यहाँ सूचीबद्ध हैं।

mvn . का उपयोग करके फिर से पैकेज बनाएं एक बार फिर से परिवर्तन पूर्ण हो गए हैं। मावेन का उपयोग करके YCSB कैसे बनाया जाए, इस पर ऊपर दिए गए अनुभाग का संदर्भ लें।

परीक्षा चलाना

YCSB विकी का यह खंड विवरण में अगली और बाद की गतिविधियों को सूचीबद्ध करता है। हम यहां अन्य बिंदुओं के साथ उनका संक्षेप में वर्णन करेंगे।

  • अगला चरण यह चुनना है कि आप किस प्रकार का कार्यभार चलाना चाहते हैं। YCSB विकी के मुख्य कार्यभार अनुभाग को पढ़ने और समझने के लिए समय निकालें। उन्हें यहाँ संक्षेप में प्रस्तुत किया गया है:
    • कार्यभार ए:भारी कार्यभार अपडेट करें:50/50% पढ़ने/लिखने का मिश्रण
    • कार्यभार बी:अधिकतर कार्यभार पढ़ें:95/5% पढ़ने/लिखने का मिश्रण
    • कार्यभार सी:केवल पढ़ने के लिए:100% पढ़ता है
    • कार्यभार डी:नवीनतम कार्यभार पढ़ें:हाल के सम्मिलन पर अधिक ट्रैफ़िक
    • कार्यभार ई:लघु श्रेणी:लघु श्रेणी आधारित प्रश्न
    • कार्यभार एफ:पढ़ें-संशोधित-लिखें:मौजूदा रिकॉर्ड पढ़ें, संशोधित करें और अपडेट करें
  • जाहिर है, अलग-अलग वर्कलोड को कोर प्रॉपर्टीज का उपयोग करके बदला जा सकता है। हो सकता है कि आप एक वर्कलोड चुनना चाहें और गुणों को अपने एप्लिकेशन की विशेषताओं से मेल खाने वाली किसी चीज़ से मेल खाना चाहें। (इस तुलनात्मक अध्ययन ने दिलचस्प "ट्वीक्ड" वर्कलोड का एक गुच्छा चुना)। इसके अलावा, मोंगोडीबी ब्लॉग का संदर्भ लें जिसका हमने पहले खंड में उल्लेख किया था। (हमारा परीक्षण डिफ़ॉल्ट पठन/अद्यतन अनुपात के साथ वर्कलोड ए उठाएगा)।
  • ऑपरेशन की संख्या चुनें (प्रॉपर्टी 'ऑपरेशनकाउंट') ताकि परीक्षण स्वयं उचित समय के लिए चले। 30 मिनट के भीतर समाप्त होने वाले परीक्षण सिस्टम के सामान्य प्रदर्शन के अच्छे संकेतक नहीं हो सकते हैं।
  • उपयुक्त संख्या में थ्रेड चुनें जिन्हें YCSB चलाना चाहिए। यह वास्तव में इस बात पर निर्भर करता है कि आपकी क्लाइंट मशीनें कितनी अच्छी हैं, आपका MongoDB क्लस्टर कितना भार ले सकता है और यह आपके वास्तविक एप्लिकेशन का कितना प्रतिनिधि है। हम अपने बेंचमार्क परीक्षण कई थ्रेड्स के विरुद्ध चलाएंगे।
  • लोड चरण चलाएँ। डेटाबेस में सम्मिलित करने के लिए एक रिकॉर्ड गणना (संपत्ति 'रिकॉर्डकाउंट') चुनें, जो उस पर चलने वाले संचालन की संख्या के करीब है। उचित संख्या में थ्रेड चुनें ताकि सम्मिलन में अधिक समय न लगे। उदाहरण के लिए
    ./bin/ycsb load mongodb -s -P workloads/workloada -p recordcount=10000000 -threads 16 -p
     mongodb.url="mongodb://user:[email protected]:9999,server2.example.com:9999/dbname" -p 
    mongodb.auth="true"
    
    • load ' ध्वज इंगित करता है कि यह एक लोड रन है।
    • s 10 सेकंड के अंतराल पर फ्लैग प्रिंट की स्थिति
    • recordcount ' 10 मिलियन पर सेट है।
    • threads ' क्लाइंट थ्रेड्स की संख्या को 16 पर सेट करता है।
    • mongodb.auth ' वह संपत्ति है जिसे हमने MongoDB प्रमाणीकरण सक्षम करने के लिए लिखा था।
  • याद रखें
    • stdout को फ़ाइल में रीडायरेक्ट करें।
    • 'screen का इस्तेमाल करें ’ या एक समान विधि ताकि इन कार्यों को चलाने के दौरान आपका सत्र नष्ट न हो
  • डेटा लोड चरण पूरा होने के बाद, आप अपना कार्यभार चलाने के लिए तैयार हैं। उदाहरण के लिए
./bin/ycsb run mongodb -s -P workloads/workloada -p 
mongodb.url="mongodb://user:[email protected]:9999,server2.example.com:9999/dbname" -p
 mongodb.auth="true" -p operationcount=10000000 -threads 2
  • विभिन्न संख्या में थ्रेड्स के साथ रन दोहराएं। परिणामों को पुनर्निर्देशित करना याद रखें ताकि आप बाद में उनकी तुलना कर सकें। उदाहरण के लिए हमने 2, 4, 8, 16 और 32 धागों के लिए अपने परीक्षण दोहराए।

परिणामों का विश्लेषण

इस YCSB विकी पेज का अंतिम भाग परिणामों के विश्लेषण के बारे में बात करता है। जानकारी के सबसे दिलचस्प बिट्स समग्र थ्रूपुट और 95/99% प्रतिशत विलंबता हैं। आमतौर पर थ्रेड्स की संख्या बढ़ने से थ्रूपुट बढ़ जाता है जब तक कि लाभ समतल न हो जाए और विलंबता अस्वीकार्य हो जाए। उदाहरण के लिए यहाँ एक परीक्षण प्रणाली के लिए थ्रूपुट और लेटेंसी बनाम # थ्रेड्स का एक प्लॉट है जिसे हम बेंचमार्क करने की कोशिश कर रहे थे। चयनित वर्कलोड वर्कलोड ए और लगभग 3 मिलियन ऑपरेशन था।

ग्राफ से यह निष्कर्ष निकाला जा सकता है कि इस MongoDB सर्वर के लिए लोड के दृष्टिकोण से 16 थ्रेड्स शायद "स्वीट स्पॉट" हैं:इसके अलावा थ्रूपुट लाइन # थ्रेड्स में घातीय वृद्धि के लिए भी सपाट है, जबकि विलंबता अस्वीकार्य रूप से बड़ी हो जाती है।

कुछ संकेत:

  • क्लाउड पर सिस्टम के प्रदर्शन की बेहतर तस्वीर के लिए, इन परीक्षणों को स्वचालित और फिर दोहराना दिन के विभिन्न बिंदु हैं। हमने देखा है कि प्रदर्शन विशेषताएँ दिन भर में महत्वपूर्ण रूप से भिन्न हो सकती हैं।
  • दो संभावित DBaaS प्रदाताओं की तुलना करते समय, सुनिश्चित करें कि आप अपनी क्लाइंट मशीनों और DBaaS क्लस्टर को एक ही भौगोलिक स्थिति में चुनते हैं। क्लस्टर समान विन्यास के होने चाहिए। साथ ही, याद रखें कि परीक्षण चलाना दिन में कई बार होता है।

आगे क्या है

यहां कुछ चीजें दी गई हैं जिनकी हम जांच करना चाहते हैं क्योंकि हम इस क्षेत्र में और अधिक काम कर रहे हैं:

  • समानांतर में कई मशीनों से वर्कलोड चलाना:उच्च क्षमता वाले MongoDB क्लस्टर को लोड करने का प्रयास करते समय, एक एकल क्लाइंट मशीन पर्याप्त नहीं होगी। YCSB वर्तमान में समानांतर में कई मशीनों से वर्कलोड चलाने का कोई आसान तरीका प्रदान नहीं करता है। हालाँकि, इसे मैन्युअल रूप से किया जा सकता है। बड़े क्लस्टर में डेटा लोड करने का प्रयास करते समय भी यह उपयोगी होगा।
  • डेटासेट का आकार:डेटाबेस का आकार बनाम MongoDB सिस्टम की मेमोरी निरपेक्ष थ्रूपुट/विलंबता विशेषताओं को बदल देगी क्योंकि बड़े डेटा सेट के लिए MongoDB को डिस्क को हिट करना होगा ।
  • व्यक्तिगत रिकॉर्ड का आकार:रिकॉर्ड आकार बड़े होने पर प्रदर्शन विशेषताओं के लिए यह दिलचस्प होगा, खासकर जब यह अधिकतम समर्थित रिकॉर्ड आकार के करीब हो। यह उन अनुप्रयोगों के लिए महत्वपूर्ण हो सकता है जो अधिकतर रीड-मॉडिफाई-राइट बैक ऑपरेशन (जैसे वर्कलोड एफ) करते हैं।
  • वैकल्पिक MongoDB ड्राइवर:चूंकि वर्तमान में हम दो अलग-अलग DBaaS प्रदाताओं की तुलना करने में रुचि रखते थे, इसलिए हमने अधिक कुशल डेटाबेस ड्राइवरों का उपयोग करने का प्रयास नहीं किया। जाहिर है, नवीनतम और अधिक कुशल ड्राइवरों के साथ बेहतर पूर्ण संख्याएं प्राप्त की जा सकती हैं। यह उन अनुप्रयोगों के लिए दिलचस्प होगा जो अपने सिस्टम से अंतिम औंस रस निकालने की कोशिश कर रहे हैं। यह ब्लॉग async MongoDB ड्राइवर का उपयोग करके YCSB के माध्यम से प्रदर्शन सुधार माप के बारे में बात करता है।
  • वैकल्पिक बेंचमार्किंग टूल:MongoDB के लिए Sysbench वह है जो हमें दिलचस्प लगता है। हम दूसरों को देख रहे हैं।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongoDB में कोई ठीक से कई तिथियों को कैसे बढ़ाता है?

  2. कठपुतली का उपयोग करके MongoDB परिनियोजन और रखरखाव के लिए एक गाइड:भाग 1

  3. 'process.nextTick (फ़ंक्शन() {फेंक एरर;})' - अपरिभाषित कोई फ़ंक्शन नहीं है (मोंगोडब/मोंगोज़)

  4. फ़ील्ड नाम में डॉट का उपयोग कैसे करें?

  5. मैं mongodb के c++ ड्राइवर का उपयोग करके प्रोग्राम कैसे बना सकता हूं?