एक /login
एपीआई, जहां, साख का मिलान सेट के लिए, संग्रह से एक उपयोगकर्ता वस्तु किया जाना चाहिये, जो दृष्टिकोण अधिक performant होगा के मामले मान लिया जाये:क्या मैं एक विस्तृत मोंगोज़ मॉडल को विभाजित करने से बेहतर हूं?
1) एक प्रक्षेपण प्रश्नों के साथ मॉडल:
var UserSchema = new Schema({
name : String,
email : String,
dob : Number,
phone : Number,
gender : String,
location : Object, // GeoJSON format {type: 'Point', geometry: { lat: '23.00', lng: '102.23' }}
followers : [UserSchema],
following : [UserSchema],
posts : [PostSchema],
groups : [GroupSchema]
// ... and so on
});
2) स्प्लिट मॉडल:
var UserMinimalSchema = new Schema({
name : String,
email : String,
phone : Number,
location : Object,
});
var UserDetailSchema = new Schema({
dob : Number,
gender : String,
followers : [UserSchema],
following : [UserSchema],
posts : [PostSchema],
groups : [GroupSchema]
// ... and so on
});
मान लीजिए:
012,एक लॉग-इन उपयोगकर्ता के लिए, केवल
id
,name
,email
,phone
औरlocation
लौटा दी हैं।पहला मॉडल गुणों को वापस करने के लिए प्रक्षेपण क्वेरी का उपयोग करेगा (1)।
दूसरे मामले में, केवल
UserMinimalSchema
पूरे दस्तावेज़ से पूछताछ के लिए उपयोग किया जाएगा।अनिवार्य रूप से दोनों प्रश्न (1) में वर्णित डेटा के बराबर मात्रा में लौटते हैं।
मान लें कि औसत उपयोगकर्ता वस्तु ~ 16MB सीमा है और 1 मिलियन रिकॉर्ड हैं।
अगर किसी ऐसी परीक्षा/लिंक प्रलेखन के लिए किया जाता है, यह कितना विभाजित है या नहीं कोई फर्क होगा देखने के लिए बहुत मदद की होगी।
मुझे संदेह है (3) भी मामला होने के लिए। मुझे समझ में नहीं आता (1), 'UserMinimalSchema' में गुण' UserDetailSchema' में मौजूद नहीं हैं? यदि आप लिंक प्रदान कर सकते हैं जो साबित करते हैं (3) यह बहुत मददगार होगा, क्योंकि मुझे उम्मीद है कि ऐसा होने की संभावना है लेकिन इसे कहीं भी नहीं मिला। –
@AmreshVenugopal आप सही हैं। मैंने सोचा था कि आप दोनों स्कीमा में कुछ विवरण स्टोर करना चाहते थे, लेकिन करीब निरीक्षण पर आप उन्हें विशिष्ट रूप से विभाजित कर रहे हैं। हालांकि यह एक और con उठाता है क्योंकि यदि आप सभी उपयोगकर्ता की जानकारी चाहते हैं तो आपको उपयोगकर्ता को पॉप्युलेट करने के लिए एक अतिरिक्त कदम उठाना होगा। अधिक विचारों के साथ उत्तर अद्यतन कर रहा है। –