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

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

अपना डेटा कब साझा करें

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

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

अपना डेटा कैसे साझा करें

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

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

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

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

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

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

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

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

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

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

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

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

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

एकाधिक रीयलटाइम डेटाबेस इंस्टेंस बनाएं

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

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

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

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

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

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

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

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

    1. डेवलप> डेटाबेस सेक्शन में रूल्स टैब पर जाएँ।
    2. उस डेटाबेस का चयन करें जिसे आप संपादित करना चाहते हैं, फिर नियमों को संशोधित करें।
  • Firebase CLI से नियमों को संपादित और परिनियोजित करने के लिए, इन चरणों का पालन करें:

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

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 version 8

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 ref द्वारा द्वितीयक डेटाबेस इंस्टेंस प्राप्त करें: 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"] संदर्भ];

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();

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

फायरबेस सीएलआई का उपयोग करते समय एक उदाहरण निर्दिष्ट करें

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

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

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

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

अधिक सलाह प्राप्त करें

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