एकाधिक डेटाबेस के साथ स्केल

प्रदर्शन को अनुकूलित करने और फायरबेस रीयलटाइम डेटाबेस में अपने डेटा को स्केल करने का सबसे अच्छा तरीका है कि आप अपने डेटा को कई रीयलटाइम डेटाबेस उदाहरणों में विभाजित करें, जिसे डेटाबेस शार्डिंग भी कहा जाता है। शेयरिंग आपको लोड संतुलन और प्रदर्शन अनुकूलन के अलावा, अलग-अलग डेटाबेस उदाहरणों पर लागू होने वाली सीमाओं से परे स्केल करने की सुविधा देता है।

अपने डेटा को कब शार्ड करें

यदि आप रीयलटाइम डेटाबेस का उपयोग कर रहे हैं और निम्न में से किसी भी परिदृश्य में फ़िट होते हैं, तो हो सकता है कि आप अपने डेटा को एकाधिक डेटाबेस में शार्ड करना चाहें:

  • आप 200,000 एक साथ कनेक्शन की सीमा से परे स्केल करना चाहते हैं, 1,000 राइट ऑपरेशंस/सेकंड, या किसी एक डेटाबेस इंस्टेंस के लिए कोई अन्य सीमा
  • आपके पास एकाधिक, असतत डेटा सेट हैं और प्रदर्शन को अनुकूलित करना चाहते हैं (उदाहरण के लिए, एक चैट ऐप जो उपयोगकर्ताओं के अलग, स्वतंत्र समूहों को सेवा प्रदान करता है)।
  • आप अपटाइम को बेहतर बनाने और एकल डेटाबेस उदाहरण को ओवरलोड करने के जोखिम को कम करने के लिए कई डेटाबेस में लोड को संतुलित करना चाहते हैं।

अपने डेटा को कैसे शार्ड करें

अपने डेटा को शार्प करने के लिए, इन चरणों का पालन करें (नीचे अधिक विवरण में वर्णित):

  1. अपने ऐप की विशिष्ट आवश्यकताओं के अनुसार अपने डेटा को कई डेटाबेस में मैप करें।
  2. एकाधिक डेटाबेस उदाहरण बनाएँ।
  3. अपने ऐप को कॉन्फ़िगर करें ताकि यह प्रत्येक डेटा सेट के लिए आवश्यक रीयलटाइम डेटाबेस इंस्टेंस से कनेक्ट हो।

अपना डेटा मैप करें

जब आप अपने डेटा को एकाधिक डेटाबेस में मैप कर रहे हों, तो निम्न शर्तों को पूरा करने का प्रयास करें:

  • प्रत्येक क्वेरी केवल एक डेटाबेस उदाहरण के विरुद्ध चलती है। रीयलटाइम डेटाबेस डेटाबेस उदाहरणों में प्रश्नों का समर्थन नहीं करता है।
  • डेटाबेस उदाहरणों में डेटा का कोई साझाकरण या दोहराव नहीं (या न्यूनतम साझाकरण या दोहराव)।
  • प्रत्येक ऐप इंस्टेंस किसी भी समय केवल एक डेटाबेस से जुड़ता है।

जब आप अपने डेटा की मैपिंग कर रहे हों, तो निम्न कार्यनीतियों को लागू करने पर विचार करें:

एक "मास्टर शार्ड" बनाएं

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

बकेट डेटा श्रेणियों द्वारा या ग्राहक द्वारा

उपयोगकर्ता या डेटा प्रकार द्वारा समूहीकृत साइलेड डेटाबेस उदाहरणों में डेटा स्टोर करें। उदाहरण के लिए, यदि आप एक चैट एप्लिकेशन बनाते हैं जो कई संगठनों को सेवा प्रदान करता है, तो आप प्रत्येक संगठन के लिए एक डेटाबेस उदाहरण बना सकते हैं और सभी चैट डेटा को अद्वितीय डेटाबेस उदाहरणों में संग्रहीत कर सकते हैं।

इस स्थिति में, संगठन A और संगठन B डेटा साझा नहीं करते हैं, आपके डेटाबेस में कोई डुप्लिकेट डेटा नहीं है, और आप केवल एक डेटाबेस आवृत्ति के विरुद्ध क्वेरी करते हैं। इसके अतिरिक्त, प्रत्येक संगठन के उपयोगकर्ता केवल तभी अपने संगठन के डेटाबेस से जुड़ते हैं जब वे चैट ऐप का उपयोग करते हैं।

फिर आप पहले से कई डेटाबेस इंस्टेंस बना सकते हैं और किसी टीम को उसके डेटाबेस इंस्टेंस में मैप करने के लिए संगठन की आईडी का उपयोग कर सकते हैं। उदाहरण के लिए, संगठन A रीयलटाइम डेटाबेस A के लिए मैप करता है।

जिस तरह से आप अपने ऐप के लिए डेटा मैप करते हैं, वह आपके विशेष उपयोग के मामले पर निर्भर करता है, लेकिन ऊपर बताई गई शर्तें और रणनीतियाँ आपको यह परिभाषित करने में मदद कर सकती हैं कि आपके डेटा के लिए क्या काम करता है।

एकाधिक रीयलटाइम डेटाबेस उदाहरण बनाएँ

यदि आप ब्लेज़ मूल्य निर्धारण योजना पर हैं, तो आप एक ही फायरबेस प्रोजेक्ट में एकाधिक डेटाबेस उदाहरण बना सकते हैं।

डेटाबेस अनुभाग में संदर्भ मेनू के साथ फायरबेस कंसोल में डेटाबेस बनाएं

  1. फायरबेस कंसोल में, डेवलप> डेटाबेस सेक्शन में डेटा टैब पर जाएं।
  2. रीयलटाइम डेटाबेस अनुभाग में मेनू से नया डेटाबेस बनाएँ चुनें।
  3. अपने डेटाबेस संदर्भ और सुरक्षा नियमों को अनुकूलित करें, फिर समझ गया पर क्लिक करें।

