Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

डेटाबेस में JSON संग्रहीत करना बनाम प्रत्येक कुंजी के लिए एक नया कॉलम रखना

4 जून 2017 को अपडेट किया गया

यह देखते हुए कि इस प्रश्न/उत्तर ने कुछ लोकप्रियता हासिल की है, मुझे लगा कि यह एक अद्यतन के लायक है।

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

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

उस ने कहा, कुछ अनुप्रयोग पूरी तरह से संबंधपरक या दस्तावेज़-उन्मुख हैं। अधिकांश अनुप्रयोगों में दोनों का कुछ मिश्रण होता है। यहां कुछ उदाहरण दिए गए हैं जहां मैंने व्यक्तिगत रूप से JSON को एक रिलेशनल डेटाबेस में उपयोगी पाया है:

  • किसी संपर्क के लिए ईमेल पते और फ़ोन नंबर संग्रहीत करते समय, जहां उन्हें JSON सरणी में मानों के रूप में संग्रहीत करना कई अलग-अलग तालिकाओं की तुलना में प्रबंधित करना बहुत आसान होता है

  • मनमानी कुंजी/मान उपयोगकर्ता प्राथमिकताओं को सहेजना (जहां मान बूलियन, टेक्स्टुअल या संख्यात्मक हो सकता है, और आप अलग-अलग डेटा प्रकारों के लिए अलग कॉलम नहीं रखना चाहते हैं)

  • कॉन्फ़िगरेशन डेटा संग्रहीत करना जिसमें कोई परिभाषित स्कीमा नहीं है (यदि आप Zapier, या IFTTT बना रहे हैं और प्रत्येक एकीकरण के लिए कॉन्फ़िगरेशन डेटा संग्रहीत करने की आवश्यकता है)

मुझे यकीन है कि अन्य भी हैं, लेकिन ये कुछ त्वरित उदाहरण हैं।

मूल उत्तर

यदि आप वास्तव में बिना किसी सीमा (मनमाने ढंग से दस्तावेज़ आकार सीमा के अलावा) के रूप में कई फ़ील्ड जोड़ने में सक्षम होना चाहते हैं, तो मोंगोडीबी जैसे नोएसक्यूएल समाधान पर विचार करें।

रिलेशनल डेटाबेस के लिए:प्रति मान एक कॉलम का उपयोग करें। एक कॉलम में JSON ब्लॉब डालने से क्वेरी करना लगभग असंभव हो जाता है (और जब आप वास्तव में काम करने वाली क्वेरी पाते हैं तो दर्द धीमा हो जाता है)।

संबंधपरक डेटाबेस अनुक्रमण करते समय डेटा प्रकारों का लाभ उठाते हैं, और इन्हें सामान्यीकृत के साथ कार्यान्वित करने का इरादा है संरचना।

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटा डेटा लोड करें आसानी से YYYYMMDD को YYYY-MM-DD में कनवर्ट करें?

  2. MySQL:रैंडम एंट्री का चयन करें, लेकिन कुछ प्रविष्टियों की ओर वजन

  3. OSX 10.6 में Python और Django के साथ MySQLdb का उपयोग कैसे करें?

  4. MySQL डेटाबेस से छवियों को कैसे पुनर्प्राप्त करें और एक HTML टैग में प्रदर्शित करें

  5. मैं MySQL का समय क्षेत्र कैसे निर्धारित करूं?