Data Connect के स्कीमा और कनेक्टर डिप्लॉय और मैनेज करना

एक Firebase Data Connect सेवा के तीन मुख्य कॉम्पोनेंट होते हैं:

  • PostgreSQL का डेटाबेस, जिसका अपना SQL स्कीमा होता है
  • एक Data Connect ऐप्लिकेशन स्कीमा (आपकी .gql फ़ाइलों में बताया गया)
  • कई कनेक्टर (आपकी .gql फ़ाइलों में बताए गए, connector.yaml फ़ाइलों में कॉन्फ़िगर किए गए).

SQL स्कीमा, आपके डेटा का सोर्स होता है. Data Connect स्कीमा से यह पता चलता है कि आपके कनेक्टर, उस डेटा को कैसे देख सकते हैं. साथ ही, कनेक्टर उन एपीआई के बारे में बताते हैं जिनका इस्तेमाल करके, आपके क्लाइंट उस डेटा को ऐक्सेस कर सकते हैं.

सीएलआई की मदद से, Data Connect सेवा को डिप्लॉय करने पर, आपका SQL स्कीमा माइग्रेट हो जाएगा. इसके बाद, Data Connect स्कीमा अपडेट हो जाएगा. फिर, आपके हर कनेक्टर को अपडेट किया जाएगा.

डिप्लॉयमेंट से जुड़े अहम कॉन्सेप्ट

डिप्लॉयमेंट को पूरी तरह से समझने के लिए, स्कीमा और कनेक्टर के बारे में अहम कॉन्सेप्ट जानना ज़रूरी है.

स्कीमा डिप्लॉयमेंट

Data Connect स्कीमा के डिप्लॉयमेंट का असर, Cloud SQL डेटाबेस के SQL स्कीमा पर पड़ता है. Data Connect डिप्लॉयमेंट के दौरान आपके स्कीमा को माइग्रेट करने में मदद करता है. भले ही, आप किसी नए डेटाबेस के साथ काम कर रहे हों या आपको किसी मौजूदा डेटाबेस को बिना डेटा खोए अडैप्ट करना हो.

Data Connect स्कीमा माइग्रेशन में, स्कीमा की पुष्टि करने के दो अलग-अलग मोड होते हैं: स्ट्रिक्ट और कंपैटिबल.

  • स्ट्रिक्ट मोड में, पुष्टि करने के लिए ज़रूरी है कि डेटाबेस स्कीमा, ऐप्लिकेशन स्कीमा से पूरी तरह मैच करे. इसके बाद ही, ऐप्लिकेशन स्कीमा को अपडेट किया जा सकता है. Data Connect स्कीमा में इस्तेमाल न की जाने वाली सभी टेबल या कॉलम, डेटाबेस से मिटा दिए जाएंगे. Data Connect

  • कंपैटिबल मोड में, पुष्टि करने के लिए ज़रूरी है कि डेटाबेस स्कीमा, ऐप्लिकेशन स्कीमा के साथ काम करे. इसके बाद ही, ऐप्लिकेशन स्कीमा को अपडेट किया जा सकता है. स्कीमा, टेबल या कॉलम को हटाने वाले अन्य बदलाव, ज़रूरी नहीं हैं.

    कंपैटिबल का मतलब है कि स्कीमा माइग्रेशन का असर सिर्फ़ उन टेबल और कॉलम पर पड़ता है जिनका रेफ़रंस, आपके ऐप्लिकेशन स्कीमा में दिया गया है. आपके डेटाबेस में मौजूद ऐसे एलिमेंट जिनमें आपके ऐप्लिकेशन स्कीमा का इस्तेमाल नहीं किया जाता, उनमें कोई बदलाव नहीं किया जाता. इसलिए, डिप्लॉयमेंट के बाद, आपके डेटाबेस में ये चीज़ें मौजूद हो सकती हैं जिनका इस्तेमाल नहीं किया गया है:

    • स्कीमा
    • टेबल
    • कॉलम

