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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

पक्का करें कि आपके Realtime Database Security Rules में, हर एक फ़ाइल को सही तरीके से ऐक्सेस करने की अनुमति हो डेटाबेस इंस्टेंस आपके प्रोजेक्ट में हो. हर डेटाबेस के अपने नियम होते हैं, इसे 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; सेल्फ़.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 Realtime Database को जोड़ना है इन पर Firebase सीएलआई कमांड लागू करें. उदाहरण के लिए, चलाने के लिए नीचे दिए गए कमांड का इस्तेमाल करें my-example-shard.firebaseio.com नाम के डेटाबेस इंस्टेंस के लिए प्रोफ़ाइलर:

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

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

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

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

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