একাধিক ডেটাবেসের মাধ্যমে স্কেল করুন

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

আপনার ডেটা কখন শার্ড করতে হবে

আপনি যদি Realtime Database ব্যবহার করেন এবং নিম্নলিখিত কোনও পরিস্থিতিতে পড়েন, তাহলে একাধিক ডেটাবেস জুড়ে আপনার ডেটা শার্ড করতে চাইতে পারেন:

  • আপনি যদি ২০০,০০০টি যুগপৎ কানেকশন, ১,০০০টি রাইট অপারেশন/সেকেন্ড বা একটি ডেটাবেস ইনস্ট্যান্সের জন্য অন্য কোনও সীমার বাইরে স্কেল করতে চান।
  • আপনার কাছে একাধিক, স্বতন্ত্র ডেটা সেট আছে এবং আপনি পারফর্ম্যান্স অপ্টিমাইজ করতে চান (যেমন, একটি চ্যাট অ্যাপ যা ব্যবহারকারীদের আলাদা, স্বাধীন গ্রুপকে পরিষেবা দেয়)।
  • আপনি আপটাইম উন্নত করতে এবং একটি ডেটাবেস ইনস্ট্যান্স ওভারলোড হওয়ার ঝুঁকি কমাতে একাধিক ডেটাবেস জুড়ে লোড ব্যালেন্স করতে চান।

আপনার ডেটা কীভাবে শার্ড করবেন

আপনার ডেটা শার্ড করতে, এইসব ধাপ অনুসরণ করুন (নিচে আরও বিস্তারিতভাবে বর্ণনা করা হয়েছে):

  1. আপনার অ্যাপের নির্দিষ্ট প্রয়োজন অনুযায়ী একাধিক ডেটাবেসে আপনার ডেটা ম্যাপ করুন।
  2. একাধিক ডেটাবেস ইনস্ট্যান্স তৈরি করুন।
  3. আপনার অ্যাপ কনফিগার করুন যাতে এটি প্রতিটি ডেটা সেটের জন্য প্রয়োজনীয় Realtime Database ইনস্ট্যান্সের সাথে কানেক্ট করে।

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

একাধিক ডেটাবেসে আপনার ডেটা ম্যাপ করার সময়, নিম্নলিখিত শর্তগুলি পূরণ করার চেষ্টা করুন:

  • প্রতিটি কোয়েরি শুধুমাত্র একটি ডেটাবেস ইনস্ট্যান্সের ক্ষেত্রে রান করে। Realtime Database-এ ডেটাবেস ইনস্ট্যান্স জুড়ে কোয়েরি কাজ করে না।
  • ডেটাবেস ইনস্ট্যান্স জুড়ে ডেটা শেয়ার বা ডুপ্লিকেট করা হয় না (অথবা ন্যূনতম শেয়ার বা ডুপ্লিকেট করা হয়)।
  • প্রতিটি অ্যাপ ইনস্ট্যান্স যেকোনও মুহূর্তে শুধুমাত্র একটি ডেটাবেসের সাথে কানেক্ট করে।

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

"মাস্টার শার্ড" তৈরি করুন

ডেটাবেস ইনস্ট্যান্স জুড়ে আপনার ডেটা কীভাবে স্টোর করা হয় তার একটি ম্যাপ স্টোর করুন। এইভাবে, আপনি প্রোগ্রাম্যাটিকভাবে দেখতে পারবেন যে কোন ডেটাবেস ইনস্ট্যান্স কানেক্ট করা ক্লায়েন্টের সাথে সম্পর্কিত। মনে রাখবেন যে, আপনার যখন প্রয়োজন তখন আপনার প্রয়োজনীয় নির্দিষ্ট ডেটাবেস ইনস্ট্যান্সের সাথে সরাসরি কানেক্ট করার চেয়ে এতে আরও বেশি ওভারহেড থাকতে পারে।

বিভাগ বা গ্রাহক অনুযায়ী ডেটা বাকেট করা

ব্যবহারকারী বা ডেটার ধরন অনুযায়ী গ্রুপ করা, সাইলো করা ডেটাবেস ইনস্ট্যান্সে ডেটা স্টোর করুন। যেমন, আপনি যদি একাধিক সংস্থার জন্য একটি চ্যাট অ্যাপ্লিকেশন তৈরি করেন, তাহলে আপনি প্রতিটি সংস্থার জন্য একটি ডেটাবেস ইনস্ট্যান্স তৈরি করতে পারেন এবং সমস্ত চ্যাট ডেটা অনন্য ডেটাবেস ইনস্ট্যান্সে স্টোর করতে পারেন।

এই ক্ষেত্রে, সংস্থা A এবং সংস্থা B ডেটা শেয়ার করে না, আপনার ডেটাবেসে কোনও ডুপ্লিকেট ডেটা নেই এবং আপনি শুধুমাত্র একটি ডেটাবেস ইনস্ট্যান্সের বিরুদ্ধে কোয়েরি করেন। এছাড়াও, প্রতিটি সংস্থার ব্যবহারকারীরা চ্যাট অ্যাপ ব্যবহার করার সময় শুধুমাত্র তাদের সংস্থার ডেটাবেসের সাথে কানেক্ট করেন।