कनेक्टर डिप्लॉयमेंट

Data Connect क्वेरी और म्यूटेशन, क्लाइंट कोड से सबमिट नहीं किए जाते इन्हें सर्वर पर एक्ज़ीक्यूट किया जाता है. इसके बजाय, डिप्लॉय किए जाने पर, ये Data Connect ऑपरेशन, सर्वर पर सेव हो जाते हैं. जैसे, Cloud Functions. इसका मतलब है कि डिप्लॉयमेंट की वजह से, मौजूदा उपयोगकर्ताओं को समस्याएं आ सकती हैं.

Data Connect Firebase सीएलआई में, कनेक्टर के अपडेट में होने वाले ऐसे बदलावों के विश्लेषण को इंटिग्रेट करता है जिनकी वजह से समस्याएं आ सकती हैं.Firebase

सीएलआई, आपके स्कीमा के हिसाब से हर कनेक्टर में किए गए बदलावों का विश्लेषण करता है. साथ ही, कनेक्टर में किए गए ऐसे बदलावों के बारे में आकलन के मैसेज जारी करता है जिनकी वजह से क्लाइंट की गतिविधियों में बदलाव हो सकता है (ये मैसेज, चेतावनी के तौर पर होते हैं) या क्लाइंट कोड के पिछले वर्शन में समस्याएं आ सकती हैं या आएंगी (ये मैसेज, समस्याओं के बारे में होते हैं).

उदाहरण के लिए:

  • कनेक्टर में किए गए ऐसे बदलाव जिनकी वजह से क्लाइंट की गतिविधियों में बदलाव हो सकता है. इनमें, @retired स्कीमा एनोटेशन के बिना, किसी क्वेरी से नल हो सकने वाला फ़ील्ड हटाना शामिल है.
  • कनेक्टर में किए गए ऐसे बदलाव जिनकी वजह से क्लाइंट को समस्याएं आ सकती हैं या आएंगी. इनमें, डिफ़ॉल्ट वैल्यू के बिना, नल हो सकने वाले ऑपरेशन वैरिएबल को नॉन-नल में बदलना या किसी फ़ील्ड के डेटा टाइप को किसी ऐसे टाइप में बदलना जो काम नहीं करता (जैसे, String से Int).

चेतावनी के तौर पर और समस्याओं के बारे में बताने वाले परिदृश्यों की ज़्यादा जानकारी, सीएलआई के रेफ़रंस गाइड में दी गई है.

डिप्लॉयमेंट के वर्कफ़्लो का पालन करना

आप किसी Data Connect प्रोजेक्ट पर, स्थानीय प्रोजेक्ट डायरेक्ट्री और Firebase कंसोल, दोनों में काम कर सकते हैं.

डिप्लॉयमेंट के लिए सुझाए गए फ़्लो में ये चरण शामिल हैं:

  1. firebase dataconnect:services:list की मदद से, फ़िलहाल डिप्लॉय किए गए स्कीमा और कनेक्टर की सूची बनाना.
  2. स्कीमा के अपडेट मैनेज करना.
    1. `firebase dataconnect:sql:diff` की मदद से, Cloud SQL डेटाबेस और स्थानीय Data Connect स्कीमा के बीच SQL स्कीमा के अंतर की जांच करना.
    2. अगर ज़रूरी हो, तो dataconnect:sql:migrate की मदद से, SQL स्कीमा माइग्रेशन करना.
  3. firebase deploy चलाकर, स्कीमा और कनेक्टर डिप्लॉय करना. इसके लिए, सिर्फ़ स्कीमा, सिर्फ़ कनेक्टर या संसाधनों के कॉम्बिनेशन का इस्तेमाल किया जा सकता है.

Data Connect संसाधन डिप्लॉय और मैनेज करना

डिप्लॉयमेंट करने से पहले, प्रोडक्शन के संसाधनों की पुष्टि करना अच्छा होता है.

