ফায়ারবেস রিয়েলটাইম ডেটাবেসের সাথে ক্লাউড ফায়ারস্টোর ব্যবহার করুন

আপনি আপনার অ্যাপে Firebase Realtime Database এবং Cloud Firestore উভয়ই ব্যবহার করতে পারেন এবং আপনার প্রয়োজনের সাথে মানানসই প্রতিটি ডাটাবেস সমাধানের সুবিধাগুলি ব্যবহার করতে পারেন৷ উদাহরণস্বরূপ, আপনি উপস্থিতির জন্য Realtime Database সমর্থন লাভ করতে চাইতে পারেন, যেমনটি বিল্ড প্রেজেন্স ইন Cloud Firestore বর্ণিত হয়েছে।

ডাটাবেসের মধ্যে পার্থক্য সম্পর্কে আরও জানুন।

Cloud Firestore ডেটা সরানো হচ্ছে

আপনি যদি সিদ্ধান্ত নিয়ে থাকেন যে আপনি Realtime Database থেকে Cloud Firestore আপনার কিছু ডেটা স্থানান্তর করতে চান তবে নিম্নলিখিত প্রবাহটি বিবেচনা করুন৷ যেহেতু প্রতিটি ডাটাবেসের অনন্য চাহিদা এবং কাঠামোগত বিবেচনা রয়েছে, তাই একটি স্বয়ংক্রিয় স্থানান্তর পথ নেই। পরিবর্তে, আপনি এই সাধারণ অগ্রগতি অনুসরণ করতে পারেন:

  1. Realtime Database থেকে Cloud Firestore ডেটা স্ট্রাকচার এবং নিরাপত্তা নিয়ম ম্যাপ করুন। Realtime Database এবং Cloud Firestore উভয়ই ফায়ারবেস প্রমাণীকরণের উপর নির্ভর করে, তাই আপনাকে আপনার অ্যাপের জন্য ব্যবহারকারীর প্রমাণীকরণ পরিবর্তন করতে হবে না। যাইহোক, নিরাপত্তা বিধি এবং ডেটা মডেল আলাদা এবং আপনি ক্লাউড ফায়ারস্টোরে ডেটা স্থানান্তর করা শুরু করার আগে সেই বিভেদের জন্য সাবধানে অ্যাকাউন্ট করা গুরুত্বপূর্ণ।

  2. ঐতিহাসিক তথ্য সরান. আপনি Cloud Firestore আপনার নতুন ডেটা স্ট্রাকচার সেট আপ করার সময়, আপনি Realtime Database থেকে আপনার নতুন Cloud Firestore ইনস্ট্যান্সে বিদ্যমান ডেটা ম্যাপ করতে এবং সরাতে পারেন৷ যাইহোক, যদি আপনি আপনার অ্যাপে উভয় ডাটাবেস ব্যবহার করেন, তাহলে আপনাকে Realtime Database থেকে ঐতিহাসিক ডেটা সরাতে হবে না।

  3. রিয়েলটাইমে ফায়ারস্টোরে নতুন ডেটা মিরর করুন। আপনার নতুন Cloud Firestore ডাটাবেসে নতুন ডেটা লিখতে ক্লাউড ফাংশন ব্যবহার করুন কারণ এটি Realtime Database যুক্ত হয়৷

  4. স্থানান্তরিত ডেটার জন্য Cloud Firestore আপনার প্রাথমিক ডাটাবেস করুন৷ একবার আপনি আপনার কিছু ডেটা স্থানান্তরিত করার পরে, আপনার প্রাথমিক ডাটাবেস হিসাবে Cloud Firestore ব্যবহার করুন এবং স্থানান্তরিত ডেটার জন্য আপনার Realtime Database ব্যবহার হ্রাস করুন৷ আপনার অ্যাপের সংস্করণগুলি বিবেচনা করুন যেগুলি এখনও সেই ডেটার জন্য Realtime Database সাথে সংযুক্ত রয়েছে এবং আপনি কীভাবে তাদের সমর্থন চালিয়ে যাওয়ার পরিকল্পনা করছেন৷

নিশ্চিত করুন যে আপনি Realtime Database এবং Cloud Firestore উভয়ের জন্য বিলিং খরচের জন্য অ্যাকাউন্ট করেছেন৷

আপনার ডেটা ম্যাপ করুন

Realtime Database ডেটা একটি একক গাছ হিসাবে গঠন করা হয়, যখন Cloud Firestore নথি, সংগ্রহ এবং উপ-সংগ্রহের মাধ্যমে আরও স্পষ্ট ডেটা শ্রেণিবিন্যাস সমর্থন করে। আপনি যদি Realtime Database থেকে Cloud Firestore আপনার কিছু ডেটা স্থানান্তর করেন, আপনি আপনার ডেটার জন্য একটি ভিন্ন আর্কিটেকচার বিবেচনা করতে চাইতে পারেন।

