2010-01-10 9 views
6

स्टोर करने के लिए यह पृष्ठदृश्य, डाउनलोड, वोटों की संख्या आदि हो सकता है। असल में, बहुत ही महत्वपूर्ण नहीं है।PHP - रेडिस/मेमकैचब/मोंगोब या अन्य लगातार भंडारण काउंटर

उन जानकारी को स्टोर करने का सबसे अच्छा तरीका क्या है? MySQL एक अच्छा विकल्प नहीं है। आप लोग क्या उपयोग करते हैं?

उत्तर

10

मुझे लगता है मैं Redis के साथ जाना होगा, क्योंकि:

  • Antirediz (उसका उपनाम) वास्तव में सक्रिय रूप से Redis विकसित कर रहा है। (हर बार जब मैं अपने जीथब डैशबोर्ड को देखता हूं तो उसने कुछ नया कोड दिया है)। वह अब रेडिस fulltime विकसित कर रहा है वीएमवेयर
  • रेडिस अंततः लगातार है इसलिए प्रदर्शन किकस है (पहले केवल स्मृति का उपयोग करता है जो तेजी से होता है)।
  • रेडिस पर एक परमाणु increment ऑपरेशन है जो आपको चाहिए।
  • रेडिस में बहुत अच्छी PHP पुस्तकालय हैं। एक ऐसा भी है जिसे C extension के रूप में लिखा गया है, इसलिए इसमें वास्तव में अच्छा प्रदर्शन है। Redis website में इन एक्सटेंशन को भी एक सिंहावलोकन है। कुछ शुद्ध PHP कोड हैं (एक लीटल चलाएं लेकिन धीमे, लेकिन कॉन्फ़िगर करना आसान है)।
+0

हाथ नीचे मैं रेडिस कहूंगा। मैं एक काउंटर सॉर्ट कर रहा हूं और मैं $ 20 512 एमबी वीपीएस पर प्रति मिनट 30k कमांड दबा रहा हूं। :) –

+0

हमने काउंटर सिस्टम के लिए रेडिस का उपयोग करने की कोशिश की। रेडिस 'प्राथमिक डेटास्टोर रैम है, और हमारे डेटासेट प्रभावी होने के लिए बहुत बड़ा था।टोक्यो ट्रायंट की तरह कुछ और - जो हर समय राम में पूरे डेटासेट को रखने की ज़रूरत नहीं है - शायद बेहतर विकल्प होगा। –

+0

रैम में एक साधारण काउंटर नहीं रखा जा सकता है? ट्विटर स्मृति में लगभग सभी सक्रिय ट्वीट्स स्टोर करता है। यदि आप प्रदर्शन चाहते हैं तो मुझे लगता है कि आपको मेमोरी मॉड्यूल के लिए थोड़ा नकद देना चाहिए। इसके अलावा आप रैम सस्ते के कुछ गिग प्राप्त कर सकते हैं। – Alfred

1

1 99 0 के प्रसिद्ध दृश्य काउंटरों ने संख्या को स्टोर करने के लिए सरल फ़ाइलों का उपयोग किया। यदि आपको केवल एक नंबर स्टोर करना है, तो कुछ भी अच्छा है।

+2

यदि आपको किसी प्रकार का अर्थपूर्ण ट्रैफ़िक मिलता है, तो डिस्क पर फ़ाइल में लिखने में समरूपता समस्याएं होती हैं। जब तक आप फ़ाइल लॉकिंग का उपयोग नहीं करते हैं, लेकिन तब आप लॉक विवाद का जोखिम चलाते हैं। एक कारण के लिए memcached जैसी परियोजनाएं मौजूद हैं। –

+2

लेकिन यदि आप इसे सरल (कम यातायात) साइट के लिए उपयोग कर रहे हैं तो यह काम कर सकता है और – Alfred

+0

लागू करने में आसान हो सकता है लॉक विवाद इतना कठिन नहीं है। 'जबकि (! get_lock() || गिनती> 10000) {नींद (0.001); गिनती ++}; फ्रेड() या fwrite(); remove_lock(); 'ऐसा कुछ आसान आसानी से प्रति सेकंड सैकड़ों हजारों अनुरोधों को संभाल सकता है ... मानते हुए कि आपका चुने हुए ऑपरेटिंग सिस्टम फाइल सिस्टम ऑपरेशंस पर त्वरित है। –

-1

मैं कहूंगा कि एपीसी या मेमकैच अच्छे विकल्प हैं।

+1

दृढ़ता के बिना? – stesch

+0

+1। रेडिस भी तुलनीय है, और दृढ़ता से बनाया गया है। –

9

अप्सर्ट के साथ मोंगोडीबी इसके लिए बहुत अच्छा है।

आप की तरह कुछ भंडारण कर रहे हैं:

{ "url" : "www.example.com", "pageviews" : 0 } 

आप atomically वेतन वृद्धि पृष्ठ-अवलोकन वास्तव में जल्दी से साथ परमाणु आपरेशन $ इंक कर सकते हैं:

db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}}) 

आप upserts का उपयोग करते हैं, तो आप की जरूरत नहीं है यह जांचने के लिए कि कोई दस्तावेज़ इसे अपडेट करने से पहले मौजूद है या नहीं। उदाहरण के लिए, अगर आप कहते हैं: अगर यह मौजूद है

db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}}, {"upsert" : true}) 

URL, www.example.com से दस्तावेज़ अगर यह मौजूद नहीं है (1 पर सेट पृष्ठ दृश्यों के साथ) बनाया जाएगा या,, पृष्ठ-अवलोकन किया जाएगा वृद्धि की जाती। इसका मतलब है कि आपको संग्रह को पूर्व-पॉप्युलेट करने की चिंता करने की आवश्यकता नहीं है।

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