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

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

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

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

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

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

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