JSON इरादे के रूप में
MySQL में JSON के साथ काम करने का कोई तरीका नहीं है। कुछ डीबीएमएस जेएसओएन का समर्थन कर सकते हैं, लेकिन यह सवाल से बाहर है, और इसके अलावा, इस तरह के "समर्थन" का कोई भी प्रकार केवल कुछ जेएसओएन-विशिष्ट संचालन करने के बारे में है, लेकिन आपके आर्किटेक्चर को मॉडलिंग करने के बारे में नहीं है (और वे दो चीजें पूरी तरह से अलग हैं) अधिक , पूर्ण अर्थों में, MySQL के लिए मॉडल अवधारणा (अर्थात संबंध) JSON से भिन्न है:एक रिलेशनल DBMS के रूप में, यह रिलेशनल डेटा मॉडल , और JSON पूरी तरह से अलग प्रारूप है। यदि आप स्ट्रिंग फ़ंक्शंस का उपयोग नहीं करते हैं, तो आप इसे सादे स्ट्रिंग मान के रूप में संग्रहीत करेंगे, इस प्रकार, किसी अन्य तरीके से इसके साथ कुछ भी करना असंभव है। इसलिए JSON के साथ काम करते हुए भी आप ऐसा करेंगे जो संबंधपरक मॉडल के अंदर नहीं है, इस प्रकार, संबंधपरक विशेषताओं को बनाए रखना संभव नहीं होगा, जैसे कि संदर्भात्मक अखंडता, उदाहरण के लिए।
समाधान के विकल्प
आपके पास कई विकल्प हैं:
- पोस्टग्री SQL में माइग्रेट करें क्योंकि इसने json के लिए समर्थन बढ़ाया है, संस्करण 9.4 के बाद से यह jsonb और यह और भी तेज़ है। यह सबसे अच्छा विकल्प हो सकता है क्योंकि यह RDBMS है और इसलिए माइग्रेशन वास्तव में दस्तावेज़-उन्मुख DBMS की तरह कठिन नहीं होगा।
- या अब मोंगो में माइग्रेट करें (यदि यह आपका इरादा है), इससे पहले कि बहुत देर हो जाए। ध्यान रखें, कि मोंगो आरडीबीएमएस की तुलना में पूरी तरह से अलग चीज है, यह दस्तावेज़-उन्मुख है। मुझे लगता है कि यह आपके प्रोजेक्ट और आपके क्लाइंट दोनों के लिए सबसे अच्छा विकल्प है (और आपका काम इसे समझाना होगा)
- संपूर्ण आर्किटेक्चर बदलें ताकि आप JSON ऑब्जेक्ट्स को स्टोर न करें और सामान्यीकृत (रिलेशनशिप डीबी के संदर्भ में) संस्थाओं के साथ काम करेंगे। इसका मतलब है - हाँ, सभी कोड की पूरी रीफैक्टरिंग, सभी संबंधों को बदलना आदि। वास्तविक स्थिति में यह सिर्फ सैद्धांतिक विकल्प है, इसके लिए आपको न तो समय दिया जाएगा और न ही पैसा।
- MySQL के लिए अपनी स्वयं की JSON लाइब्रेरी लागू करें। क्या यह मुश्किल है? निर्भर करता है कि आप अपने JSON के साथ क्या करेंगे, लेकिन JSON
सार्वजनिक प्रारूप है, इसलिए आपको पता चल जाएगा कि क्या करना है, कम से कम। आप इसे UDF
के रूप में कर सकते हैं। या उपयोगकर्ता-भूमि पर (इसलिए
CREATE FUNCTION
बयान)। इसके लिए निश्चित रूप से विशिष्ट कौशल और समय की आवश्यकता होगी। बुरी चीजें:बग। यहां तक कि अगर आप अपने आर्किटेक्चर को फिर से तैयार करने या मोंगो में माइग्रेट करने की तुलना में तेजी से उन कार्यों को बनाने में सक्षम होंगे, तो आप कभी भी उन कार्यों की गुणवत्ता के बारे में निश्चित नहीं होंगे। उस कोड को मूल रूप से परीक्षण करने का कोई तरीका नहीं है। हालांकि, मैं उपयोगकर्ता-भूमि कार्यों के मामले में संकेत दे सकता हूं - आपmysql-unit
अपने संग्रहीत कोड का परीक्षण करने के लिए, यदि आपका MySQL 5.6 या उच्चतर है (ठीक है, मैंने यह टूल लिखा है, लेकिन.. इसमें बग भी हो सकते हैं)
"मानक" फ़ंक्शन
अंत में, यदि आप MySQL 5.7 चला रहे हैं, तो पूर्व-रिलीज़ JSON फ़ंक्शन - तो, आप कोशिश कर सकते हैं JSON कार्यक्षमता के अल्फा-संस्करण का उपयोग करने के लिए, जो वर्तमान में MySQL 5.7 के लिए मौजूद है। लेकिन मैं (दृढ़ता से) वास्तविक परियोजना में इसका उपयोग करने की अनुशंसा नहीं करता क्योंकि वे कार्य न तो अच्छी तरह से परीक्षण किए गए हैं और न ही पूर्ण हैं। लेकिन, उन फ़ंक्शन को स्थापित करने के लिए, आपको संबंधित पैकेज डाउनलोड करना होगा, फिर उन्हें अपने सर्वर में प्लग करना होगा, जैसे:
CREATE FUNCTION json_append RETURNS string SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_valid RETURNS integer SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_extract RETURNS string SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_replace RETURNS string SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_remove RETURNS string SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_set RETURNS string SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_merge RETURNS string SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_search RETURNS string SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_contains_key RETURNS integer SONAME 'libmy_json_udf.so';
और उसके बाद आप उन्हें आजमा पाएंगे।