Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

विभिन्न टूर्नामेंट/प्रतियोगिता प्रकारों (लीग, लैडर, सिंगल/डबल एलिमिनेशन आदि) के लिए डेटा संरचना

यहां कई प्रश्न/समस्याएं हैं, इसलिए मैं प्रत्येक को संबोधित करने का प्रयास करूंगा।

सभी टूर्नामेंट इंटरैक्शन रीयल टाइम/कई उपयोगकर्ताओं के लिए प्रतिबिंबित होने चाहिए।

आपकी वेबसाइट पर छोटे से मध्यम ट्रैफ़िक के लिए, यह कोई समस्या नहीं हो सकती है। भारी ट्रैफिक के लिए, यह जल्दी से एक प्रमुख मुद्दा बनने लगेगा।

एक उदाहरण के रूप में विचार करें कि आप कितनी बार डेटाबेस को अपने AJAX कॉल के साथ मतदान करना चाहते हैं। हर पल? तो अगर आपके पास एक पेज के साथ 100 लोग खुले हैं, तो आपके पास हर सेकंड 100 डेटाबेस कॉल हैं? आप पाएंगे कि यह आपके डेटाबेस को जल्दी खत्म कर देगा।

भले ही यह विषय से थोड़ा हटकर है, मैं दृढ़ता से यह जांचने की सलाह दूंगा कि टूर्नामेंट के परिणामों को समय से पहले कैसे कैश किया जाए। आप आँकड़ों आदि को कैश कर सकते हैं और या तो उन्हें समाप्त होने दे सकते हैं या उन्हें सक्रिय रूप से समाप्त कर सकते हैं, लेकिन निश्चित रूप से इस पर शोध करने में कुछ समय व्यतीत करें।

वास्तविक समय के आंकड़े/परिणाम

ध्यान रखें कि संबंधपरक डेटाबेस में जुड़ने में समय लगता है। यदि आप अपनी टूर्नामेंट संरचना को सामान्य रूप से सामान्य करते हैं, तो आंकड़े प्राप्त करना दर्दनाक हो सकता है। कुशल बनाने के लिए सिस्टम का सबसे कठिन हिस्सा प्रत्येक टूर्नामेंट से समुच्चय और आंकड़े होने जा रहा है।

जब आप अपना डेटाबेस/टेबल/विचार/संग्रहीत कार्यविधियाँ डिज़ाइन कर रहे हों, तो अंतिम लक्ष्य को ध्यान में रखें - जल्दी से आँकड़े प्राप्त करना। इसका मतलब यह हो सकता है नहीं डेटा को बहुत अधिक सामान्य करना (बहुत अधिक जुड़ने से बचने के लिए)। इसका मतलब यह भी हो सकता है कि आप अपने डेटा प्रकारों पर बहुत ध्यान दें - उदाहरण के लिए बिट्स/शॉर्ट्स/आदि का उपयोग करना। पूर्णांकों के बजाय।

विभिन्न टूर्नामेंट प्रकारों को कैसे मॉडल करें

मैं टूर्नामेंट मॉडल से परिचित नहीं हूं, लेकिन मेरे पास मॉडल बनाने के बारे में विशिष्ट सलाह है। =)

कुछ सवाल जो आपको खुद से पूछने चाहिए:

  1. क्या सभी टूर्नामेंटों में समान क्षेत्र होते हैं? दूसरे शब्दों में, एक राउंड रॉबिन टूर्नामेंट के लिए हम 10 फ़ील्ड संग्रहीत करते हैं। एक एलिमिनेशन टूर्नामेंट के लिए हम 11 फील्ड स्टोर करते हैं। यदि वे समान 10 फ़ील्ड साझा करते हैं, तो मैं सभी टूर्नामेंट प्रकारों को एक तालिका में डालने की अनुशंसा करता हूं और फिर आपके आवेदन के लिए टूर्नामेंट के प्रकार को निर्धारित करने के लिए टूर्नामेंट_टाइप फ़ील्ड का उपयोग करता हूं।

  2. क्या सभी टूर्नामेंटों में समान क्षेत्र नहीं होते हैं? उन्हें अलग टेबल बनाएं - एक प्रति टूर्नामेंट प्रकार। आप साझा डेटा के लिए एक तालिका बना सकते हैं, लेकिन फिर विशिष्ट जानकारी के लिए अलग-अलग तालिकाएँ बना सकते हैं।

  3. क्या समय के साथ टूर्नामेंट के मैदान अलग हो जाएंगे ? समय के साथ आप टूर्नामेंट प्रकारों में फ़ील्ड जोड़ना चाहेंगे। यदि आप भविष्यवाणी करते हैं कि समय के साथ टूर्नामेंट बहुत ही अनोखे और बहुत विशिष्ट हो जाएंगे, तो उन्हें अलग कर दें। अन्यथा आप बहुत सारे क्षेत्रों के साथ समाप्त हो जाते हैं जिनमें बहुत सारे NULL मान होते हैं।

  4. क्या आपने NoSQL समाधान पर विचार किया है ? नोएसक्यूएल स्टोर के बारे में अच्छी बात यह है कि यह डेटा को असामान्य बनाता है ताकि आपके पास शामिल न हों। इसके अलावा आपके पास एक ही "टेबल" या कंटेनर में विषम (विभिन्न प्रकार के डेटा) हो सकते हैं। बस कुछ विचार करना है क्योंकि यह आपके जीवन को काफी आसान बना सकता है। उदाहरण के तौर पर MongoDB देखें।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - सभी क्रमपरिवर्तन दिखाएं?

  2. PHP में दो तिथियों के बीच दिनों की गणना कैसे करें?

  3. MySQL ग्रुप और काउंट मल्टीपल टेबल

  4. स्कूप:mysql ड्राइवर अपवाद लोड नहीं कर सका

  5. पर्ल डीबीआई को तेज करना fetchrow_hashref