2009-12-06 25 views
5

मैं एक एनजीओ के लिए एक प्रेरणा साइट पर काम करने जा रहा हूं, और मैं कुछ प्रकार के फेसबुक-एस्क्यू इवेंट स्ट्रीम को लागू करने की तलाश में हूं, जैसे "माइकल ने सेब पाई" की घटनाओं के साथ, "जॉन ने चॉकलेट पर टिप्पणी की केक "," केरेमल फ़ज, आदि ऐलिस द्वारा "8 घंटे पहले पोस्ट किया गयाव्यक्तिगत ईवेंट स्ट्रीम को कैसे कार्यान्वित करें?

बात यह है कि इन घटनाओं, रुचि-आधारित हैं, इसलिए किसी को केवल कारमेल और चेरी में रुचि हो और नारियल के लड्डू नहीं देखना चाहिए या फिर चॉकलेट केक। इसके लिए बहुत सारे क्रमपरिवर्तन हैं, और फ्लाई पर उपयोगकर्ता की व्यक्तिगत घटना स्ट्रीम उत्पन्न करने का अर्थ कुछ महंगा डेटाबेस-प्रश्नों का होगा।

तो मेरी सोच को प्राप्त उपयोगकर्ता और पोस्ट घटना (शायद एक सरल एसक्यूएल शामिल हों-टेबल) पृष्ठभूमि प्रसंस्करण के कुछ प्रकार जब भी कोई कार्रवाई घटना हो रहा है ऐसा करके के बीच एक रिश्ता पहले से उत्पन्न किया गया था।

किसी घटना के खिलाफ सैकड़ों उपयोगकर्ताओं की वरीयताओं का वजन करने के लिए आवश्यक काम पर्याप्त है, इसलिए यह काम अनुरोध को ट्रिगर करने वाले POST अनुरोध के हिस्से के रूप में नहीं किया जा सकता है, इसलिए मुझे बहुत कुछ करना होगा एक अलग प्रक्रिया में काम करते हैं। मैं वर्तमान में इस कार्य के लिए Gearman देख रहा हूं, लेकिन मैं सुझावों के लिए बहुत खुला हूं।

मैं किसी के लिए अपना काम करने की तलाश नहीं कर रहा हूं, लेकिन अगर किसी को इस तरह की चीज़ बनाने के साथ कोई पूर्व अनुभव है, तो मुझे आपके विचार सुनना अच्छा लगेगा।

+0

फुटनोट के रूप में, हम इसे [ड्रूपल] (http://drupal.org/), PHP और MySQL के शीर्ष पर बना रहे हैं, लेकिन चूंकि यह कार्य बहुत ड्रूपल-विशिष्ट नहीं है, इसलिए हमने इसे रखने की कोशिश की सवाल से बाहर। तो यदि आपको इन प्रकार की धाराओं के साथ अनुभव है, तो कृपया साझा करें :) – mikl

उत्तर

2

मुझे सोशल नेटवर्किंग साइट पर न्यूज स्ट्रीम बनाने का कुछ अनुभव हुआ है और हां, जब आपके पास कई प्रकार की घटनाएं होती हैं और ब्याज के कई स्तर (या गोपनीयता सेटिंग्स, या उपयोगकर्ता अनुमतियां) होते हैं तो प्रश्न बहुत जटिल हो सकते हैं। ।

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

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

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

मेरा सरल समाधान beanstalkd और मेरी अपनी PHP स्क्रिप्ट का उपयोग करके अपना खुद का रोल करना था।

+0

ठीक है, सुझाव के लिए धन्यवाद, मैं बीनस्टॉक पर एक नज़र डालेंगे :) – mikl

1

जानते हैं कि कैसे अपने डीबी संरचित है (आप हमें और अधिक बताने के लिए चाहते हो सकता है), लेकिन कुछ स्पष्ट

तरह
SELECT events.* FROM events, event_tags, user_tags 
    WHERE event_tags.event_id = events.id 
     AND event_tags.tag_id = user_tags.tag_id 
     AND user_tags.user_id = <$user_id> 

मेरे लिए बेहद भारी प्रतीत नहीं होता है, यह मानते हुए आप सब कुछ खत्म सूचकांक होते हैं जगह

+0

हाँ, यह घटनाओं से सीधे पूछने में सक्षम होना अच्छा हो सकता है, लेकिन ध्यान में आने वाली चीजों की मात्रा (टैग, कीवर्ड, लेखक, सिफारिशें, टिप्पणियां और उपयोग पैटर्न) मुझे नहीं लगता कि भविष्य में बदलावों के लिए लचीलापन रखते हुए एक कुशल सूचकांक बनाना संभव होगा। हालांकि, मुझे गलत सिद्ध होना अच्छा लगेगा। – mikl

1

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

+0

विचार करने के लिए जटिलता और डेटा की मात्रा को देखते हुए (स्टीरियोफ्रोग को मेरा जवाब देखें), मैं वास्तव में यह नहीं देख सकता कि 15-30 जॉइन करने के बिना, इस तरह की एक इंडेक्स कैसे बनाई जा सकती है ... और इस धारणा से जा रहा है कि MySQL सक्षम है बहुत सारे भारी प्रश्नों को संभालने के लिए, मेरी राय में परेशानी के लिए भीख मांगना होगा :) – mikl

1

फेसबुक ने इस तरह की चीज करने के लिए अपना खुद का डेटाबेस विकसित किया और इसे खोल दिया, मुझे इसके बारे में बहुत कुछ पता नहीं है, लेकिन मुझे लगता है कि यह worth a look हो सकता है।

+0

मेरे ज्ञान के लिए, कैसंद्रा मुख्य रूप से धारा डेटा के लिए भंडारण तंत्र है, और यह सब पीढ़ी से संबंधित नहीं है। – mikl

1

क्या आपने Activity मॉड्यूल देखा है? यहां अपने प्रोजेक्ट पेज से एक अंश दिया गया है:

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

मैं क्या आप अर्द्ध निकट भविष्य में कुछ इस तरह करने की ज़रूरत है, क्योंकि के साथ आने के बारे में उत्सुक हो जाएगा।

+0

नहीं, लेकिन मैं इसे देख लूंगा, धन्यवाद :) – mikl

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