मान लें कि हमारे पास एक लोकप्रिय साइट है। हमें उपयोगकर्ताओं के बीच मेल-जैसी मैसेजिंग को लागू करने की आवश्यकता है।मेल-जैसी संदेश के लिए स्केलेबल MySQL डेटाबेस
उपयोगकर्ता (user_id)
संदेश (message_id, SENDER_ID (संदर्भ user_id), receiver_id (संदर्भ user_id), विषय, शरीर): ठेठ समाधान 2 तालिकाओं का उपयोग करने के लिए है।
इस विधि 2 महत्वपूर्ण सीमाओं
- सभी उपयोगकर्ताओं के सभी संदेश एक मेज यह करने के लिए अग्रणी में जमा हो जाती उच्च लोड और समग्र डेटाबेस प्रदर्शन घटा है है।
- जब किसी को कई उपयोगकर्ताओं को एक साथ संदेश भेजने की आवश्यकता होती है, तो संदेश कॉपी (प्राप्तकर्ता_count) बार कॉपी हो जाता है।
उपयोगकर्ता (user_id)
Sent_messages (sent_id, SENDER_ID (संदर्भ user_id), विषय, शरीर)
Received_messages:
अन्य समाधान 3 टेबल का उपयोग करता है (sent_id, receiver_id (संदर्भ उपयोगकर्ता_आईडी), विषय, शरीर)
प्राप्त_मेसेज के विषय और निकाय को भेजे गए_मेसेज के संबंधित क्षेत्रों से कॉपी किया गया है।
इस विधि एक और
- की ओर जाता है/उन्हें रिसीवर/प्रेषकों से निकाले बिना संदेश प्राप्त हुए।
- संदेश लगभग 2 गुना अधिक स्थान लेते हैं
- प्रत्येक तालिका लगभग 2 गुना कम लोड होती है।
- कौन सा माना डिजाइन में से एक उच्च लोड और scalability के लिए बेहतर है:
तो यहाँ सवाल जाना? (मुझे लगता है कि यह दूसरा है)
- क्या कोई अन्य डेटाबेस डिज़ाइन है जो उच्च लोड को संभाल सकता है? यह क्या है? मर्यादाएं क्या होती हैं?
धन्यवाद!
पीएस मैं समझता हूं कि इन स्केलेबिलिटी मुद्दों को प्राप्त करने से पहले साइट को बहुत सफल होना है, लेकिन मैं जानना चाहता हूं कि मुझे क्या करना है।
अद्यतन
वर्तमान में पहले संस्करण मैं डैनियल वसालो द्वारा प्रस्तावित डिजाइन का उपयोग किया जाएगा के लिए।लेकिन अगर भविष्य में सब कुछ ठीक है, तो डिजाइन दूसरे स्थान पर बदल दिया जाएगा। इसके बारे में मेरी आशंका को दूर करने के लिए उलझाने के लिए धन्यवाद।
धन्यवाद!मैंने यह डिजाइन भी माना। असल में इस प्रश्न को पोस्ट करने के बाद मैंने (मानसिक रूप से :)) पहले डिजाइन को उपयोगकर्ताओं (user_id) संदेश (message_id, sender_id, receiver_id, message_content_id) संदेश_content (message_content_id, विषय, शरीर) तो ये दोनों डिज़ाइन बेहतर से बेहतर हैं पहला एक (अंतरिक्ष में लिया गया और तालिका प्रदर्शन में)। हो सकता है कि प्रश्न कथन कुछ ऐसा होना चाहिए: क्या सभी संदेशों को एक टेबल में स्टोर करना बेहतर है, या उन्हें दो में कॉपी करना बेहतर है? प्रदर्शन पर असर कितना महत्वपूर्ण होगा? –