একাধিক ডাটাবেস সহ স্কেল

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

কখন আপনার ডেটা ছিন্ন করবেন

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

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

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

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

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

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

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

  • প্রতিটি কোয়েরি শুধুমাত্র একটি ডাটাবেস ইনস্ট্যান্সের বিরুদ্ধে চলে। Realtime Database ডাটাবেস ইনস্ট্যান্স জুড়ে কোয়েরি সমর্থন করে না।
  • ডাটাবেস ইনস্ট্যান্স জুড়ে ডেটা শেয়ারিং বা ডুপ্লিকেশন (অথবা ন্যূনতম শেয়ারিং বা ডুপ্লিকেশন) নেই।
  • প্রতিটি অ্যাপের উদাহরণ যেকোনো মুহূর্তে শুধুমাত্র একটি ডাটাবেসের সাথে সংযোগ স্থাপন করে।

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

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

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

বিভাগ বা গ্রাহক অনুসারে বাকেট ডেটা

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

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

এরপর আপনি আগে থেকেই বেশ কয়েকটি ডাটাবেস ইনস্ট্যান্স তৈরি করতে পারেন এবং প্রতিষ্ঠানের আইডি ব্যবহার করে একটি দলকে তার ডাটাবেস ইনস্ট্যান্সের সাথে ম্যাপ করতে পারেন। উদাহরণস্বরূপ, প্রতিষ্ঠান A রিয়েলটাইম ডাটাবেস A-তে ম্যাপ করে।

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

একাধিক Realtime Database ইনস্ট্যান্স তৈরি করুন

আপনি যদি Blaze মূল্য পরিকল্পনায় থাকেন, তাহলে একই Firebase প্রকল্পে আপনি সর্বাধিক 1,000টি ডাটাবেস ইনস্ট্যান্স তৈরি করতে পারবেন।

<span class="" এ একটি ডাটাবেস তৈরি করুন। ডাটাবেস বিভাগে প্রসঙ্গ মেনু সহ ফায়ারবেস কনসোল" />

  1. Firebase কনসোলে, ডেভেলপ > ডেটাবেস বিভাগের ডেটা ট্যাবে যান।
  2. Realtime Database বিভাগের মেনু থেকে নতুন ডাটাবেস তৈরি করুন নির্বাচন করুন।
  3. আপনার ডাটাবেস রেফারেন্স এবং নিরাপত্তা নিয়ম কাস্টমাইজ করুন, তারপর বুঝেছি ক্লিক করুন।

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

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

প্রতিটি উদাহরণের জন্য Realtime Database Security Rules সম্পাদনা এবং স্থাপন করুন

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

  • Firebase কনসোল থেকে নিয়ম সম্পাদনা এবং স্থাপন করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

    1. ডেভেলপ > ডেটাবেস বিভাগের নিয়ম ট্যাবে যান।
    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);
সুইফট
দ্রষ্টব্য: এই Firebase পণ্যটি অ্যাপ ক্লিপ টার্গেটে উপলব্ধ নয়।
// Get the default database instance for an app
var ref: DatabaseReference!

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

self.ref = [[FIRDatabase database] reference];
// URL @property (শক্তিশালী, নন-অ্যাটমিক) 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();

Firebase CLI ব্যবহার করার সময় একটি উদাহরণ নির্দিষ্ট করুন

কোন Firebase Realtime Database Firebase CLI কমান্ড প্রয়োগ করতে চান তা নির্দিষ্ট করতে --instance বিকল্পটি ব্যবহার করুন। উদাহরণস্বরূপ, my-example-shard.firebaseio.com নামক একটি ডাটাবেস ইনস্ট্যান্সের জন্য প্রোফাইলার চালানোর জন্য নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

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

প্রতিটি ডাটাবেসের সংযোগগুলি অপ্টিমাইজ করুন

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

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

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