Firebase रीयल टाइम डेटाबेस के साथ Cloud Firestore का इस्तेमाल करना

अपने ऐप्लिकेशन में Firebase Realtime Database और Cloud Firestore, दोनों का इस्तेमाल किया जा सकता है. साथ ही, अपनी ज़रूरतों के हिसाब से हर डेटाबेस सलूशन के फ़ायदों का फ़ायदा उठाया जा सकता है. उदाहरण के लिए, हो सकता है कि आपको Realtime Database की मौजूदगी की सुविधा का फ़ायदा लेना हो. इसके बारे में Cloud Firestore में मौजूदगी बनाएं में बताया गया है.

डेटाबेस के बीच के अंतर के बारे में ज़्यादा जानें.

Cloud Firestore में डेटा ट्रांसफ़र किया जा रहा है

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

  1. Realtime Database से Cloud Firestore में डेटा स्ट्रक्चर और सुरक्षा के नियमों को मैप करें. Realtime Database और Cloud Firestore, दोनों ही Firebase से पुष्टि करने की सुविधा का इस्तेमाल करते हैं. इसलिए, आपको अपने ऐप्लिकेशन के लिए, उपयोगकर्ता की पुष्टि करने की सुविधा में बदलाव करने की ज़रूरत नहीं है. हालांकि, सुरक्षा के नियम और डेटा मॉडल अलग-अलग होते हैं. इसलिए, Cloud Firestore में डेटा ट्रांसफ़र करने से पहले, इन अंतरों को ध्यान से समझना ज़रूरी है.

  2. पुराना डेटा ट्रांसफ़र करना. Cloud Firestore में नया डेटा स्ट्रक्चर सेट अप करते समय, Realtime Database से मौजूदा डेटा को मैप करके, अपने नए Cloud Firestore इंस्टेंस में ट्रांसफ़र किया जा सकता है. हालांकि, अगर आपके ऐप्लिकेशन में दोनों डेटाबेस इस्तेमाल किए जा रहे हैं, तो आपको Realtime Database से पुराना डेटा हटाने की ज़रूरत नहीं है.

  3. नए डेटा को रीयल टाइम में Firestore पर मिरर करें. Cloud Functions का इस्तेमाल करके, अपने नए Cloud Firestore डेटाबेस में नया डेटा लिखें, क्योंकि इसे Realtime Database में जोड़ा जाता है.

  4. माइग्रेट किए गए डेटा के लिए, Cloud Firestore को अपना प्राइमरी डेटाबेस बनाएं. कुछ डेटा माइग्रेट करने के बाद, Cloud Firestore को अपने प्राइमरी डेटाबेस के तौर पर इस्तेमाल करें. साथ ही, माइग्रेट किए गए डेटा के लिए Realtime Database का इस्तेमाल कम करें. अपने ऐप्लिकेशन के उन वर्शन पर विचार करें जो अब भी उस डेटा के लिए Realtime Database से जुड़े हैं. साथ ही, यह भी बताएं कि उन्हें कैसे सपोर्ट किया जाएगा.

पक्का करें कि आपने Realtime Database और Cloud Firestore, दोनों के लिए बिलिंग की लागत को ध्यान में रखा हो.

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

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

ध्यान देने लायक मुख्य अंतर

