वास्तव में अच्छा विषय और कुछ जवाब पढ़ने के बाद, मैं इस विषय पर अपने प्रयोगों को साझा करना चाहता हूं।
मुझे एक उपयोग का मामला मिला जहां कुछ "विशाल" तालिका को लगभग हर बार डेटाबेस से बात करने की आवश्यकता होती है (यह मत पूछो कि क्यों, बस एक तथ्य)। डेटाबेस कैशिंग सिस्टम उचित नहीं है क्योंकि यह विभिन्न अनुरोधों को कैश नहीं करेगा, इसलिए मैं php कैशिंग सिस्टम के बारे में बताता हूं।
मैंने कोशिश की, apcu
लेकिन यह जरूरतों के अनुकूल नहीं था, स्मृति इस मामले में पर्याप्त विश्वसनीय नहीं है। अगला कदम क्रमांकन के साथ एक फ़ाइल को कैश करना था।
तालिका में 18 स्तंभों के साथ 14355 प्रविष्टियाँ हैं, जो क्रमबद्ध कैशे को पढ़ने पर मेरे परीक्षण और आँकड़े हैं:
JSON:
जैसा कि आप सभी ने कहा है, json_encode
/ के साथ प्रमुख असुविधा json_decode
यह है कि यह सब कुछ एक StdClass
उदाहरण (या वस्तु) में बदल देता है। यदि आपको इसे लूप करने की आवश्यकता है, तो इसे एक सरणी में बदलना जो आप शायद करेंगे, और हां यह परिवर्तन समय बढ़ा रहा है
औसत समय: 780.2 एमएस; मेमोरी का उपयोग: 41.5MB; कैश फ़ाइल का आकार: 3.8MB
Msgpack
@ हच मेसकप का उल्लेख करता है । सुंदर वेबसाइट। चलो इसे एक कोशिश हम देंगे?
औसत समय: 497 एमएस; मेमोरी का उपयोग: 32 एमबी; कैश फ़ाइल का आकार: 2.8 एमबी
यह बेहतर है, लेकिन एक नए विस्तार की आवश्यकता है; कभी-कभी लोगों को डराने के लिए संकलन ...
IgBinary
@GingerDog उल्लेख igbinary । ध्यान दें कि मैंने सेट किया है igbinary.compact_strings=Off
क्योंकि मुझे फ़ाइल आकार की तुलना में प्रदर्शन पढ़ने की अधिक परवाह है।
औसत समय: 411.4 एमएस; मेमोरी का उपयोग: 36.75MB; कैश फ़ाइल का आकार: 3.3MB
मेस पैक से बेहतर है। फिर भी, इस संकलन की भी आवश्यकता है।
serialize
/unserialize
औसत समय: 477.2 एमएस; मेमोरी का उपयोग: 36.25MB; कैश फ़ाइल का आकार: 5.9 एमबी
JSON से बेहतर प्रदर्शन, बड़ा सरणी है, धीमी json_decode
है, लेकिन आप पहले से ही नया है।
वे बाहरी एक्सटेंशन फ़ाइल आकार को कम कर रहे हैं और कागज पर बहुत अच्छा लगता है। नंबर झूठ नहीं बोलते *। यदि आप लगभग एक ही परिणाम प्राप्त करते हैं, तो एक एक्सटेंशन संकलित करने का क्या मतलब है जो आपके पास मानक PHP फ़ंक्शन के साथ होगा?
हम यह भी काट सकते हैं कि आपकी आवश्यकताओं के आधार पर, आप किसी और की तुलना में कुछ अलग चुनेंगे:
- IgBinary वास्तव में अच्छा है और MsgPack की तुलना में बेहतर प्रदर्शन करता है
- Msgpack आपके डेटा को संपीड़ित करने में बेहतर है (ध्यान दें कि मैंने igbinary कॉम्पैक्ट.string विकल्प की कोशिश नहीं की थी)।
- संकलन नहीं करना चाहते हैं? मानकों का उपयोग करें।
यही कारण है, एक और क्रमांकन तरीकों की मदद से आप एक को चुनने में मदद करते हैं!
* PHPUnit 3.7.31, php 5.5.10 के साथ परीक्षण किया गया - केवल एक मानक हार्डड्राइव और पुराने दोहरे कोर सीपीयू के साथ डिकोडिंग - 10 समान उपयोग मामले के परीक्षण पर औसत संख्या, आपके आँकड़े भिन्न हो सकते हैं
JSON_UNESCAPED_UNICODE
।