डेटाबेस की परफ़ॉर्मेंस ऑप्टिमाइज़ करें

अपने ऐप्लिकेशन में Firebase रीयल टाइम डेटाबेस की परफ़ॉर्मेंस को बेहतर बनाने के कुछ अलग-अलग तरीके हैं. अपने रीयलटाइम डेटाबेस की परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के लिए क्या किया जा सकता है, यह जानने के लिए अलग-अलग रीयल टाइम डेटाबेस निगरानी टूल की मदद से डेटा इकट्ठा करें. इसके बाद, अपने ऐप्लिकेशन या रीयल टाइम डेटाबेस में ज़रूरत के मुताबिक बदलाव करें.

रीयलटाइम डेटाबेस की परफ़ॉर्मेंस पर नज़र रखना

अपने रीयल टाइम डेटाबेस की परफ़ॉर्मेंस के बारे में जानकारी के लिए, कुछ अलग-अलग टूल की मदद से डेटा इकट्ठा किया जा सकता है. यह इस बात पर निर्भर करता है कि आपको किस लेवल की जानकारी की ज़रूरत है:

  • ज़्यादा जानकारी: प्रोफ़ाइलर टूल का इस्तेमाल करके, इंडेक्स नहीं की गई क्वेरी की सूची देखें. साथ ही, उन क्वेरी की रीयलटाइम जानकारी पाएं जिन्हें पढ़ें/लिखें.
  • कुल इस्तेमाल का अनुमान: कुल शुल्क और हाई-लेवल परफ़ॉर्मेंस मेट्रिक देखने के लिए, Firebase कंसोल में उपलब्ध इस्तेमाल की मेट्रिक का इस्तेमाल करें.
  • ज़्यादा जानकारी वाली ड्रिल-डाउन: समय के साथ आपका डेटाबेस कैसा परफ़ॉर्म कर रहा है, इस बारे में ज़्यादा जानकारी के लिए, क्लाउड मॉनिटरिंग का इस्तेमाल करें.

मेट्रिक के हिसाब से परफ़ॉर्मेंस को बेहतर बनाएं

डेटा इकट्ठा करने के बाद, परफ़ॉर्मेंस के जिस हिस्से में सुधार करना है उसके आधार पर, यहां दिए गए सबसे सही तरीकों और रणनीतियों के बारे में जानें.

परफ़ॉर्मेंस को बेहतर बनाने की रणनीतियां एक नज़र में
मेट्रिक जानकारी सबसे सही तरीके
लोड/इस्तेमाल किसी भी समय पर, प्रोसेस करने के अनुरोधों की प्रोसेस में आपके डेटाबेस की कितनी क्षमता इस्तेमाल की जा रही है, यह ऑप्टिमाइज़ करें. इसे **लोड** या **io/database_load** मेट्रिक में दिखाया जाता है. अपना डेटा स्ट्रक्चर ऑप्टिमाइज़ करें
सभी डेटाबेस में शार्ड डेटा
लिसनर की क्षमता को बेहतर बनाएं
क्वेरी पर आधारित नियमों की मदद से डाउनलोड की संख्या सीमित करें
कनेक्शन ऑप्टिमाइज़ करें
चालू कनेक्शन अपने डेटाबेस में एक साथ चल रहे कनेक्शन की संख्या को 2, 00,000 कनेक्शन की सीमा के अंदर रखें. डेटाबेस में शार्ड डेटा
नए कनेक्शन कम करें
आउटगोइंग बैंडविड्थ अगर आपके डेटाबेस से डाउनलोड की गई फ़ाइलों की संख्या उम्मीद से ज़्यादा है, तो रीड ऐक्शन को बेहतर बनाया जा सकता है और अतिरिक्त एन्क्रिप्शन की संख्या कम की जा सकती है. कनेक्शन ऑप्टिमाइज़ करें
अपना डेटा स्ट्रक्चर ऑप्टिमाइज़ करें
क्वेरी-आधारित नियमों से डाउनलोड को सीमित करें
एसएसएल सेशन का फिर से इस्तेमाल करें
लिसनर की क्षमता बढ़ाएं
डेटा का ऐक्सेस सीमित करें
डिवाइस का स्टोरेज पक्का करें कि इस्तेमाल न किया गया डेटा सेव न किया जा रहा हो. इसके अलावा, अपने सेव किए गए डेटा को अन्य डेटाबेस और/या Firebase प्रॉडक्ट में संतुलित कर लें, ताकि वह कोटा के अंदर रहे. इस्तेमाल नहीं किया गया डेटा हटाएं
अपने डेटा स्ट्रक्चर को ऑप्टिमाइज़ करें
सभी डेटाबेस में मौजूद शार्ड डेटा
Firebase के लिए Cloud Storage का इस्तेमाल करें

कनेक्शन ऑप्टिमाइज़ करें

