Thursday 15 July 2010

database - What is the most efficient approach to get posts that were not voted by an user, on CouchBase? -


मेरे पास निम्न प्रारूप में पदों के साथ एक बाल्टी है:

  {title: "foo "", विवरण: "बार", वोट: {जॉन: 1, लियो: -1, ...}}   

मैं उन पदों के लिए लगातार पूछताछ कर रहा हूं जो एन वोट से कम हैं और कि किसी विशिष्ट उपयोगकर्ता द्वारा अभी तक मतदान नहीं किया गया था। समस्या यह है: मैं प्रत्येक विशिष्ट उपयोगकर्ता के लिए विचार नहीं कर सकता, इसलिए मुझे एक को 'एलटी; 50 वोटों के साथ फ़िल्टर करने के लिए सेट करना होगा और फिर प्रोग्राम से उन विशिष्ट फिल्टरों को फ़िल्टर करना होगा जिन्हें विशिष्ट उपयोगकर्ता द्वारा मतदान नहीं किया गया था। क्या इस मुद्दे पर जाने का सही तरीका है?

यदि आपके पास बहुत से उपयोगकर्ता हैं जो वोट कर सकते हैं, तो आपको चाहिए

  • कुछ संरचना में पार्स जेसन
  • वोट करने के लिए कुछ वोट जोड़ें सरणी
  • ऑब्जेक्ट को आधार पर वापस लिखें

    इसलिए अगर कोई और 1 से 4 चरणों के बीच वोट करता है, और आप CAS पर चेक नहीं करते वापस लिखो, कि वोट खो जाएगा। और अगर आप सीएएस की जांच करते हैं और वोट बहुत तेज़ होते हैं तो आप बहुत धीमी गति से प्रदर्शन कर सकते हैं।

    समाधान, जैसा कि मैंने पहले कहा था, वोटों को अलग से JSON में सहेजने के लिए जैसे: <">" "" "वोट", "मतदाता आईडी": 123, "मतदान किया": 321, "टाइमस्टैम्प": 131321321}

    और अपने आइटम को संग्रहीत करें 321, "शीर्षक": foo}

    इस के साथ, इस तरह से:

      {"type": "item", "itemId": 321, "title" योजना आपको केवल उन वोटों के साथ काम करती है जब आप उन्हें गिनती करने की ज़रूरत होती है, देखें कि उपयोगकर्ता ने कुछ मदों के लिए वोट किया है, आदि।  

    एक और चाल: यदि आपको वोट प्रदर्शित करने की आवश्यकता है, अर्थात आपकी वेबसाइट पर, fast_voutes_count "। इसका अर्थ है कि आप अलग-अलग वैरिएबल बना सकते हैं जो केवल प्रति आइटम की गणना करते हैं: वोट: गिनती: के लिए: & lt; itemId & gt;

  • यदि आप किसी आइटम को वोट कर लेते हैं, तो आपको चाहिए:
    1. कुंजी के आधार पर वृद्धि आइटम वोट गिनती मान: वोट: count: for: & lt; itemId & gt;
    2. वोट डॉक्यूमेंट ( {"type": "vote", "voterId": 123, "votedFor": 321, "टाइमस्टैम्प": 131321321} ) के रूप में उपयोगकर्ता के वोट को स्टोर करें।

      तो एक वेबसाइट पर वोटों को प्रदर्शित करने के लिए पहले मान का उपयोग किया जाएगा और दूसरे का उपयोग आपके आँकड़ों की गणना के लिए किया जाएगा।

      आप जिस दृश्य को बनाने की जरूरत है (नक्शा, फ़ंक्शन कम करें) आप इसका उल्लेख कर सकते हैं और इसके उदाहरण हैं यदि आप नए मानचित्र के लिए नए हैं या सबसे पहले एक दृश्य बनाने का प्रयास करें जो केवल विशिष्ट मद आईडी के लिए वोट प्रदर्शित करेगा, तो यह छोटा उदाहरण है:

        मानचित्र: फ़ंक्शन () {if (meta.type === "जेसन" & amp; amp; amp; doc.type === "वोट") {emit (doc.votedFor, null); }}   

      फिर अगर आप गिनती करना चाहते हैं तो वोटों को कम करने के लिए केवल _count का उपयोग करें।

      पुनश्च: मेरे आवेदन में , हम वीडियो के लिए विचारों की गणना करने के लिए इस तरह के दृष्टिकोण का उपयोग करते हैं: "फास्ट _क्लिप_दृश्य" नामक एक कुंजी-मान का उपयोग वेबसाइट पर जानकारी प्रदर्शित करने और userId , क्लिपआईडी और < विस्तृत आँकड़ों के लिए कोड> टाइमस्टैम्प

      वैसे, यदि आपको "मत द्वारा शीर्ष 10 आइटम" की कुछ आवश्यकता होगी, तो इसका संदर्भ लें।

  • No comments:

    Post a Comment