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

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

Realtime Database কর্মক্ষমতা নিরীক্ষণ করুন

আপনার প্রয়োজনীয় গ্র্যানুলারিটির স্তরের উপর নির্ভর করে আপনি কয়েকটি ভিন্ন সরঞ্জামের মাধ্যমে আপনার Realtime Database কর্মক্ষমতা সম্পর্কে তথ্য সংগ্রহ করতে পারেন:

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

মেট্রিক অনুসারে কর্মক্ষমতা উন্নত করুন

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

এক নজরে কর্মক্ষমতা উন্নয়নের কৌশল
মেট্রিক বিবরণ সেরা অনুশীলন
লোড/ব্যবহার যেকোনো সময়ে অনুরোধ প্রক্রিয়াকরণের জন্য আপনার ডাটাবেসের ক্ষমতা কতটা ব্যবহার করা হচ্ছে তা অপ্টিমাইজ করুন (**লোড** বা **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 ইনস্ট্যান্সে আপনার ডেটা বিভক্ত করা, যা অন্যথায় ডাটাবেস শারডিং নামে পরিচিত, তিনটি সুবিধা প্রদান করে:

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

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

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

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

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

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

অতিরিক্তভাবে, প্রতিটি লেখা আপনার মোট ডাটাবেস ব্যবহারের 0.1% দখল করতে পারে। আপনার ডেটা এমনভাবে গঠন করুন যাতে আপনি SDK-তে update() পদ্ধতি অথবা RESTful PATCH অনুরোধের মাধ্যমে মাল্টি-পাথ আপডেট হিসাবে একটি একক অপারেশনে লেখাগুলিকে ব্যাচ করতে পারেন।

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

অননুমোদিত অ্যাক্সেস প্রতিরোধ করুন

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

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

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

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() দিয়ে সাজানো 6-8 গুণ ধীর হতে পারে এবং orderByValue() দিয়ে সাজানো বৃহৎ ডেটা সেটের জন্য খুব ধীর হতে পারে, কারণ এর জন্য পারসিস্টেন্স লেয়ার থেকে পুরো অবস্থানটি পড়ার প্রয়োজন হয়।

লিসেনারের সংখ্যাও গতিশীলভাবে যোগ করতে ভুলবেন না, এবং যখন আর প্রয়োজন হবে না তখন সেগুলো সরিয়ে ফেলুন।

অব্যবহৃত ডেটা পরিষ্কার করুন

আপনার ডাটাবেসের যেকোনো অব্যবহৃত বা ডুপ্লিকেট ডেটা পর্যায়ক্রমে সরিয়ে ফেলুন। আপনি ম্যানুয়ালি আপনার ডেটা পরীক্ষা করার জন্য ব্যাকআপ চালাতে পারেন অথবা পর্যায়ক্রমে Google Cloud Storage বাকেটে ব্যাকআপ নিতে পারেন। Cloud Storage for Firebase মাধ্যমে সংরক্ষিত ডেটা হোস্ট করার কথাও বিবেচনা করুন।

শিপ স্কেলেবল কোড যা আপনি আপডেট করতে পারেন

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