अगर डेटा को मौजूदा Realtime Database ट्री से Cloud Firestore दस्तावेज़ों और कलेक्शन में ट्रांसफ़र किया जाता है, तो डेटाबेस के बीच इन मुख्य अंतरों को ध्यान में रखें. इनसे Cloud Firestore में डेटा को स्ट्रक्चर करने के तरीके पर असर पड़ सकता है:

  • शैलो क्वेरी, हैरारकी वाले डेटा स्ट्रक्चर में ज़्यादा सुविधाएं देती हैं.
  • जटिल क्वेरी से ज़्यादा जानकारी मिलती है और डुप्लीकेट डेटा की ज़रूरत कम हो जाती है.
  • क्वेरी कर्सर, पेजों में बांटने की ज़्यादा बेहतर सुविधा देते हैं.
  • लेन-देन के लिए, अब आपके सभी डेटा के लिए एक ही रूट की ज़रूरत नहीं होती. साथ ही, ये ज़्यादा असरदार होते हैं.
  • Realtime Database और Cloud Firestore के बीच बिलिंग की लागत अलग-अलग होती है. कई मामलों में, Cloud Firestore, Realtime Database से ज़्यादा महंगा हो सकता है. खास तौर पर, तब जब आपको कई छोटे-छोटे ऑपरेशन करने हों. अपने डेटाबेस पर कार्रवाइयों की संख्या कम करें और ग़ैर-ज़रूरी डेटा लिखने से बचें. Realtime Database और Cloud Firestore के बीच बिलिंग में अंतर के बारे में ज़्यादा जानें.

सबसे सही तरीके

यहां दिए गए उदाहरण में, डेटाबेस के बीच डेटा ट्रांसफ़र करते समय ध्यान में रखी जाने वाली कुछ बातें बताई गई हैं. शैलो रीड और बेहतर क्वेरी की सुविधाओं का इस्तेमाल करके, ज़्यादा नैचुरल डेटा स्ट्रक्चर बनाए जा सकते हैं. ये स्ट्रक्चर, Realtime Database के साथ इस्तेमाल किए गए स्ट्रक्चर से बेहतर हो सकते हैं.

मान लें कि कोई ऐप्लिकेशन, दुनिया भर के शहरों में मौजूद मशहूर लैंडमार्क ढूंढने में उपयोगकर्ताओं की मदद करता है. Realtime Database में शैलो रीड की सुविधा नहीं है. इसलिए, आपको डेटा को दो टॉप-लेवल नोड में इस तरह से स्ट्रक्चर करना पड़ सकता है:

// /cities/$CITY_KEY
{
  name: "New York",
  population: 8000000,
  capital: False
}

// /city-landmark/$CITY_KEY/$LANDMARK_KEY
{
  name: "Empire State Building",
  category: "Architecture"
}

Cloud Firestore में शैलो रीड की सुविधा होती है. इसलिए, किसी कलेक्शन में मौजूद दस्तावेज़ों के लिए क्वेरी करने पर, सब-कलेक्शन से डेटा फ़ेच नहीं होता. इसलिए, लैंडमार्क की जानकारी को सब-कलेक्शन में सेव किया जा सकता है:

// /cities/$CITY_ID
{
  name: "New York",
  population: 8000000,
  capital: False,
  landmarks: [... subcollection ...]
}

दस्तावेज़ों का साइज़ ज़्यादा से ज़्यादा 1 एमबी हो सकता है. यह भी एक वजह है कि लैंडमार्क को सब-कलेक्शन के तौर पर सेव किया जाता है. इससे हर शहर के दस्तावेज़ का साइज़ छोटा रहता है. साथ ही, दस्तावेज़ों को नेस्ट की गई सूचियों से भरने की ज़रूरत नहीं पड़ती.

Cloud Firestore की बेहतर क्वेरी सुविधाओं की मदद से, सामान्य ऐक्सेस पैटर्न के लिए डेटा का डुप्लीकेट बनाने की ज़रूरत कम हो जाती है. उदाहरण के लिए, सिटी गाइड ऐप्लिकेशन की एक स्क्रीन पर, सभी राजधानी शहरों को जनसंख्या के हिसाब से क्रम में दिखाया गया है. Realtime Database में, ऐसा करने का सबसे आसान तरीका यह है कि राजधानियों की एक अलग सूची बनाई जाए, जो cities सूची के डेटा को डुप्लीकेट करती हो. जैसे:

{
   cities: {
    // ...
   },

   capital-cities: {
     // ...
   }
}

Cloud Firestore में, राजधानी वाले शहरों की सूची को जनसंख्या के हिसाब से, एक क्वेरी के तौर पर दिखाया जा सकता है:

db.collection('cities')
    .where('capital', '==', true)
    .orderBy('population')

