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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Firebase कंसोल में, में डेटा टैब पर जाकर विकास करना> डेटाबेस अनुभाग।
  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
      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 या ऐप द्वारा किसी विशिष्ट डेटाबेस इंस्टेंस के लिए संदर्भ प्राप्त कर सकते हैं। अगर आप यूआरएल निर्दिष्ट नहीं करते हैं, तो आपको ऐप के डिफ़ॉल्ट डेटाबेस इंस्टेंस के लिए संदर्भ मिलेगा।

वेब v8

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

वेब v9

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);
तीव्र
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// URL वर रेफरी द्वारा एक माध्यमिक डेटाबेस उदाहरण प्राप्त करें: 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 द्वारा एक माध्यमिक डेटाबेस उदाहरण जाओ (मजबूत, nonatomic) FIRDatabaseReference * रेफरी; self.ref = [[FIRDatabase databaseWithURL:@"https://testapp-1234.firebaseio.com"] संदर्भ];

जावा

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

कोटलिन + केटीएक्स

// 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"

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

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

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

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