एक Firebase SQL Connect सेवा के तीन मुख्य कॉम्पोनेंट होते हैं:
- PostgreSQL का डेटाबेस, जिसमें अपना SQL स्कीमा होता है
- एक SQL Connect ऐप्लिकेशन स्कीमा (आपकी
.gqlफ़ाइलों में बताया गया) - कई कनेक्टर (आपकी
.gqlफ़ाइलों में बताए गए,connector.yamlफ़ाइलों में कॉन्फ़िगर किए गए).
SQL स्कीमा, आपके डेटा का सोर्स ऑफ़ ट्रुथ होता है. SQL Connect स्कीमा से, आपके कनेक्टर उस डेटा को देख पाते हैं. कनेक्टर, उन एपीआई के बारे में बताते हैं जिनका इस्तेमाल करके, आपके क्लाइंट उस डेटा को ऐक्सेस कर सकते हैं.
सीएलआई की मदद से, SQL Connect सेवा को डिप्लॉय करने पर, आपका SQL स्कीमा माइग्रेट हो जाएगा. इसके बाद, आपका SQL Connect स्कीमा अपडेट हो जाएगा. फिर, आपके हर कनेक्टर को अपडेट किया जाएगा.
डिप्लॉयमेंट से जुड़े अहम कॉन्सेप्ट
डिप्लॉयमेंट को पूरी तरह से समझने के लिए, स्कीमा और कनेक्टर के बारे में अहम कॉन्सेप्ट को समझना ज़रूरी है.
स्कीमा डिप्लॉयमेंट
SQL Connect स्कीमा को डिप्लॉय करने से, आपके Cloud SQL डेटाबेस के SQL स्कीमा पर असर पड़ता है. SQL Connect डिप्लॉयमेंट के दौरान आपके स्कीमा को माइग्रेट करने में मदद करता है. भले ही, आप किसी नए डेटाबेस के साथ काम कर रहे हों या आपको किसी मौजूदा डेटाबेस को बिना डेटा खोए अडैप्ट करना हो.
SQL Connect स्कीमा माइग्रेशन में, स्कीमा की पुष्टि करने के दो अलग-अलग मोड होते हैं: स्ट्रिक्ट और कंपैटिबल.
स्ट्रिक्ट मोड में, पुष्टि करने के लिए ज़रूरी है कि डेटाबेस स्कीमा, ऐप्लिकेशन स्कीमा से पूरी तरह मैच करे. इसके बाद ही, ऐप्लिकेशन स्कीमा को अपडेट किया जा सकता है. SQL Connect स्कीमा में इस्तेमाल न की जाने वाली टेबल या कॉलम, डेटाबेस से मिटा दिए जाएंगे.SQL Connect
कंपैटिबल मोड में, पुष्टि करने के लिए ज़रूरी है कि डेटाबेस स्कीमा, ऐप्लिकेशन स्कीमा के साथ काम करे. इसके बाद ही, ऐप्लिकेशन स्कीमा को अपडेट किया जा सकता है. स्कीमा, टेबल या कॉलम को हटाने वाले अन्य बदलाव, ज़रूरी नहीं हैं.
कंपैटिबल का मतलब है कि स्कीमा माइग्रेशन का असर सिर्फ़ उन टेबल और कॉलम पर पड़ता है जिनका रेफ़रंस, आपके ऐप्लिकेशन स्कीमा में दिया गया है. आपके डेटाबेस में मौजूद ऐसे एलिमेंट जिनमें आपके ऐप्लिकेशन स्कीमा का इस्तेमाल नहीं किया जाता, उनमें कोई बदलाव नहीं किया जाता. इसलिए, डिप्लॉयमेंट के बाद, आपके डेटाबेस में ऐसे एलिमेंट हो सकते हैं जिनका इस्तेमाल नहीं किया जाता:
- स्कीमा
- टेबल
- कॉलम
कनेक्टर डिप्लॉयमेंट
SQL Connect क्वेरी और म्यूटेशन, क्लाइंट कोड से सबमिट नहीं किए जाते इन्हें सर्वर पर एक्ज़ीक्यूट किया जाता है. इसके बजाय, डिप्लॉय करने पर, ये SQL Connect ऑपरेशन सर्वर पर सेव हो जाते हैं. जैसे, Cloud Functions. इसका मतलब है कि डिप्लॉयमेंट की वजह से, मौजूदा उपयोगकर्ताओं को समस्या हो सकती है.
SQL Connect Firebase सीएलआई में, कनेक्टर के अपडेट में होने वाले ऐसे बदलावों के विश्लेषण को इंटिग्रेट करता है जिनकी वजह से, मौजूदा उपयोगकर्ताओं को समस्या हो सकती है.Firebase
सीएलआई, आपके स्कीमा के हिसाब से हर कनेक्टर में किए गए बदलावों का विश्लेषण करता है. साथ ही, कनेक्टर में किए गए ऐसे बदलावों के बारे में आकलन के मैसेज जारी करता है जिनकी वजह से क्लाइंट की गतिविधियों में बदलाव हो सकता है (ये मैसेज, चेतावनी के तौर पर होते हैं) या क्लाइंट कोड के पिछले वर्शन में समस्या आ सकती है या आएगी (ये मैसेज, समस्या के तौर पर होते हैं).
उदाहरण के लिए:
- कनेक्टर में किए गए ऐसे बदलाव जिनकी वजह से, क्लाइंट की गतिविधियों में बदलाव हो सकता है. इनमें,
@retiredस्कीमा एनोटेशन के बिना, किसी क्वेरी से नल हो सकने वाले फ़ील्ड को हटाना शामिल है. - कनेक्टर में किए गए ऐसे बदलाव जिनकी वजह से, क्लाइंट को समस्या आ सकती है या आएगी. इनमें, डिफ़ॉल्ट वैल्यू के बिना, नल हो सकने वाले ऑपरेशन वैरिएबल को नॉन-नल में बदलना या किसी फ़ील्ड के डेटा टाइप को किसी ऐसे टाइप में बदलना जो काम नहीं करता (जैसे,
StringसेInt).
चेतावनी के तौर पर और समस्या के तौर पर मिलने वाले मैसेज के ज़्यादा उदाहरण, सीएलआई के रेफ़रंस गाइड में दिए गए हैं.
डिप्लॉयमेंट के वर्कफ़्लो का पालन करना
किसी SQL Connect प्रोजेक्ट पर, लोकल प्रोजेक्ट डायरेक्ट्री और Firebase कंसोल, दोनों में काम किया जा सकता है.
डिप्लॉयमेंट के लिए सुझाया गया फ़्लो यह है:
firebase dataconnect:services:listकी मदद से, फ़िलहाल डिप्लॉय किए गए स्कीमा और कनेक्टर की सूची बनाना.- स्कीमा के अपडेट मैनेज करना.
- `
firebase dataconnect:sql:diff` की मदद से, Cloud SQL डेटाबेस और लोकल SQL Connect स्कीमा के बीच, SQL स्कीमा के अंतर की जांच करना. - अगर ज़रूरी हो, तो
dataconnect:sql:migrateकी मदद से, SQL स्कीमा माइग्रेशन करना.
- `
firebase deployको चलाकर, स्कीमा और कनेक्टर डिप्लॉयमेंट करना. यह सिर्फ़ आपके स्कीमा, सिर्फ़ आपके कनेक्टर या संसाधनों के कॉम्बिनेशन के लिए किया जा सकता है.
संसाधन डिप्लॉय और मैनेज करनाSQL Connect
डिप्लॉयमेंट करने से पहले, प्रोडक्शन के संसाधनों की पुष्टि करना अच्छा होता है.
firebase dataconnect:services:listलोकल प्रोजेक्ट डायरेक्ट्री में काम करते समय, आम तौर पर firebase deploy कमांड का इस्तेमाल करके, अपने स्कीमा और कनेक्टर को प्रोडक्शन में डिप्लॉय किया जाता है. साथ ही, इंटरैक्टिव तरीके से फ़ीडबैक भी मिलता है.
किसी भी deploy कमांड का इस्तेमाल करके, --only dataconnect फ़्लैग की मदद से,
SQL Connect डिप्लॉयमेंट को अपने प्रोजेक्ट में मौजूद अन्य प्रॉडक्ट से अलग किया जा सकता है.
सामान्य डिप्लॉयमेंट
firebase deploy --only dataconnectइस सामान्य डिप्लॉयमेंट में, Firebase सीएलआई आपके स्कीमा और कनेक्टर को डिप्लॉय करने की कोशिश करता है.
यह पुष्टि करता है कि नया स्कीमा, मौजूदा किसी भी कनेक्टर के साथ काम करता है. ऐसे बदलाव करते समय सबसे सही तरीके अपनाएं जिनकी वजह से, मौजूदा उपयोगकर्ताओं को समस्या हो सकती है.
यह भी पुष्टि करता है कि SQL Connect स्कीमा को अपडेट करने से पहले, SQL स्कीमा माइग्रेट हो गया हो. अगर ऐसा नहीं है, तो यह स्कीमा माइग्रेट करने के लिए ज़रूरी चरणों के बारे में आपको अपने-आप बताता है.
--force फ़्लैग डिप्लॉयमेंट
firebase deploy --only dataconnect --forceअगर आपको कनेक्टर या SQL स्कीमा की पुष्टि करने से जुड़ी कोई समस्या नहीं है, तो उन्हें नज़रअंदाज़ करने के लिए, --force के साथ कमांड को फिर से चलाया जा सकता है.
--force डिप्लॉयमेंट में अब भी यह जांच की जाती है कि SQL स्कीमा, SQL Connect स्कीमा से मैच करता है या नहीं. साथ ही, यह स्कीमा के साथ काम न करने की चेतावनी देता है और प्रॉम्प्ट दिखाता है.
चुने गए संसाधन डिप्लॉय करना
ज़्यादा सटीक कंट्रोल के साथ डिप्लॉय करने के लिए, serviceId आर्ग्युमेंट के साथ --only फ़्लैग का इस्तेमाल करें. किसी खास सेवा के लिए, सिर्फ़ स्कीमा में किए गए बदलावों को डिप्लॉय करने के लिए:
firebase deploy --only dataconnect:serviceId:schemaकिसी तय कनेक्टर और सेवा के लिए, सभी संसाधन भी डिप्लॉय किए जा सकते हैं.
firebase deploy --only dataconnect:serviceId:connectorIdआखिर में, किसी एक सेवा के लिए स्कीमा और सभी कनेक्टर डिप्लॉय किए जा सकते हैं.
firebase deploy --only dataconnect:serviceIdडिप्लॉयमेंट को रोल बैक करना
मैन्युअल तरीके से रोलबैक करने के लिए, अपने कोड का कोई पिछला वर्शन देखें और उसे डिप्लॉय करें. अगर ओरिजनल डिप्लॉयमेंट में, ऐसे बदलाव शामिल थे जिनकी वजह से मौजूदा उपयोगकर्ताओं को समस्या हो सकती है, तो मिटाए गए किसी भी डेटा को पूरी तरह से रिकवर नहीं किया जा सकेगा.
डेटाबेस स्कीमा माइग्रेट करना
अगर आप तेज़ी से प्रोटोटाइप बना रहे हैं, स्कीमा के साथ प्रयोग कर रहे हैं, और आपको पता है कि स्कीमा में किए गए बदलावों की वजह से, मौजूदा उपयोगकर्ताओं को समस्या हो सकती है, तो SQL Connect के टूल का इस्तेमाल करके, बदलावों की पुष्टि की जा सकती है. साथ ही, यह भी देखा जा सकता है कि अपडेट कैसे किए जा रहे हैं.
SQL स्कीमा में किए गए बदलावों की तुलना करना
बदलावों की पुष्टि की जा सकती है:
firebase dataconnect:sql:diffसेवाओं की कॉमा लगाकर अलग की गई सूची पास की जा सकती है.
कमांड, किसी सेवा के लोकल स्कीमा की तुलना, उससे जुड़े Cloud SQL डेटाबेस के मौजूदा स्कीमा से करता है. अगर कोई अंतर होता है, तो यह उन SQL कमांड को प्रिंट करता है जिन्हें उस अंतर को ठीक करने के लिए चलाया जाएगा
परिवर्तन लागू करें
जब आपको लगे कि स्कीमा में किए गए बदलावों को Cloud SQL इंस्टेंस पर डिप्लॉय किया जा सकता है, तब firebase dataconnect:sql:migrate कमांड जारी करें. आपको बदलावों को स्वीकार करने के लिए कहा जाएगा.
firebase dataconnect:sql:migrate [serviceId]इंटरैक्टिव एनवायरमेंट में, SQL माइग्रेशन स्टेटमेंट और ऐक्शन प्रॉम्प्ट दिखते हैं.
स्ट्रिक्ट या कंपैटिबल मोड में माइग्रेट करना
किसी नए प्रोजेक्ट में, डिफ़ॉल्ट स्कीमा की पुष्टि करने का मोड
लागू होता है. migrate कमांड का काम, डेटाबेस स्कीमा में किए गए उन सभी बदलावों को लागू करना है जो आपके ऐप्लिकेशन स्कीमा के लिए ज़रूरी हैं. इसके बाद, आपसे उन वैकल्पिक कार्रवाइयों को स्वीकार करने के लिए कहा जाएगा जिनकी मदद से, स्कीमा, टेबल या कॉलम को हटाया जा सकता है. ऐसा इसलिए किया जाता है, ताकि आपका डेटाबेस स्कीमा, आपके ऐप्लिकेशन स्कीमा से पूरी तरह मैच करे.
dataconnect.yaml फ़ाइल में बदलाव करके, इस सेटिंग को बदला जा सकता है.
schemaValidation कुंजी से टिप्पणी हटाएं और COMPATIBLE के तौर पर एलान करें, ताकि माइग्रेशन में सिर्फ़ ज़रूरी बदलाव लागू किए जाएं.
schemaValidation: "COMPATIBLE"
इसके अलावा, सेटिंग को STRICT पर सेट करें, ताकि स्कीमा में किए गए सभी बदलाव लागू हों और आपका डेटाबेस स्कीमा, आपके ऐप्लिकेशन स्कीमा से मैच करे.
schemaValidation: "STRICT"
ज़्यादा जानकारी के लिए, SQL Connect सीएलआई का रेफ़रंस देखें.
कनेक्टर अपडेट करना
firebase deploy चलाने पर, सीएलआई, लागू होने वाले कनेक्टर का अपडेट शुरू करता है. साथ ही, चेतावनी के तौर पर (क्लाइंट की गतिविधियों पर असर पड़ सकता है) और समस्या के तौर पर (संभव है या पक्का है कि समस्या आएगी) मिलने वाले आकलन के मैसेज जारी करता है.
सीएलआई की मदद से, कनेक्टर के अपडेट मैनेज करना
सीएलआई, इंटरैक्टिव मोड और नॉन-इंटरैक्टिव मोड में अलग-अलग तरीके से काम करता है.
जैसा कि आपको उम्मीद होगी, इंटरैक्टिव मोड में, सीएलआई आपसे सभी मैसेज स्वीकार करने के लिए कहता है. --force फ़्लैग की मदद से, कनेक्टर के डिप्लॉयमेंट को ओवरराइड और फ़ोर्स किया जा सकता है.
# Prompts for acceptance for any warning-level or breaking-level changes prior # to deploying connectors. firebase deploy --only dataconnect# Will deploy connectors without prompting. firebase deploy --only dataconnect --force
नॉन-इंटरैक्टिव मोड में, सीएलआई आपके कनेक्टर को तब तक डिप्लॉय करेगा, जब तक समस्या के तौर पर मिलने वाले आकलन नहीं होते. ऐसा न होने पर, आपकी स्क्रिप्ट, समस्या के तौर पर मिलने वाले बदलावों के लॉग के साथ बंद हो जाएगी. --force फ़्लैग सेट करके, ओवरराइड और डिप्लॉय किया जा सकता है.
# Will deploy connectors with warning-level changes. If any breaking changes # are present, the deploy will fail and output any breaking changes firebase deploy --only dataconnect --non-interactive# Will deploy the connectors from the previous step, if the same issues are present. firebase deploy --only dataconnect --non-interactive --force
ज़्यादा जानकारी के लिए, सीएलआई का रेफ़रंस गाइड देखें.
स्कीमा और कनेक्टर मैनेज करने के सबसे सही तरीके
Firebase, SQL Connect प्रोजेक्ट में कुछ तरीके अपनाने का सुझाव देता है.
ऐसे बदलाव कम करना जिनकी वजह से, मौजूदा उपयोगकर्ताओं को समस्या हो सकती है
- Firebase का सुझाव है कि SQL Connect स्कीमा और कनेक्टर फ़ाइलों को सोर्स कंट्रोल में रखें.
- जब भी हो सके, ऐसे बदलाव करने से बचें जिनकी वजह से, मौजूदा उपयोगकर्ताओं को समस्या हो सकती है. ऐसे बदलावों के कुछ सामान्य उदाहरण यहां दिए गए हैं:
- अपने स्कीमा से कोई फ़ील्ड हटाना
- अपने स्कीमा में, नल हो सकने वाले फ़ील्ड को नॉन-नल बनाना (जैसे,
Int->Int!) - अपने स्कीमा में किसी फ़ील्ड का नाम बदलना.
- अगर आपको अपने स्कीमा से कोई फ़ील्ड हटाना है, तो असर को कम करने के लिए, इसे कुछ डिप्लॉयमेंट में बांटने पर विचार करें:
- सबसे पहले, अपने कनेक्टर में फ़ील्ड के सभी रेफ़रंस हटाएं और बदलाव को डिप्लॉय करें.
- इसके बाद, नए जनरेट किए गए एसडीके का इस्तेमाल करने के लिए, अपने ऐप्लिकेशन अपडेट करें.
- आखिर में, अपने स्कीमा की
.gqlफ़ाइल में फ़ील्ड हटाएं, अपना SQL स्कीमा माइग्रेट करें, और एक बार फिर से डिप्लॉय करें.
नए डेटाबेस के साथ काम करते समय, स्ट्रिक्ट मोड का इस्तेमाल करना
अगर SQL Connect का इस्तेमाल किसी नए डेटाबेस के साथ किया जा रहा है और ऐप्लिकेशन स्कीमा को ऐक्टिव तौर पर
डेवलप किया जा रहा है, तो dataconnect.yaml में schemaValidation: "STRICT" तय किया जा सकता है. इससे यह पक्का किया जा सकेगा कि डेटाबेस स्कीमा, ऐप्लिकेशन स्कीमा के साथ पूरी तरह से
मैच करे.
इससे यह पक्का किया जा सकेगा कि वैकल्पिक बदलाव भी लागू हों.
डेटाबेस में प्रोडक्शन डेटा होने पर, कंपैटिबल मोड का इस्तेमाल करना
अगर किसी ऐसे डेटाबेस में बदलाव किए जा रहे हैं जिसमें प्रोडक्शन डेटा है, तो हमारा सुझाव है कि स्कीमा माइग्रेशन को कंपैटिबल मोड में एक्ज़ीक्यूट करें. इससे यह पक्का किया जा सकेगा कि मौजूदा डेटा न मिटे. schemaValidation: "COMPATIBLE"
को आपके dataconnect.yaml में तय किया जा सकता है.
कंपैटिबल मोड में, आपके डेटाबेस में सिर्फ़ स्कीमा माइग्रेशन के ज़रूरी बदलाव लागू किए जाते हैं.
DROP SCHEMA,DROP TABLE, औरDROP COLUMNको वैकल्पिक स्टेटमेंट माना जाता है. इन्हें आपके प्लान के लिए जनरेट नहीं किया जाएगा. भले ही, आपके डेटाबेस स्कीमा में ऐसे स्कीमा, टेबल या कॉलम शामिल हों जिन्हें आपके ऐप्लिकेशन स्कीमा में तय नहीं किया गया है.- अगर आपके डेटाबेस टेबल में कोई ऐसा नॉन-नल कॉलम शामिल है जो आपके ऐप्लिकेशन स्कीमा में शामिल नहीं है, तो
NOT NULLकंस्ट्रेंट हटा दिया जाएगा. इससे, आपके तय किए गए कनेक्टर की मदद से, टेबल में डेटा जोड़ा जा सकेगा.
आगे क्या करना है?
- जनरेट किए गए एसडीके की मदद से डेवलप किए गए क्लाइंट कोड को डिप्लॉय और मैनेज करने के बारे में, Android, iOS, वेब, और Flutter की गाइड में बताया गया है.
- डिप्लॉयमेंट टूलिंग के बारे में ज़्यादा जानकारी के लिए, SQL Connect सीएलआई का रेफ़रंस और SQL Connect कॉन्फ़िगरेशन फ़ाइल का रेफ़रंस देखें.