कल्पना कीजिए कि आप पूर्णांक निम्नलिखित सरणी है:PHP और मिलियन सरणी बच्चे
array(1, 2, 1, 0, 0, 1, 2, 4, 3, 2, [...]);
पूर्णांकों एक लाख प्रविष्टियों तक पर जाना; केवल हार्डकोड होने के बजाए वे जेएसओएन स्वरूपित फ़ाइल (आकार में लगभग 2 एमबी) में प्री-जेनरेट और संग्रहीत किए गए हैं। इन पूर्णांकों का क्रम मायने रखता है, मैं इसे हर बार यादृच्छिक रूप से उत्पन्न नहीं कर सकता क्योंकि यह लगातार होना चाहिए और हमेशा एक ही इंडेक्स पर समान मान होना चाहिए।
अगर यह फ़ाइल बाद में PHP में वापस पढ़ा जाता है (उदाहरण के लिए file_get_contents
+ json_decode
का प्रयोग करके) यह 700 से 900ms पर ले जाता है सिर्फ सरणी वापस पाने के लिए - "ठीक है" मैंने सोचा, "यह शायद उचित है, क्योंकि json_decode
के बारे में 2 पार्स करने के लिए है लाख अक्षर, चलो इसे कैश करें "। एपीसी इसे एक प्रविष्टि में कैश करता है जो लगभग 68 एमबी लेता है, शायद सामान्य, ज़वाल बड़े होते हैं। हालांकि एपीसी से वापस इस सरणी को कुछ अच्छा 600ms लेता है जो मेरी आंखों में अभी भी बहुत अधिक है।
संपादित करें: एपीसी सामग्री को स्टोर और पुनर्प्राप्त करने के लिए धारावाहिक/अनिश्चितता करता है जो एक लाख आइटम सरणी के साथ एक लंबी और भारी प्रक्रिया है।
तो सवाल:
अगर मैं एक एक लाख प्रविष्टियों सरणी, कोई फर्क नहीं पड़ता डेटा की दुकान या विधि, पीएचपी में लोड करने का इरादा है कि मैं इस विलंबता आशा करनी चाहिए? जहां तक मैं समझता हूँ एपीसी zval ही संग्रहीत करता है, तो सैद्धांतिक रूप से एपीसी से यह पुन: प्राप्त करने के रूप में तेजी से के रूप में यह संभवतः प्राप्त कर सकते हैं (कोई पार्स, कोई रूपांतरण, कोई डिस्क नहीं पहुँच)क्यों एपीसी के लिए इतनी धीमी गति से होना चाहिए है कुछ इतना आसान लगता है?क्या PHP का उपयोग कर स्मृति में पूरी तरह से एक लाख प्रविष्टियों सरणी को लोड करने का कोई प्रभावी तरीका है? मानते हुए राम उपयोग एक समस्या नहीं है।
अगर मुझे इंडेक्स के आधार पर इस सरणी के केवल स्लाइसों का उपयोग करना था (उदाहरण के लिए इंडेक्स 15 से इंडेक्स 76 तक खंड लोड करना) और वास्तव में स्मृति में पूरी सरणी नहीं है (हाँ, मुझे समझ में आता है कि यह एक आसान तरीका है यह कर रहा है, लेकिन मैं सभी पक्षों को जानना चाहता था), पूर्ण सरणी के लिए सबसे कुशल डेटा स्टोर सिस्टम क्या होगा? जाहिर है आरडीबीएम नहीं; मैं रेडिस सोच रहा हूं, लेकिन मुझे अन्य विचारों को सुनकर खुशी होगी।
क्या आपने [SplfixedArray] (http://php.net/manual/en/class.splfixedarray.php) की कोशिश की है? – Buddy
@ बुड्डी यूप, ज्यादा अंतर नहीं, शायद कम स्मृति का उपयोग करता है लेकिन एपीसी उतना ही लंबा लेता है। – Mahn
यदि संख्याएं छोटी हैं और सरणी स्थैतिक है, तो क्या आप इसके बजाय एक 1 एमबी स्ट्रिंग ऑब्जेक्ट का उपयोग नहीं कर सकते? – 6502