বিবেচনা করার জন্য প্রধান পার্থক্য

আপনি যদি আপনার বিদ্যমান Realtime Database ট্রি থেকে Cloud Firestore নথি এবং সংগ্রহগুলিতে ডেটা স্থানান্তর করেন, তাহলে ডেটাবেসগুলির মধ্যে নিম্নলিখিত প্রধান পার্থক্যগুলি মনে রাখবেন যা Cloud Firestore আপনি কীভাবে ডেটা গঠন করবেন তা প্রভাবিত করতে পারে:

  • অগভীর প্রশ্নগুলি শ্রেণীবদ্ধ ডেটা কাঠামোতে আরও নমনীয়তা প্রদান করে।
  • জটিল প্রশ্নগুলি আরও গ্রানুলিটি অফার করে এবং ডুপ্লিকেট ডেটার প্রয়োজনীয়তা হ্রাস করে৷
  • ক্যোয়ারী কার্সার আরো শক্তিশালী পেজিনেশন অফার করে।
  • লেনদেনের জন্য আপনার সমস্ত ডেটার জন্য আর একটি সাধারণ রুটের প্রয়োজন হয় না এবং এটি আরও দক্ষ।
  • Realtime Database এবং Cloud Firestore মধ্যে বিলিং খরচ আলাদা। অনেক ক্ষেত্রে, Cloud Firestore Realtime Database চেয়ে বেশি ব্যয়বহুল হতে পারে, বিশেষ করে যদি আপনি অনেক ছোট অপারেশনের উপর নির্ভর করেন। আপনার ডাটাবেসে অপারেশনের সংখ্যা কমানোর কথা বিবেচনা করুন এবং অপ্রয়োজনীয় লেখাগুলি এড়িয়ে চলুন। Realtime Database এবং Cloud Firestore মধ্যে বিলিং এর পার্থক্য সম্পর্কে আরও জানুন।

কর্মে সর্বোত্তম অনুশীলন

নিম্নলিখিত উদাহরণটি আপনার ডেটাবেসগুলির মধ্যে আপনার ডেটা স্থানান্তর করার সময় কিছু বিবেচনার প্রতিফলন করে। আপনি Realtime Database সাথে ব্যবহার করতে পারেন তার চেয়ে বেশি প্রাকৃতিক ডেটা স্ট্রাকচারের জন্য অগভীর পঠন এবং উন্নত কোয়েরি করার ক্ষমতা ব্যবহার করতে পারেন।

একটি সিটি গাইড অ্যাপ বিবেচনা করুন যা ব্যবহারকারীদের সারা বিশ্বের শহরগুলিতে উল্লেখযোগ্য ল্যান্ডমার্ক খুঁজে পেতে সহায়তা করে৷ যেহেতু Realtime Database অগভীর পাঠের অভাব রয়েছে, তাই আপনাকে দুটি শীর্ষ-স্তরের নোডে ডেটা গঠন করতে হতে পারে, নিম্নরূপ:

// /cities/$CITY_KEY
{
  name: "New York",
  population: 8000000,
  capital: False
}

// /city-landmark/$CITY_KEY/$LANDMARK_KEY
{
  name: "Empire State Building",
  category: "Architecture"
}

Cloud Firestore অগভীর পাঠ রয়েছে, তাই সংগ্রহে থাকা নথিগুলির জন্য অনুসন্ধান করা উপসংগ্রহ থেকে ডেটা টেনে আনে না। ফলস্বরূপ, আপনি একটি উপ-সংগ্রহে ল্যান্ডমার্ক তথ্য সংরক্ষণ করতে পারেন:

// /cities/$CITY_ID
{
  name: "New York",
  population: 8000000,
  capital: False,
  landmarks: [... subcollection ...]
}

নথিগুলির সর্বাধিক আকার 1MB, যা একটি উপ-সংগ্রহ হিসাবে ল্যান্ডমার্ক সংরক্ষণ করার আরেকটি কারণ, প্রতিটি শহরের নথি ছোট রাখা, নেস্টেড তালিকার সাথে নথিগুলিকে ফুলে তোলার পরিবর্তে।

Cloud Firestore উন্নত ক্যোয়ারী করার ক্ষমতা সাধারণ অ্যাক্সেস প্যাটার্নের জন্য ডেটা ডুপ্লিকেট করার প্রয়োজনীয়তা হ্রাস করে। উদাহরণ স্বরূপ, সিটি গাইড অ্যাপে একটি স্ক্রীন বিবেচনা করুন যা জনসংখ্যার ভিত্তিতে সমস্ত রাজধানী শহর দেখায়। Realtime Database , এটি করার সবচেয়ে কার্যকর উপায় হল রাজধানী শহরগুলির একটি পৃথক তালিকা বজায় রাখা যা cities তালিকা থেকে ডেটা নকল করে, নিম্নরূপ:

