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 Authentication पर निर्भर करते हैं. इसलिए, आपको अपने ऐप्लिकेशन के लिए उपयोगकर्ता की पुष्टि करने की सुविधा में बदलाव करने की ज़रूरत नहीं है. हालांकि, सुरक्षा नियम और डेटा मॉडल अलग-अलग हैं. इसलिए, Cloud Firestore में डेटा ट्रांसफ़र करने से पहले, इन अंतरों को ध्यान में रखना ज़रूरी है.

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

  3. नए डेटा को रीयल टाइम में Firestore में मिरर करें. Cloud Firestoreमें डेटा जोड़ने के बाद, उसे अपने नए Cloud Firestore डेटाबेस में लिखने के लिए, Cloud Functions का इस्तेमाल करें.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 का इस्तेमाल किया जा रहा हो या सर्वर के लिए Identity Access Management (IAM) का, पक्का करें कि आपने Cloud Firestore के साथ-साथ Realtime Database में भी अपना डेटा सुरक्षित किया हो. उपयोगकर्ता की पुष्टि, दोनों डेटाबेस के लिए पुष्टि करने की सुविधा से मैनेज की जाती है. इसलिए, Cloud Firestore का इस्तेमाल शुरू करने पर, आपको पुष्टि करने की सुविधा को लागू करने के तरीके में बदलाव करने की ज़रूरत नहीं है.

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

  • मोबाइल और वेब SDK टूल, Cloud Firestore Security Rules का इस्तेमाल करते हैं. वहीं, सर्वर SDK टूल, डेटा को सुरक्षित रखने के लिए आइडेंटिटी ऐक्सेस मैनेजमेंट (IAM) का इस्तेमाल करते हैं.
  • 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 कंसोल में, Realtime Database सेक्शन पर जाएं.
    2. डेटा टैब में, अपने डेटाबेस का रूट-लेवल नोड चुनें. इसके बाद, मेन्यू से JSON एक्सपोर्ट करें को चुनें.
  2. Cloud Firestore में अपना नया डेटाबेस बनाएं और अपना डेटा जोड़ें.

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

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

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

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

जब भी कोई क्लाइंट 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 या IAM सेटअप की पुष्टि करें.