2012-11-12 20 views
12

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

अब, मैं इन संग्रहों में से प्रत्येक के लिए एक ही स्कीमा का उपयोग करने जा रहा हूं क्योंकि वे उसी प्रकार के दस्तावेज़ों को स्टोर करेंगे। मेरे पास एक एकल मॉडल ऑब्जेक्ट होता था क्योंकि मेरे पास एक ही संग्रह में सबकुछ होता था लेकिन अब मुझे प्रति समूह एक से अधिक मॉडल की आवश्यकता होती है।

क्या प्रत्येक अनुरोध (एक साझा स्कीमा का उपयोग करके) पर एक नया मॉडल ऑब्जेक्ट बनाना अच्छा विचार है या यह बहुत महंगा है? इस मामले में एक अच्छा वास्तुशिल्प निर्णय क्या होगा?

सबसे अच्छा तरीका मैं सोच सकता हूं कि मॉडल बनाने के लिए पहली बार एक मॉडल बनाने का अनुरोध है और फिर त्वरित पहुंच के लिए मॉडलों को मॉडलों में कैश करें।

मुझे लगता है कि सर्वोत्तम अनुरोध प्रत्येक अनुरोध पर एक नया मॉडल ऑब्जेक्ट बनाने की लागत पर निर्भर करता है।

धन्यवाद!

उत्तर

20

मॉडल पहले ही मोंगोस द्वारा कैश किए गए हैं और आप कई मॉडलों/संग्रहों के लिए एक ही स्कीमा ऑब्जेक्ट का उपयोग कर सकते हैं। तो बस मॉडल के अपने सेट में एक बार (स्टार्टअप पर) बनाने की तरह कोड का उपयोग:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var schema = new Schema({...}); 
var model1 = mongoose.model('model1', schema); 
var model2 = mongoose.model('model2', schema); 

आप model1, model2 मॉडल उदाहरणों के आसपास पारित करने के लिए नहीं करना चाहते हैं, तो आप उन्हें के रूप में में mongoose.model('model1'); फोन करके जरूरत देख सकते हैं आपके हैंडलर

+0

जब मैं * विभिन्न डीबी * पर दो संग्रह संग्रहीत कर रहा था, तो मुझे इससे परेशानी थी। उस स्थिति में, मैं दो अलग-अलग स्कीमा बनाने की अनुशंसा करता हूं, लेकिन आप उसी स्कीमा विनिर्देश वस्तु (उपरोक्त '{...}') का पुन: उपयोग कर सकते हैं। (मुझे मिली त्रुटि एक अजीब थी: "सत्यापन विफल: पथ __v आवश्यक है"।) – joeytwiddle

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