Firebase SQL Connect सेवा के तीन मुख्य कॉम्पोनेंट होते हैं:
- PostgreSQL का डेटाबेस, जिसमें अपना SQL स्कीमा होता है
- SQL Connect ऐप्लिकेशन स्कीमा (आपकी
.gqlफ़ाइलों में बताया गया है) - कई कनेक्टर (
.gqlफ़ाइलों में बताए गए औरconnector.yamlफ़ाइलों में कॉन्फ़िगर किए गए).
एसक्यूएल स्कीमा, आपके डेटा का सोर्स ऑफ़ ट्रुथ होता है. SQL Connect स्कीमा से, आपके कनेक्टर उस डेटा को देख सकते हैं. साथ ही, कनेक्टर उन एपीआई के बारे में बताते हैं जिनका इस्तेमाल करके आपके क्लाइंट उस डेटा को ऐक्सेस कर सकते हैं.
सीएलआई की मदद से SQL Connect सेवा को डिप्लॉय करने पर, आपको SQL स्कीमा माइग्रेट करना होगा. इसके बाद, SQL Connect स्कीमा अपडेट करना होगा. इसके बाद, आपको अपने हर कनेक्टर को अपडेट करना होगा.
डिप्लॉयमेंट से जुड़े ज़रूरी कॉन्सेप्ट
डिप्लॉयमेंट को पूरी तरह से समझने के लिए, स्कीमा और कनेक्टर के बारे में मुख्य कॉन्सेप्ट जानना ज़रूरी है.
स्कीमा डिप्लॉयमेंट
SQL Connect स्कीमा को डिप्लॉय करने से, आपके Cloud SQL डेटाबेस के SQL स्कीमा पर असर पड़ता है. SQL Connect की मदद से, डिप्लॉयमेंट के दौरान अपने स्कीमा माइग्रेट किए जा सकते हैं. इससे कोई फ़र्क़ नहीं पड़ता कि आपको नए डेटाबेस के साथ काम करना है या मौजूदा डेटाबेस को बिना किसी नुकसान के अडैप्ट करना है.
SQL Connect स्कीमा माइग्रेशन में, स्कीमा की पुष्टि करने के दो अलग-अलग मोड होते हैं: सटीक और कंपैटिबल.
स्ट्रिक्ट मोड की पुष्टि के लिए, यह ज़रूरी है कि डेटाबेस स्कीमा, ऐप्लिकेशन स्कीमा से पूरी तरह से मेल खाए. इसके बाद ही, ऐप्लिकेशन स्कीमा को अपडेट किया जा सकता है. आपकी SQL Connect स्कीमा में इस्तेमाल नहीं की गई टेबल या कॉलम, डेटाबेस से मिटा दिए जाएंगे.
साथ काम करने वाले मोड की पुष्टि करने के लिए, यह ज़रूरी है कि डेटाबेस स्कीमा, ऐप्लिकेशन स्कीमा के साथ काम करता हो. इसके बाद ही, ऐप्लिकेशन स्कीमा को अपडेट किया जा सकता है. स्कीमा, टेबल या कॉलम हटाने वाले किसी भी अन्य बदलाव को करना ज़रूरी नहीं है.
इसका मतलब है कि स्कीमा माइग्रेशन का असर सिर्फ़ उन टेबल और कॉलम पर पड़ता है जिन्हें आपके ऐप्लिकेशन स्कीमा में रेफ़रंस दिया गया है. आपके डेटाबेस में मौजूद ऐसे एलिमेंट जिनमें आपके ऐप्लिकेशन स्कीमा का इस्तेमाल नहीं किया जाता है उनमें कोई बदलाव नहीं किया जाता. इसलिए, डिप्लॉयमेंट के बाद आपके डेटाबेस में ऐसी चीज़ें मौजूद हो सकती हैं जिनका इस्तेमाल नहीं किया गया है:
- स्कीमा
- टेबल
- कॉलम
कनेक्टर डिप्लॉयमेंट
SQL Connect क्वेरी और म्यूटेशन, क्लाइंट कोड से सबमिट नहीं किए जाते और सर्वर पर एक्ज़ीक्यूट किए जाते हैं. इसके बजाय, जब इन्हें डिप्लॉय किया जाता है, तो ये SQL Connect ऑपरेशन सर्वर पर सेव किए जाते हैं. जैसे, Cloud Functions. इसका मतलब है कि डिप्लॉयमेंट से मौजूदा उपयोगकर्ताओं के लिए समस्या हो सकती है.
SQL Connect, कनेक्टर के अपडेट में हुए बड़े बदलावों के विश्लेषण को Firebase CLI में इंटिग्रेट करता है.
सीएलआई, आपके स्कीमा के हिसाब से हर कनेक्टर में हुए बदलावों का विश्लेषण करता है. साथ ही, कनेक्टर में हुए ऐसे बदलावों के बारे में आकलन के मैसेज जारी करता है जिनसे क्लाइंट के व्यवहार में बदलाव हो सकता है (मैसेज चेतावनी वाले होते हैं) या क्लाइंट कोड के पिछले वर्शन काम नहीं कर सकते या काम नहीं करेंगे (मैसेज काम न करने वाले होते हैं).
उदाहरण के लिए:
- कनेक्टर में किए गए ऐसे बदलावों से क्लाइंट के व्यवहार में बदलाव हो सकता है. जैसे,
@retiredस्कीमा एनोटेशन के बिना किसी क्वेरी से null वैल्यू वाले फ़ील्ड को हटाना. - कनेक्टर में ऐसे बदलाव किए जा सकते हैं जिनसे क्लाइंट के काम में रुकावट आ सकती है. जैसे, डिफ़ॉल्ट वैल्यू के बिना, नल वैल्यू वाले ऑपरेशन वैरिएबल को नॉन-नल में बदलना या किसी फ़ील्ड के डेटा टाइप को किसी ऐसे टाइप में बदलना जो काम नहीं करता (जैसे,
StringसेInt).
चेतावनी और उल्लंघन के लेवल की स्थितियों की ज़्यादा बड़ी सूची, सीएलआई की रेफ़रंस गाइड में दी गई है.
डिप्लॉयमेंट के वर्कफ़्लो का पालन करना
SQL Connect प्रोजेक्ट पर, लोकल प्रोजेक्ट डायरेक्ट्री और Firebase कंसोल, दोनों में काम किया जा सकता है.
डेटा को डिप्लॉय करने के लिए सुझाए गए फ़्लो में ये शामिल हैं:
firebase dataconnect:services:listकी मदद से, फ़िलहाल डिप्लॉय किए गए स्कीमा और कनेक्टर की सूची बनाना.- स्कीमा अपडेट मैनेज करना.
firebase dataconnect:sql:diffकी मदद से, अपने Cloud SQL डेटाबेस और लोकल SQL Connect स्कीमा के बीच SQL स्कीमा में अंतर देखें.- अगर ज़रूरी हो, तो
dataconnect:sql:migrateका इस्तेमाल करके एसक्यूएल स्कीमा माइग्रेट करें.
firebase deployचलाकर, स्कीमा और कनेक्ट डिप्लॉयमेंट करना. ऐसा सिर्फ़ अपने स्कीमा, सिर्फ़ अपने कनेक्टर या संसाधनों के कॉम्बिनेशन के लिए किया जा सकता है.
SQL Connect संसाधनों को डिप्लॉय और मैनेज करना
डिप्लॉयमेंट करने से पहले, प्रोडक्शन रिसॉर्स की पुष्टि करना एक अच्छा तरीका है.
firebase dataconnect:services:listलोकल प्रोजेक्ट डायरेक्ट्री में काम करते समय, आम तौर पर आपको firebase deploy कमांड का इस्तेमाल करना होगा. इससे अपने स्कीमा और कनेक्टर को प्रोडक्शन में डिप्लॉय किया जा सकेगा. साथ ही, आपको इंटरैक्टिव फ़ीडबैक भी मिलेगा.
deploy कमांड का इस्तेमाल करके, --only dataconnect फ़्लैग की मदद से, अपने प्रोजेक्ट में SQL Connect डिप्लॉयमेंट को अन्य प्रॉडक्ट से अलग किया जा सकता है.
सामान्य डिप्लॉयमेंट
firebase deploy --only dataconnectइस सामान्य डिप्लॉयमेंट में, Firebase CLI आपके स्कीमा और कनेक्टर को डिप्लॉय करने की कोशिश करता है.
इससे यह पुष्टि की जाती है कि नया स्कीमा, किसी भी मौजूदा कनेक्टर को नहीं तोड़ रहा है. बड़े बदलाव करते समय, सबसे सही तरीके अपनाएं.
यह भी पुष्टि करता है कि एसक्यूएल स्कीमा पहले ही माइग्रेट हो गया है. इसके बाद ही, यह SQL Connect स्कीमा को अपडेट करता है. अगर ऐसा नहीं होता है, तो यह आपको स्कीमा माइग्रेट करने के लिए ज़रूरी चरणों के बारे में अपने-आप सूचना देता है.
--force फ़्लैग डिप्लॉयमेंट
firebase deploy --only dataconnect --forceअगर आपको कनेक्टर या एसक्यूएल स्कीमा की पुष्टि से जुड़ी कोई समस्या नहीं है, तो उन्हें अनदेखा करने के लिए, --force के साथ कमांड को फिर से चलाया जा सकता है.
--force डिप्लॉय करने पर, यह अब भी जांच करता है कि SQL स्कीमा, SQL Connect स्कीमा से मेल खाता है या नहीं. साथ ही, यह मेल न खाने पर चेतावनी देता है और प्रॉम्प्ट दिखाता है.
चुने गए संसाधनों को डिप्लॉय करना
ज़्यादा कंट्रोल के साथ डिप्लॉय करने के लिए, --only फ़्लैग के साथ serviceId आर्ग्युमेंट का इस्तेमाल करें. किसी सेवा के लिए, सिर्फ़ स्कीमा में किए गए बदलावों को डिप्लॉय करने के लिए:
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]इंटरैक्टिव एनवायरमेंट में, एसक्यूएल माइग्रेशन स्टेटमेंट और कार्रवाई के लिए प्रॉम्प्ट दिखाए जाते हैं.
स्ट्रिक्ट या कंपैटिबल मोड में माइग्रेट करना
नए प्रोजेक्ट में, डिफ़ॉल्ट स्कीमा की पुष्टि करने का मोड लागू होता है. 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 कॉन्फ़िगरेशन फ़ाइल रेफ़रंस देखें.