GET और PUT जैसे RESTफ़ुल अनुरोधों के लिए अब भी कनेक्शन की ज़रूरत होती है, भले ही वह कनेक्शन कुछ समय तक ही रहता हो. अक्सर, कुछ समय तक ही रहने वाले इन कनेक्शन की वजह से, आपके डेटाबेस में रीयल टाइम के मुकाबले, ऐक्टिव कनेक्शन की तुलना में कनेक्शन की लागत, डेटाबेस लोड, और आउटगोइंग बैंडविड्थ बहुत ज़्यादा बढ़ सकता है.

जब भी हो सके, अपने ऐप्लिकेशन के प्लैटफ़ॉर्म के लिए REST API के बजाय, नेटिव SDK टूल इस्तेमाल करें. SDK टूल ओपन कनेक्शन बनाए रखते हैं. इससे एसएसएल एन्क्रिप्शन की लागत और डेटाबेस लोड कम होते हैं, जिन्हें REST API के साथ जोड़ा जा सकता है.

अगर REST API का इस्तेमाल किया जाता है, तो ओपन कनेक्शन को बनाए रखने के लिए एचटीटीपी कीप-अलाइव का इस्तेमाल करें या सर्वर से भेजे गए इवेंट का इस्तेमाल करें. इससे एसएसएल हैंडशेक करने की लागत कम हो सकती है.

एक से ज़्यादा डेटाबेस में डेटा शेयर करना

अपने डेटा को एक से ज़्यादा रीयल टाइम डेटाबेस इंस्टेंस में बांटने के तीन फ़ायदे हैं:

  1. अपने ऐप्लिकेशन पर एक साथ काम करने वाले कुल कनेक्शन बढ़ाने के लिए, उन्हें अलग-अलग डेटाबेस इंस्टेंस में बांटें.
  2. सभी डेटाबेस इंस्टेंस पर बैलेंस लोड करें.
  3. अगर आपके पास उपयोगकर्ताओं के ऐसे स्वतंत्र ग्रुप हैं जिन्हें सिर्फ़ अलग-अलग डेटा सेट के ऐक्सेस की ज़रूरत है, तो डेटा की ज़्यादा थ्रूपुट और कम इंतज़ार के समय के लिए, अलग-अलग डेटाबेस इंस्टेंस का इस्तेमाल करें.

अगर आप ब्लेज़ प्राइसिंग प्लान का इस्तेमाल कर रहे हैं, तो एक ही Firebase प्रोजेक्ट में कई डेटाबेस इंस्टेंस बनाए जा सकते हैं. ऐसा करने के लिए, सभी डेटाबेस इंस्टेंस में उपयोगकर्ता की पुष्टि करने के एक सामान्य तरीके का इस्तेमाल किया जाता है.

इस बारे में ज़्यादा जानें कि डेटा को शेयर करना कब और कैसे करना है.

बेहतर डेटा स्ट्रक्चर बनाने वाले टूल

रीयलटाइम डेटाबेस, पाथ के चाइल्ड नोड के साथ-साथ पाथ के डेटा को इकट्ठा करता है. इसलिए, अपने डेटा स्ट्रक्चर को जितना हो सके उतना फ़्लैट रखें. इस तरह, क्लाइंट को ग़ैर-ज़रूरी डेटा डाउनलोड किए बिना, अपनी ज़रूरत का डेटा चुनिंदा तरीके से वापस लाया जा सकता है.

खास तौर पर, डेटा को व्यवस्थित करते समय कुछ लिखा जा सकता है और मिटाया जा सकता है. उदाहरण के लिए, हज़ारों पत्तियों वाले रास्ते को मिटाना ज़्यादा महंगा हो सकता है. इन्हें कई सबट्री वाले पाथ में बांटने और हर नोड में कम पत्तियों को बांटने पर, इन्हें तेज़ी से मिटाया जा सकता है.

इसके अलावा, हर राइट डेटा, आपके डेटाबेस के कुल इस्तेमाल का 0.1% हिस्सा ले सकता है. अपने डेटा को इस तरह व्यवस्थित करें कि अलग-अलग पाथ के अपडेट के तौर पर एक ही कार्रवाई में कई तरह के डेटा को एक साथ सेव किया जा सके. इसके लिए, SDK टूल में update() तरीकों या RESTफ़ुल PATCH अनुरोधों का इस्तेमाल किया जा सकता है.

अपने डेटा स्ट्रक्चर को ऑप्टिमाइज़ करने और परफ़ॉर्मेंस को बेहतर बनाने के लिए, डेटा स्ट्रक्चर के लिए सबसे सही तरीके अपनाएं.

बिना अनुमति के ऐक्सेस रोकना

रीयलटाइम डेटाबेस के सुरक्षा नियमों की मदद से, अपने डेटाबेस पर बिना अनुमति वाली कार्रवाइयों को रोकें. उदाहरण के लिए, नियमों का इस्तेमाल करने से ऐसी स्थिति से बचा जा सकता है जहां नुकसान पहुंचाने वाला उपयोगकर्ता, आपके पूरा डेटाबेस को बार-बार डाउनलोड करता है.

Firebase रीयल टाइम डेटाबेस नियमों का इस्तेमाल करने के बारे में ज़्यादा जानें.

