একটি Firebase SQL Connect সার্ভিসের তিনটি প্রধান উপাদান রয়েছে:
- নিজস্ব SQL স্কিমা সহ একটি অন্তর্নিহিত PostgreSQL ডাটাবেস
- একটি SQL Connect অ্যাপ্লিকেশন স্কিমা (যা আপনার
.gqlফাইলগুলিতে ঘোষিত) - একাধিক কানেক্টর (যা আপনার
.gqlফাইলে ঘোষিত এবংconnector.yamlফাইলে কনফিগার করা)।
SQL স্কিমা হলো আপনার ডেটার তথ্যের নির্ভরযোগ্য উৎস, SQL Connect স্কিমার মাধ্যমেই আপনার কানেক্টরগুলো সেই ডেটা দেখতে পারে, এবং কানেক্টরগুলো সেই API-গুলো ঘোষণা করে যা ব্যবহার করে আপনার ক্লায়েন্টরা সেই ডেটা অ্যাক্সেস করতে পারে।
যখন আপনি CLI ব্যবহার করে আপনার 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-এর সাথে সমন্বিত করে।
CLI আপনার স্কিমার সাপেক্ষে প্রতিটি কানেক্টরের পরিবর্তনগুলো বিশ্লেষণ করে এবং কানেক্টরের সেইসব পরিবর্তনের বিষয়ে একগুচ্ছ মূল্যায়ন বার্তা জারি করে, যেগুলো ক্লায়েন্টের আচরণ পরিবর্তন করতে পারে (বার্তাগুলো সতর্কীকরণ-স্তরের) অথবা ক্লায়েন্ট কোডের পূর্ববর্তী সংস্করণগুলোকে ভেঙে দিতে পারে বা দেবে (বার্তাগুলো ভাঙন-স্তরের)।
উদাহরণস্বরূপ:
- কানেক্টরের এমন পরিবর্তন যা ক্লায়েন্টের আচরণ পরিবর্তন করতে পারে, তার মধ্যে রয়েছে
@retiredস্কিমা অ্যানোটেশন ছাড়া কোনো কোয়েরি থেকে নালযোগ্য ফিল্ড অপসারণ করা। - কানেক্টরের এমন সব পরিবর্তন যা ক্লায়েন্টদের সমস্যায় ফেলতে পারে বা ফেলবে, তার মধ্যে রয়েছে কোনো ডিফল্ট মান ছাড়া একটি নালযোগ্য অপারেশন ভেরিয়েবলকে নন-নাল-এ পরিবর্তন করা, অথবা কোনো ফিল্ডের ডেটা টাইপকে বেমানান কিছুতে পরিবর্তন করা (যেমন
StringথেকেInt)।
সতর্কীকরণ-স্তর এবং ব্রেকিং-স্তরের সিনারিওগুলির একটি আরও বিশদ তালিকা CLI রেফারেন্স গাইডে দেওয়া আছে।
ডেপ্লয়মেন্ট ওয়ার্কফ্লো অনুসরণ করুন
আপনি একটি SQL Connect প্রজেক্টে লোকাল প্রজেক্ট ডিরেক্টরি এবং Firebase কনসোল উভয় জায়গাতেই কাজ করতে পারেন।
একটি প্রস্তাবিত স্থাপন প্রবাহে নিম্নলিখিত বিষয়গুলো অন্তর্ভুক্ত থাকে:
-
firebase dataconnect:services:listমাধ্যমে বর্তমানে ডেপ্লয় করা স্কিমা এবং কানেক্টরগুলোর তালিকা দেখা হচ্ছে। - যেকোনো স্কিমা আপডেট পরিচালনা করা।
-
firebase dataconnect:sql:diffব্যবহার করে আপনার ক্লাউড 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 CLI আপনার স্কিমা এবং কানেক্টরগুলো ডেপ্লয় করার চেষ্টা করে।
এটি যাচাই করে যে নতুন স্কিমাটি বিদ্যমান কোনো কানেক্টরকে ক্ষতিগ্রস্ত করছে না। বড় ধরনের পরিবর্তন করার সময় সর্বোত্তম অনুশীলন অনুসরণ করুন।
এটি SQL Connect স্কিমা আপডেট করার আগে SQL স্কিমাটি ইতিমধ্যে মাইগ্রেট করা হয়েছে কিনা তাও যাচাই করে। যদি তা না হয়, তবে এটি স্কিমা মাইগ্রেট করার জন্য প্রয়োজনীয় পদক্ষেপগুলো স্বয়ংক্রিয়ভাবে আপনাকে দেখিয়ে দেয়।
--force ফ্ল্যাগ মোতায়েন
firebase deploy --only dataconnect --force যদি কানেক্টর বা SQL স্কিমা ভ্যালিডেশন কোনোটিই বিবেচ্য না হয়, তবে সেগুলোকে উপেক্ষা করার জন্য আপনি --force সহ কমান্ডটি পুনরায় চালাতে পারেন।
--force deploy বিকল্পটি এখনও 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আপনি কমা দিয়ে আলাদা করা পরিষেবাগুলোর একটি তালিকা দিতে পারেন।
এই কমান্ডটি কোনো সার্ভিসের লোকাল স্কিমার সাথে সংশ্লিষ্ট ক্লাউড এসকিউএল ডাটাবেসের বর্তমান স্কিমার তুলনা করে। যদি কোনো পার্থক্য থাকে, তবে সেই পার্থক্যটি সমাধান করার জন্য যে এসকিউএল কমান্ডগুলো চালানো হবে, তা এটি প্রিন্ট করে দেখায়।
পরিবর্তনগুলি প্রয়োগ করুন
যখন আপনি সন্তুষ্ট হবেন এবং স্কিমা ক্লাউড এসকিউএল ইনস্ট্যান্সে পরিবর্তনগুলো প্রয়োগ করার জন্য প্রস্তুত হবেন, তখন ` firebase dataconnect:sql:migrate কমান্ডটি দিন। পরিবর্তনগুলো অনুমোদন করার জন্য আপনাকে অনুরোধ করা হবে।
firebase dataconnect:sql:migrate [serviceId]ইন্টারেক্টিভ পরিবেশে SQL মাইগ্রেশন স্টেটমেন্ট এবং অ্যাকশন প্রম্পট প্রদর্শিত হয়।
কঠোর বা সামঞ্জস্যপূর্ণ মোডে মাইগ্রেট করুন
একদম নতুন কোনো প্রোজেক্টে, ডিফল্ট স্কিমা ভ্যালিডেশন মোড প্রযোজ্য হয়। migrate কমান্ডের কাজ হলো, প্রথমে আপনার অ্যাপ্লিকেশন স্কিমার জন্য প্রয়োজনীয় সমস্ত ডাটাবেস স্কিমা পরিবর্তন প্রয়োগ করা, এবং তারপর আপনার ডাটাবেস স্কিমাকে অ্যাপ্লিকেশন স্কিমার সাথে হুবহু মেলানোর জন্য স্কিমা, টেবিল বা কলাম ড্রপ করার ঐচ্ছিক অপারেশনগুলোর অনুমোদন চাওয়া।
আপনি আপনার dataconnect.yaml ফাইলটি পরিবর্তন করে এই আচরণটি সামঞ্জস্য করতে পারেন। schemaValidation কী-টির কমেন্ট তুলে দিন এবং COMPATIBLE ঘোষণা করুন, যাতে মাইগ্রেশনের সময় শুধুমাত্র প্রয়োজনীয় পরিবর্তনগুলোই প্রয়োগ করা হয়।
schemaValidation: "COMPATIBLE"
অথবা আচরণটি STRICT এ সেট করুন, যাতে সমস্ত স্কিমা পরিবর্তন প্রয়োগ করা হয় এবং আপনার ডাটাবেস স্কিমা আপনার অ্যাপ্লিকেশন স্কিমার সাথে মিলতে বাধ্য হয়।
schemaValidation: "STRICT"
আরও তথ্যের জন্য SQL Connect CLI রেফারেন্স দেখুন।
সংযোগকারী আপডেট করুন
যখন আপনি firebase deploy চালান, তখন CLI প্রযোজ্য কানেক্টরগুলির একটি আপডেট শুরু করে এবং প্রযোজ্য সতর্কীকরণ-স্তরের (যা ক্লায়েন্টের আচরণকে প্রভাবিত করতে পারে) এবং ব্রেকিং-স্তরের (যা সম্ভবত বা নিশ্চিতভাবে সমস্যা তৈরি করতে পারে) মূল্যায়ন বার্তা প্রদান করে।
CLI ব্যবহার করে কানেক্টর আপডেটগুলি পরিচালনা করুন
ইন্টারেক্টিভ মোড এবং নন-ইন্টারেক্টিভ মোডে CLI-এর আচরণ কিছুটা ভিন্ন হয়।
যেমনটা আশা করা যায়, ইন্টারেক্টিভ মোডে CLI আপনাকে সমস্ত বার্তা গ্রহণ করতে অনুরোধ করে। আপনি --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
নন-ইন্টারেক্টিভ মোডে, যতক্ষণ পর্যন্ত কোনো ব্রেকিং-লেভেল অ্যাসেসমেন্ট না থাকে, ততক্ষণ CLI আপনার কানেক্টরটি ডেপ্লয় করবে। অন্যথায়, আপনার স্ক্রিপ্টটি ব্রেকিং চেঞ্জগুলোর একটি লগ সহ এক্সিট করবে। আপনি --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
আরও তথ্যের জন্য, সিএলআই রেফারেন্স গাইড দেখুন।
স্কিমা এবং কানেক্টর ব্যবস্থাপনার সর্বোত্তম অনুশীলন
আপনার SQL Connect প্রোজেক্টগুলোতে অনুসরণ করার জন্য Firebase কিছু পদ্ধতির সুপারিশ করে।
ব্রেকিং পরিবর্তনগুলি হ্রাস করুন
- ফায়ারবেস আপনার SQL Connect স্কিমা এবং কানেক্টর ফাইলগুলো সোর্স কন্ট্রোলে রাখার পরামর্শ দেয়।
- সম্ভব হলে ব্রেকিং চেঞ্জ এড়িয়ে চলুন। ব্রেকিং চেঞ্জের কিছু সাধারণ উদাহরণ হলো:
- আপনার স্কিমা থেকে একটি ফিল্ড অপসারণ করা
- আপনার স্কিমাতে একটি নালযোগ্য ফিল্ডকে নন-নালযোগ্য করা (যেমন
Int->Int!) - আপনার স্কিমাতে কোনো ফিল্ডের নাম পরিবর্তন করা।
- আপনার স্কিমা থেকে কোনো ফিল্ড সরানোর প্রয়োজন হলে, এর প্রভাব কমাতে সেটিকে কয়েকটি ডেপ্লয়মেন্টে ভাগ করার কথা বিবেচনা করুন:
- প্রথমে, আপনার কানেক্টরগুলো থেকে ফিল্ডটির সমস্ত রেফারেন্স মুছে ফেলুন এবং পরিবর্তনটি প্রয়োগ করুন।
- এরপরে, নতুন তৈরি করা SDK ব্যবহার করার জন্য আপনার অ্যাপগুলো আপডেট করুন।
- অবশেষে, আপনার স্কিমা
.gqlফাইল থেকে ফিল্ডটি সরিয়ে ফেলুন, আপনার SQL স্কিমা মাইগ্রেট করুন এবং পুনরায় ডেপ্লয় করুন।
নতুন ডেটাবেস নিয়ে কাজ করার সময় স্ট্রিক্ট মোড ব্যবহার করুন।
আপনি যদি একটি নতুন ডাটাবেসের সাথে SQL Connect ব্যবহার করেন এবং সক্রিয়ভাবে আপনার অ্যাপ্লিকেশন স্কিমা তৈরি করেন, এবং আপনার ডাটাবেস স্কিমা যেন আপনার অ্যাপ্লিকেশন স্কিমার সাথে হুবহু মিলে যায় তা নিশ্চিত করতে চান, তাহলে আপনি আপনার dataconnect.yaml ফাইলে schemaValidation: "STRICT" উল্লেখ করতে পারেন।
এর ফলে ঐচ্ছিক পরিবর্তনগুলোও প্রয়োগ করা নিশ্চিত হবে।
আপনার ডেটাবেসে প্রোডাকশন ডেটা থাকলে কম্প্যাটিবল মোড ব্যবহার করুন।
আপনি যদি প্রোডাকশন ডেটা সম্বলিত কোনো ডেটাবেসে পরিবর্তন করেন, তাহলে বিদ্যমান ডেটা যাতে মুছে না যায় তা নিশ্চিত করতে আমরা আপনাকে কম্প্যাটিবল মোডে আপনার স্কিমা মাইগ্রেশন সম্পাদন করার পরামর্শ দিই। আপনি আপনার dataconnect.yaml ফাইলে schemaValidation: "COMPATIBLE" উল্লেখ করতে পারেন।
কম্প্যাটিবল মোডে, আপনার ডেটাবেসে শুধুমাত্র প্রয়োজনীয় স্কিমা মাইগ্রেশন পরিবর্তনগুলো প্রয়োগ করা হয়।
-
DROP SCHEMA,DROP TABLE, এবংDROP COLUMNঐচ্ছিক স্টেটমেন্ট হিসেবে বিবেচনা করা হয় এবং আপনার প্ল্যানের জন্য এগুলো তৈরি করা হবে না, এমনকি যদি আপনার ডাটাবেস স্কিমাতে এমন স্কিমা, টেবিল বা কলাম থাকে যা আপনার অ্যাপ্লিকেশন স্কিমাতে সংজ্ঞায়িত করা নেই। - যদি আপনার ডাটাবেস টেবিলে এমন কোনো নন-নাল কলাম থাকে যা আপনার অ্যাপ্লিকেশন স্কিমাতে অন্তর্ভুক্ত নয়, তাহলে
NOT NULLকনস্ট্রেইন্টটি সরিয়ে দেওয়া হবে, যাতে আপনার সংজ্ঞায়িত কানেক্টরগুলো ব্যবহার করে টেবিলে ডেটা যোগ করা যায়।
এরপর কী?
- জেনারেটেড SDK ব্যবহার করে তৈরি করা ক্লায়েন্ট কোড ডেপ্লয় এবং ম্যানেজ করার পদ্ধতি Android , iOS , web , এবং Flutter- এর গাইডগুলোতে আলোচনা করা হয়েছে।
- ডেপ্লয়মেন্ট টুলিং সম্পর্কে আরও তথ্যের জন্য, SQL Connect CLI রেফারেন্স এবং SQL Connect কনফিগারেশন ফাইল রেফারেন্স পর্যালোচনা করুন।