firebase dataconnect:services:list

स्थानीय प्रोजेक्ट डायरेक्ट्री में काम करते समय, आम तौर पर firebase deploy कमांड का इस्तेमाल करके, अपने स्कीमा और कनेक्टर को प्रोडक्शन में डिप्लॉय किया जाता है. इस दौरान, आपको इंटरैक्टिव तरीके से फ़ीडबैक मिलता है.

किसी भी deploy कमांड का इस्तेमाल करके, --only dataconnect फ़्लैग की मदद से, अपने प्रोजेक्ट में Data Connect डिप्लॉयमेंट को अन्य प्रॉडक्ट से अलग किया जा सकता है.

सामान्य डिप्लॉयमेंट

firebase deploy --only dataconnect

इस सामान्य डिप्लॉयमेंट में, Firebase सीएलआई आपके स्कीमा और कनेक्टर को डिप्लॉय करने की कोशिश करता है.

यह पुष्टि करता है कि नया स्कीमा, मौजूदा किसी भी कनेक्टर के साथ काम करता है. ऐसे बदलाव करते समय सबसे सही तरीके अपनाएं जिनकी वजह से समस्याएं आ सकती हैं.

यह भी पुष्टि करता है कि Data Connect स्कीमा को अपडेट करने से पहले, SQL स्कीमा माइग्रेट हो गया हो. अगर ऐसा नहीं है, तो यह स्कीमा माइग्रेट करने के लिए ज़रूरी चरणों के बारे में आपको अपने-आप बताता है.

--force फ़्लैग डिप्लॉयमेंट

firebase deploy --only dataconnect --force

अगर आपको कनेक्टर या SQL स्कीमा की पुष्टि करने की ज़रूरत नहीं है, तो उन्हें नज़रअंदाज़ करने के लिए, --force के साथ कमांड को फिर से चलाया जा सकता है.

--force डिप्लॉयमेंट में अब भी यह जांच की जाती है कि SQL स्कीमा, Data Connect स्कीमा से मैच करता है या नहीं. साथ ही, यह स्कीमा के काम न करने की चेतावनी देता है और प्रॉम्प्ट दिखाता है.

चुने गए संसाधन डिप्लॉय करना

ज़्यादा सटीक कंट्रोल के साथ डिप्लॉय करने के लिए, serviceId आर्ग्युमेंट के साथ --only फ़्लैग का इस्तेमाल करें. किसी खास सेवा के लिए, सिर्फ़ स्कीमा में किए गए बदलावों को डिप्लॉय करने के लिए:

firebase deploy --only dataconnect:serviceId:schema

किसी तय कनेक्टर और सेवा के लिए, सभी संसाधन भी डिप्लॉय किए जा सकते हैं.

firebase deploy --only dataconnect:serviceId:connectorId

आखिर में, किसी एक सेवा के लिए स्कीमा और सभी कनेक्टर डिप्लॉय किए जा सकते हैं.

firebase deploy --only dataconnect:serviceId

डिप्लॉयमेंट को रोल बैक करना

मैन्युअल तरीके से रोलबैक करने के लिए, अपने कोड का कोई पिछला वर्शन देखें और उसे डिप्लॉय करें. अगर ओरिजनल डिप्लॉयमेंट में, ऐसे बदलाव शामिल थे जिनकी वजह से समस्याएं आ सकती हैं, तो मिटाए गए किसी भी डेटा को पूरी तरह से रिकवर नहीं किया जा सकेगा.

डेटाबेस स्कीमा माइग्रेट करना

अगर आप तेज़ी से प्रोटोटाइप बना रहे हैं, स्कीमा के साथ प्रयोग कर रहे हैं, और आपको पता है कि स्कीमा में किए गए बदलावों की वजह से समस्याएं आ सकती हैं, तो Data 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"

ज़्यादा जानकारी के लिए, Data 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, Data Connect प्रोजेक्ट में कुछ तरीके अपनाने का सुझाव देता है.

