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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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"] रेफ़रंस];

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 विशेषज्ञों से संपर्क करें.