Firebase Realtime Database में परफ़ॉर्मेंस को ऑप्टिमाइज़ करने और अपने डेटा को स्केल करने का सबसे अच्छा तरीका यह है कि अपने डेटा को कई Realtime Database इंस्टेंस में बांट दिया जाए. इसे डेटाबेस शार्डिंग भी कहा जाता है. शार्डिंग की मदद से, लोड बैलेंसिंग और परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के साथ-साथ, डेटाबेस के अलग-अलग इंस्टेंस पर लागू होने वाली सीमाओं से आगे बढ़ा जा सकता है.
अपने डेटा को कब शार्ड करना चाहिए
अगर Realtime Database का इस्तेमाल किया जा रहा है और आप इनमें से किसी भी स्थिति में हैं, तो आपको अपने डेटा को कई डेटाबेस में बांटना पड़ सकता है:
- आपको एक साथ 2,00,000 कनेक्शन,हर सेकंड में 1, 000 राइट ऑपरेशन या किसी एक डेटाबेस इंस्टेंस के लिए तय की गई अन्य सीमाओं से ज़्यादा का इस्तेमाल करना है.
- आपके पास अलग-अलग डेटा सेट हैं और आपको परफ़ॉर्मेंस ऑप्टिमाइज़ करनी है (उदाहरण के लिए, एक चैट ऐप्लिकेशन, जो उपयोगकर्ताओं के अलग-अलग ग्रुप को सेवा देता है).
- आपको कई डेटाबेस में लोड को बैलेंस करना है, ताकि अपटाइम को बेहतर बनाया जा सके. साथ ही, किसी एक डेटाबेस इंस्टेंस पर ज़्यादा लोड होने के जोखिम को कम किया जा सके.
अपने डेटा को कैसे शार्ड करें
अपने डेटा को शार्ड करने के लिए, यह तरीका अपनाएं. इसके बारे में यहां ज़्यादा जानकारी दी गई है:
- अपने ऐप्लिकेशन की खास ज़रूरतों के हिसाब से, अपने डेटा को कई डेटाबेस में मैप करें.
- एक से ज़्यादा डेटाबेस इंस्टेंस बनाएं.
- अपने ऐप्लिकेशन को इस तरह कॉन्फ़िगर करें कि वह हर डेटा सेट के लिए ज़रूरी Realtime Database इंस्टेंस से कनेक्ट हो सके.
अपने डेटा को मैप करना
अपने डेटा को एक से ज़्यादा डेटाबेस में मैप करते समय, इन शर्तों को पूरा करने की कोशिश करें:
- हर क्वेरी सिर्फ़ एक डेटाबेस इंस्टेंस के ख़िलाफ़ चलती है. Realtime Database, डेटाबेस इंस्टेंस में क्वेरी करने की सुविधा नहीं देता.
- डेटाबेस इंस्टेंस के बीच डेटा शेयर या डुप्लीकेट नहीं किया जाता (या कम से कम शेयर या डुप्लीकेट किया जाता है).
- हर ऐप्लिकेशन इंस्टेंस, किसी भी समय सिर्फ़ एक डेटाबेस से कनेक्ट होता है.
डेटा को मैप करते समय, इन रणनीतियों का इस्तेमाल करें:
"मास्टर शार्ड" बनाना
यह कुकी, डेटाबेस इंस्टेंस में आपके डेटा को स्टोर करने के तरीके का मैप सेव करती है. इस तरह, प्रोग्राम के हिसाब से यह पता लगाया जा सकता है कि कनेक्ट करने वाले क्लाइंट से कौनसा डेटाबेस इंस्टेंस जुड़ा है. ध्यान रखें कि जब आपको किसी डेटाबेस इंस्टेंस की ज़रूरत हो, तब सीधे उससे कनेक्ट करने की तुलना में, इस तरीके में ज़्यादा समय लग सकता है.
डेटा को कैटगरी या ग्राहक के हिसाब से बकेट करना
डेटा को अलग-अलग डेटाबेस इंस्टेंस में सेव करें. इन्हें उपयोगकर्ता या डेटा टाइप के हिसाब से ग्रुप किया जाता है. उदाहरण के लिए, अगर आपको एक ऐसा चैट ऐप्लिकेशन बनाना है जो कई संगठनों को सेवा देता है, तो हर संगठन के लिए एक डेटाबेस इंस्टेंस बनाया जा सकता है. साथ ही, सभी चैट डेटा को यूनीक डेटाबेस इंस्टेंस में सेव किया जा सकता है.
इस मामले में, संगठन A और संगठन B डेटा शेयर नहीं करते हैं. साथ ही, आपके डेटाबेस में कोई डुप्लीकेट डेटा नहीं होता है. इसके अलावा, सिर्फ़ एक डेटाबेस इंस्टेंस के ख़िलाफ़ क्वेरी की जाती हैं. इसके अलावा, हर संगठन के उपयोगकर्ता सिर्फ़ तब अपने संगठन के डेटाबेस से कनेक्ट होते हैं, जब वे चैट ऐप्लिकेशन का इस्तेमाल करते हैं.
इसके बाद, कई डेटाबेस इंस्टेंस पहले से बनाए जा सकते हैं. साथ ही, टीम को उसके डेटाबेस इंस्टेंस से मैप करने के लिए, संगठन के आईडी का इस्तेमाल किया जा सकता है. उदाहरण के लिए, संगठन A, Realtime Database A से मैप होता है.
आपके ऐप्लिकेशन के लिए डेटा को मैप करने का तरीका, इस्तेमाल के आपके खास उदाहरण पर निर्भर करता है. हालांकि, ऊपर बताई गई शर्तें और रणनीतियां, यह तय करने में आपकी मदद कर सकती हैं कि आपके डेटा के लिए क्या काम करता है.
एक से ज़्यादा Realtime Database इंस्टेंस बनाना
अगर आपने ब्लेज़ की कीमत वाला प्लान लिया है, तो एक ही Firebase प्रोजेक्ट में ज़्यादा से ज़्यादा 1,000 डेटाबेस इंस्टेंस बनाए जा सकते हैं.
डेटाबेस सेक्शन में संदर्भ मेन्यू के साथ Firebase कंसोल" />
- Firebase कंसोल में, Develop > Database सेक्शन में मौजूद, Data टैब पर जाएं.
- Realtime Database सेक्शन में मौजूद मेन्यू से, नया डेटाबेस बनाएं चुनें.
- अपने डेटाबेस रेफ़रंस और सुरक्षा नियमों को पसंद के मुताबिक बनाएं. इसके बाद, ठीक है पर क्लिक करें.
जितने डेटाबेस इंस्टेंस बनाने हैं उनके लिए यह प्रोसेस दोहराएं. हर डेटाबेस इंस्टेंस का अपना Firebase Realtime Database Security Rules सेट होता है. इसलिए, अपने डेटा के ऐक्सेस को बेहतर बनाया जा सकता है.
Firebase console में या Realtime Database Management REST API का इस्तेमाल करके, डेटाबेस इंस्टेंस बनाए और मैनेज किए जा सकते हैं.
हर इंस्टेंस के लिए Realtime Database Security Rules में बदलाव करना और उसे डिप्लॉय करना
पक्का करें कि आपके Realtime Database Security Rules, आपके प्रोजेक्ट में मौजूद हर डेटाबेस इंस्टेंस को सही ऐक्सेस दे रहा हो. हर डेटाबेस के लिए नियमों का अपना सेट होता है. Firebase कंसोल से इन नियमों में बदलाव किया जा सकता है और इन्हें लागू किया जा सकता है. इसके अलावा, Firebase सीएलआई का इस्तेमाल करके टारगेट लागू किए जा सकते हैं.
Firebase कंसोल से नियमों में बदलाव करने और उन्हें लागू करने के लिए, यह तरीका अपनाएं:
- Develop > Database सेक्शन में जाकर, Rules टैब पर जाएं.
- वह डेटाबेस चुनें जिसमें आपको बदलाव करना है. इसके बाद, नियमों में बदलाव करें.
Firebase CLI से नियमों में बदलाव करने और उन्हें डिप्लॉय करने के लिए, यह तरीका अपनाएं:
- अपने डेटाबेस इंस्टेंस के लिए, नियमों की फ़ाइलों में मौजूद नियमों में बदलाव करें. उदाहरण के लिए,
foo.rules.json
. - एक ही नियमों वाली फ़ाइल का इस्तेमाल करने वाले डेटाबेस को जोड़ने के लिए, डिप्लॉय टारगेट बनाएं और उन्हें लागू करें. उदाहरण के लिए:
firebase target:apply database main my-db-1 my-db-2
firebase target:apply database other my-other-db-3
डप्लॉय टारगेट के साथ, अपनी
firebase.json
कॉन्फ़िगरेशन फ़ाइल अपडेट करें:{ "database": [ {"target": "main", "rules": "foo.rules.json"}, {"target": "other", "rules": "bar.rules.json"} ] }
डिप्लॉय करने का निर्देश चलाएं:
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
// Get the default database instance for an appvar ref: DatabaseReference! ref = Database.database().reference()
Objective-C
// Get the default database instance for an app@property (strong, nonatomic) FIRDatabaseReference *ref; self.ref = [[FIRDatabase database] reference];
Kotlin
// 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 Realtime Database पर Firebase CLI कमांड लागू करनी है. उदाहरण के लिए, my-example-shard.firebaseio.com
नाम के डेटाबेस इंस्टेंस के लिए, प्रोफ़ाइलर को चलाने के लिए इस कमांड का इस्तेमाल करें:
firebase database:profile --instance "my-example-shard"
हर डेटाबेस पर कनेक्शन ऑप्टिमाइज़ करना
अगर हर क्लाइंट को किसी सेशन के दौरान कई डेटाबेस से कनेक्ट करना है, तो हर डेटाबेस इंस्टेंस से एक साथ कनेक्ट होने वाले क्लाइंट की संख्या कम की जा सकती है. इसके लिए, हर डेटाबेस इंस्टेंस से सिर्फ़ तब तक कनेक्ट करें, जब तक ज़रूरी हो.
ज़्यादा सलाह पाना
अगर आपको अपने डेटा को कई डेटाबेस इंस्टेंस में बांटने के बारे में ज़्यादा मदद चाहिए, तो हमारे Slack चैनल या Stack Overflow पर Firebase के विशेषज्ञों से संपर्क करें.