डाउनलोड सीमित करने के लिए क्वेरी-आधारित नियमों का इस्तेमाल करें

रीयल टाइम डेटाबेस के सुरक्षा नियम आपके डेटाबेस में डेटा को ऐक्सेस करने पर पाबंदी लगाते हैं. हालांकि, वे रीड ऑपरेशन के ज़रिए लौटाए जाने वाले डेटा की सीमा के तौर पर भी काम कर सकते हैं. जब query.limitToFirst जैसे query. एक्सप्रेशन से बताए गए क्वेरी-आधारित नियमों का इस्तेमाल किया जाता है, तो क्वेरी सिर्फ़ नियम के दायरे में आने वाला डेटा हासिल करती है.

उदाहरण के लिए, नीचे दिया गया नियम प्राथमिकता के हिसाब से, सिर्फ़ पहली 1,000 क्वेरी के नतीजों के लिए रीड ऐक्सेस को सीमित करता है:

messages: {
  ".read": "query.orderByKey &&
            query.limitToFirst <= 1000"
}

// Example query:
db.ref("messages").limitToFirst(1000)
                  .orderByKey("value")

रीयल टाइम डेटाबेस के सुरक्षा नियमों के बारे में ज़्यादा जानें.

इंडेक्स क्वेरी

अपना डेटा इंडेक्स करने से, आपके ऐप्लिकेशन पर चलाई जाने वाली हर क्वेरी के लिए इस्तेमाल की जाने वाली कुल बैंडविड्थ कम हो जाती है.

SSL सेशन का फिर से इस्तेमाल करना

TLS सेशन टिकट जारी करके, फिर से शुरू किए गए कनेक्शन पर एसएसएल एन्क्रिप्शन की ओवरहेड लागत कम करें. यह खास तौर पर तब मददगार होता है, जब आपको डेटाबेस के लिए बार-बार, सुरक्षित कनेक्शन की ज़रूरत होती है.

सुनने की क्षमता बेहतर बनाएं

अपने श्रोताओं को पाथ में जितना हो सके उतना नीचे रखें और सिंक किए जाने वाले डेटा की मात्रा को सीमित करें. आपके लिसनर का ध्यान उस डेटा के आस-पास होना चाहिए जो उन्हें मिलना है. डेटाबेस रूट पर ध्यान न दें, क्योंकि इससे आपका पूरा डेटाबेस डाउनलोड हो जाता है.

क्वेरी जोड़ें, ताकि आपके सुनने की क्षमता से जुड़े डेटा को सीमित किया जा सके. साथ ही, ऐसे श्रोताओं का इस्तेमाल करें जो सिर्फ़ डेटा के अपडेट डाउनलोड करते हैं — उदाहरण के लिए, once() के बजाय on(). .once() को उन कार्रवाइयों के लिए बुक करें जिनके लिए डेटा अपडेट करने की ज़रूरत नहीं है. इसके अलावा, बेहतरीन परफ़ॉर्मेंस के लिए जब भी संभव हो, orderByKey() का इस्तेमाल करके अपनी क्वेरी को क्रम से लगाएं. orderByChild() के साथ क्रम से लगाने में, छह से आठ गुना ज़्यादा समय लग सकता है. साथ ही, बड़े डेटा सेट के लिए, orderByValue() के साथ क्रम में लगाने की प्रोसेस बहुत धीमी हो सकती है. ऐसा इसलिए, क्योंकि इसे परसिस्टेंस लेयर से पूरी जगह को पढ़ने की ज़रूरत होती है.

ऑडियंस को डाइनैमिक तौर पर जोड़ना न भूलें. साथ ही, ज़रूरत न होने पर उन्हें हटा दें.

इस्तेमाल न किया गया डेटा हटाएं

समय-समय पर अपने डेटाबेस से, इस्तेमाल न किया गया या डुप्लीकेट डेटा हटाएं. अपने डेटा की मैन्युअल तरीके से जांच करने के लिए, बैकअप इस्तेमाल करें. इसके अलावा, समय-समय पर Google Cloud Storage बकेट में उसका बैक अप भी लिया जा सकता है. साथ ही, सेव किए गए डेटा को Firebase के लिए Cloud Storage की मदद से होस्ट करने पर विचार करें.

अपडेट किए जा सकने वाले स्केलेबल कोड को शिप करें

IoT डिवाइसों में पहले से मौजूद ऐप्लिकेशन में स्केलेबल कोड होना चाहिए, जिसे आसानी से अपडेट किया जा सके. इस्तेमाल के उदाहरणों की अच्छी तरह से जांच करना न भूलें. साथ ही, उन स्थितियों पर ध्यान दें जहां आपके उपयोगकर्ताओं की संख्या तेज़ी से बढ़ सकती है. साथ ही, अपने कोड में अपडेट डिप्लॉय करने की सुविधा पाएं. उन बड़े बदलावों पर सावधानी से विचार करें जिनकी ज़रूरत पड़ सकती है. उदाहरण के लिए, अगर, उदाहरण के लिए, आप अपने डेटा को शार्ड करने का फ़ैसला करते हैं.