वर्डप्रेस json_encode पर डेटा क्रमांकन क्यों चुनते हैं?


13

वर्डप्रेस के साथ मेरी छोटी उम्र में, मैंने वर्डप्रेस को स्वयं देखा है और इसके अनुकूल प्लगइन्स serialize()कई मामलों में PHP को डेटा स्टोर करने में PHP का उपयोग कर रहे हैं । लेकिन हाल ही में एक खोज में मैं के लिए एक गंभीर समुदाय का समर्थन मिला json_encode()अधिक serialize()

और मैंने व्यक्तिगत रूप से दोनों के साथ एक साहचर्य सरणी का परीक्षण किया, जो दिखाता है:

  • serialize() स्टोर 342 चर
  • json_encode() 285 वर्णों को संग्रहीत करता है

मैं यह क्यों पूछ रहा हूँ?

जब मैं मेटा फ़ील्ड्स को पोस्ट करने के लिए स्टोर करने जा रहा हूं तो मैं एक प्रोजेक्ट पर हूं। कहाँ पे:

  • डेटा मूल रूप से अंग्रेजी में होगा, लेकिन कभी-कभी बंगाली हो सकता है
  • डेटा साहचर्य सरणी, 3 स्तर गहरा होगा (मुझे आशा है कि मैंने स्तरों को सही ढंग से समझा है):
array(
    1 => array(
        'key'=>'value',
        'key2'=>'value'
    ),
    2 => array(
        'key'=>'value',
        'key2'=>'value'
    )
)

मैंने postmetaसारणी के meta_valueक्षेत्र की जाँच की है यह एक है longtext, जिसका अर्थ है 4,294,967,295 वर्ण (4GB) की लंबाई।

इसलिए मुझे चीजों के भंडारण में एक मजबूत समाधान की आवश्यकता है।


एक शब्द में, विरासत। वर्डप्रेस व्यापक JSON को अपनाने से पहले, और परिणामस्वरूप साइटों के टन एपीआई पर निर्भर करते हैं, इसलिए यहां नए डेवलपर्स को भ्रमित करने के लिए है जो यह नहीं पढ़ते हैं कि यह पदावनत नहीं है ....
नैट साइमर

जवाबों:


13

मुझे लगता है, 100% यकीन नहीं है कि यह असली कारण था कि WP डेवलपर्स ने इस दृष्टिकोण को लिया, लेकिन सामान्य ज्ञान मुझे बताता है कि वैरिएबल प्रकार को संरक्षित करता है और त्रुटि का पता लगाने में एक मिनी बनाया गया है, और json केवल स्ट्रिंग मान संग्रहीत करता है { key : value }, इसलिए जब आप PHP पर वापस जाएं आपको प्रारूप का अनुमान लगाना होगा, या इसके लिए एक पार्सर बनाना होगा। यह आपको अपने डेटा को संभालने के लिए दो अलग-अलग तरीके अपनाने के लिए मजबूर करेगा: पहले, डेटा को जौन के रूप में संग्रहीत करने के लिए और जबड़े को डीकोड करने के बाद यह पूरी तरह से अलग ऑब्जेक्ट के रूप में वापस आ जाएगा।

यह आकार में अंतर का मुख्य कारण है, PHP न केवल एक सरणी का भंडारण कर रहा है; यह संग्रहीत है कि कितने तत्व सरणी में थे जब इसे क्रमबद्ध किया गया था, उनके प्रकार, और उनके मूल्य।

आप डेटाबेस पर केवल मुख्य मूल्य जोड़े जमा नहीं कर रहे हैं, लेकिन आप विभिन्न चर प्रकारों के साथ एक वस्तु का भंडारण भी कर सकते हैं।


मुझे जवाब सबसे ज्यादा पसंद है। वास्तव में उपयोगी अंक।
मयिनुल इस्लाम

1
इस रूप में खोजे गए डेटा के साथ इस जवाब में सकारात्मक रूप से जो लगता है वह केवल JSON के साथ एक सरल क्रमांकन की तुलना में इसे और अधिक जटिल (और असुरक्षित) बना रहा है। बस केह रहा हू। वास्तविक कारण जैसा कि अन्य उत्तर में दिया गया है कि जिस समय यह सुविधा शुरू की गई थी, केवल PHP क्रमबद्ध फ़ंक्शन था, JSON अभी तक वहां नहीं था।
हकरे

6

JSON एन्कोडिंग को PHP 5.2 में पेश किया गया था, वर्डप्रेस अधिक पुराना है, और यह PHP 4 के लिए (और डिज़ाइन किया गया) पैदा हुआ था।

WordPress में data serialization एक व्यापक चीज़ है, इसलिए PHP serialization से JSON एन्कोडिंग में जाने का मतलब होगा एक बड़ी पिछड़ी संगतता समस्या, और अगर मैं वर्डप्रेस को थोड़ा जानता हूं, तो ऐसा कभी नहीं होगा।

उस ने कहा, अगर आपको लगता है कि JSON एन्कोडिंग PHP क्रमांकन की तुलना में आपके लिए बेहतर है, तो बस इसका उपयोग करें।

यदि आप मेटा फ़ंक्शंस को पोस्ट करने के लिए एक स्ट्रिंग (जो आपके डेटा का JSON-एन्कोडेड संस्करण है) पास करते हैं, तो वर्डप्रेस इसे स्पर्श नहीं करेगा, लेकिन फिर आपको रिट्रीवल पर JSON-decode डेटा को याद रखना होगा।

यदि आपके लिए DB संग्रहण आकार बहुत महत्वपूर्ण है, तो यह संभवतः अतिरिक्त काम के लायक है, अन्यथा बस वर्डप्रेस का उपयोग करें जो इसका उपयोग करता है और इसके बारे में परवाह नहीं करता है।

हो सकता है, आप मूल्यांकन कर सकते हैं कि क्या यह आपके डेटा को बचाने के लिए कस्टम तालिकाओं का मामला है।


3

मुझे "राय के अधीन" के रूप में इसे बंद करने का प्रलोभन है, लेकिन मुझे लगता है कि प्रश्न के कुछ अच्छे उत्तर हैं। मैं "इतिहास" के साथ जाने वाला हूं।

1) json_encodePHP कोर में अपेक्षाकृत नया है।

json_encode

(PHP 5> = 5.2.0, PECL json> = 1.2.0) json_encode - मान का JSON प्रतिनिधित्व लौटाता है

http://php.net/manual/en/function.json-encode.php

json_encodeवर्डप्रेस के शुरुआती दिनों में विश्वसनीय नहीं रहा होगा। यह केवल 5.2 में "कोर" पीएचपी में लुढ़का था, हालांकि यह उससे बहुत पहले एक पीईसीएल विस्तार के रूप में उपलब्ध था।

दूसरा, यदि आप किसी वस्तु को किसी WP_Queryवस्तु में फीड करते हैं जैसे कि json_encodeआपको एक stdClassवस्तु मिलती है json_decodeserialize/ unserializeवस्तु को संरक्षित करेगा।


+1। लेकिन मुझे "राय के अधीन" पर आपत्ति है, क्योंकि मैंने सबूतों को स्थगित कर दिया है। और अंतिम एक: वर्ग से संबंधित मुद्दा: मैंने पहले ही उल्लेख किया था कि दूसरे लिंक पर (कारण json_encode नहीं)।
मयिनुल इस्लाम 16
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.