Firebase Realtime Database-এর সাথে Cloud Firestore ব্যবহার করা

আপনি নিজের অ্যাপে Firebase Realtime Database এবং Cloud Firestore, দুটিই ব্যবহার করতে পারেন এবং আপনার প্রয়োজন অনুযায়ী প্রতিটি ডেটাবেস সলিউশনের সুবিধা নিতে পারেন। যেমন, আপনি হয়ত Realtime Database-এর উপস্থিতি সংক্রান্ত সহায়তা ব্যবহার করতে চাইবেন, যেমনটি Cloud Firestore-এ উপস্থিতি তৈরি করুন-এ উল্লেখ করা আছে।

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

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

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

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

  2. পুরনো ডেটা সরান। আপনি Cloud Firestore-এ নতুন ডেটা স্ট্রাকচার সেট-আপ করার সময়, Realtime Database থেকে আপনার নতুন Cloud Firestore ইনস্ট্যান্সে আগে থেকে থাকা ডেটা ম্যাপ করতে ও সরাতে পারবেন। তবে, আপনি যদি নিজের অ্যাপে দুটি ডেটাবেসই ব্যবহার করেন, তাহলে আপনাকে Realtime Database থেকে পুরনো ডেটা সরাতে হবে না।

  3. রিয়েল-টাইমে Firestore-এ নতুন ডেটা মিরর করুন। Realtime Database-এ নতুন ডেটা যোগ করার সাথে সাথে আপনার নতুন Cloud Firestore ডেটাবেসে তা লেখার জন্য Cloud Functions ব্যবহার করুন।

  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 ডেটাবেস কীভাবে স্ট্রাকচার করবেন সেই সম্পর্কে আরও আইডিয়া পেতে আমাদের সমাধান দেখুন।

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

আপনি Android, Apple বা ওয়েব ক্লায়েন্টের জন্য Cloud Firestore Security Rules অথবা সার্ভারের জন্য Identity Access Management (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 কনসোলে, ডেটাবেস ও স্টোরেজ > রিয়েলটাইম ডেটাবেস বিকল্পে যান।
    2. ডেটা ট্যাবে, আপনার ডেটাবেসের রুট-লেভেল নোড বেছে নিন এবং মেনু থেকে JSON এক্সপোর্ট করুন বিকল্প বেছে নিন।
  2. Cloud Firestore-এ আপনার নতুন ডেটাবেস তৈরি করুন এবং আপনার ডেটা যোগ করুন।

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

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

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

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

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

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

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

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

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