Firebase Realtime Database কর্মক্ষমতা অপ্টিমাইজ করার এবং আপনার ডেটা স্কেল করার সর্বোত্তম উপায় হল একাধিক Realtime Database ইনস্ট্যান্সে আপনার ডেটা বিভক্ত করা, যা ডাটাবেস শার্ডিং নামেও পরিচিত। লোড ব্যালেন্সিং এবং পারফরম্যান্স অপ্টিমাইজেশান ছাড়াও শেয়ারিং আপনাকে পৃথক ডাটাবেস দৃষ্টান্তগুলিতে প্রযোজ্য সীমা ছাড়িয়ে যাওয়ার নমনীয়তা দেয়।
কখন আপনার ডেটা ভাগ করবেন
আপনি যদি Realtime Database ব্যবহার করেন এবং নিম্নলিখিত পরিস্থিতিতে যেকোনও ফিট করেন তাহলে আপনি একাধিক ডাটাবেস জুড়ে আপনার ডেটা ভাগ করতে চাইতে পারেন:
- আপনি 200,000 যুগপত সংযোগ, 1,000 লেখার ক্রিয়াকলাপ/সেকেন্ড, বা একটি ডাটাবেস উদাহরণের জন্য অন্য যেকোনো সীমার বাইরে স্কেল করতে চান।
- আপনার একাধিক, বিচ্ছিন্ন ডেটা সেট আছে এবং আপনি পারফরম্যান্স অপ্টিমাইজ করতে চান (উদাহরণস্বরূপ, একটি চ্যাট অ্যাপ যা ব্যবহারকারীদের আলাদা, স্বতন্ত্র গ্রুপ পরিবেশন করে)।
- আপটাইম উন্নত করতে এবং একটি একক ডাটাবেস উদাহরণ ওভারলোড করার ঝুঁকি কমাতে আপনি একাধিক ডাটাবেস জুড়ে ভারসাম্য বজায় রাখতে চান।
কীভাবে আপনার ডেটা ভাগ করবেন
আপনার ডেটা ভাগ করতে, এই পদক্ষেপগুলি অনুসরণ করুন (নীচে আরও বিশদে বর্ণনা করা হয়েছে):
- আপনার অ্যাপের নির্দিষ্ট চাহিদা অনুযায়ী একাধিক ডাটাবেসে আপনার ডেটা ম্যাপ করুন।
- একাধিক ডাটাবেস উদাহরণ তৈরি করুন।
- আপনার অ্যাপটি কনফিগার করুন যাতে এটি প্রতিটি ডেটা সেটের জন্য প্রয়োজনীয় Realtime Database সাথে সংযুক্ত হয়।
আপনার ডেটা ম্যাপ করুন
আপনি যখন একাধিক ডেটাবেসে আপনার ডেটা ম্যাপ করছেন, নিম্নলিখিত শর্তগুলি পূরণ করার চেষ্টা করুন:
- প্রতিটি ক্যোয়ারী শুধুমাত্র একটি ডাটাবেস উদাহরণের বিরুদ্ধে চলে। Realtime Database দৃষ্টান্ত জুড়ে প্রশ্ন সমর্থন করে না।
- ডাটাবেস ইন্সট্যান্স জুড়ে ডেটা শেয়ারিং বা ডুপ্লিকেশন নেই (বা ন্যূনতম শেয়ারিং বা ডুপ্লিকেশন)।
- প্রতিটি অ্যাপ ইন্সট্যান্স যে কোনো মুহূর্তে শুধুমাত্র একটি ডাটাবেসের সাথে সংযোগ করে।
আপনি যখন আপনার ডেটা ম্যাপ করছেন, নিম্নলিখিত কৌশলগুলি প্রয়োগ করার কথা বিবেচনা করুন:
একটি "মাস্টার শার্ড" তৈরি করুন
ডেটাবেস ইনস্ট্যান্স জুড়ে আপনার ডেটা কীভাবে সংরক্ষণ করা হয় তার একটি মানচিত্র সংরক্ষণ করুন। এইভাবে, আপনি প্রোগ্রাম্যাটিকভাবে দেখতে পারেন কোন ডাটাবেস দৃষ্টান্ত সংযোগকারী ক্লায়েন্টের সাথে সামঞ্জস্যপূর্ণ। মনে রাখবেন যে এটি আপনার প্রয়োজনের সময় আপনার প্রয়োজনীয় নির্দিষ্ট ডাটাবেসের সাথে সরাসরি সংযোগ করার চেয়ে বেশি ওভারহেড থাকতে পারে।
বিভাগ দ্বারা বা গ্রাহক দ্বারা বালতি তথ্য
ব্যবহারকারী বা ডেটা টাইপ দ্বারা গোষ্ঠীবদ্ধ ডাটাবেস ইনস্ট্যান্সে ডেটা সংরক্ষণ করুন। উদাহরণস্বরূপ, আপনি যদি একটি চ্যাট অ্যাপ্লিকেশন তৈরি করেন যা একাধিক সংস্থাকে পরিবেশন করে, আপনি প্রতিটি সংস্থার জন্য একটি ডাটাবেস উদাহরণ তৈরি করতে পারেন এবং সমস্ত চ্যাট ডেটা অনন্য ডাটাবেস দৃষ্টান্তে সংরক্ষণ করতে পারেন।
এই ক্ষেত্রে, সংস্থা A এবং সংগঠন B ডেটা ভাগ করে না, আপনার ডাটাবেসে কোনো ডুপ্লিকেট ডেটা নেই এবং আপনি শুধুমাত্র একটি ডাটাবেস উদাহরণের বিরুদ্ধে প্রশ্নগুলি সম্পাদন করেন। উপরন্তু, প্রতিটি প্রতিষ্ঠানের ব্যবহারকারীরা যখন চ্যাট অ্যাপ ব্যবহার করে তখনই শুধুমাত্র তাদের প্রতিষ্ঠানের ডাটাবেসের সাথে সংযোগ স্থাপন করে।
তারপরে আপনি আগে থেকেই বেশ কয়েকটি ডাটাবেস দৃষ্টান্ত তৈরি করতে পারেন এবং একটি দলকে তার ডাটাবেস উদাহরণে ম্যাপ করতে সংস্থার আইডি ব্যবহার করতে পারেন। উদাহরণ স্বরূপ, সংগঠন A মানচিত্র রিয়েলটাইম ডেটাবেস A-তে।
আপনি যেভাবে আপনার অ্যাপের জন্য ডেটা ম্যাপ করেন তা আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে নির্ভর করে, তবে উপরে বর্ণিত শর্ত এবং কৌশলগুলি আপনাকে আপনার ডেটার জন্য কী কাজ করে তা নির্ধারণ করতে সাহায্য করতে পারে।
একাধিক Realtime Database উদাহরণ তৈরি করুন
আপনি যদি ব্লেজ প্রাইসিং প্ল্যানে থাকেন, আপনি একই ফায়ারবেস প্রকল্পে 1,000টি পর্যন্ত ডাটাবেস ইন্সট্যান্স তৈরি করতে পারেন।
ডেটাবেস বিভাগে প্রসঙ্গ মেনু সহ ফায়ারবেস কনসোল" />
- Firebase কনসোলে, ডেভেলপ > ডেটাবেস বিভাগে ডেটা ট্যাবে যান।
- Realtime Database বিভাগে মেনু থেকে নতুন ডাটাবেস তৈরি করুন নির্বাচন করুন।
- আপনার ডাটাবেস রেফারেন্স এবং নিরাপত্তা নিয়ম কাস্টমাইজ করুন, তারপর এটি ক্লিক করুন।
আপনার যতগুলি প্রয়োজন ততগুলি ডেটাবেস উদাহরণ তৈরি করতে প্রক্রিয়াটি পুনরাবৃত্তি করুন। প্রতিটি ডাটাবেসের দৃষ্টান্তের নিজস্ব Firebase Realtime Database Security Rules সেট রয়েছে, যাতে আপনি আপনার ডেটাতে অ্যাক্সেস ঠিক করতে পারেন।
আপনি Firebase কনসোলে বা রিয়েলটাইম ডেটাবেস ম্যানেজমেন্ট REST API ব্যবহার করে ডেটাবেস ইনস্ট্যান্স তৈরি এবং পরিচালনা করতে পারেন।
প্রতিটি দৃষ্টান্তের জন্য Realtime Database Security Rules সম্পাদনা এবং স্থাপন করুন
নিশ্চিত করুন যে আপনার Realtime Database Security Rules আপনার প্রকল্পের প্রতিটি ডাটাবেস উদাহরণে যথাযথ অ্যাক্সেসের অনুমতি দেয়। প্রতিটি ডাটাবেসের নিজস্ব নিয়ম রয়েছে, যা আপনি Firebase কনসোল থেকে সম্পাদনা করতে এবং স্থাপন করতে পারেন, অথবা Firebase CLI ব্যবহার করে লক্ষ্য স্থাপন করতে পারেন ।
Firebase কনসোল থেকে নিয়মগুলি সম্পাদনা এবং স্থাপন করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- বিকাশ > ডেটাবেস বিভাগে নিয়ম ট্যাবে যান।
- আপনি যে ডাটাবেসটি সম্পাদনা করতে চান তা নির্বাচন করুন, তারপর নিয়মগুলি সংশোধন করুন।
Firebase CLI থেকে নিয়মগুলি সম্পাদনা এবং স্থাপন করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- আপনার ডাটাবেস দৃষ্টান্তগুলির জন্য নিয়ম ফাইলগুলিতে নিয়মগুলি পরিবর্তন করুন (উদাহরণস্বরূপ,
foo.rules.json
)। - একই নিয়ম ফাইল ব্যবহার করে এমন ডেটাবেস সংযুক্ত করতে লক্ষ্যমাত্রা তৈরি করুন এবং প্রয়োগ করুন। যেমন:
firebase target:apply database main my-db-1 my-db-2
firebase target:apply database other my-other-db-3
স্থাপনার লক্ষ্যগুলির সাথে আপনার
firebase.json
কনফিগারেশন ফাইল আপডেট করুন:{ "database": [ {"target": "main", "rules": "foo.rules.json"}, {"target": "other", "rules": "bar.rules.json"} ] }
স্থাপন কমান্ড চালান:
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);
সুইফট
// Get the default database instance for an appvar ref: DatabaseReference! ref = Database.database().reference()// URL var রেফারেন্স দ্বারা একটি সেকেন্ডারি ডাটাবেস ইনস্ট্যান্স পান: DatabaseReference! ref = Database.database("https://testapp-1234.firebaseio.com").রেফারেন্স()
উদ্দেশ্য-C
// 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"] রেফারেন্স];
Kotlin+KTX
// 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"
প্রতিটি ডাটাবেসের সংযোগগুলি অপ্টিমাইজ করুন
প্রতিটি ক্লায়েন্টকে একটি সেশন চলাকালীন একাধিক ডাটাবেসের সাথে সংযোগ করার প্রয়োজন হলে, আপনি প্রতিটি ডাটাবেস দৃষ্টান্তের সাথে সংযোগের মাধ্যমে একযোগে সংযোগের সংখ্যা কমাতে পারেন যতক্ষণ প্রয়োজন ততক্ষণের জন্য।
আরো পরামর্শ পান
একাধিক ডাটাবেস দৃষ্টান্ত জুড়ে আপনার ডেটা ভাগ করার জন্য আরও সাহায্যের প্রয়োজন হলে, আমাদের স্ল্যাক চ্যানেলে বা স্ট্যাক ওভারফ্লোতে ফায়ারবেস বিশেষজ্ঞদের সাথে যোগাযোগ করুন।