समस्याएं पैदा करने वाले बदलाव कम करना

  • Firebase का सुझाव है कि Data Connect स्कीमा और कनेक्टर फ़ाइलों को सोर्स कंट्रोल में रखें.
  • जब भी हो सके, ऐसे बदलाव करने से बचें जिनकी वजह से समस्याएं आ सकती हैं. समस्याएं पैदा करने वाले बदलावों के कुछ सामान्य उदाहरण यहां दिए गए हैं:
    • अपने स्कीमा से कोई फ़ील्ड हटाना
    • अपने स्कीमा में, नल हो सकने वाले फ़ील्ड को नॉन-नल में बदलना (जैसे, Int -> Int!)
    • अपने स्कीमा में किसी फ़ील्ड का नाम बदलना.
  • अगर आपको अपने स्कीमा से कोई फ़ील्ड हटाना है, तो असर कम करने के लिए, इसे कुछ डिप्लॉयमेंट में बांटने पर विचार करें:
    • सबसे पहले, अपने कनेक्टर में फ़ील्ड के सभी रेफ़रंस हटाएं और बदलाव को डिप्लॉय करें.
    • इसके बाद, नए जनरेट किए गए एसडीके का इस्तेमाल करने के लिए, अपने ऐप्लिकेशन अपडेट करें.
    • आखिर में, अपने स्कीमा की .gql फ़ाइल में फ़ील्ड हटाएं, SQL स्कीमा माइग्रेट करें, और एक बार फिर से डिप्लॉय करें.

नए डेटाबेस के साथ काम करते समय, स्ट्रिक्ट मोड का इस्तेमाल करना

अगर किसी नए डेटाबेस के साथ Data Connect का इस्तेमाल किया जा रहा है और ऐप्लिकेशन स्कीमा को ऐक्टिव तौर पर डेवलप किया जा रहा है, तो dataconnect.yaml में schemaValidation: "STRICT" तय किया जा सकता है. इससे यह पक्का किया जा सकेगा कि डेटाबेस स्कीमा, ऐप्लिकेशन स्कीमा के साथ पूरी तरह से मैच करे.

इससे यह पक्का किया जा सकेगा कि वैकल्पिक बदलाव भी लागू हों.

डेटाबेस में प्रोडक्शन डेटा होने पर, कंपैटिबल मोड का इस्तेमाल करना

अगर किसी ऐसे डेटाबेस में बदलाव किए जा रहे हैं जिसमें प्रोडक्शन डेटा मौजूद है, तो हमारा सुझाव है कि स्कीमा माइग्रेशन को कंपैटिबल मोड में एक्ज़ीक्यूट करें. इससे यह पक्का किया जा सकेगा कि मौजूदा डेटा न मिटे. schemaValidation: "COMPATIBLE" को आपके dataconnect.yaml में तय किया जा सकता है.

कंपैटिबल मोड में, आपके डेटाबेस में स्कीमा माइग्रेशन के सिर्फ़ ज़रूरी बदलाव लागू किए जाते हैं.

  • DROP SCHEMA, DROP TABLE, और DROP COLUMN को वैकल्पिक स्टेटमेंट माना जाता है. इन्हें आपके प्लान के लिए जनरेट नहीं किया जाएगा. भले ही, आपके डेटाबेस स्कीमा में ऐसे स्कीमा, टेबल या कॉलम मौजूद हों जिन्हें आपके ऐप्लिकेशन स्कीमा में तय नहीं किया गया है.
  • अगर आपके डेटाबेस टेबल में कोई ऐसा नॉन-नल कॉलम मौजूद है जो आपके ऐप्लिकेशन स्कीमा में शामिल नहीं है, तो NOT NULL कंस्ट्रेंट हटा दिया जाएगा. इससे, आपके तय किए गए कनेक्टर की मदद से, टेबल में डेटा जोड़ा जा सकेगा.

आगे क्या करना है?