{
   cities: {
    // ...
   },

   capital-cities: {
     // ...
   }
}

Cloud Firestore , আপনি একক প্রশ্ন হিসাবে জনসংখ্যার ক্রম অনুসারে রাজধানী শহরগুলির একটি তালিকা প্রকাশ করতে পারেন:

db.collection('cities')
    .where('capital', '==', true)
    .orderBy('population')

Cloud Firestore ডেটা মডেল সম্পর্কে আরও পড়ুন এবং কীভাবে আপনার Cloud Firestore ডাটাবেস গঠন করবেন সে সম্পর্কে আরও ধারণার জন্য আমাদের সমাধানগুলি দেখুন৷

আপনার ডেটা সুরক্ষিত করুন

আপনি অ্যান্ড্রয়েড, অ্যাপল বা ওয়েব ক্লায়েন্টের জন্য Cloud Firestore Security Rules বা সার্ভারের জন্য আইডেন্টিটি অ্যাক্সেস ম্যানেজমেন্ট (IAM) ব্যবহার করছেন না কেন, নিশ্চিত করুন যে আপনি Cloud Firestore পাশাপাশি Realtime Database আপনার ডেটা সুরক্ষিত করছেন। ব্যবহারকারী প্রমাণীকরণ উভয় ডাটাবেসের জন্য প্রমাণীকরণ দ্বারা পরিচালিত হয়, তাই আপনি Cloud Firestore ব্যবহার শুরু করার সময় আপনার প্রমাণীকরণের বাস্তবায়ন পরিবর্তন করতে হবে না।

বিবেচনা করার জন্য প্রধান পার্থক্য

  • মোবাইল এবং ওয়েব SDKগুলি Cloud Firestore Security Rules ব্যবহার করে, যখন সার্ভার SDKগুলি ডেটা সুরক্ষিত করতে আইডেন্টিটি অ্যাক্সেস ম্যানেজমেন্ট (IAM) ব্যবহার করে৷
  • আপনি একটি ওয়াইল্ডকার্ড ব্যবহার না করলে Cloud Firestore Security Rules ক্যাসকেড হয় না৷ নথি এবং সংগ্রহ অন্যথায় নিয়মের উত্তরাধিকারী হয় না।
  • আপনাকে আর আলাদাভাবে ডেটা যাচাই করতে হবে না (যেমন আপনি Realtime Database করেছেন)।
  • Cloud Firestore একটি ক্যোয়ারী চালানোর আগে নিয়মগুলি পরীক্ষা করে নিশ্চিত করে যে ব্যবহারকারীর কাছে ক্যোয়ারী দ্বারা প্রত্যাবর্তিত সমস্ত ডেটার জন্য উপযুক্ত অ্যাক্সেস রয়েছে৷

Cloud Firestore ঐতিহাসিক ডেটা সরান

একবার আপনি Cloud Firestore ডেটা এবং সুরক্ষা মডেলগুলিতে আপনার ডেটা এবং সুরক্ষা কাঠামো ম্যাপ করে নিলে, আপনি আপনার ডেটা যোগ করা শুরু করতে পারেন৷ আপনি যদি Realtime Database থেকে Cloud Firestore আপনার অ্যাপ সরানোর পরে ঐতিহাসিক ডেটা জিজ্ঞাসা করার পরিকল্পনা করেন, তাহলে আপনার নতুন Cloud Firestore ডাটাবেসে আপনার পুরানো ডেটা রপ্তানি করুন৷ আপনি যদি আপনার অ্যাপে Realtime Database এবং Cloud Firestore উভয়ই ব্যবহার করার পরিকল্পনা করেন তবে আপনি এই পদক্ষেপটি এড়িয়ে যেতে পারেন।

পুরানো ডেটা দিয়ে নতুন ডেটা ওভাররাইট করা এড়াতে, আপনি প্রথমে আপনার ঐতিহাসিক ডেটা যোগ করতে চাইতে পারেন। আপনি যদি উভয় ডেটাবেসে একই সাথে নতুন ডেটা যোগ করেন, যেমন পরবর্তী ধাপে আলোচনা করা হয়েছে, তাহলে নিশ্চিত করুন যে আপনি Cloud Functions দ্বারা Cloud Firestore যোগ করা নতুন ডেটাকে অগ্রাধিকার দিয়েছেন।

