2012-06-27 13 views
12

मैं एक संदेश ऐप को संभालने के लिए एक अच्छी दस्तावेज़ संरचना के बारे में सोचने के बारे में सोच रहा हूं।संदेश ऐप के लिए MongoDB संरचना

मैं मूल रूप से वस्तुओं के तीन (या चार) प्रकार की जरूरत है:

  1. उपयोगकर्ता (उपयोगकर्ता नाम, ईमेल, पासवर्ड, आदि)
  2. संपर्क सूची
  3. (विभिन्न संपर्क या संपर्कों समूहों से युक्त)
  4. बातचीत
  5. संदेश (शामिल संदेश के मुख्य भाग, कुछ टाइमस्टैम्प और निर्माता।) (एक बातचीत कुछ व्यक्तियों के बीच संदेशों का एक संग्रह है)

मेरा विचार उपयोगकर्ता दस्तावेज़ में संपर्कों को एम्बेड करने के लिए और एक बातचीत दस्तावेज़ में संदेशों एम्बेड करने के लिए किया गया था:

1. उपयोगकर्ता

{ 
    username: 'dev.puS', 
    usernameCanonical: 'dev.pus', // used for unique constraints 
    email: '[email protected], 
    emailCanonical: '[email protected], 
    salt: 'some hash', 
    password: 'hash with salt', 
    logs: { last_login: 12.06.2008, last_password_reset: 04.03.2007 }, 
    state: { online: true, available: false }, 
    contacts: [ user_id1, user_id2, user_id3 ] 
} 

2. वार्तालाप

{ 
    members: [ user_id1, user_id2 ], 
    messages: [ 
     { author: user_2, body: 'Hi what's up' }, 
     { author: user_1, body: 'Nothing out here :(' }, 
     { author: user_2, body: 'Whanna ask some question on stackoverflow' }, 
     { author: user_1, body: 'Okay, lets go' } 
    ] 
} 

इस स्कीमा के बारे में आप क्या सोचते हैं?

मुझे लगता है कि उन्हें अलग रखने के लिए बेहतर होगा (इसलिए प्रत्येक दस्तावेज़ के लिए स्वयं) क्योंकि प्रत्येक दस्तावेज़ में अलग-अलग अद्यतन आवृत्ति होती है। लेकिन मैं वास्तव में इस बारे में कोई अनुभव तो यह कुछ सलाह सुनने के लिए :)

सादर

+2

एक MongoDB स्कीमा लग रहा है कभी नहीं है "अच्छा" या "बुरा" अपने आप में। आपको उन प्रश्नों और अपडेटों को विस्तारित करने की आवश्यकता है जिन्हें आप बनाना चाहते हैं। केवल तभी मूल्यांकन किया जा सकता है जब कोई दिया गया स्कीमा इन ऑपरेशन पैटर्न को उपयुक्त बनाता है। –

+1

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

+0

ठीक है, मैं इसे ध्यान में रखूंगा। क्या कैश के लिए यह एक आम तरीका है उदाहरण के लिए रेडिस वाले संदेश और सत्र समाप्त होने पर उन्हें सभी को मोंगो में सहेजने से बचाने के लिए? मैं एक "असंगठित" ऑब्जेक्ट –

उत्तर

4

आपका प्रश्न वास्तव में स्कीमा डिजाइन में से एक है अच्छा होगा नहीं है। मैं सुझाव देता हूं कि इस पृष्ठ को मोंगोडीबी स्कीमा डिज़ाइन पर विकल्पों और व्यापार-बंदों की भावना प्राप्त करने के लिए देखें: http://www.mongodb.org/display/DOCS/Schema+Design

इसके अतिरिक्त, आपको शायद उस दस्तावेज़ के 'इसे भी देखें' अनुभाग में दिए गए लिंक की समीक्षा करनी चाहिए। मैं विशेष रूप से वीडियो प्रस्तुतियों की सिफारिश करता हूं। http://docs.mongodb.org/manual/use-cases/storing-comments/

7

मैं देख रहा हूँ इस सवाल यह है कि:

अंत में, आप शायद/एक संदेश भेजने के लिए तीन संभावित स्कीमा की चर्चा डेटाबेस टिप्पणी करते हुए प्रत्येक डिजाइन के लिए व्यापार गत सहित के लिए इस दस्तावेज़ पर एक नज़र रखना चाहिए वर्ष है, लेकिन रुचि किसी के लिए भी इसी तरह की एक प्रश्न पूछा गया था और एक ही जवाब व्यवहार्य https://stackoverflow.com/a/30830429/132610

Conversation : { 
id: 123, 
members: [ user_id1, user_id2 ] 
} 
Message { conversationId: 123, author: user_2, body: 'Hi what's up' } 
Message { conversationId: 123, author: user_1, body: 'Whanna ask some question on stackoverflow' } 
+0

पर बहुत से लेखन कार्यों को करने के बारे में कुछ अनिश्चित हूं, मुझे अपने दिमाग में भ्रम है, आपने (और अन्य सभी) ने 'वार्तालाप' के लिए एक संग्रह और 'संदेश' के लिए एक और संग्रह कहा है।मान लें कि हमारे पास मैसेजिंग में 1 मिलियन उपयोगकर्ता हैं और वे एक-दूसरे से बात कर रहे हैं, 'संदेश' तालिका अरबों दस्तावेजों तक पहुंच सकती है, क्या मोंगोडब के पास ऐसे बड़े संग्रह दस्तावेजों का प्रबंधन करने की क्षमता है, और खोज प्रतिक्रिया समय के बारे में क्या है? मान लीजिए कि हम अरबों अरब संदेशों में पिछले 100 संदेशों को एक उपयोगकर्ता को खोजते हैं कि वापस आने में कितना समय लगेगा? –