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

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

डेटा को कब शेयर करना चाहिए

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

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

डेटा को शेयर करने का तरीका

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

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

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

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

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

डेटा को मैप करते समय, इन रणनीतियों को आज़माएं:

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

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

कैटगरी या ग्राहक के हिसाब से डेटा को बकेट में बांटना

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

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

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

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

एक से ज़्यादा Realtime Database इंस्टेंस बनाना

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

<span class=डेटाबेस सेक्शन में संदर्भ मेन्यू वाला Firebase कंसोल" />

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

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

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

हर इंस्टेंस के लिए Realtime Database Security Rules में बदलाव करना और उसे डिप्लॉय करना

पक्का करें कि आपके Realtime Database Security Rules में, आपके प्रोजेक्ट के हर डेटाबेस इंस्टेंस को सही ऐक्सेस दिया गया हो. हर डेटाबेस के नियम अलग-अलग होते हैं. इनमें बदलाव करने और उन्हें डिप्लॉय करने के लिए, Firebase कंसोल का इस्तेमाल किया जा सकता है. इसके अलावा, टारगेट डिप्लॉय करने के लिए Firebase सीएलआई का इस्तेमाल भी किया जा सकता है.

  • 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 से डिप्लॉय किए गए हाल ही के सभी बदलाव बदल जाते हैं.

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

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

Web

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

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

ref = Database.database().reference()
// यूआरएल से सेकंडरी डेटाबेस इंस्टेंस पाएं var ref: DatabaseReference! ref = Database.database("https://testapp-1234.firebaseio.com").reference()
Objective-C
ध्यान दें: Firebase का यह प्रॉडक्ट, ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
// 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 CLI का इस्तेमाल करते समय कोई इंस्टेंस तय करना

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

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

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

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

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

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