আপনার অ্যাপে Firebase Realtime Database পারফরম্যান্স উন্নত করার কয়েকটি ভিন্ন উপায় রয়েছে। আপনার Realtime Database পারফরম্যান্স অপ্টিমাইজ করার জন্য আপনি কী করতে পারেন তা জানতে, বিভিন্ন Realtime Database মনিটরিং টুলের মাধ্যমে ডেটা সংগ্রহ করুন, তারপর সেই অনুযায়ী আপনার অ্যাপ বা Realtime Database ব্যবহারে পরিবর্তন আনুন।
Realtime Database কর্মক্ষমতা নিরীক্ষণ করুন
আপনার প্রয়োজনীয় সূক্ষ্মতার মাত্রার উপর নির্ভর করে, আপনি কয়েকটি ভিন্ন টুলের মাধ্যমে আপনার Realtime Database পারফরম্যান্স সম্পর্কে ডেটা সংগ্রহ করতে পারেন:
- উচ্চ-স্তরের সংক্ষিপ্ত বিবরণ: ইনডেক্সবিহীন কোয়েরিগুলোর তালিকা এবং রিড/রাইট অপারেশনগুলোর রিয়েল-টাইম সার্বিক চিত্র পেতে প্রোফাইলার টুলটি ব্যবহার করুন।
- বিলযোগ্য ব্যবহারের আনুমানিক হিসাব: আপনার বিলযোগ্য ব্যবহার এবং উচ্চ-স্তরের পারফরম্যান্স মেট্রিক্স দেখতে Firebase কনসোলে উপলব্ধ ব্যবহারের মেট্রিক্স ব্যবহার করুন।
- বিশদ বিশ্লেষণ: সময়ের সাথে সাথে আপনার ডাটাবেস কেমন পারফর্ম করছে, তা আরও পুঙ্খানুপুঙ্খভাবে জানতে Cloud Monitoring ব্যবহার করুন।
মেট্রিকের মাধ্যমে কর্মক্ষমতা উন্নত করুন
তথ্য সংগ্রহ করার পর, আপনি যে কর্মক্ষমতার ক্ষেত্রটি উন্নত করতে চান তার উপর ভিত্তি করে নিম্নলিখিত সেরা অনুশীলন এবং কৌশলগুলি অন্বেষণ করুন।
| কর্মক্ষমতা উন্নয়ন কৌশলসমূহ এক নজরে | ||
|---|---|---|
| মেট্রিক | বর্ণনা | সর্বোত্তম অনুশীলন |
| লোড/ব্যবহার | যেকোনো নির্দিষ্ট সময়ে অনুরোধ প্রক্রিয়াকরণে আপনার ডাটাবেসের ক্ষমতার কতটুকু ব্যবহৃত হচ্ছে তা অপ্টিমাইজ করুন (যা **Load** বা **io/database_load** মেট্রিক্সে প্রতিফলিত হয়)। | আপনার ডেটা কাঠামো অপ্টিমাইজ করুন ডেটাবেস জুড়ে ডেটা শেয়ার করুন শ্রোতার দক্ষতা উন্নত করুন কোয়েরি-ভিত্তিক নিয়ম ব্যবহার করে ডাউনলোড সীমিত করুন সংযোগগুলি অপ্টিমাইজ করুন |
| সক্রিয় সংযোগ | আপনার ডাটাবেসে একই সাথে সক্রিয় সংযোগের সংখ্যা এমনভাবে সামঞ্জস্য করুন যাতে তা ২,০০,০০০ সংযোগের সীমার মধ্যে থাকে। | ডেটাবেস জুড়ে ডেটা শেয়ার করুন নতুন সংযোগ হ্রাস করুন |
| বহির্গামী ব্যান্ডউইথ | আপনার ডাটাবেস থেকে ডাউনলোডের পরিমাণ প্রত্যাশার চেয়ে বেশি মনে হলে, আপনি আপনার রিড অপারেশনের কার্যকারিতা বাড়াতে এবং এনক্রিপশন ওভারহেড কমাতে পারেন। | সংযোগগুলি অপ্টিমাইজ করুন আপনার ডেটা কাঠামো অপ্টিমাইজ করুন কোয়েরি-ভিত্তিক নিয়ম ব্যবহার করে ডাউনলোড সীমিত করুন SSL সেশনগুলি পুনরায় ব্যবহার করুন শ্রোতার দক্ষতা উন্নত করুন ডেটাতে প্রবেশাধিকার সীমাবদ্ধ করুন |
| স্টোরেজ | নিশ্চিত করুন যে আপনি অব্যবহৃত ডেটা সংরক্ষণ করছেন না, অথবা কোটার মধ্যে থাকার জন্য আপনার সংরক্ষিত ডেটা অন্যান্য ডেটাবেস এবং/অথবা ফায়ারবেস প্রোডাক্টের মধ্যে ভারসাম্যপূর্ণভাবে ব্যবহার করুন। | অব্যবহৃত ডেটা পরিষ্কার করুন আপনার ডেটা কাঠামো অপ্টিমাইজ করুন ডেটাবেস জুড়ে ডেটা শেয়ার করুন Cloud Storage for Firebase ব্যবহার করুন |
সংযোগগুলি অপ্টিমাইজ করুন
GET এবং PUT মতো RESTful অনুরোধগুলির জন্যও একটি সংযোগের প্রয়োজন হয়, যদিও সেই সংযোগটি স্বল্পস্থায়ী। এই ঘন ঘন ও স্বল্পস্থায়ী সংযোগগুলি আপনার ডাটাবেসের রিয়েল-টাইম, সক্রিয় সংযোগগুলির তুলনায় প্রকৃতপক্ষে অনেক বেশি সংযোগ খরচ, ডাটাবেস লোড এবং বহির্গামী ব্যান্ডউইথের কারণ হতে পারে।
যখনই সম্ভব, REST API-এর পরিবর্তে আপনার অ্যাপের প্ল্যাটফর্মের জন্য নেটিভ SDK ব্যবহার করুন। SDK-গুলো খোলা সংযোগ বজায় রাখে, ফলে SSL এনক্রিপশনের খরচ এবং ডাটাবেসের উপর চাপ কমে যায়, যা REST API ব্যবহারে বেড়ে যেতে পারে।
আপনি যদি REST API ব্যবহার করেন, তাহলে সংযোগ খোলা রাখতে HTTP keep-alive ব্যবহার করার কথা ভাবতে পারেন অথবা server-sent events ব্যবহার করতে পারেন, যা SSL হ্যান্ডশেকের খরচ কমাতে পারে।
একাধিক ডেটাবেসে ডেটা শেয়ার করুন
আপনার ডেটাকে একাধিক Realtime Database ইনস্ট্যান্সে ভাগ করা, যা ডেটাবেস শার্ডিং নামেও পরিচিত, এর তিনটি সুবিধা রয়েছে:
- আপনার অ্যাপে অনুমোদিত মোট একযোগে সক্রিয় সংযোগের সংখ্যা বাড়াতে সেগুলোকে ডাটাবেস ইনস্ট্যান্সগুলোর মধ্যে ভাগ করে দিন।
- ডাটাবেস ইনস্ট্যান্সগুলোর মধ্যে লোডের ভারসাম্য বজায় রাখুন।
- আপনার যদি স্বতন্ত্র ব্যবহারকারী গোষ্ঠী থাকে যাদের কেবল পৃথক ডেটা সেটে অ্যাক্সেসের প্রয়োজন, তাহলে উচ্চতর থ্রুপুট এবং কম লেটেন্সির জন্য আলাদা ডাটাবেস ইনস্ট্যান্স ব্যবহার করুন।
আপনি যদি ব্লেজ প্রাইসিং প্ল্যানে থাকেন, তাহলে একই ফায়ারবেস প্রজেক্টের মধ্যে একাধিক ডেটাবেস ইনস্ট্যান্স তৈরি করতে পারবেন এবং সব ইনস্ট্যান্স জুড়ে একটি সাধারণ ইউজার অথেন্টিকেশন পদ্ধতি ব্যবহার করতে পারবেন।
কীভাবে এবং কখন ডেটা শার্ড করতে হয় সে সম্পর্কে আরও জানুন।
দক্ষ ডেটা কাঠামো তৈরি করুন
যেহেতু Realtime Database একটি পাথের চাইল্ড নোডগুলো এবং মূল পাথ উভয় থেকেই ডেটা সংগ্রহ করে, তাই আপনার ডেটা স্ট্রাকচার যতটা সম্ভব ফ্ল্যাট রাখা যুক্তিযুক্ত। এর ফলে, ক্লায়েন্টদের কাছে অপ্রয়োজনীয় ডেটা ডাউনলোড না করেই আপনি আপনার প্রয়োজনীয় ডেটা বেছে বেছে সংগ্রহ করতে পারবেন।
বিশেষ করে, আপনার ডেটা কাঠামোবদ্ধ করার সময় লেখা এবং মুছে ফেলার বিষয়গুলো বিবেচনা করুন। উদাহরণস্বরূপ, হাজার হাজার লিফযুক্ত পাথ মুছে ফেলা বেশ ব্যয়বহুল হতে পারে। সেগুলোকে একাধিক সাবট্রি এবং প্রতি নোডে কম লিফযুক্ত পাথে বিভক্ত করলে মুছে ফেলার প্রক্রিয়া দ্রুততর হতে পারে।
এছাড়াও, প্রতিটি রাইট আপনার মোট ডাটাবেস ব্যবহারের ০.১% পর্যন্ত খরচ করতে পারে। আপনার ডেটা এমনভাবে সাজান যাতে আপনি SDK-এর update() মেথড অথবা RESTful PATCH রিকোয়েস্টের মাধ্যমে মাল্টি-পাথ আপডেট হিসেবে একটি একক অপারেশনে রাইটগুলোকে ব্যাচ করতে পারেন।
আপনার ডেটা কাঠামোকে অপ্টিমাইজ করতে এবং কর্মক্ষমতা উন্নত করতে, ডেটা কাঠামোর সর্বোত্তম অনুশীলনগুলো অনুসরণ করুন।
অননুমোদিত প্রবেশ প্রতিরোধ করুন
Realtime Database Security Rules ব্যবহার করে আপনার ডেটাবেসে অননুমোদিত কার্যকলাপ প্রতিরোধ করুন। উদাহরণস্বরূপ, রুলস ব্যবহারের মাধ্যমে এমন পরিস্থিতি এড়ানো যেতে পারে যেখানে কোনো বিদ্বেষী ব্যবহারকারী বারবার আপনার সম্পূর্ণ ডেটাবেস ডাউনলোড করে ফেলে।
ফায়ারবেস রিয়েলটাইম ডেটাবেস রুলস ব্যবহার সম্পর্কে আরও জানুন।
ডাউনলোড সীমিত করতে কোয়েরি-ভিত্তিক নিয়ম ব্যবহার করুন
Realtime Database Security Rules আপনার ডেটাবেসের ডেটাতে অ্যাক্সেস সীমাবদ্ধ করে, তবে এগুলি রিড অপারেশনের মাধ্যমে প্রাপ্ত ডেটার উপর সীমা নির্ধারণ করতেও পারে। যখন আপনি কোয়েরি-ভিত্তিক রুলস ব্যবহার করেন, যা query.limitToFirst এর মতো ` query. এক্সপ্রেশন দ্বারা সংজ্ঞায়িত হয়, তখন কোয়েরিগুলি শুধুমাত্র সেই রুল দ্বারা সীমাবদ্ধ ডেটা পুনরুদ্ধার করে।
উদাহরণস্বরূপ, নিম্নলিখিত নিয়মটি অগ্রাধিকার অনুসারে সাজানো একটি কোয়েরির শুধুমাত্র প্রথম ১০০০টি ফলাফলে পড়ার অ্যাক্সেস সীমাবদ্ধ করে:
messages: {
".read": "query.orderByKey &&
query.limitToFirst <= 1000"
}
// Example query:
db.ref("messages").limitToFirst(1000)
.orderByKey("value")
Realtime Database Security Rules সম্পর্কে আরও জানুন।
সূচক কোয়েরি
আপনার ডেটা ইন্ডেক্স করলে, আপনার অ্যাপের প্রতিটি কোয়েরির জন্য ব্যবহৃত মোট ব্যান্ডউইথ কমে যায়।
SSL সেশনগুলি পুনরায় ব্যবহার করুন
TLS সেশন টিকিট ইস্যু করার মাধ্যমে পুনরায় চালু হওয়া সংযোগের ক্ষেত্রে SSL এনক্রিপশনের অতিরিক্ত খরচ কমান। আপনার যদি ডাটাবেসে ঘন ঘন ও সুরক্ষিত সংযোগের প্রয়োজন হয়, তবে এটি বিশেষভাবে সহায়ক।
শ্রোতার দক্ষতা উন্নত করুন
আপনার লিসেনারগুলিকে পাথের যতটা সম্ভব নিচের দিকে রাখুন, যাতে তারা যে পরিমাণ ডেটা সিঙ্ক করে তা সীমিত থাকে। আপনার লিসেনারগুলি সেই ডেটার কাছাকাছি থাকা উচিত যা আপনি তাদের দিয়ে পেতে চান। ডাটাবেস রুটে লিসেন করবেন না, কারণ এর ফলে আপনার সম্পূর্ণ ডাটাবেস ডাউনলোড হয়ে যায়।
আপনার লিসেন অপারেশনগুলো যে ডেটা রিটার্ন করে তা সীমিত করতে কোয়েরি যোগ করুন এবং এমন লিসেনার ব্যবহার করুন যা শুধুমাত্র ডেটার আপডেট ডাউনলোড করে — উদাহরণস্বরূপ, once() on() )। .once() শুধুমাত্র সেইসব অ্যাকশনের জন্য সংরক্ষিত রাখুন যেগুলোর জন্য সত্যিই ডেটা আপডেটের প্রয়োজন নেই। এছাড়াও, সেরা পারফরম্যান্সের জন্য, যখনই সম্ভব, orderByKey() ব্যবহার করে আপনার কোয়েরিগুলো সর্ট করুন। orderByChild() দিয়ে সর্টিং ৬-৮ গুণ ধীর হতে পারে, এবং orderByValue() দিয়ে সর্টিং বড় ডেটা সেটের জন্য খুব ধীর হতে পারে, কারণ এর জন্য পার্সিস্টেন্স লেয়ার থেকে সম্পূর্ণ লোকেশনটি রিড করার প্রয়োজন হয়।
ডায়নামিকভাবে লিসেনার যোগ করতে ভুলবেন না এবং প্রয়োজন ফুরিয়ে গেলে সেগুলো সরিয়ে ফেলুন।
অব্যবহৃত ডেটা পরিষ্কার করুন
আপনার ডাটাবেস থেকে নির্দিষ্ট সময় পর পর যেকোনো অব্যবহৃত বা ডুপ্লিকেট ডেটা মুছে ফেলুন। আপনি ব্যাকআপ চালিয়ে ম্যানুয়ালি আপনার ডেটা পরীক্ষা করতে পারেন অথবা নির্দিষ্ট সময় পর পর Google Cloud Storage বাকেটে এর ব্যাকআপ নিতে পারেন। এছাড়াও, Cloud Storage for Firebase )-এর মাধ্যমে সংরক্ষিত ডেটা হোস্ট করার কথাও বিবেচনা করতে পারেন।
এমন পরিবর্ধনযোগ্য কোড পাঠান যা আপনি আপডেট করতে পারবেন।
IoT ডিভাইসে তৈরি অ্যাপগুলিতে এমন স্কেলেবল কোড থাকা উচিত যা সহজেই আপডেট করা যায়। ব্যবহারের ক্ষেত্রগুলো পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন, এমন পরিস্থিতিগুলোর কথা মাথায় রাখুন যেখানে আপনার ব্যবহারকারীর সংখ্যা দ্রুতগতিতে বাড়তে পারে, এবং আপনার কোডে আপডেট ডেপ্লয় করার সক্ষমতা তৈরি করুন। ভবিষ্যতে আপনাকে যে বড় ধরনের পরিবর্তনগুলো করতে হতে পারে, যেমন ধরুন আপনি যদি আপনার ডেটা শার্ড করার সিদ্ধান্ত নেন, সে বিষয়েও সতর্কভাবে বিবেচনা করুন।