Cloud Firestore डेटा मॉडल के बारे में ज़्यादा पढ़ें. साथ ही, अपने Cloud Firestore डेटाबेस को स्ट्रक्चर करने के बारे में ज़्यादा आइडिया पाने के लिए, हमारे समाधान देखें.

अपना डेटा सुरक्षित करें

चाहे Android, Apple या वेब क्लाइंट के लिए Cloud Firestore Security Rules का इस्तेमाल किया जा रहा हो या सर्वर के लिए आइडेंटिटी ऐक्सेस मैनेजमेंट (आईएएम) का, यह पक्का करें कि आपका डेटा Cloud Firestore और Realtime Database, दोनों में सुरक्षित हो. दोनों डेटाबेस के लिए, उपयोगकर्ता की पुष्टि करने की प्रोसेस को Authentication मैनेज करता है. इसलिए, Cloud Firestore का इस्तेमाल शुरू करने पर, आपको Authentication को लागू करने के तरीके में बदलाव करने की ज़रूरत नहीं है.

ध्यान देने लायक मुख्य अंतर

  • मोबाइल और वेब एसडीके, Cloud Firestore Security Rules का इस्तेमाल करते हैं. वहीं, सर्वर एसडीके, डेटा को सुरक्षित रखने के लिए आइडेंटिटी ऐक्सेस मैनेजमेंट (आईएएम) का इस्तेमाल करते हैं.
  • Cloud Firestore Security Rules तब तक कैस्केड नहीं होते, जब तक वाइल्डकार्ड का इस्तेमाल न किया जाए. दस्तावेज़ और कलेक्शन, नियमों को इनहेरिट नहीं करते.
  • अब आपको डेटा की पुष्टि अलग से करने की ज़रूरत नहीं है, जैसा कि आपने Realtime Database में किया था.
  • Cloud Firestore, क्वेरी को लागू करने से पहले नियमों की जांच करता है, ताकि यह पक्का किया जा सके कि उपयोगकर्ता के पास क्वेरी से मिले सभी डेटा का सही ऐक्सेस है.

पुराने डेटा को Cloud Firestore में ट्रांसफ़र करें

अपने डेटा और सुरक्षा स्ट्रक्चर को Cloud Firestore के डेटा और सुरक्षा मॉडल के साथ मैप करने के बाद, अपना डेटा जोड़ा जा सकता है. अगर आपको अपने ऐप्लिकेशन को Realtime Database से Cloud Firestore पर माइग्रेट करने के बाद, पुराने डेटा के लिए क्वेरी करनी है, तो अपने पुराने डेटा को नए Cloud Firestore डेटाबेस में एक्सपोर्ट करें. अगर आपको अपने ऐप्लिकेशन में Realtime Database और Cloud Firestore, दोनों का इस्तेमाल करना है, तो इस चरण को छोड़ा जा सकता है.

नए डेटा को पुराने डेटा से ओवरराइट होने से बचाने के लिए, हो सकता है कि आप पहले अपना पुराना डेटा जोड़ना चाहें. अगर दोनों डेटाबेस में एक साथ नया डेटा जोड़ा जाता है, तो पक्का करें कि Cloud Functions ने Cloud Firestore में जो नया डेटा जोड़ा है उसे प्राथमिकता दी जाए. इस बारे में अगले चरण में बताया गया है.

