जब आप "सर्वर है कि एक संग्रह स्थिर है बताना चाहता हूँ", मैं दो संभावित अनुकूलन के बारे में पता कर रहा हूँ:
- एक जीवित क्वेरी का उपयोग कर, क्योंकि डेटा
कभी नहीं बदलेगा डेटाबेस का पालन न करें क्योंकि यह पता लगाया और अन्य डेटा (बचत स्मृति और CPU) के साथ तुलना में जाने की जरूरत नहीं है
- merge box में इस क्वेरी के परिणाम की दुकान मत करो
(1) कुछ आप बल्कि आसानी से कर सकते है अपना खुद का प्रकाशित कर्सर बनाकर। हालांकि, यदि कोई ग्राहक एक ही प्रश्न देख रहा है, तो मेरा मानना है कि उल्का (कम से कम भविष्य में) इसके लिए अनुकूलित होगा, इसलिए यह अभी भी किसी भी ग्राहक के लिए सिर्फ एक लाइव क्वेरी है। के रूप में (2), मुझे ऐसा करने के किसी भी सीधा तरीके से अवगत नहीं है क्योंकि यह संभावित रूप से multiple publications and subscriptions पर विलय करने वाले डेटा को गड़बड़ कर सकता है।
लाइव क्वेरी का उपयोग करने से बचने के लिए, आप कर्सर को वापस करने के बजाय मैन्युअल रूप से प्रकाशित फ़ंक्शन में डेटा जोड़ सकते हैं, जिससे सदस्यता के लिए डेटा को हुक करने के लिए .observe()
फ़ंक्शन कहा जा सकता है। यहाँ एक सरल उदाहरण है:
Meteor.publish(function() {
var sub = this;
var args = {}; // what you're find()ing
Foo.find(args).forEach(function(document) {
sub.added("client_collection_name", document._id, document);
});
sub.ready();
});
इस कारण होगा डेटा क्लाइंट की तरफ client_collection_name
में जोड़े जाने की है, जो संग्रह Foo
द्वारा संदर्भित, या कुछ और के रूप में एक ही नाम हो सकता था। ध्यान रखें कि आप क्या कर सकते हैं many other things with publications बनें
अद्यतन (यह भी, ऊपर लिंक देखें।): से (2) है, जो संभवतः कई समस्याएं खड़ी संग्रह के आकार के आधार हो सकता है, यह बाईपास के लिए आवश्यक है समस्याओं के समाधान के उल्का पूरी तरह से। इसे करने के लिए एक तरीके से https://stackoverflow.com/a/21835534/586086 देखें। एक और तरीका यह है कि एक विधि कॉल के रूप में संग्रह fetch()
एड को वापस लौटना है, हालांकि इसमें संपीड़न के लाभ नहीं हैं।
स्रोत
2013-09-23 01:25:01
इस # 2 तक स्वीकार जवाब सुलझाया जा सकता है किया जाना चाहिए। धन्यवाद एंड्रयू –
@WesJohnson # 2 को हल करने के लिए http://stackoverflow.com/a/21835534/586086 देखें। मैं कुछ समय पर यह उत्तर भी अपडेट करूंगा। –