MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

नेवला निजी चैट संदेश मॉडल

खैर, इस प्रश्न का कोई सही उत्तर नहीं है, लेकिन निश्चित रूप से, आपने जिन तरीकों का उल्लेख किया है, वे सबसे अच्छे नहीं हैं!

सबसे पहले, जब आप एक "चैट" मॉडल डिजाइन करने के बारे में सोच रहे हों, तो आपको इस बात का ध्यान रखना होगा कि उपयोगकर्ताओं के बीच लाखों संदेश होंगे, इसलिए जब आप चैट को लाना चाहते हैं तो आपको प्रदर्शन पर ध्यान देना होगा।

संदेशों को एक सरणी में संग्रहीत करना एक अच्छा विचार नहीं है, आपके मॉडल का आकार उस समय बड़ा होगा और आपको यह विचार करना होगा कि MongoDB की दस्तावेज़ आकार सीमा वर्तमान में प्रति दस्तावेज़ 16 एमबी है।

https://docs.mongodb.com/manual/reference/limits/

दूसरा, आपको पेजिनेशन पहलू पर विचार करना होगा क्योंकि यह चैट के बड़े होने पर प्रदर्शन को प्रभावित करेगा, जब आप 2 उपयोगकर्ताओं के बीच चैट को पुनः प्राप्त करते हैं तो आप समय की शुरुआत से सभी चैट का अनुरोध नहीं करेंगे, आप बस अनुरोध करेंगे सबसे हाल के, और फिर आप पुराने लोगों से अनुरोध कर सकते हैं यदि उपयोगकर्ता चैट को स्क्रॉल करता है, तो यह पहलू बहुत महत्वपूर्ण है और प्रदर्शन पर इसके प्रभाव के कारण इसे उपेक्षित नहीं किया जा सकता है।

मेरा दृष्टिकोण प्रत्येक संदेश को एक अलग दस्तावेज़ में संग्रहीत करना होगा

सबसे पहले, प्रत्येक संदेश को एक दस्तावेज़ में संग्रहीत करना चैट लाने के दौरान आपके प्रदर्शन को बढ़ावा देगा, और दस्तावेज़ का आकार बहुत छोटा होगा।

यह एक बहुत ही सरल उदाहरण है, आपको अपनी आवश्यकताओं के अनुसार मॉडल को बदलने की जरूरत है, यह सिर्फ विचार का प्रतिनिधित्व करने के लिए है:

const MessageSchema = mongoose.Schema({
    message:{
        text: { type:String, required:true }
        // you can add any other properties to the message here.
        // for example, the message can be an image ! so you need to tweak this a little
    }
    // if you want to make a group chat, you can have more than 2 users in this array
    users:[{
        user: { type:mongoose.Schema.Types.ObjectId, ref:'User', required:true }
    }]
    sender: { type:mongoose.Schema.Types.ObjectId, ref:'User', required:true },
    read: { type:Date }
},
{
    timestamps: true
});

आप इस क्वेरी के द्वारा चैट प्राप्त कर सकते हैं:

 Message.find(({ users: { "$in" : [#user1#,#user2#]} })
    .sort({ updatedAt: -1 })
    .limit(20)

आसान और साफ! जैसा कि आप देख सकते हैं, इस दृष्टिकोण से पृष्ठ पर अंक लगाना बहुत आसान हो जाता है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडीबी सी # ड्राइवर - क्या आईडी नामक फ़ील्ड आईडी नहीं हो सकता है?

  2. कैसे जांचें कि कोई दस्तावेज़ मोंगोडीबी में अपडेट या डाला गया है या नहीं?

  3. उल्का संग्रह में एक क्षण वस्तु सम्मिलित करना

  4. 'process.nextTick (फ़ंक्शन() {फेंक एरर;})' - अपरिभाषित कोई फ़ंक्शन नहीं है (मोंगोडब/मोंगोज़)

  5. MongoDB में किसी ऑब्जेक्ट के अंदर अलग-अलग कुंजियाँ कैसे प्राप्त करें?