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

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

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

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

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

तैनाती से जुड़े अहम कॉन्सेप्ट

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

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

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

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

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

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

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

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

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

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

Data Connect, कनेक्टर के अपडेट में हुए बड़े बदलावों के विश्लेषण को Firebase CLI में इंटिग्रेट करता है.

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

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

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

चेतावनी और गंभीर उल्लंघन के लेवल की स्थितियों की ज़्यादा जानकारी वाली सूची, सीएलआई की रेफ़रंस गाइड में दी गई है.

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

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

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

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

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

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

firebase dataconnect:services:list

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

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

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

firebase deploy --only dataconnect

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

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

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

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

firebase deploy --only dataconnect --force

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

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

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

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

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]

इंटरैक्टिव एनवायरमेंट में, एसक्यूएल माइग्रेशन स्टेटमेंट और कार्रवाई के लिए प्रॉम्प्ट दिखाए जाते हैं.

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

नए प्रोजेक्ट में, डिफ़ॉल्ट स्कीमा की पुष्टि करने का मोड लागू होता है. 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" को सेट किया जा सकता है. इससे यह पक्का किया जा सकता है कि डेटाबेस स्कीमा, ऐप्लिकेशन स्कीमा के मुताबिक ही रहे.

इससे यह पक्का होगा कि ज़रूरी नहीं माने गए बदलाव भी लागू हो जाएं.

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

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

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

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

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