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

আপনি আপনার অ্যাপে Firebase Realtime Database এবং Cloud Firestore উভয়ই ব্যবহার করতে পারেন এবং আপনার প্রয়োজন অনুসারে প্রতিটি ডাটাবেস সমাধানের সুবিধাগুলি কাজে লাগাতে পারেন। উদাহরণস্বরূপ, আপনি উপস্থিতির জন্য Realtime Database এর সমর্থন ব্যবহার করতে চাইতে পারেন, যেমনটি Build Presence in 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. রিয়েলটাইমে ফায়ারস্টোরে নতুন ডেটা মিরর করুন। Realtime Database যোগ হওয়ার সাথে সাথে আপনার নতুন Cloud Firestore ডাটাবেসে নতুন ডেটা লিখতে ক্লাউড ফাংশন ব্যবহার করুন।

  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 ...]
}

ডকুমেন্টের সর্বোচ্চ আকার ১ এমবি, যা ল্যান্ডমার্কগুলিকে উপ-সংগ্রহ হিসেবে সংরক্ষণ করার আরেকটি কারণ, প্রতিটি শহরের ডকুমেন্টকে নেস্টেড তালিকা দিয়ে ফুলে ওঠার পরিবর্তে ছোট রাখে।

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 সরাসরি ডেটা লেখার জন্য সার্ভার SDK (Node.js, Java, Python, অথবা Go) ব্যবহার করুন। সার্ভার SDK সেট আপ করার নির্দেশাবলীর জন্য, Get Started দেখুন।
    • বৃহৎ ডেটা মাইগ্রেশন ত্বরান্বিত করতে, ব্যাচড রাইট ব্যবহার করুন এবং একটি একক নেটওয়ার্ক অনুরোধে 500টি পর্যন্ত অপারেশন পাঠান।
    • Cloud Firestore হার সীমার মধ্যে থাকতে, প্রতিটি সংগ্রহের জন্য ৫০০টি লেখা/সেকেন্ডের মধ্যে ক্রিয়াকলাপ সীমাবদ্ধ করুন।

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

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

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

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

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

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

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