2010-02-12 19 views
6

कुछ समय से PHP का उपयोग कर रहा था और मैं सोच रहा था कि यह संपूर्ण "संदेश कतार" क्या है। उदाहरण के लिए फेसबुक लेते हैं। मैं अपनी स्थिति अपडेट कर सकता हूं लेकिन फिर मुझे अपने सभी दोस्तों को स्टेटस अपडेट दिखाना है (मान लें कि मेरे पास 3000 अनुयायियों हैं)। अगर टिप्पणियां हैं तो और भी काम करें और उन्हें उन सभी मित्रों को अधिसूचित किया जाना चाहिए जिन्होंने ईमेल के माध्यम से टिप्पणी छोड़ दी हो। उदाहरण के साथ मैंने देखा है, ऐसा लगता है कि सभी संदेश कतार "संदेश" (मेरी स्थिति अपडेट) लेती है और इसे कुछ अस्थायी स्थान (फाइल सिस्टम या डीबी तालिका) में डालती है। मेरे पास एक क्रॉन नौकरी है जो इसे खींचती है और मेरी टेबल अपडेट करती है।मुझे समझने में सहायता करें कि संदेश कतार कैसे काम करता है

इसके साथ, मैं उस डेटा में हेरफेर करने के बारे में कैसे जा सकता हूं? मुझे लगता है कि मैं उलझन में हूं कि यह वास्तव में मेरी मदद कैसे करेगा। मैं निम्न कार्य को संदेश कतार में कैसे अनुवादित करूं और फिर बाद में चलाने के लिए फ़ंक्शन के लिए शेड्यूल कैसे करूं?

1 - मेरी स्थिति अपडेट करें 2 - अब इसे मेरे पृष्ठ और मेरे सभी दोस्तों में प्रकाशित करें। 3 - अगर टिप्पणी छोड़ दी गई है, तो अब उन टिप्पणियों को ईमेल करें जो उस टिप्पणी के लिए "सदस्यता लें"।

मेरा सवाल है, मैं उस डेटा को कैसे कुशल बना सकता हूं? क्या मैं सिर्फ "टिप्पणी" डालता हूं, उसके बाद एक "नौकरी" है जो उस टिप्पणी को खींचती है और उसे उस फ़ंक्शन में प्लग करती है जो इसे संसाधित करती है?

यहां एक उदाहरण है जिसे मैं देखने की योजना बना रहा हूं।

http://www.freeopenbook.com/php-hacks/phphks-CHP-5-SECT-18.html

अग्रिम धन्यवाद।

उत्तर

3

मेरा सवाल है, मैं उस डेटा का उपयोग कैसे करूं? क्या मैं सिर्फ "टिप्पणी" डालता हूं, फिर "नौकरी" है जो उस टिप्पणी को खींचता है और प्लग करता है जो इसे संसाधित करता है?

बिल्कुल।

फेसबुक पृष्ठों में प्रकाशन स्थिति अपडेट में शायद संदेश कतार में शामिल नहीं है - मुझे वास्तव में उनके विशिष्ट डिज़ाइन को नहीं पता है, लेकिन मुझे लगता है कि अपडेट किए गए डेटा को केवल एक क्वेरी के माध्यम से मांग पर आपूर्ति की जाती है जब उपयोगकर्ता अपने पृष्ठों को लोड करते हैं । (जब तक फेसबुक की स्थिति अद्यतन डेटा को denormalize करने के लिए एक अलग प्रक्रिया है।)

इसके विपरीत, स्थिति अद्यतन ईमेल अधिसूचनाएं भेजना संदेश कतार के लिए एक महान उम्मीदवार है।

एक सामान्य कार्यान्वयन में एक विशिष्ट संदेश कतार में एक नया संदेश (आमतौर पर न्यूनतम, शायद केवल आपकी उपयोगकर्ता आईडी) लिखना शामिल होगा - शायद "ईमेलस्टैटस अपडेटडेटेशन" कतार।

