फ़िल्टरिंग आवेदन के लिए मास्टोबीडीसी


180

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

Hypothetically दोनों डेटा ऑब्जेक्ट्स को फ़ील्ड और मानों को संग्रहीत करते हैं, और ऑब्जेक्ट के उस निकाय को क्वेरी करने की अनुमति देते हैं। तो संभवतः चयनित तदर्थ क्षेत्रों के अनुसार वस्तुओं के सबसेट को छानना, दोनों के लिए कुछ फिट है।

मेरा आवेदन मापदंड के अनुसार वस्तुओं का चयन करने के चारों ओर घूमेगा। यह एक से अधिक फ़ील्ड्स को एक साथ फ़िल्टर करके ऑब्जेक्ट्स का चयन करेगा, अलग-अलग तरीके से रखा जाएगा, इसकी क्वेरी फ़िल्टरिंग मानदंड आमतौर पर 1 और 5 फ़ील्ड के बीच कहीं भी शामिल होंगे, शायद कुछ मामलों में अधिक। जबकि फ़िल्टर के रूप में चुने गए फ़ील्ड बहुत अधिक मात्रा में फ़ील्ड्स के सबसेट होंगे। चित्र में कुछ 20 फ़ील्ड नाम विद्यमान हैं, और प्रत्येक क्वेरी उन 20 फ़ील्ड्स में से कुछ फ़ील्ड्स द्वारा ऑब्जेक्ट्स को फ़िल्टर करने का एक प्रयास है (यह कम से कम या 20 से अधिक समग्र फ़ील्ड नामों को मौजूदा कर सकता है, मैंने इस संख्या का उपयोग केवल अनुपात के प्रदर्शन के लिए किया है फ़ील्ड को प्रत्येक असतत क्वेरी में फ़िल्टर के रूप में उपयोग किया जाता है)। फ़िल्टरिंग चुने हुए क्षेत्रों के अस्तित्व के साथ-साथ फ़ील्ड मानों द्वारा भी हो सकती है, उदाहरण के लिए फ़ील्ड A वाली ऑब्जेक्ट्स को फ़िल्टर करना, और उनका फ़ील्ड B x और y के बीच है,

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

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

तुम क्या सोचते हो? और, क्या आपने इस पहलू का प्रयोग किया है?

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

धन्यवाद!


मुझे नहीं पता कि यह वोट क्यों मिलते रहते हैं, क्या वे इतने लंबे समय के बाद ऐसे प्रमुख विकल्प हैं?
Matanster

8
बस दिलचस्प है कि आपने 6 साल पहले क्या चुना था और अब तक आपकी एक्सपायरी क्या थी :)?
अरुनास स्मालुकास

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

जवाबों:


391

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

