मैं bbPress (ओपन सोर्स फ़ोरम सॉफ़्टवेयर) के लिए एक प्लगइन प्रोग्राम करने का प्रयास कर रहा हूं जो हैकर न्यूज (http://news.ycombinator.com/) के समान काम करेगा।हैकर समाचार की तरह सॉर्ट करें
sort_value = (p - 1)/(t + 2)^1.5
where p = total votes for each topic from users
t = time since submission of each topic in hours
मैं का उपयोग कर sort_value गणना की इस से विषयों को क्रमित करने में सक्षम होना चाहते हैं:
विशेष रूप से, मैं मंच-सूत्र (bbPress उन्हें कॉल "विषय") निम्नलिखित कलन विधि का उपयोग के आदेश क्रमबद्ध करना चाहते हैं माई एसक्यूएल।
topics
तालिका में संबंधित क्षेत्रों में इस तरह दिखता है:
topic_id bigint(20)
topic_start_time datetime
यह हवा में ऊपर है, लेकिन मैं सोच रहा था एक और मेज है कि उपयोगकर्ताओं को करके अलग-अलग वोट संग्रहीत करता है तो हम हो जाएगा नहीं होगा यह जानने में सक्षम है कि उपयोगकर्ता ने पहले ही मतदान किया है या नहीं। और एक और तालिका प्रत्येक विषय के लिए वर्तमान वोट-योग संग्रहित करेगी। शायद उस तालिका में एक और फ़ील्ड होगा जो नवीनतम गणना किए गए sort_Value को संग्रहीत करेगा?
100% सटीक होने के लिए, sort_value प्रत्येक नया वोट के बाद अपडेट किया जाना चाहिए। यह डेटाबेस सर्वर पर बहुत अधिक भार जोड़ देगा, हालांकि, विशेष रूप से यदि हमने सभी विषयों को अपडेट करने का प्रयास किया है। यदि हमें करना है, तो हम डेटा के अंतिम एक्स # के लिए केवल sort_value की गणना करके डेटासेट को सीमित कर सकते हैं। हम समय-समय पर sort_value को अपडेट करके लोड को सीमित भी कर सकते हैं (उदाहरण के लिए क्रॉन जॉब के माध्यम से हर 5 मिनट)।
ये शॉर्टकट लोड को स्वीकार्य बना सकते हैं, लेकिन मैं एक और अधिक सुरुचिपूर्ण समाधान पसंद करूंगा जो बेहतर हो सकता है।
आप इसे कैसे बनाएंगे? :-)
मुझे लगता है कि यह थोड़ा सा बेकार है तो मान्य है। दुर्भाग्य से आप उस सिस्टम की बाधाओं से निपट रहे हैं जिसमें आप जोड़ रहे हैं। इस प्रकार की समस्या को स्केल करना वास्तव में ऐसी चीज है जो rdbms डेटाबेस अच्छी तरह से नहीं करते हैं। कुछ सोफे डीबी व्यू की तरह कुछ इस गली पर सही होगा। –
धन्यवाद, जेरेमी। मैं कॉच डीबी देखेंगे। मैंने अभी इस विचार के लिए एक और चिमटा के बारे में सोचा है, जो कि केवल (कहीं और) एक मूल्य को सहेजना है जो कहता है कि कौन सी तालिका 'सक्रिय है'। मान लें कि वर्तमान मान 'old_table' है। यह मेरे ऐप को 'old_table' के खिलाफ जॉइन करने के लिए बताएगा। फिर, एक अद्यतन 'new_table' बनाने के बाद, मैं "सक्रिय डेटाबेस" मान को 'new_table' पर अपडेट कर दूंगा। यह नियमित रूप से जॉइन के लिए अनुरोध की जा रही तालिका के एक डीआरओपी से बच जाएगा। – bobbyh