एक से ज़्यादा डेटाबेस के साथ स्केल करें

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

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

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

  • आपको एक डेटाबेस इंस्टेंस के लिए एक साथ 2,00,000 कनेक्शन,1, 000 राइट ऑपरेशन/सेकंड या किसी भी अन्य सीमा से ज़्यादा की सीमा पार करनी चाहिए.
  • आपके पास अलग-अलग तरह के कई डेटा सेट हैं और आपको परफ़ॉर्मेंस को ऑप्टिमाइज़ करना है. उदाहरण के लिए, ऐसा चैट ऐप्लिकेशन जो उपयोगकर्ताओं के अलग-अलग ग्रुप को सेवाएं देता है.
  • अपटाइम को बेहतर बनाने के लिए, आपको एक से ज़्यादा डेटाबेस के लोड को संतुलित करना होगा. साथ ही, किसी एक डेटाबेस इंस्टेंस पर ओवरलोड होने के जोखिम को कम करना होगा.

अपने डेटा को शार्प करने का तरीका

अपने डेटा को शार्ड करने के लिए, यह तरीका अपनाएं (ज़्यादा जानकारी नीचे दी गई है):

  1. अपने ऐप्लिकेशन की खास ज़रूरतों के हिसाब से, अपने डेटा को एक से ज़्यादा डेटाबेस में मैप करें.
  2. कई डेटाबेस इंस्टेंस बनाएं.
  3. अपने ऐप्लिकेशन को कॉन्फ़िगर करें, ताकि यह हर डेटा सेट के लिए ज़रूरी रीयल टाइम डेटाबेस इंस्टेंस से कनेक्ट हो.

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

अपने डेटा को एक से ज़्यादा डेटाबेस के साथ मैप करते समय, इन शर्तों को पूरा करने की कोशिश करें:

  • हर क्वेरी सिर्फ़ एक डेटाबेस इंस्टेंस पर चलती है. रीयलटाइम डेटाबेस, डेटाबेस के सभी इंस्टेंस में क्वेरी के साथ काम नहीं करता.
  • डेटाबेस के सभी इंस्टेंस में डेटा को शेयर या डुप्लीकेट न करना. या कम से कम शेयर या डुप्लीकेट करना.
  • हर ऐप्लिकेशन इंस्टेंस किसी खास समय पर सिर्फ़ एक डेटाबेस से कनेक्ट होता है.

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

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

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

कैटगरी या ग्राहक के हिसाब से बकेट डेटा

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

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

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

आपके ऐप्लिकेशन के लिए डेटा मैप करने का तरीका आपके इस्तेमाल के खास उदाहरण पर निर्भर करता है. हालांकि, ऊपर बताई गई शर्तों और रणनीतियों से आपको यह तय करने में मदद मिल सकती है कि आपके डेटा के लिए क्या काम करेगा.

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

अगर आप ब्लेज़ कीमत के प्लान का इस्तेमाल कर रहे हैं, तो आप एक ही Firebase प्रोजेक्ट में ज़्यादा से ज़्यादा 1,000 डेटाबेस इंस्टेंस बना सकते हैं.

डेटाबेस सेक्शन में मौजूद संदर्भ मेन्यू की मदद से, Firebase कंसोल में डेटाबेस बनाता है

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

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

Firebase कंसोल में या रीयल टाइम डेटाबेस मैनेजमेंट REST API का इस्तेमाल करके डेटाबेस इंस्टेंस बनाए और मैनेज किए जा सकते हैं.

हर इंस्टेंस के लिए रीयलटाइम डेटाबेस के सुरक्षा नियमों में बदलाव करें और उन्हें डिप्लॉय करें

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

  • Firebase कंसोल से नियमों में बदलाव करने और उन्हें डिप्लॉय करने के लिए, यह तरीका अपनाएं:

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

    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 सीएलआई' के लागू करने के नियम, Firebase कंसोल में किए गए सभी बदलाव बदल देते हैं. साथ ही, सीधे Firebase कंसोल में नियमों में बदलाव करने से वे सभी बदलाव बदल जाते हैं जो आपने Firebase सीएलआई के ज़रिए हाल ही में किए हैं.

अपने ऐप्लिकेशन को एक से ज़्यादा डेटाबेस इंस्टेंस से कनेक्ट करें

सेकंडरी डेटाबेस इंस्टेंस में स्टोर किए गए डेटा को ऐक्सेस करने के लिए, डेटाबेस के रेफ़रंस का इस्तेमाल करें. आपको यूआरएल या ऐप्लिकेशन की मदद से, किसी खास डेटाबेस इंस्टेंस के लिए रेफ़रंस मिल सकता है. अगर यूआरएल की जानकारी नहीं दी जाती है, तो आपको ऐप्लिकेशन के डिफ़ॉल्ट डेटाबेस इंस्टेंस का रेफ़रंस मिल जाएगा.

वेब मॉड्यूलर एपीआई

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

वेब नेमस्पेसेड एपीआई

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);
Swift
ध्यान दें: Firebase का यह प्रॉडक्ट, App Clip के टारगेट पर उपलब्ध नहीं है.
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// यूआरएल से सेकंडरी डेटाबेस इंस्टेंस पाएं var ref: DatabaseReference! रेफ़रंस = Database.database("https://testapp-1234.firebaseio.com").reference()
Objective-C
ध्यान दें: Firebase का यह प्रॉडक्ट, App Clip के टारगेट पर उपलब्ध नहीं है.
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
// यूआरएल से सेकंडरी डेटाबेस इंस्टेंस पाएं @property (strong, nonatomic) FIRDatabaseReference *ref; self.ref = [[FIRDatabase DatabaseWithURL:@"https://testapp-1234.firebaseio.com"] reference];

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 सीएलआई का इस्तेमाल करते समय कोई इंस्टेंस तय करें

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

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

हर डेटाबेस के कनेक्शन को ऑप्टिमाइज़ करना

अगर हर क्लाइंट को किसी सेशन के दौरान कई डेटाबेस से कनेक्ट करना होता है, तो ज़रूरत पड़ने पर ही हर डेटाबेस इंस्टेंस से कनेक्ट करके, हर डेटाबेस इंस्टेंस से एक साथ कनेक्शन की संख्या कम की जा सकती है.

ज़्यादा सलाह पाएं

अगर आपको एक से ज़्यादा डेटाबेस इंस्टेंस में अपने डेटा को शेयर करने में और मदद चाहिए, तो हमारे Slack चैनल या Stack Overflow पर Firebase विशेषज्ञों से संपर्क करें.