2010-03-22 14 views
6

मैं लोकप्रियता रेडिट, डिग और यहां तक ​​कि Stackoverflow ऐसे के रूप में साइटों पर इस्तेमाल किया एल्गोरिदम में देख रहा हूँ।लोकप्रियता एल्गोरिथ्म - एसक्यूएल/Django

रेडिट एल्गोरिथ्म:

t = (time of entry post) - (Dec 8, 2005) 
x = upvotes - downvotes 

y = {1 if x > 0, 0 if x = 0, -1 if x < 0) 
z = {1 if x < 0, otherwise x} 

log(z) + (y * t)/45000 

मैं हमेशा एसक्यूएल भीतर सरल आदेश प्रदर्शन किया है, मैं सोच रहा हूँ कि कैसे मैं इस तरह के आदेश देने के साथ सौदा करना चाहिए।

यह एक मेज परिभाषित करने के लिए उपयोग किया जाना चाहिए, या मैं सूत्र (प्रदर्शन निरोधक के बिना) के भीतर आदेश देने के साथ एक एसक्यूएल का निर्माण कर सकता है?

मैं भी सोच रहा हूं, यदि प्रदर्शन समस्याओं में किए बिना विभिन्न अवसरों में एकाधिक ऑर्डरिंग एल्गोरिदम का उपयोग करना संभव है।


मैं Django और PostgreSQL का उपयोग कर रहा हूं।

सहायता की बहुत सराहना की जाएगी! ^^

उत्तर

3

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

+0

@stefanw मुझे आपका जवाब दूसरी बार पढ़ना पड़ा। धन्यवाद स्टीफन, मुझे लगता है कि यह जाने का रास्ता है। एसक्यूएल के माध्यम से ऑर्डर करना या सेटिंग करना बहुत जटिल नहीं होगा। :) – RadiantHex