2012-12-25 17 views
10

सभी को धन्यवाद! हाल ही में मैं उल्का पर एक छोटा सा सेमी बनाया चाहते हैं, लेकिन कुछ सवाल हैमैं मेटियर में डेटा कैश कैसे कर सकता हूं?

1, कैश, पेज कैश, डेटा कैश, आदि ..

उदाहरण के लिए, जब लोग कुछ लेख

खोज सर्वर साइड:

Meteor.publist('articles',function(keyword){ 
    return Articles.find({keyword:keyword}); 
}); 
ग्राहक में

:

Meteor.subscribe('articles',keyword); 

यह ठीक है, लेकिन ...... सवाल यह है कि, हर बार लोग ऐसा करते हैं, यह एक मोंगो क्वेरी का आह्वान करता है, और प्रदर्शन को कम करता है, अन्य ढांचे में सामान्य http या https का उपयोग करते हैं, लोग स्क्विड या पृष्ठ या डेटा को कैश करने के लिए वार्निश, इसलिए जब भी आप किसी यूआरएल पर जाते हैं, तो आप कैश सर्वर से डेटा पढ़ते हैं, लेकिन सॉकेट.जेएस या वेबसाईट पर उल्का उल्का, और मुझे नहीं पता कि सॉकेट के माध्यम से कैश कैसे करें .... ... मैं वार्निश trid, लेकिन कोई प्रभाव नहीं देखा। तो, क्या यह वेबसाईट को अनदेखा कर सकता है? क्या डेटा को कैश करने के लिए कुछ तरीका है, mongodb में, सर्वर में, क्या मैं कुछ कैश सर्वर जोड़ सकता हूं?

2, चैट

मैं https://github.com/zquestz/simplechat लेकिन implyment विपरीत socket.js का उपयोग कर चैटरूम उदाहरण देखें, इस उदाहरण MongoDB में चैट संदेश बचाने के लिए, ताकि डाटा प्रवाह संदेश है -> mongo-> query- > लोग, यह भी मोंगो क्वेरी का आह्वान करता है! और socket.js में, बस सॉकेट को संदर्भ (या सर्वर साइड कैश) में सहेजें, इसलिए डेटा डीबी के माध्यम से नहीं जाता है। मेरा सवाल है, क्या उल्का में एक सॉकेट इंटरफ़ेस है, इसलिए मैं संदेश-> सॉकेट-> लोगों को संदेश भेज सकता हूं? और यदि नहीं हो सकता है, तो चैट रूम उदाहरण के रूप में उत्पादक वातावरण में प्रदर्शन कैसे होता है (मुझे लगता है कि यह धीमा चलता है ...)

उत्तर

10

उल्का के साथ, आपको मोंगोड प्रश्नों को कैशिंग करने की चिंता करने की आवश्यकता नहीं है। उल्का आपके लिए करता है। प्रति the docs on data and security:

प्रत्येक उल्का क्लाइंट में एक मेमोरी डेटाबेस कैश शामिल है। क्लाइंट कैश को प्रबंधित करने के लिए, सर्वर JSON दस्तावेज़ों के सेट प्रकाशित करता है, और क्लाइंट उन सेटों की सदस्यता लेता है। एक सेट में दस्तावेज़ों के रूप में, सर्वर प्रत्येक ग्राहक के कैश पैच करता है।

[...]

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

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

यदि आपके पास मोंगो में कई दस्तावेज़ हैं, तो आप उन सभी को भी देख सकते हैं यदि आपके पास अभी भी स्वत: प्रकाशित पैकेज सक्षम है।आप meteor remove autopublish के साथ इसे हटाकर इसे ठीक कर सकते हैं और पूरे डेटाबेस की बजाय प्रासंगिक डेटा को प्रकाशित करने के लिए कोड लिख सकते हैं।

तुम सच में मैन्युअल रूप से कैशिंग का प्रबंधन करने की जरूरत है, डॉक्स भी है कि में जाने:

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

वर्तमान में उल्का में अतिरिक्त प्रदर्शन सुधारों पर काम किया जा रहा है, जिसमें "बहुत बड़ी संख्या में ग्राहकों" का समर्थन करने के लिए डीडीपी-स्तर प्रॉक्सी शामिल है। आप इस पर the Meteor roadmap पर अधिक जानकारी देख सकते हैं।

+0

बहुत धन्यवाद !!!! – user1208300

+0

लेकिन सवाल यह है कि, उदाहरण के लिए, मेरे पास एक साइट है, और लोग हर बार मुखपृष्ठ पर आते हैं, उन्हें सभी को उल्का सर्वर से डेटा लोड करना होगा! लेकिन यदि आप अन्य भाषा या ढांचे का उपयोग करते हैं, तो आप कैश में वार्निश या स्क्विड का उपयोग कर सकते हैं मुखपृष्ठ, कैश सर्वर से डेटा लोड करें। मेरा मतलब यह है कि, क्या मेरे पास उल्का करने से पहले मेरे उल्का से पहले वार्निश या स्क्विड या nginx हो सकता है, क्या कैश सर्वर उल्का के डीडीपी (या वेबसाकेट) को समझ सकता है? – user1208300

+0

यह वर्तमान में संभव नहीं है लेकिन यह विकास में है, इसलिए कुछ महीनों में वापस जांचें और उल्का रोडमैप पर अपनी नजर रखें। – Rahul

0

मैं एक मोबाइल एप्लिकेशन और डेटाबेस का कैश इसलिए काम नहीं कर रहा था मैं उल्का https://github.com/raix/Meteor-GroundDB की GroundDB पैकेज का इस्तेमाल किया अब डेटाबेस स्थानीय में हमेशा होता है जब भी मैं एप्लिकेशन को पुनः प्रारंभ बनाने गया था, इसके अलावा, आप के लिए उल्का के appcache पैकेज में देखने की जरूरत है स्थानीय रूप से पूरे ऐप को कैश करें।

3

यदि आप इस प्रश्न पर ठोकरें हैं तो उल्का के मिनिमोंगो की समझ की कमी के कारण और इस समय के लिए सब्सक्रिप्शन कैश करने के तरीके में दिलचस्पी नहीं है (लेकिन वे शायद भविष्य में और नहीं चाहते हैं ग्राहक सर्वर पर उनके अतिरिक्त डीडीपी भूमि के ऊपर रखने के लिए) वहाँ दो पैकेज विकल्प हैं:

https://github.com/ccorcos/meteor-subs-cache

https://github.com/kadirahq/subs-manager

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