আপনি তখন আগে থেকেই একাধিক ডেটাবেস ইনস্ট্যান্স তৈরি করতে এবং সংস্থার আইডি ব্যবহার করে কোনও টিমকে তার ডেটাবেস ইনস্ট্যান্সে ম্যাপ করতে পারবেন। যেমন, সংস্থা A, Realtime Database A-তে ম্যাপ করে।

আপনার অ্যাপের জন্য ডেটা ম্যাপ করার পদ্ধতি আপনার নির্দিষ্ট ব্যবহারের উপর নির্ভর করে, তবে উপরে বর্ণিত শর্তাবলী এবং কৌশলগুলি আপনার ডেটার জন্য কী কাজ করে তা নির্ধারণ করতে সাহায্য করতে পারে।

একাধিক Realtime Database দৃষ্টান্ত তৈরি করা

আপনি Blaze প্রাইসিং প্ল্যান ব্যবহার করলে, একই Firebase প্রোজেক্টে ১,০০০টি পর্যন্ত ডেটাবেস ইনস্ট্যান্স তৈরি করতে পারবেন।

ডেটাবেস বিভাগের প্রাসঙ্গিক মেনু থেকে Firebase কনসোলে ডেটাবেস তৈরি করুন

  1. Firebase কনসোলে, ডেটাবেস ও স্টোরেজ > রিয়েল-টাইম ডেটাবেস > ডেটা ট্যাবে নেভিগেট করুন।

  2. ড্রপ-ডাউন মেনু থেকে নতুন ডেটাবেস তৈরি করুন বিকল্প বেছে নিন।

  3. আপনার ডেটাবেস রেফারেন্স এবং Security Rules কাস্টমাইজ করুন, তারপর বুঝেছি বিকল্পে ক্লিক করুন।

আপনার যতগুলি ডেটাবেস ইনস্ট্যান্স প্রয়োজন, ততগুলি তৈরি করতে এই প্রসেসটি রিপিট করুন। প্রতিটি ডেটাবেস ইনস্ট্যান্সের নিজস্ব Firebase Realtime Database Security Rules-এর সেট আছে, তাই আপনি নিজের ডেটাতে অ্যাক্সেস ফাইন-টিউন করতে পারবেন।

আপনি Firebase কনসোলে অথবা Realtime Database Management REST API ব্যবহার করে ডেটাবেস ইনস্ট্যান্স তৈরি ও ম্যানেজ করতে পারবেন।

CLI ব্যবহার করে নির্দিষ্ট ইনস্ট্যান্স ম্যানেজ ও ইন্টার‍্যাক্ট করুন

আপনি Firebase CLI ব্যবহার করে নির্দিষ্ট Realtime Database ইনস্ট্যান্স ম্যানেজ ও ইন্টার‍্যাক্ট করতে পারবেন।

ডিফল্ট হিসেবে, CLI কমান্ড আপনার ডিফল্ট ডেটাবেস ইনস্ট্যান্সের সাথে ইন্টার‍্যাক্ট করে। তবে, আপনি --instance DATABASE_NAME ফ্ল্যাগ ব্যবহার করে ডিফল্ট নয় এমন ডেটাবেস ইনস্ট্যান্সের সাথে ইন্টার‍্যাক্ট করতে পারবেন।

যেমন, my-example-shard.firebaseio.com নামের ডেটাবেস ইনস্ট্যান্সের জন্য প্রোফাইলার রান করতে এই কমান্ড ব্যবহার করুন:

firebase database:profile --instance "my-example-shard"

নিম্নলিখিত কমান্ডগুলি --instance ফ্ল্যাগকে সমর্থন করে:

  • firebase database:get
  • firebase database:profile
  • firebase database:push
  • firebase database:remove
  • firebase database:set
  • firebase database:update

প্রতিটি ইনস্ট্যান্সের জন্য Realtime Database Security Rules এডিট ও ডেপ্লয় করুন

আপনার প্রোজেক্টের প্রতিটি ডেটাবেস ইনস্ট্যান্সে আপনার Realtime Database Security Rules যাতে উপযুক্ত অ্যাক্সেস দেয় তা নিশ্চিত করুন। প্রতিটি ডেটাবেসের নিজস্ব নিয়মাবলী আছে, যা আপনি Firebase কনসোল থেকে এডিট ও ডেপ্লয় করতে পারেন অথবা Firebase CLI ব্যবহার করে টার্গেট ডেপ্লয় করতে পারেন।

  • Firebase কনসোল থেকে নিয়ম এডিট ও ডিপ্লয় করতে, এই ধাপগুলি অনুসরণ করুন:

    1. Firebase কনসোলে, ডেটাবেস ও স্টোরেজ > রিয়েল-টাইম ডেটাবেস > নিয়ম ট্যাবে নেভিগেট করুন।

    2. আপনি যে ডেটাবেস এডিট করতে চান সেটি বেছে নিন, তারপর নিয়মগুলি পরিবর্তন করুন।

  • Firebase CLI থেকে নিয়ম এডিট ও ডিপ্লয় করতে, এই ধাপগুলি অনুসরণ করুন:

    1. আপনার ডেটাবেস ইনস্ট্যান্সের জন্য নিয়ম ফাইলে নিয়মগুলি পরিবর্তন করুন (যেমন, foo.rules.json)।

    2. একই রুল ফাইল ব্যবহার করে এমন ডেটাবেস অ্যাসোসিয়েট করতে ডিপ্লয় টার্গেট তৈরি ও প্রয়োগ করুন। যেমন:

      firebase target:apply database main my-db-1 my-db-2
      firebase target:apply database other my-other-db-3

    3. ডেপ্লয় টার্গেট সহ আপনার firebase.json কনফিগারেশন ফাইল আপডেট করুন:

      {
        "database": [
          {"target": "main", "rules": "foo.rules.json"},
          {"target": "other", "rules": "bar.rules.json"}
        ]
      }
      
    4. ডিপ্লয় কমান্ড রান করুন:

      firebase deploy

