MySQL

2011-08-10 13 views
7

से डेटा लाने के लिए एक विधि को चुनने में जटिलता मैं PHP, MySQL, Apache के आधार पर एक प्रोजेक्ट पर काम कर रहा हूं।MySQL

मैं एक मॉड्यूल अधिसूचना कहा जाता है जो सिर्फ फेसबुक में उपलब्ध अधिसूचना की तरह है, इस के लिए मैं 3 तरीके

या तो मैं उपयोगकर्ताओं को, जो सूचना प्राप्त करने की जरूरत है की गणना करने में एक मेज के लिए हर अद्यतन डालें, है इन अद्यतनों के लिए यानी यदि किसी श्रेणी बी में कुछ अपडेट हैं और इस श्रेणी बी में 100 उपयोगकर्ता हैं तो मैं संबंधित उपयोगकर्ता के लिए एक पंक्ति, अधिसूचना तालिका में 100 पंक्तियां डालेंगे।

2 रास्ता

मैं क्या कर सकते हैं सिर्फ तालिका में किसी विशेष श्रेणियों प्रविष्टि डालें और फिर रिकॉर्ड लाने के लिए कई तालिकाओं से सभी रिकॉर्ड लाने के लिए इन caregory आईडी में से प्रत्येक पर एक भारी शामिल हों क्वेरी फ़ाइल है।

3 रास्ता

मैं हर अपडेशन पर ट्रिगर का उपयोग इतना है कि यह उन अधिसूचित करने के लिए इस्तेमाल किया जा सकता।

मेरा मानना ​​है कि किसी भी समय तीनों तरीके समस्याग्रस्त हैं।

अब कोई भी कोई बेहतर विचार सुझा सकता है या इनमें से कौन सा बेहतर विकल्प है?

मैं साइट के प्रदर्शन के बारे में चिंतित हूँ के रूप में यह थोक प्रविष्टियों

धन्यवाद

होगा
+0

क्या श्रेणी के संबंध में उपयोगकर्ता को एक-से-एक या कई से अधिक का संबंध है? –

+0

@ ओकज नायर्स कई से कई –

+1

क्या आप कृपया 'सामान्य प्रश्न' जारी कर सकते हैं जो आप जारी करेंगे और आपकी 'स्कीमा'। सामान्य प्रश्नों से मेरा मतलब क्या है 1. उन सभी उपयोगकर्ताओं को ढूंढें जिनके लिए यह अधिसूचना भेजी जानी चाहिए। 2. उपयोगकर्ता के लिए 'लंबित 'सूचनाएं खोजें। 3. किसी उपयोगकर्ता की 'अधिसूचित' अधिसूचनाएं पाएं। इत्यादि। यह एक बेहतर विचार प्रदान करेगा कि आप क्या करने की कोशिश कर रहे हैं। जब आप थोक प्रविष्टियां कहते हैं, तो इसका मतलब उपयोगकर्ताओं की गिनती की अवधि में होता है? धन्यवाद। –

उत्तर

0

यह थोड़ा जटिल काम था तो मैं पहले सोचा :)

कैसे एप्लिकेशन/उपयोगकर्ता व्यवहार है ? हमें सबसे अधिक काम कब करना चाहिए? क्या डेटा डालने पर, या जब हम डेटा लाते हैं।

मुझे इस बात पर विचार करना होगा कि सबसे आम परिचालन क्या होगा। मुझे लगता है कि डेटा लाने से थोड़ा अधिक आम होगा, क्योंकि कई उपयोगकर्ताओं को अपठित संदेशों की अधिसूचना दिखाई देगी, लेकिन नए संदेश का केवल एक 'सम्मिलन' होगा?

इसलिए मैं नई सूचनाओं को सम्मिलित करने पर काम करता हूं, लेकिन फिर भी जब उपयोगकर्ता आपके ऐप पर आते हैं तो यह बुरी तरह खत्म हो सकता है।

लेकिन मुझे लगता है कि किसी भी अनुकूलन से पहले मॉडल को सेट करने की आवश्यकता है, यह अधिक महत्वपूर्ण है। ऑप्टिमाइज़ेशन को बाद में denormalisation, शेड्यूलिंग इत्यादि का उपयोग करके प्रबंधित किया जा सकता है। मैं वास्तव में ट्रिगर को स्पर्श नहीं करता, वे थोड़ा मजेदार आईएमएचओ हैं।

मैं एक और दृष्टिकोण भी बनाउंगा।

उपयोगकर्ता नया संदेश लिखते हैं:

  • सम्मिलित संदेश
  • अद्यतन user_category श्रेणी के रूप में उस समय

    अद्यतन user_category सेट last_changed = पर अपडेट किया 'NOW()' (कई है) श्रेणी_आईडी = कहाँ?;

कैसे उन पढ़े गए संदेशों लगता है: (? गंदा)

  • श्रेणियों का चयन करें कि जब पिछली बार उपयोगकर्ता इसे देखा अद्यतन किया गया है।
  • उन श्रेणियों के सभी संदेशों का चयन करें जो 'user_message_noticed' में नहीं हैं (नीचे देखें)।

उपयोगकर्ता पर एक * user_message_noticed में संदेश पढ़ लिया

  • सम्मिलित एक पंक्ति * स्कीमा कि जोड़ों संदेश और उन। श्रेणी आईडी वहां है ताकि हम बिना अतिरिक्त जुड़ाव के ऊपर एक तेज उपरोक्त कर सकें।

सभी संदेशों श्रेणी से पढ़ने पर - अद्यतन * user_category ™ जब उपयोगकर्ता सभी संदेशों को पढ़ा था एक तारीख के साथ (कई कई है)।

लेकिन कभी-कभी, आप वास्तव में वास्तव में काम करने से दूर नहीं हो सकते हैं।

0

MySQL में ट्रिगर समर्थन सबसे अच्छा है, इसलिए मैं उस दिशा में धक्का नहीं दूंगा हालांकि यह ऐसा करने का एक अच्छा तरीका हो सकता था।

ऐसा करने का सबसे हल्का तरीका निम्न होगा: प्रत्येक लॉग इन/लॉग आउट के लिए, "ऑनलाइन उपयोगकर्ताओं" से उपयोगकर्ता को डालें/हटाएं। फिर, फ्रंट-एंड (जिसमें जैक-बिट करने के लिए वैसे भी है)) अब पूछें और फिर यह जानने के लिए कि वह कौन सी आईडी जानता है वह टेबल में है।

माइस्क्ल में अपेक्षाकृत बहुत स्मार्ट होने के अलावा, इंडेक्स के साथ भी बड़ी टेबल पर धीमा हो जाएगा।

ट्रिगर, बस वही और फिर, आप ट्रिगर को क्या करना चाहते हैं ?? इस व्यक्ति ने लॉग इन किया है कि सभी को धक्का? रुचि रखने वालों को धक्का? इसका मतलब है कि अभी तक एक और शामिल है, यानी प्रदर्शन हिट।

अधिसूचना तालिका? किसी भी कारण से पूरी तरह से विशाल और धीमा (यानी जहां एक प्रश्न के बजाय 100 आवेषण .. meh)।