एक और प्रक्रिया तब संदेशों को हटा देती है और जानता है कि उनके साथ क्या करना है। स्टेटस अपडेट ईमेल संदेश भेजने के लिए समर्पित एक प्रक्रिया उपयोगकर्ता आईडी (संदेश की सामग्री) का उपयोग आपकी वर्तमान स्थिति और अपने दोस्तों के ईमेल पतों की एक सूची लोड करने, ईमेल संदेशों का निर्माण करने और उन्हें प्रेषित करने के लिए करेगी।

यह पता चला है कि आप उच्च स्केलेबिलिटी पर Why are Facebook, Digg, and Twitter so hard to scale? में फेसबुक के आर्किटेक्चर के बारे में बहुत अच्छी जानकारी पा सकते हैं।

+0

स्पष्टीकरण के लिए धन्यवाद। क्या संदेश कतार में कई "कॉलम" हो सकते हैं। अगर मैं user_id और संदेश संग्रहीत कर रहा हूं, तो मेरे फ़ंक्शन को किसी भी तरह से पार्स करने की आवश्यकता होगी। या यह सिर्फ एक फ्लैट "फाइल है।" – luckytaxi

+0

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

+0

आह ठीक है। मुझे लगता है कि एक्सएमएल काम में आ जाएगा, आह? – luckytaxi

2

क्या मैं सिर्फ "टिप्पणी" डालता हूं, फिर एक "नौकरी" है जो उस टिप्पणी को खींचती है और इसे उस प्रक्रिया में प्लग करती है जो इसे संसाधित करती है?

संदेश कतारों के साथ एक बिंदु सेवाओं को रद्द करना और असीमित प्रक्रिया करना है।

आपके पास कोई संदेश कतार सेवा चल रही होगी, जब कोई अपनी स्थिति बदलता है तो आप किसी विशेष कतार में एक संदेश भेज देंगे। आप उस php कोड से ऐसा कर सकते हैं जो उपयोगकर्ता चलाता है जब कोई उपयोगकर्ता अपनी स्थिति बदलता है।

तब आपके पास ऐसी सेवा/पृष्ठभूमि नौकरी चल रही होगी जो उस कतार से संदेश खींचती है। यह निश्चित रूप से PHP प्रक्रिया के लिए कुछ बाहरी होगा जो HTTP कॉल के आधार पर संदेश भेजता है। वह नौकरी कतार से संदेशों को खींचती है, संदेश प्रसंस्करण करता है- यह पता लगाने के लिए कि मेल को कौन भेजना है और फिर मेल भेजना है।

अब आपके पास ऐसे मेल अपडेट को संभालने का एक लचीला तरीका है।

  • यह मेल अपडेट सेवा के लिए वेब सर्वर की तुलना में किसी अन्य मशीन पर चलाने के लिए काफी आसान होगा।
  • यदि आपको अधिक शक्ति की आवश्यकता होगी तो स्केल करना आसान है।
  • आप देरी से भेजने में अधिक आसानी से कार्यान्वित कर सकते हैं - उदा। आप मेल भेजने के साथ एक मिनट या 2 का इंतजार कर सकते हैं और यदि उपयोगकर्ता फिर से अपनी स्थिति अपडेट करता है, तो आप केवल 1 मेल भेजते हैं, 2
  • क्या आपने यह उपयोगकर्ता के http अनुरोध के भीतर किया था, जिसने अपनी स्थिति बदल दी, वह ' डी को तब तक इंतजार करना पड़ेगा जब तक कि सभी प्रसंस्करण समाप्त नहीं हो जाते।
+0

हाँ, मैं ईमेल के नाव लोड भेजने के साथ एक मुद्दा में भाग गया! डेटा आउट खींचते समय मुझे यह समझना होगा कि किस भाषा का उपयोग करना है। मुझे आश्चर्य है कि सीएलआई के माध्यम से PHP कितनी अच्छी तरह काम करता है। – luckytaxi

संबंधित मुद्दे