একই জায়গা থেকে নিয়ম এডিট ও প্রয়োগ করতে ভুলবেন না। Firebase CLI থেকে নিয়ম প্রয়োগ করলে, Firebase কনসোলে আপনার করা যেকোনও এডিট ওভাররাইড হয়ে যায় এবং Firebase কনসোলে সরাসরি নিয়ম এডিট করলে, Firebase CLI-এর মাধ্যমে আপনার প্রয়োগ করা যেকোনও সাম্প্রতিক পরিবর্তন ওভাররাইড হয়ে যায়।

একাধিক ডেটাবেস ইনস্ট্যান্সের সাথে আপনার অ্যাপ কানেক্ট করুন

সেকেন্ডারি ডেটাবেস ইনস্ট্যান্সে স্টোর করা ডেটা অ্যাক্সেস করতে ডেটাবেস রেফারেন্স ব্যবহার করুন। আপনি URL বা অ্যাপের মাধ্যমে নির্দিষ্ট ডেটাবেস ইনস্ট্যান্সের রেফারেন্স পেতে পারেন। আপনি কোনও URL উল্লেখ না করলে, অ্যাপের ডিফল্ট ডেটাবেস ইনস্ট্যান্সের রেফারেন্স পাবেন।

Web

import { initializeApp } from "firebase/app";
import { getDatabase } from "firebase/database";

const app1 = initializeApp({
  databaseURL: "https://testapp-1234-1.firebaseio.com"
});

const app2 = initializeApp({
  databaseURL: "https://testapp-1234-2.firebaseio.com"
}, 'app2');

// Get the default database instance for an app1
const database1 = getDatabase(app1);

// Get a database instance for app2
const database2 = getDatabase(app2);

Web

const app1 = firebase.initializeApp({
  databaseURL: "https://testapp-1234-1.firebaseio.com"
});

const app2 = firebase.initializeApp({
  databaseURL: "https://testapp-1234-2.firebaseio.com"
}, 'app2');

// Get the default database instance for an app1
var database1 = firebase.database();

// Get a database instance for app2
var database2 = firebase.database(app2);
Swift
মনে রাখবেন: এই Firebase প্রোডাক্ট অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// Get a secondary database instance by URL var ref: DatabaseReference! ref = Database.database("https://testapp-1234.firebaseio.com").reference()
Objective-C
মনে রাখবেন: এই Firebase প্রোডাক্ট অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
// URL-এর মাধ্যমে সেকেন্ডারি ডেটাবেস ইনস্ট্যান্স পান @property (strong, nonatomic) FIRDatabaseReference *ref; self.ref = [[FIRDatabase databaseWithURL:@"https://testapp-1234.firebaseio.com"] reference];

Kotlin

// Get the default database instance for an app
val primary = Firebase.database.reference

// Get a secondary database instance by URL
val secondary = Firebase.database("https://testapp-1234.firebaseio.com").reference

Java

// Get the default database instance for an app
DatabaseReference primary = FirebaseDatabase.getInstance()
        .getReference();

// Get a secondary database instance by URL
DatabaseReference secondary = FirebaseDatabase.getInstance("https://testapp-1234.firebaseio.com")
        .getReference();

প্রতিটি ডেটাবেসে কানেকশন অপ্টিমাইজ করুন

কোনও সেশন চলাকালীন প্রতিটি ক্লায়েন্টকে একাধিক ডেটাবেসের সাথে কানেক্ট করতে হলে, আপনি প্রতিটি ডেটাবেস ইনস্ট্যান্সের সাথে শুধুমাত্র যতক্ষণ প্রয়োজন ততক্ষণ কানেক্ট করে প্রতিটি ডেটাবেস ইনস্ট্যান্সের সাথে একই সময়ে কানেকশনের সংখ্যা কমাতে পারবেন।

আরও পরামর্শ পান

একাধিক ডেটাবেস ইনস্ট্যান্স জুড়ে আপনার ডেটা শার্ডিং করার জন্য আরও সাহায্যের প্রয়োজন হলে, আমাদের Slack চ্যানেল বা Stack Overflow-এ Firebase বিশেষজ্ঞদের সাথে যোগাযোগ করুন।