उन डेटा संरचनाओं को कठोर, पूर्वनिर्धारित और सपाट तालिकाओं में मैप करने की कोई आवश्यकता नहीं है जिन्हें कई मध्यवर्ती तालिकाओं के माध्यम से रनटाइम पर फिर से जोड़ना पड़ता है। (इस तरह वर्णित, संबंधपरक मॉडल पुराने जमाने की तरह लगता है, है ना?)
दुर्भाग्य से, दुनिया के विश्लेषण और रिपोर्टिंग सॉफ़्टवेयर पोस्ट-रिलेशनल डेटा की समझ नहीं बना सकते हैं। यदि यह समतल नहीं है, यदि यह एक समान नहीं है, तो आप लीगेसी विश्लेषण और रिपोर्टिंग समाधानों के अंदर इसके साथ कुछ भी नहीं कर सकते हैं!
यह एक वास्तविक समस्या है, क्योंकि डेवलपर्स MongoDB ऐप बनाते हैं जो टन डेटा उत्पन्न करते हैं। आखिरकार, व्यवसाय इस डेटा को अलग-अलग करना चाहते हैं, रिपोर्ट बनाना और अंतर्दृष्टि एकत्र करना चाहते हैं।
आप आज वह सब कुछ कर सकते हैं, लेकिन आपको कोड के बहुत कुछ लिखने, MongoDB डेटा को किसी अन्य डेटाबेस या डेटा वेयरहाउस में बदलने और दोहराने की आवश्यकता है, या अन्यथा उस प्रकार के तीव्र, लंबे समय तक दर्द और पीड़ा से गुजरना होगा जिससे मैं बचना चाहता हूं।
यही कारण है कि मैंने स्लैमडाटा की स्थापना की। SlamData एक ओपन सोर्स कंपनी है जो NoSQL डेटा के लिए नेक्स्ट-जेनरेशन एनालिटिक्स और रिपोर्टिंग टूल विकसित कर रही है।
हमने अभी हाल ही में SlamData का बीटा संस्करण लॉन्च किया है, जो MongoDB का समर्थन करता है। इस पोस्ट में, मैं इस बारे में बात करूँगा कि आप साधारण SQL का उपयोग करके MongoDB को क्वेरी करने के लिए इस बीटा का उपयोग कैसे कर सकते हैं, कुछ सीमाएँ क्या हैं, SlamData प्रतियोगिता की तुलना कैसे करती है, और परियोजना कहाँ जा रही है।
स्लैमडेटा प्राप्त करना और इंस्टॉल करना
आप Github पर सोर्स कोड से SlamData का निर्माण कर सकते हैं। लेकिन अगर आपको सोर्स कोड के साथ खिलवाड़ करना पसंद नहीं है, तो मैं SlamData वेबसाइट से GUI इंस्टालर डाउनलोड करने की सलाह देता हूं।
Linux, OS X, और Windows के लिए पूर्व-निर्मित इंस्टॉलर हैं, और वे आपकी ज़रूरत की हर चीज़ के साथ आते हैं (MongoDB के चल रहे इंस्टेंस को छोड़कर!)।
स्थापना प्रक्रिया के दौरान, विज़ार्ड आपसे MongoDB कनेक्शन URI (जिसमें एक उपयोगकर्ता नाम और पासवर्ड शामिल हो सकता है), विशिष्ट डेटाबेस जिसे आप उपयोग करना चाहते हैं (चिंता न करें, आप बाद में और जोड़ सकते हैं) और SlamData में कहां के लिए पूछेगा फ़ाइल सिस्टम जिसे आप उस डेटाबेस को माउंट करना चाहते हैं (जिसे आप '/', रूट पथ के रूप में छोड़ सकते हैं)।
स्थापना के बाद, आप SlamData को डबल-क्लिक से लॉन्च कर सकते हैं। ध्यान दें कि वास्तव में SlamData के दो घटक हैं:फ्रंट-एंड, और एक हल्का सर्वर जो MongoDB से जुड़ता है। डिफ़ॉल्ट रूप से दोनों इंस्टॉल हो जाएंगे, और जब आप SlamData पर डबल-क्लिक करेंगे तो दोनों लॉन्च हो जाएंगे।
स्लैमडाटा फ्रंट-एंड
SlamData का फ्रंट-एंड, ऊपर स्क्रीनशॉट में दिखाया गया है, SlamData की सारी शक्ति के लिए एक विज़ुअल इंटरफ़ेस है (कमांड-लाइन इंटरफ़ेस पसंद करने वालों के लिए एक REPL भी है)।
फ़ाइल सिस्टम ट्री आपको सभी माउंटेड डेटाबेस, साथ ही इन डेटाबेस के अंदर के संग्रह को दिखाता है। यह आपके द्वारा क्वेरी किए जा सकने वाले सभी डेटा का एक विज़ुअल रिमाइंडर है, हालांकि बाद के संस्करणों में आप फ़ाइल सिस्टम के साथ और भी बहुत कुछ करने में सक्षम होंगे।
संपादक इंटरफ़ेस आपको नोटबुक बनाने की अनुमति देता है, जो टेक्स्ट (मार्कडाउन), क्वेरीज़ (एसक्यूएल), और विज़ुअलाइज़ेशन (चार्ट) के संग्रह हैं। एक नोटबुक एक रिपोर्ट की तरह होती है, अधिकांश रिपोर्टों के विपरीत, यह इंटरैक्टिव हो सकती है और लाइव डेटा से ताज़ा हो सकती है।
प्रश्न लिखना
कुछ प्रश्न लिखने का समय!
इन उदाहरणों में, मुझे लगता है कि आपके पास अपने MongoDB डेटाबेस में लोड किया गया ज़िप कोड डेटा सेट है, जिसे आप MongoDB साइट से डाउनलोड कर सकते हैं।
इस डेटा सेट में ज़िप कोड के बारे में बुनियादी जानकारी है, जैसे कि वे कहाँ स्थित हैं (शहर, राज्य, भौगोलिक) और उनकी आबादी।
आइए पहले 5 ज़िप प्रविष्टियों को वापस लें:
चुनें * ज़िप से LIMIT 5
{ "_id" :"35004" , "city" :"ACMAR" , "loc" :[ -86.51557 , 33.584132] , "pop" :6055 , "state" :"AL"}
{ "_id" :"35005" , "शहर" :"ADAMSVILLE", "loc" :[-86.959727 , 33.588437] , "pop" :10616 , "state" :"AL"}
{ "_id" :"35006" , "city" :"ADGER" , "loc" :[-87.167455 , 33.434277] , "pop" :3205 , "state" :"AL"}
{ "_id" :"35007" , "शहर" :"KEYSTONE" , "loc" :[-86.812861 , 33.236868] , "pop" :14218 , "state" :"AL"}
{ "_id" :"35010″ , "city" :"New SITE" , "loc" :[-85.951086 , 32.941445] , "pop" :19942, "state" :"AL"}
शीर्ष 5 सबसे अधिक आबादी वाले ज़िप कोड वाले शहर कौन से हैं? केक का टुकड़ा:
शहर चुनें, ज़िप से पॉप करें DESC LIMIT 5 के अनुसार ऑर्डर करें
{ "_id" :"60623" , "शहर" :"CHICAGO", "pop" :112047}
{ "_id" :"11226" , "शहर" :"ब्रुकलिन", "पॉप" :111396}
{ "_id" :"10021" , "शहर" :"न्यू यॉर्क", "पॉप" :106564}
{ "_id" :"10025" , "शहर" :"न्यू यॉर्क", "पॉप" :100027}
{ "_id" :"90201″ , "शहर" :"BELL GARDENS", "pop" :99568}
SlamData की SQL की बोली (जिसे SlamSQL कहा जाता है) में नेस्टेड दस्तावेज़ों और सरणियों के लिए पूर्ण समर्थन है, और आप सामान्य Javascript संकेतन (उदा. SELECT foo.bar.baz) का उपयोग करके उन तक पहुँच प्राप्त करते हैं।
कभी-कभी, आप एक सरणी को समतल करना चाहते हैं ताकि आप उस सरणी की सामग्री में खुदाई कर सकें। ज़िप डेटा सेट में, एक स्थान सरणी फ़ील्ड होता है जिसमें एक भौगोलिक स्थान होता है। इस सरणी को समतल करने के लिए, केवल स्टार ऑपरेटर ('*') को सरणी अनुक्रमणिका के रूप में उपयोग करें:
स्थान चुनें[*] ज़िप से LIMIT 1
{ "_id" :{ "$oid" :"53ecf39574d2394acbd4b6f1″} , "loc" :-86.51557}
अंत में, प्रत्येक शहर के लिए सभी ज़िप कोड की जनसंख्या का योग करने के लिए SQL के GROUP BY ऑपरेटर का उपयोग करें, और फिर शीर्ष 5 सबसे अधिक आबादी वाले शहरों को निकालें:
शहर का चयन करें, एसयूएम (पॉप) ज़िप से पॉप के रूप में शहर द्वारा समूह पॉप डीईएससी सीमा 5 द्वारा आदेश
बहुत बढ़िया, हुह?
अधिकांश MongoDB फ़ंक्शन वर्तमान में बीटा में समर्थित हैं, हालांकि वे अपने मानक SQL नामों (या उनके PostgreSQL नामों द्वारा, जैसा भी मामला हो) द्वारा जाते हैं। इनमें निम्नलिखित शामिल हैं:
- CONCAT, LOWER, UPPER, SubSTRING
- DATE_PART
- COUNT, SUM, MIN, MAX, AVG
- +, -, *, /, %
- ARRAY_LENGTH
बीटा सीमाएं
बीटा को एक कारण से "बीटा" कहा जाता है:यह सभी SlamSQL को लागू नहीं करता है और SlamSQL के उन हिस्सों में कुछ बग हो सकते हैं जो इसे लागू करते हैं।
विशेष रूप से, आपको निम्नलिखित सीमाओं पर ध्यान देना चाहिए:
- हालांकि ग्रुप बाय समर्थित है, HAVING क्लॉज अभी तक लागू नहीं किए गए हैं।
- सभी फ़ंक्शन जो मूल रूप से एग्रीगेशन पाइपलाइन (जैसे स्ट्रिंग लंबाई) द्वारा समर्थित नहीं हैं, अभी तक समर्थित नहीं हैं।
- MongoDB में एक ज्ञात समस्या के कारण अलग-अलग सरणी तत्वों का चयन करना अभी तक समर्थित नहीं है (उदा. zip से चुनें [0] ज़िप से)।
- DISTINCT, और अन्य सेट-स्तरीय संचालन जैसे UNION, UNION ALL, अभी तक समर्थित नहीं हैं।
- जॉइन अभी तक आधिकारिक रूप से जारी किए गए संस्करण में समर्थित नहीं हैं (हालांकि हमारे पास Github पर एक शाखा है जो उनका समर्थन करती है, उन लोगों के लिए जो ब्लीडिंग पर रहना पसंद करते हैं किनारे!)।
- ऐसे कई एज केस हैं जिन्हें अभी तक लागू नहीं किया गया है।
स्लैमडेटा कैसे ढेर हो जाता है
वर्तमान में, MongoDB पर विश्लेषण करने के लिए बाज़ार में बहुत सारे उपकरण नहीं हैं।
ओपन सोर्स वर्ल्ड में:
- MongoDB ड्राइवर हैं (पायथन, जावा, आदि में उपलब्ध), लेकिन ये लाइब्रेरी डेवलपर्स के लिए डिज़ाइन की गई हैं, न कि विश्लेषकों या डेटा वैज्ञानिकों के लिए, और आप उनका उपयोग करने के लिए कोड लिखने की आवश्यकता है।
- PostgreSQL में साइट्रसडेटा द्वारा योगदान किए गए MongoDB के लिए एक ओपन सोर्स फॉरेन डेटा रैपर है। अभी, यह केवल साधारण फिल्टर को MongoDB में धकेल सकता है। अन्य सभी कार्यों के लिए डेटा को MongoDB से PostgreSQL में वापस स्ट्रीम करने की आवश्यकता होती है।
- MoSQL एक ओपन सोर्स टूल है जो MongoDB से PostgreSQL में ETL को सरल करता है। आपको स्कीमा को सख्ती से परिभाषित करने, अपने डेटा को समतल करने, और सरणियों से बचने के साथ-साथ विश्लेषण और रिपोर्टिंग के लिए अलग बुनियादी ढांचे को बनाए रखने की आवश्यकता है।
वाणिज्यिक क्षेत्र में:
- AquaFold के डेटा स्टूडियो में एक MongoDB क्लाइंट है। यह बिल्कुल स्पष्ट नहीं है कि यह ड्राइवर को क्या धक्का देता है, हालांकि यह कुछ भाव, फ़िल्टर और शायद समूहीकरण प्रतीत होता है। हालांकि, कुछ कार्यों के लिए, डेटा को क्लाइंट को वापस स्ट्रीम किया जाना चाहिए, जिससे यह कई अनुप्रयोगों के लिए अव्यावहारिक हो।
- JSONStudio में एक इंटरफ़ेस है जो आपको MongoDB एग्रीगेशन फ्रेमवर्क के लिए पाइपलाइन क्वेरी को "विज़ुअल" बनाने की अनुमति देता है, लेकिन यह एग्रीगेशन जैसी सभी सीमाओं के अधीन है। फ्रेमवर्क, और SQL के मानकीकरण और घोषणात्मकता से लाभ नहीं उठाता है।
- Simba Technologies में MongoDB ODBC ड्राइवर है। यह कुछ फिल्टर और एग्रीगेशन को MongoDB में धकेल सकता है, लेकिन बाकी सब कुछ आगे की प्रक्रिया के लिए ड्राइवर को वापस स्ट्रीम करना होगा।
- Progress Software में MongoDB कनेक्टर के साथ DataDirect नामक डेटा कनेक्टिविटी उत्पादों का एक परिवार है। यह स्पष्ट नहीं है कि ये ड्राइवर MongoDB को कितना धक्का देते हैं, लेकिन वे शायद सिम्बा के ड्राइवर से बहुत मिलते-जुलते हैं, और उन्हें आवश्यकता होती है कि आप स्कीमा बनाएं।
- UnityJDBC के पास MongoDB के लिए एक JDBC ड्राइवर है, लेकिन यह अधिकांश काम करने के लिए स्ट्रीमिंग पर निर्भर करता है (कच्चे और बहुत ही सरल फ़िल्टरिंग को छोड़कर)।ली>
SlamData ओपन सोर्स और कमर्शियल ऑफर दोनों के मुकाबले बहुत अच्छी तरह से ढेर हो जाती है:
- SlamData 100% खुला स्रोत है, जिसमें खरीदने या लाइसेंस के लिए कुछ भी नहीं है।
- SlamData क्लाइंट को कुछ भी वापस स्ट्रीम किए बिना, प्रत्येक क्वेरी के 100% को MongoDB में नीचे धकेल देता है। कभी.
- SlamData को किसी स्कीमा परिभाषा, किसी स्कीमा मैपिंग और किसी भी प्रकार के ETL की आवश्यकता नहीं है। यह डेटा के साथ काम करता है क्योंकि यह पहले से ही MongoDB में मौजूद है।
- SlamData नेस्टेड दस्तावेज़ और सरणियों को प्रथम श्रेणी का दर्जा देता है। SQL के स्वच्छ, सरल और स्पष्ट विस्तार (जैसे foo.bar.baz[2].fuz) का उपयोग करके किसी भी संरचना में खुदाई करना आसान है।
- SlamData में एक आकर्षक लेकिन हल्का फ्रंट-एंड है जो आपको चार्ट के साथ पूर्ण इंटरैक्टिव रिपोर्ट बनाने देता है। रिपोर्ट जेनरेट करने के लिए कोड लिखने के बजाय अपनी टीम या संगठन में "उस व्यक्ति" को फ्रंट-एंड सौंपना आसान है, जो आपको वह करने के लिए मुक्त करता है जो आपको करने के लिए भुगतान किया जाता है।
रोडमैप
अक्टूबर की शुरुआत में, हम SlamData के प्रोडक्शन संस्करण को रिलीज़ करने की योजना बना रहे हैं।
इस रिलीज़ में, हमने बीटा की कई सीमाओं को संबोधित किया होगा, जिस तरह से हम SQL को MongoDB में संकलित कर सकते हैं, और फ्रंट-एंड को उपयोग में आसान और अधिक शक्तिशाली बना दिया है।
ओपन सोर्स प्रोजेक्ट के रूप में, हमारी सफलता गोद लेने के लिए नीचे आती है। यदि आप देखना चाहते हैं कि SlamData NoSQL एनालिटिक्स और रिपोर्टिंग के लिए सर्वश्रेष्ठ ओपन सोर्स टूल के रूप में विकसित होता रहता है, तो SlamData, fork या रिपॉजिटरी को डाउनलोड करें, और किसी भी बग या सुविधाओं को आप जो जोड़ना चाहते हैं, उस पर टिप्पणी करें।पी>