2013-10-06 6 views
10

मेरे पास एक मोंगो डेटाबेस में एक संग्रह है जो मैं कुछ लॉगिंग-प्रकार की जानकारी जोड़ता हूं। मैं एक उल्का ऐप में "पूंछ-एफ" की सबसे कुशल/सरल विधि को समझने की कोशिश कर रहा हूं - क्योंकि संग्रह में एक नया दस्तावेज़ जोड़ा गया है, इसे क्लाइंट को भेजा जाना चाहिए, जो इसे अंत में जोड़ना चाहिए संग्रह में दस्तावेजों के वर्तमान सेट का।उल्का के माध्यम से मोंगो में 'tail -f' का एक बड़ा संग्रह कैसे सर्वोत्तम है?

क्लाइंट को भेजने के लिए नहीं भेजा जाएगा और न ही संग्रह में सभी दस्तावेज रखेगा, संभवतः आखिरी ~ 100 या उससे भी ज्यादा।

अब, एक मोंगो परिप्रेक्ष्य से, मुझे "संग्रह में अंतिम एन दस्तावेज़" कहने का कोई तरीका नहीं दिख रहा है, जैसे कि हमें किसी भी प्रकार का आवेदन करने की आवश्यकता नहीं होगी। यह सबसे अच्छा विकल्प की तरह उपलब्ध लगता है प्राकृतिक तरह उतरते कर रहा है, तो एक सीमा कॉल, तो क्या यह 'पिछले 100 दस्तावेज' उल्का प्रकाशित करने के रास्ते AFAICT तो the mongo doc on $natural

db.collection.find().sort({ $natural: -1 }) 

में सूचीबद्ध है सर्वर साइड पर, की तरह कुछ संग्रह कुछ की तरह होगा:

Meteor.publish('logmessages', function() { 
    return LogMessages.find({}, { sort: { $natural: -1 }, limit: 100 }); 
}); 

अब, एक 'पूंछ -f' दृष्टिकोण से, इस सर्वर से 'पिछले 100 दस्तावेज' भेजने का सही प्रभाव हो रहा है, लेकिन गलत क्रम में ऐसा नहीं करता है (नवीनतम दस्तावेज अंत में बजाय उल्का संग्रह की शुरुआत में होगा)।

ग्राहक पक्ष पर, ऐसा लगता है कि संग्रह (दुर्भाग्य से) संग्रह को उलट करने की आवश्यकता है। अब, मुझे the Meteor Collection docs में एक रिवर्स() नहीं दिख रहा है और $ प्राकृतिक द्वारा सॉर्टिंग: 1 क्लाइंट पर काम नहीं करता है (जो उचित लगता है, क्योंकि कोई असली मोंगो संदर्भ नहीं है)। कुछ मामलों में, संदेशों में दस्तावेज़ों के भीतर टाइमस्टैम्प होंगे और ग्राहक 'प्राकृतिक आदेश' वापस पाने के लिए उसमें सॉर्ट कर सकते हैं, लेकिन ऐसा लगता है कि हैकी।

किसी भी मामले में, ऐसा लगता है कि मुझे लगता है कि मुझे एक बहुत ही आसान तरीका याद आ रहा है, जो 'संग्रह में सम्मिलित पिछले 100 दस्तावेज' संग्रह के माध्यम से मोंगो से प्रकाशित संग्रह है। :)

धन्यवाद!

संपादित - अगर मैं एक छाया हुआ संग्रह करने के लिए मोंगो में संग्रह बदलने की तरह लग रहा है, तो सर्वर create a tailable cursor कुशलता से (और जल्दी) संग्रह में जोड़ा नए दस्तावेज़ों की सूचना पाने के कर सकते हैं। हालांकि, यह मुझे स्पष्ट नहीं है कि सर्वर को मेटर संग्रह के माध्यम से ऐसा करने के लिए कैसे/कैसे प्राप्त किया जाए।

एक विकल्प जो थोड़ा कम कुशल लगता है लेकिन उसे एक कैप्ड संग्रह (AFAICT) में स्विच करने की आवश्यकता नहीं है, Smart Collections का उपयोग कर रहा है जो ओप्लॉग की पूंछ करता है, कम से कम यह मतदान के बजाए घटना-चालित होता है, और सभी परिचालनों के बाद से स्रोत संग्रह में आवेषण होंगे, ऐसा लगता है कि यह अभी भी बहुत कुशल होगा। दुर्भाग्यवश, AFAICT मुझे अभी भी सॉर्टिंग समस्याओं के साथ छोड़ दिया गया है क्योंकि मुझे नहीं लगता कि सर्वर साइड संग्रह को 'पिछले 100 दस्तावेज़ डालने' के रूप में परिभाषित करने के तरीके को कैसे परिभाषित किया जाए। :(

यदि मोंगो में किसी अन्य ("भौतिक दृश्य" प्रकार की क्वेरी के रूप में संग्रह बनाने का कोई तरीका है, तो हो सकता है कि मैं मोंगो में लॉग-एंड-100 "संग्रह दृश्य" बना सकूं, और तो उल्का सिर्फ पूरे छद्म संग्रह को प्रकाशित/सब्सक्राइब करने में सक्षम होगा?

उत्तर

3

केवल डेटा के लिए, $natural आपको टाइमस्टैम्प और सॉर्टिंग पर अनुक्रमण के समान परिणाम प्राप्त करना चाहिए ताकि यह एक अच्छा विचार हो।विपरीत चीज दुर्भाग्यपूर्ण है; मुझे लगता है कि आप एक जोड़े विकल्प हैं:

  1. उपयोग $ प्राकृतिक और अपने आप
  2. ऐड टाइमस्टैम्प रिवर्स, अभी भी तरह, जब तक $ प्राकृतिक
  3. ऐड टाइमस्टैम्प, इंडेक्स का उपयोग करके

'है # 1 '- 100 आइटमों के लिए, रिवर्स क्लाइंट-साइड करने से मोबाइल उपकरणों के लिए भी कोई समस्या नहीं होनी चाहिए और यह सर्वर से इसे बंद कर देगा। आप किसी सरणी में कनवर्ट करने के लिए .fetch() का उपयोग कर सकते हैं और फिर टाइमस्टैम्प का उपयोग किए बिना आदेश को बनाए रखने के लिए इसे उलट सकते हैं। हालांकि आप सामान्य सरणी-भूमि में खेलेंगे; मिनी और मोंगो फीचर्स की कोई और अच्छी चीज नहीं है, इसलिए रिवर्सिंग से पहले कोई फ़िल्टरिंग करें।

'# 2' - यह एक दिलचस्प है क्योंकि आपको इंडेक्स का उपयोग करने की आवश्यकता नहीं है लेकिन आप अभी भी रिकॉर्ड को सॉर्ट करने के लिए क्लाइंट पर टाइमस्टैम्प का उपयोग कर सकते हैं। यह आपको मिनी-मोंगो-भूमि में रहने का लाभ देता है।

'# 3' - अंतरिक्ष db पर लागत लेकिन इसकी सबसे सीधी-सपाट

आप (या आरामदायक सरणी कर रहे हैं अपने आप को छानने) मिनी मोंगो की क्षमताओं की जरूरत नहीं है तो # 1 है शायद सबसे अच्छा

दुर्भाग्य से मोंगोडीबी के पास विचार नहीं हैं इसलिए आपका लॉग-आखिरी-100 दृश्य विचार नहीं हो सकता है (हालांकि यह एक अच्छी सुविधा होगी)।

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

संबंधित मुद्दे