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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

आप फ़ायरबेस कंसोल में या रीयलटाइम डेटाबेस प्रबंधन 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

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

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

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

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

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

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

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

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

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

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

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