2017-10-03 4 views
9

मैं 5 लाख कुंजी-मूल्य जोड़े स्टोर करने के लिए अपने PHP ऐप के संयोजन के साथ memcached का उपयोग करने पर विचार कर रहा हूं। मेरा उद्देश्य डीबी से आगे और पीछे से बचना है (जो मेरे मामले में फाइल सिस्टम है)। मेरे पास कुंजी-मानों में प्रति सेकेंड 100-500 एक्सेस हो सकती हैं। वे मुख्य मान रहे हैं दोनों MD5 की और के रूप में कर रहे हैं:memcached में लाखों कुंजी-मूल्य संग्रहीत करना - अच्छा या बुरा विचार?

array('MD5X' => 'MD5Y', ...) 

मुझे यकीन है कि कैसे डेटा संग्रहीत किया जाता है नहीं कर रहा हूँ, लेकिन अगर हम 5 million * 16 bytes (keys) + 5 million * 16 bytes (values) गुणा हम 180MB मिल ~।

:

डाटासेट तय हो गई है तो मैं केवल इसे से दिखाया जाएगा (संपादित कोई वास्तविक memcached उदाहरण मैं 750MB का उपयोग सभी वस्तुओं को स्टोर करने के साथ प्रयास करने के बाद।)।

सवाल:

  1. यह एक अच्छा है या बुरा डिजाइन है?
  2. क्या मैं कभी भी याद नहीं कर सकता (जब तक सर्वर क्रैश नहीं होता) को डेटा को फिर से लोड करना पड़ता है? यह मानते हुए कि स्मृति टोपी संग्रहीत डेटा से अधिक है? यदि नहीं, तो मैं एक ही लक्ष्य को प्राप्त करने के लिए कौन सी तकनीकों का उपयोग कर सकता हूं।

बहुत बहुत धन्यवाद!

+0

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

+0

धन्यवाद @ पॉलकॉलिंगवुड, दुर्भाग्य से मैं एक डीबी का उपयोग नहीं कर सकता। चीयर्स – JoeSlav

उत्तर

0

क्या आपको प्रदर्शन की आवश्यकता होगी? निश्चित रूप से। Memcache तेजी से चमक रहा है। हम लगभग 10 मिलियन कुंजी स्टोर करते हैं और हम लगभग 700 गुना सेकेंड मेमकेच तक पहुंचते हैं। यह हमें कभी नीचे जाने नहीं दिया है।

जब आप एप्लिकेशन शुरू करते हैं तो आप मेमचेचे में सभी चाबियाँ लोड कर सकते हैं और समाप्ति तिथि बहुत लंबे समय तक सेट कर सकते हैं। आपको याद रखने वाली चीज़ यह है कि अंततः memcache अंततः एक कैश है। और इसे भंडारण इंजन के रूप में इस्तेमाल नहीं किया जाना चाहिए। आपको यह सोचने के लिए डिजाइन करना होगा कि आपको आवश्यक डेटा (कुंजी) नहीं ढूंढने की संभावना हमेशा होती है, और उस मामले में डीबी कॉल करें।

विकल्प आप कैसंड्रा जैसे नोएसक्यूएल डेटाबेस देख सकते हैं, इसमें उत्कृष्ट पढ़ने और लिखने की गति है जो आपकी आवश्यकताओं को पूरा करनी चाहिए। केवल एक चीज यह है कि memcache की तुलना में ठीक ट्यून कैसंड्रा को थोड़ा मुश्किल है।

+0

धन्यवाद। मेरी समझ के अनुसार, एक समाप्ति निर्दिष्ट नहीं करके प्रविष्टियों को कभी समाप्त नहीं होना चाहिए, जब तक मेरे पास स्मृति या स्लैब समस्या न हो। क्योंकि मेरे पास एक डीबी नहीं है (और मैं नई पुस्तकालयों/आदि को पेश नहीं करना चाहता) और मेरे पास फाइल सिस्टम का उपयोग करने के लिए पर्याप्त डिस्क स्थान नहीं है, मैं एक humongous सरणी का उपयोग करने के लिए सोच रहा हूँ जो मैन्युअल रूप से पुनरावृत्त और लोड किया गया है सर्वर शुरू होने के बाद memcached में। यदि memcached में कोई प्रविष्टि नहीं मिली है, तो मैं किसी अन्य व्यवहार के लिए डिफ़ॉल्ट होगा या सरणी से पढ़ने पर विचार कर सकता हूं, लेकिन वहां मुझे समेकन और सर्वर को मारने से डर है। – JoeSlav

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