Cloud Firestore ঐতিহাসিক ডেটা স্থানান্তর করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. Realtime Database থেকে আপনার ডেটা রপ্তানি করুন বা সাম্প্রতিক ব্যাকআপ ব্যবহার করুন
    1. Firebase কনসোলের Realtime Database বিভাগে যান।
    2. ডেটা ট্যাব থেকে, আপনার ডাটাবেসের রুট-লেভেল নোড নির্বাচন করুন এবং মেনু থেকে JSON রপ্তানি নির্বাচন করুন।
  2. Cloud Firestore আপনার নতুন ডাটাবেস তৈরি করুন এবং আপনার ডেটা যোগ করুন

    Cloud Firestore আপনার কিছু ডেটা সরানোর সময় নিম্নলিখিত কৌশলগুলি বিবেচনা করুন:

    • একটি কাস্টম স্ক্রিপ্ট লিখুন যা আপনার জন্য আপনার ডেটা পোর্ট করে। যদিও আমরা এই স্ক্রিপ্টের জন্য একটি টেমপ্লেট অফার করতে পারি না, কারণ প্রতিটি ডাটাবেসের অনন্য চাহিদা থাকবে, আমাদের স্ল্যাক চ্যানেলে বা স্ট্যাক ওভারফ্লোতে Cloud Firestore বিশেষজ্ঞরা আপনার স্ক্রিপ্ট পর্যালোচনা করতে পারেন বা আপনার নির্দিষ্ট পরিস্থিতির জন্য পরামর্শ দিতে পারেন।
    • Cloud Firestore সরাসরি ডেটা লিখতে সার্ভার SDKs (Node.js, Java, Python, or Go) ব্যবহার করুন। সার্ভার SDK সেট আপ করার নির্দেশাবলীর জন্য, শুরু করুন দেখুন।
    • বৃহৎ ডেটা স্থানান্তর ত্বরান্বিত করতে, ব্যাচ করা লেখা ব্যবহার করুন এবং একক নেটওয়ার্ক অনুরোধে 500টি পর্যন্ত অপারেশন পাঠান।
    • Cloud Firestore রেট সীমার অধীনে থাকার জন্য, প্রতিটি সংগ্রহের জন্য 500 রাইট/সেকেন্ডে অপারেশন সীমিত করুন।

Cloud Firestore নতুন ডেটা যোগ করুন

আপনার ডাটাবেসের মধ্যে সমতা বজায় রাখতে, রিয়েলটাইমে উভয় ডাটাবেসে নতুন ডেটা যোগ করুন। Cloud Firestore লিখতে ট্রিগার করতে Cloud Functions ব্যবহার করুন যখনই কোনো ক্লায়েন্ট Realtime Database লেখে। নিশ্চিত করুন যে Cloud Firestore Cloud Functions থেকে আসা নতুন ডেটাকে আপনার ঐতিহাসিক ডেটা মাইগ্রেশন থেকে তৈরি করা যেকোনো লেখার উপর অগ্রাধিকার দেয়৷

Cloud Firestore নতুন বা পরিবর্তন করা ডেটা লেখার জন্য একটি ফাংশন তৈরি করুন প্রতিবার যখন কোনও ক্লায়েন্ট Realtime Database ডেটা লেখে। Cloud Functions জন্য Realtime Database ট্রিগার সম্পর্কে আরও জানুন।

স্থানান্তরিত ডেটার জন্য Cloud Firestore আপনার প্রাথমিক ডাটাবেস করুন৷

আপনি যদি আপনার কিছু ডেটার জন্য Cloud Firestore আপনার প্রাথমিক ডাটাবেস হিসাবে ব্যবহার করার সিদ্ধান্ত নিয়ে থাকেন, তাহলে নিশ্চিত করুন যে আপনি যে কোনও ডেটা-মিররিং ফাংশন সেট আপ করেছেন এবং আপনার Cloud Firestore Security Rules যাচাই করেছেন৷

  1. আপনি যদি আপনার ডাটাবেসের মধ্যে সমতা বজায় রাখতে Cloud Functions ব্যবহার করেন, তবে নিশ্চিত করুন যে আপনি একটি লুপে উভয় ডাটাবেস জুড়ে লেখার ক্রিয়াকলাপগুলিকে নকল করছেন না৷ একটি একক ডাটাবেসে লেখার জন্য আপনার ফাংশনটি স্যুইচ করুন, বা ফাংশনটি সম্পূর্ণভাবে মুছে ফেলুন এবং Realtime Database সাথে সংযুক্ত অ্যাপগুলিতে স্থানান্তরিত ডেটার জন্য লেখার কার্যকারিতা পর্যায়ক্রমে বন্ধ করা শুরু করুন৷ আপনার অ্যাপের জন্য আপনি কীভাবে এটি পরিচালনা করবেন তা আপনার নির্দিষ্ট চাহিদা এবং আপনার ব্যবহারকারীদের উপর নির্ভর করে।

  2. আপনার ডেটা সঠিকভাবে সুরক্ষিত আছে তা যাচাই করুন। আপনার Cloud Firestore Security Rules বা IAM সেটআপ যাচাই করুন।