पुराने डेटा को Cloud Firestore पर माइग्रेट करने के लिए, यह तरीका अपनाएं:

  1. Realtime Database से अपना डेटा एक्सपोर्ट करें या हाल ही के बैकअप का इस्तेमाल करें.
    1. Firebase कंसोल में, डेटाबेस और स्टोरेज > रीयलटाइम डेटाबेस पर जाएं.
    2. डेटा टैब में, अपने डेटाबेस का रूट-लेवल नोड चुनें. इसके बाद, मेन्यू से JSON एक्सपोर्ट करें को चुनें.
  2. Cloud Firestore में अपना नया डेटाबेस बनाएं और अपना डेटा जोड़ें.

    अपने कुछ डेटा को Cloud Firestore पर ट्रांसफ़र करते समय, इन रणनीतियों को अपनाएं:

    • एक कस्टम स्क्रिप्ट लिखें, जो आपके डेटा को पोर्ट करे. हम इस स्क्रिप्ट के लिए कोई टेंप्लेट नहीं दे सकते, क्योंकि हर डेटाबेस की ज़रूरतें अलग-अलग होंगी. हालांकि, Cloud Firestore हमारे Slack चैनल या Stack Overflow पर मौजूद विशेषज्ञ आपकी स्क्रिप्ट की समीक्षा कर सकते हैं या आपकी स्थिति के हिसाब से सलाह दे सकते हैं.
    • Cloud Firestore में सीधे डेटा लिखने के लिए, सर्वर एसडीके (Node.js, Java, Python या Go) का इस्तेमाल करें. सर्वर एसडीके सेट अप करने के निर्देशों के लिए, शुरू करें पर जाएं.
    • ज़्यादा डेटा को तेज़ी से माइग्रेट करने के लिए, बैच में डेटा लिखने की सुविधा का इस्तेमाल करें. साथ ही, एक ही नेटवर्क अनुरोध में ज़्यादा से ज़्यादा 500 कार्रवाइयां भेजें.
    • Cloud Firestore की तय सीमा में रहने के लिए, हर कलेक्शन के लिए, ऑपरेशन को 500 राइट/सेकंड तक सीमित करें.

Cloud Firestore में नया डेटा जोड़ना

अपने डेटाबेस के बीच समानता बनाए रखने के लिए, दोनों डेटाबेस में रीयल टाइम में नया डेटा जोड़ें. जब भी कोई क्लाइंट Realtime Database में कुछ लिखता है, तब Cloud Firestore में लिखने के लिए Cloud Functions का इस्तेमाल करें. पक्का करें कि Cloud Firestore, पुराने डेटा के माइग्रेशन से लिखे जा रहे किसी भी डेटा के मुकाबले, Cloud Functions से आने वाले नए डेटा को प्राथमिकता दे.

जब भी कोई क्लाइंट Realtime Database में डेटा लिखे, तब Cloud Firestore में नया या बदला हुआ डेटा लिखने के लिए एक फ़ंक्शन बनाएं. Cloud Functions के लिए, Realtime Database ट्रिगर के बारे में ज़्यादा जानें.

माइग्रेट किए गए डेटा के लिए, Cloud Firestore को अपना प्राइमरी डेटाबेस बनाएं

अगर आपने अपने कुछ डेटा के लिए, Cloud Firestore को प्राइमरी डेटाबेस के तौर पर इस्तेमाल करने का फ़ैसला लिया है, तो पक्का करें कि आपने सेट अप किए गए डेटा-मिररिंग फ़ंक्शन को ध्यान में रखा हो. साथ ही, अपने Cloud Firestore Security Rules की पुष्टि करें.

  1. अगर आपने अपने डेटाबेस के बीच समानता बनाए रखने के लिए Cloud Functions का इस्तेमाल किया है, तो पक्का करें कि आप दोनों डेटाबेस में, लूप में राइट ऑपरेशन को डुप्लीकेट न कर रहे हों. अपने फ़ंक्शन को एक ही डेटाबेस में लिखने के लिए स्विच करें या फ़ंक्शन को पूरी तरह से हटाएं. साथ ही, Realtime Database से जुड़े ऐप्लिकेशन में माइग्रेट किए गए डेटा के लिए, लिखने की सुविधा को धीरे-धीरे बंद करें. अपने ऐप्लिकेशन के लिए इसे कैसे मैनेज करना है, यह आपकी खास ज़रूरतों और उपयोगकर्ताओं पर निर्भर करता है.

  2. पुष्टि करें कि आपका डेटा सुरक्षित है. अपने Cloud Firestore Security Rules या आईएएम सेटअप की पुष्टि करें.