जितनी जरूरत हो उतने डेटाबेस इंस्टेंस बनाने के लिए प्रक्रिया को दोहराएं। प्रत्येक डेटाबेस उदाहरण में फायरबेस रीयलटाइम डेटाबेस सुरक्षा नियमों का अपना सेट होता है, ताकि आप अपने डेटा तक पहुंच को ठीक कर सकें।

आप Firebase कंसोल में या रीयलटाइम डेटाबेस प्रबंधन REST API का उपयोग करके डेटाबेस उदाहरण बना और प्रबंधित कर सकते हैं।

संपादित करें और प्रत्येक उदाहरण के लिए रीयलटाइम डेटाबेस सुरक्षा नियम लागू करें

सुनिश्चित करें कि आपके रीयलटाइम डेटाबेस सुरक्षा नियम आपके प्रोजेक्ट में प्रत्येक डेटाबेस इंस्टेंस तक उचित पहुंच की अनुमति देते हैं। प्रत्येक डेटाबेस के नियमों का अपना सेट होता है, जिसे आप फायरबेस कंसोल से संपादित और तैनात कर सकते हैं, या लक्ष्य को तैनात करने के लिए फायरबेस सीएलआई का उपयोग कर सकते हैं।

  • फायरबेस कंसोल से नियमों को संपादित और परिनियोजित करने के लिए, इन चरणों का पालन करें:

    1. विकास> डेटाबेस अनुभाग में नियम टैब पर जाएं।
    2. उस डेटाबेस का चयन करें जिसे आप संपादित करना चाहते हैं, फिर नियमों को संशोधित करें।
  • फायरबेस सीएलआई से नियमों को संपादित और परिनियोजित करने के लिए, इन चरणों का पालन करें:

    1. अपने डेटाबेस उदाहरणों के लिए नियम फ़ाइलों में नियमों को संशोधित करें (उदाहरण के लिए, foo.rules.json )।
    2. समान नियम फ़ाइल का उपयोग करने वाले डेटाबेस को संबद्ध करने के लिए परिनियोजन लक्ष्य बनाएँ और लागू करें। उदाहरण के लिए:
      firebase target:apply database main my-db-1 my-db-2
      firebase target:apply database other my-other-db-3
    3. परिनियोजन लक्ष्यों के साथ अपनी firebase.json कॉन्फ़िगरेशन फ़ाइल अपडेट करें:

      {
        "database": [
          {"target": "main", "rules": "foo.rules.json"},
          {"target": "other", "rules": "bar.rules.json"}
        ]
      }
      
    4. परिनियोजन आदेश चलाएँ:

      firebase deploy

सुनिश्चित करें कि आप लगातार एक ही स्थान से नियमों को संपादित और परिनियोजित करते हैं। Firebase CLI से नियम लागू करना आपके द्वारा Firebase कंसोल में किए गए किसी भी संपादन को ओवरराइड कर देता है, और Firebase कंसोल में सीधे संपादन नियम आपके द्वारा Firebase CLI के माध्यम से किए गए किसी भी हाल के परिवर्तन को ओवरराइड कर देता है।

अपने ऐप को कई डेटाबेस इंस्टेंस से कनेक्ट करें

द्वितीयक डेटाबेस उदाहरणों में संग्रहीत डेटा तक पहुँचने के लिए डेटाबेस संदर्भ का उपयोग करें। आप यूआरएल या एप द्वारा किसी विशिष्ट डेटाबेस उदाहरण के लिए संदर्भ प्राप्त कर सकते हैं। यदि आप कोई URL निर्दिष्ट नहीं करते हैं, तो आपको ऐप के डिफ़ॉल्ट डेटाबेस उदाहरण के लिए संदर्भ प्राप्त होगा।

Web modular API

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 namespaced API

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 app
var ref: DatabaseReference!

ref = Database.database().reference()
// URL var रेफरी द्वारा द्वितीयक डेटाबेस उदाहरण प्राप्त करें: DatabaseReference! रेफरी = डेटाबेस.डेटाबेस ("https://testapp-1234.firebaseio.com")। संदर्भ ()
उद्देश्य सी
नोट: यह फायरबेस उत्पाद ऐप क्लिप लक्ष्य पर उपलब्ध नहीं है।
// 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 का उपयोग करते समय एक उदाहरण निर्दिष्ट करें

यह निर्दिष्ट करने के लिए --instance विकल्प का उपयोग करें कि आप किस Firebase रीयलटाइम डेटाबेस पर Firebase CLI कमांड लागू करना चाहते हैं। उदाहरण के लिए, my-example-shard.firebaseio.com नाम के डेटाबेस इंस्टेंस के लिए प्रोफाइलर चलाने के लिए निम्नलिखित कमांड का उपयोग करें:

firebase database:profile --instance "my-example-shard"

प्रत्येक डेटाबेस पर कनेक्शन का अनुकूलन करें

यदि प्रत्येक क्लाइंट को एक सत्र के दौरान कई डेटाबेस से कनेक्ट करने की आवश्यकता होती है, तो आप प्रत्येक डेटाबेस इंस्टेंस से एक साथ कनेक्शन की संख्या को केवल तब तक कम कर सकते हैं जब तक आवश्यक हो।

अधिक सलाह लें

अगर आपको अपने डेटा को कई डेटाबेस इंस्टेंस में शार्प करने में और मदद चाहिए, तो हमारे स्लैक चैनल या स्टैक ओवरफ़्लो पर फायरबेस विशेषज्ञों से संपर्क करें।