ডেটাবেসের পারফর্ম্যান্স অপ্টিমাইজ করা

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

Realtime Database পারফর্ম্যান্স মনিটর করা

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

  • হাই-লেভেল ওভারভিউ: ইনডেক্স না করা কোয়েরির তালিকা এবং রিড/রাইট অপারেশনের রিয়েল-টাইম ওভারভিউয়ের জন্য প্রোফাইলার টুল ব্যবহার করুন।
  • বিল করা ব্যবহারের অনুমান: আপনার বিল করা ব্যবহার এবং উচ্চ-স্তরের পারফর্ম্যান্স মেট্রিক্স দেখতে Firebase কনসোলে উপলভ্য ব্যবহারের মেট্রিক্স ব্যবহার করুন।
  • বিস্তারিত ড্রিলডাউন: সময়ের সাথে সাথে আপনার ডেটাবেস কেমন পারফর্ম করছে তা আরও গ্রানুলারভাবে দেখতে Cloud Monitoring ব্যবহার করুন।

মেট্রিক অনুযায়ী পারফর্ম্যান্স উন্নত করুন

ডেটা সংগ্রহ করার পরে, আপনি যে পারফর্ম্যান্সের ক্ষেত্রটি উন্নত করতে চান তার উপর ভিত্তি করে নিম্নলিখিত পেশাদার পদ্ধতি এবং কৌশলগুলি এক্সপ্লোর করুন।

এক নজরে পারফর্ম্যান্স উন্নত করার স্ট্র্যাটেজি
মেট্রিক বিবরণ পেশাদার পদ্ধতি
লোড/ব্যবহার যেকোনও সময়ে প্রসেসিং অনুরোধের জন্য আপনার ডেটাবেসের কতটা ক্ষমতা ব্যবহার করা হচ্ছে তা অপ্টিমাইজ করুন (এটি **লোড** বা **io/database_load** মেট্রিক্সে দেখা যায়)। আপনার ডেটা স্ট্রাকচার অপ্টিমাইজ করুন
ডেটাবেস জুড়ে ডেটা শার্ড করুন
লিসনারের কার্যকারিতা উন্নত করুন
কোয়েরি-ভিত্তিক নিয়মের মাধ্যমে ডাউনলোড সীমিত করুন
কানেকশন অপ্টিমাইজ করুন
অ্যাক্টিভ কানেকশন আপনার ডেটাবেসে একই সাথে অ্যাক্টিভ কানেকশনের সংখ্যা ব্যালেন্স করুন যাতে ২০০,০০০ কানেকশনের সীমার মধ্যে থাকতে পারেন। ডেটাবেস জুড়ে ডেটা শার্ড করুন
নতুন কানেকশন কমান
আউটগোয়িং ব্যান্ডউইথ আপনার ডেটাবেস থেকে ডাউনলোড করা ডেটার পরিমাণ আপনার প্রত্যাশার চেয়ে বেশি হলে, আপনি রিড অপারেশনের দক্ষতা উন্নত করতে এবং এনক্রিপশন ওভারহেড কমাতে পারেন। কানেকশন অপ্টিমাইজ করা
আপনার ডেটা স্ট্রাকচার অপ্টিমাইজ করা
কোয়েরি-ভিত্তিক নিয়মের মাধ্যমে ডাউনলোড সীমিত করা
SSL সেশন আবার ব্যবহার করা
লিসনারের দক্ষতা উন্নত করা
ডেটা অ্যাক্সেস সীমিত করা
স্টোরেজ আপনি অব্যবহৃত ডেটা স্টোর করছেন না তা নিশ্চিত করুন, অথবা কোটার মধ্যে থাকতে অন্যান্য ডেটাবেস এবং/অথবা Firebase প্রোডাক্ট জুড়ে আপনার স্টোর করা ডেটার ভারসাম্য বজায় রাখুন। অব্যবহৃত ডেটা ক্লিন-আপ করুন
আপনার ডেটা স্ট্রাকচার অপ্টিমাইজ করুন
ডেটাবেস জুড়ে ডেটা শার্ড করুন
Cloud Storage for Firebase ব্যবহার করুন

কানেকশন অপ্টিমাইজ করুন

GET এবং PUT-এর মতো RESTful অনুরোধের জন্য এখনও একটি কানেকশন প্রয়োজন, যদিও সেই কানেকশনটি স্বল্পস্থায়ী। এই ঘন ঘন, স্বল্পস্থায়ী কানেকশন আসলে আপনার ডেটাবেসে রিয়েল-টাইম, অ্যাক্টিভ কানেকশনের চেয়ে উল্লেখযোগ্যভাবে বেশি কানেকশন খরচ, ডেটাবেস লোড এবং আউটগোয়িং ব্যান্ডউইথ যোগ করতে পারে।

