2012-04-18 12 views
28

मैं अपने डेटाबेस पर json_encoded स्ट्रिंग स्टोर करने की योजना बना रहा हूं। मैं ठीक होने वाली लम्बाई नहीं बता सकता, लेकिन मुझे पूरा यकीन है कि यह लंबा होगा। मेरी चिंता यह है कि मैं किस क्षेत्र का उपयोग करने जा रहा हूं, क्या यह blob या text है?क्या मुझे MySQL में JSON के लिए ब्लॉब या टेक्स्ट का उपयोग करना चाहिए?

मैं उस व्यक्ति को पसंद करता हूं जहां मैं तेजी से खोज पर जितना संभव हो सके अंतरिक्ष को बचा सकता हूं, किसी भी मामले में मेरे पास अन्य कॉलम है जहां मुझे केवल इंडेक्स होना चाहिए।

उत्तर

24

blob छवियों जैसी चीजों के लिए आमतौर पर है, बाइनरी आदि text अपने मामले के लिए काफी अच्छा होना चाहिए, या आप जो भी बड़ा अंतरिक्ष क्षमता है कि अगर वास्तव में एक चिंता का विषय है longtext उपयोग कर सकते हैं।

खोज के लिहाज से, जब से तुम json_encode 'घ सामान भंडारण कर रहे हैं, तब भी आप वैसे भी उस पर json_decode कॉल करने के लिए यह अपने आवेदन में उपयोगी होने के लिए, मैं डेटाप्रकार मामलों के चुनाव इस मामले में नहीं लगता है की आवश्यकता होगी।

जेसन की एक बड़ी स्ट्रिंग में संबंधित सामग्री को संग्रहीत करने के बजाय अपने डेटाबेस डिज़ाइन को सामान्य बनाना एक बेहतर तरीका है।

+2

आपकी तरह की अंतर्दृष्टि के लिए धन्यवाद। –

+1

मैं लगभग 2 साल और 11 महीने बाद हूं, लेकिन वेबहुक के लिए पेलोड के लिए, सीरियलाइज्ड जेएसओएन को संग्रहीत करने के लिए इंतजार करते समय इसके लिए एक अच्छा उपयोग केस लगता है। अगर कोई अलग-अलग सोचता है तो मुझे फीडबैक पसंद है। – Mave

+2

Pinterest जेएसओएन को 'टेक्स्ट' में संग्रहीत कर रहा है, उन्होंने [हाल ही में इसे इस आलेख में प्रकाशित किया है (आधे रास्ते तक स्क्रॉल करें)] (https://engineering.pinterest.com/blog/sharding-pinterest-how-we-scaled- हमारे-mysql-बेड़ा)। – DanFromGermany

21

जैसा कि MySQL के प्रलेखन में बताया गया है, चूंकि 5.7.8 मूल जेएसओएन डेटा प्रकार समर्थित है।

  • JSON स्तंभों में संग्रहीत JSON दस्तावेज़ का स्वत: मान्यता:

    JSON डेटा प्रकार एक स्ट्रिंग कॉलम में JSON प्रारूप तार भंडारण पर इन लाभ प्रदान करता है। अमान्य दस्तावेज़ एक त्रुटि उत्पन्न करते हैं।

  • अनुकूलित स्टोरेज प्रारूप। JSON कॉलम में संग्रहीत JSON दस्तावेज़ों को एक आंतरिक प्रारूप में परिवर्तित कर दिया जाता है जो दस्तावेज़ तत्वों को त्वरित पढ़ने की अनुमति देता है। जब सर्वर को बाद में इस बाइनरी प्रारूप में संग्रहीत एक JSON मान पढ़ना आवश्यक है, तो मान को किसी टेक्स्ट प्रस्तुति से पार्स नहीं किया जाना चाहिए। बाइनरी प्रारूप को सर्वर में उपरोक्त या नेस्टेड मानों को सीधे कुंजी या सरणी इंडेक्स द्वारा दस्तावेज़ में पहले या बाद में सभी मूल्यों को पढ़ने के बिना सक्षम करने के लिए संरचित किया गया है।

इसलिए, जैसा कि MySQL दस्तावेज़ बताता है, JSON डेटा प्रकार का उपयोग किया जाना चाहिए, न कि पाठ।

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