हम अपनी कंपनी में MongoDB और Elasticsearch दोनों का उपयोग कर रहे हैं। हम अपने डेटा को MongoDB में संग्रहीत करते हैं और अपनी पूर्ण-पाठ खोज क्षमताओं के लिए विशेष रूप से Elasticsearch का उपयोग करते हैं। हम केवल उन मैंगो डेटा फ़ील्ड्स का एक सबसेट भेजते हैं, जिन्हें हमें लोचदार से क्वेरी करने की आवश्यकता होती है। हमारे उपयोग का मामला आपसे अलग है कि हमारा मानगो डेटा हर समय बदलता है: एक रिकॉर्ड, या एक रिकॉर्ड के क्षेत्रों का एक उपसमुच्चय, दिन में कई बार अपडेट किया जा सकता है और यह उस रिकॉर्ड को फिर से लोचदार करने के लिए कॉल कर सकता है। अकेले उस कारण से, केवल डेटा स्टोर के रूप में लोचदार का उपयोग करना हमारे लिए अच्छा विकल्प नहीं है, क्योंकि हम चुनिंदा क्षेत्रों को अपडेट नहीं कर सकते हैं; हमें एक दस्तावेज को उसकी संपूर्णता में फिर से अनुक्रमित करने की आवश्यकता होगी। यह एक लोचदार सीमा नहीं है, यह है कि ल्यूसीन काम करता है, लोचदार के पीछे अंतर्निहित खोज इंजन। आपके मामले में, तथ्य यह है कि रिकॉर्ड जीता ' एक बार संग्रहित होने के बाद आपको उस विकल्प को बनाने से बचाता है। यह कहते हुए कि, यदि डेटा सुरक्षा एक चिंता का विषय है, तो मैं दो बार सोचूंगा कि आपके डेटा के लिए केवल स्टोरेज मैकेनिज्म के रूप में एलाटिक्सर्च का उपयोग किया जाए। यह किसी बिंदु पर हो सकता है लेकिन मुझे यकीन नहीं है कि यह अभी तक वहां है।

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

  • इलास्टिक / ल्यूसीन वेक्टर स्पेस मॉडल और सूचना पुनर्प्राप्ति के लिए उल्टे अनुक्रमित का उपयोग करते हैं, जो एक क्वेरी के खिलाफ रिकॉर्ड समानता की तुलना करने के अत्यधिक कुशल तरीके हैं। जब आप Elastic / Lucene को क्वेरी करते हैं, तो यह पहले से ही उत्तर जानता है; इसका अधिकांश कार्य आपके क्वेरी शब्दों से मेल खाने के लिए सबसे अधिक संभावित लोगों द्वारा आपके लिए परिणामों की रैंकिंग में निहित है। यह एक महत्वपूर्ण बिंदु है: खोज इंजन, डेटाबेस के विपरीत, आपको सटीक परिणाम की गारंटी नहीं दे सकता है; वे परिणाम को रैंक करते हैं कि वे आपकी क्वेरी के कितने करीब हैं। यह सिर्फ इतना होता है कि ज्यादातर बार, परिणाम सटीक के करीब हैं।
  • मोंगो का दृष्टिकोण एक अधिक सामान्य उद्देश्य डेटा स्टोर है; यह एक दूसरे के खिलाफ JSON दस्तावेजों की तुलना करता है। आप इसे हर तरह से शानदार प्रदर्शन प्राप्त कर सकते हैं, लेकिन आपको अपने अनुक्रमणिका को सावधानीपूर्वक तैयार करने की आवश्यकता है ताकि आपके द्वारा चलाए जा रहे प्रश्नों का मिलान किया जा सके। विशेष रूप से, यदि आपके पास कई फ़ील्ड हैं जिनके द्वारा आप क्वेरी करेंगे, तो आपको अपनी यौगिक कुंजियों को सावधानीपूर्वक तैयार करना होगाताकि वे उन डेटासेटों को कम कर दें जो कि जितनी जल्दी हो सके उतने ही जल्दी समाप्त हो जाएंगे। उदाहरण के लिए, आपकी पहली कुंजी को आपके डेटासेट के अधिकांश हिस्से को फ़िल्टर करना चाहिए, आपके दूसरे को आगे क्या छोड़ना है, और इसी तरह से आगे और आगे फ़िल्टर करना चाहिए। यदि आपके प्रश्न कुंजी और परिभाषित अनुक्रमित में उन कुंजियों के क्रम से मेल नहीं खाते हैं, तो आपका प्रदर्शन काफी कम हो जाएगा। दूसरी ओर, मोंगो एक सच्चा डेटाबेस है, इसलिए यदि सटीकता वही है जो आपको चाहिए, तो जो उत्तर देगा वह हाजिर होगा।

पुराने रिकॉर्ड को समाप्त करने के लिए, इलास्टिक में एक टीटीएल सुविधा है। मोंगो ने इसे केवल 2.2 संस्करण के रूप में पेश किया है, मुझे लगता है।

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


92
बस यह टिप्पणी करने के लिए कि इस साइट पर वास्तुकला विषय पर उम्मीद की जाने वाली प्रतिक्रिया का यह उच्चतम स्तर है। Erudite, विश्लेषणात्मक, स्पष्ट और वास्तव में परिदृश्य को आकर्षक बनाने के लिए धन्यवाद।
२३:४० बजे मैटैनस्टर

12
सटीकता के बारे में, आप अपने क्षेत्रों को कैसे और कैसे विश्लेषण करें, यह चुनकर इलास्टिक / ल्यूसीन के साथ इसे नियंत्रित करने में सक्षम हो सकते हैं। यदि आपके क्षेत्रों का विश्लेषण नहीं किया गया है (अर्थात अंतरिक्ष में अलग-अलग शब्दों को तोड़ा गया है), तो आप खोज इंजन को उनके साथ व्यवहार करने के लिए बाध्य कर सकते हैं। फिर, यदि आप एक क्वेरी ( elasticsearch.org/guide/reference/query-dsl/term-query.html ) का उपयोग करके क्वेरी कर सकते हैं, तो आप यह सुनिश्चित कर सकते हैं कि आपको केवल सटीक मिलान परिणाम मिले। यह दृष्टिकोण एक समान होगा कि कैसे एक नियमित डीबी एक सटीक मैच करेगा।
गस्तथियों

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

@JasonRoell मुझे यह सुनने की ज़रूरत है कि किसी व्यक्ति से, इंटरनेट पर अन्य सभी लेख टेक्स्ट इंडेक्स जारी होने से पहले लिखे गए थे जब धीमी रेग्क्स एकमात्र विकल्प था। मैं मोंगोडब और इलास्टिक्स खोज के बीच एक गति तुलना देखना पसंद करूंगा,
धीरज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.