সম্ভব হলে, REST API-এর পরিবর্তে আপনার অ্যাপের প্ল্যাটফর্মের জন্য নেটিভ SDK ব্যবহার করুন। SDK ওপেন কানেকশন বজায় রাখে, SSL এনক্রিপশন খরচ কমায় এবং REST API-এর সাথে যোগ হতে পারে এমন ডেটাবেস লোড কমায়।

আপনি REST API ব্যবহার করলে, ওপেন কানেকশন বজায় রাখতে HTTP কিপ-অ্যালাইভ ব্যবহার করার কথা বিবেচনা করুন অথবা সার্ভার-প্রেরিত ইভেন্ট ব্যবহার করুন, যা SSL হ্যান্ডশেক থেকে খরচ কমাতে পারে।

একাধিক ডেটাবেস জুড়ে শার্ড ডেটা

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

  1. আপনার অ্যাপে অনুমোদিত মোট যুগপৎ, অ্যাক্টিভ কানেকশন বাড়ান, ডেটাবেস ইনস্ট্যান্স জুড়ে সেগুলি স্প্লিট করে।
  2. ডেটাবেস ইনস্ট্যান্স জুড়ে ব্যালেন্স লোড।
  3. আপনার যদি ব্যবহারকারীদের স্বতন্ত্র গ্রুপ থাকে যাদের শুধুমাত্র বিচ্ছিন্ন ডেটা সেটে অ্যাক্সেস প্রয়োজন, তাহলে উচ্চ থ্রুপুট এবং কম লেটেন্সির জন্য বিভিন্ন ডেটাবেস ইনস্ট্যান্স ব্যবহার করুন।

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

কীভাবে এবং কখন ডেটা শার্ড করতে হয় সেই সম্পর্কে আরও জানুন।

দক্ষ ডেটা স্ট্রাকচার তৈরি করা

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

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

এছাড়াও, প্রতিটি রাইট আপনার মোট ডেটাবেস ব্যবহারের ০.১% পর্যন্ত নিতে পারে। আপনার ডেটা এমনভাবে সাজান যাতে আপনি SDK-তে update() পদ্ধতি বা RESTful PATCH অনুরোধের মাধ্যমে মাল্টি-পাথ আপডেট হিসেবে একটি অপারেশনে ব্যাচ রাইট করতে পারেন।

আপনার ডেটা স্ট্রাকচার অপ্টিমাইজ করতে এবং পারফর্ম্যান্স উন্নত করতে, ডেটা স্ট্রাকচারের জন্য পেশাদার পদ্ধতি অনুসরণ করুন।

অননুমোদিত অ্যাক্সেস আটকানো

Realtime Database Security Rules-এর মাধ্যমে আপনার ডেটাবেসে অননুমোদিত অপারেশন আটকান। যেমন, নিয়ম ব্যবহার করলে, কোনও ক্ষতিকর ব্যবহারকারী বারবার আপনার সম্পূর্ণ ডেটাবেস ডাউনলোড করার মতো পরিস্থিতি এড়ানো যেতে পারে।

Firebase রিয়েলটাইম ডেটাবেস রুল ব্যবহার করা সম্পর্কে আরও জানুন।

ডাউনলোড সীমিত করতে কোয়েরি-ভিত্তিক নিয়ম ব্যবহার করুন

Realtime Database Security Rules আপনার ডেটাবেসে ডেটা অ্যাক্সেস সীমাবদ্ধ করে, তবে সেগুলি রিড অপারেশনের মাধ্যমে ফেরত আসা ডেটার উপর সীমা হিসেবেও কাজ করতে পারে। আপনি যখন কোয়েরি-ভিত্তিক নিয়ম ব্যবহার করেন, যেমন query. এক্সপ্রেশন দ্বারা সংজ্ঞায়িত query.limitToFirst, কোয়েরি শুধুমাত্র নিয়মের দ্বারা আবদ্ধ ডেটা ফিরিয়ে আনে।

যেমন, নিম্নলিখিত নিয়মটি অগ্রাধিকারের ক্রম অনুযায়ী কোনও কোয়েরির প্রথম ১০০০টি ফলাফলের ক্ষেত্রেই শুধু রিড অ্যাক্সেস সীমিত করে:

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 ডিভাইসে বিল্ট-ইন অ্যাপে স্কেলেবল কোড অন্তর্ভুক্ত করা উচিত যা আপনি সহজেই আপডেট করতে পারবেন। ব্যবহারের কেসগুলি ভালভাবে পরীক্ষা করতে ভুলবেন না, এমন পরিস্থিতি বিবেচনা করুন যেখানে আপনার ব্যবহারকারীর সংখ্যা দ্রুত বৃদ্ধি পেতে পারে এবং আপনার কোডে আপডেট প্রয়োগ করার ক্ষমতা তৈরি করুন। ভবিষ্যতে আপনাকে যেসব বড় পরিবর্তন করতে হতে পারে, সেগুলি ভালোভাবে বিবেচনা করুন, যেমন, আপনি যদি ডেটা শার্ড করার সিদ্ধান্ত নেন।