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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

आप Firebase कंसोल में डेटाबेस इंस्टेंस बना सकते हैं और उन्हें मैनेज कर सकते हैं. इसके अलावा, रीयल टाइम डेटाबेस मैनेजमेंट REST API.

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

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

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

    1. YouTube Studio के नियम टैब डेवलप > डेटाबेस सेक्शन.
    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 सीएलआई की मदद से डिप्लॉय किए गए किसी भी हाल के बदलावों को ओवरराइड कर देता है.

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

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

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 का यह प्रॉडक्ट, 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 (मज़बूत, नॉनएटॉमिक) 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 सीएलआई का इस्तेमाल करते समय कोई इंस्टेंस तय करें

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

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

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

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

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

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