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

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

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

  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 डेटाबेस को स्ट्रक्चर करने के ज़्यादा आइडिया पाने के लिए, हमारे समाधान देखें.

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

पक्का करें कि आपका डेटा, Cloud Firestore के साथ-साथ Realtime Database में भी सुरक्षित किया जा रहा है. चाहे Android, Apple के लिए Cloud Firestore Security Rules या वेब क्लाइंट के लिए Cloud Firestore Security Rules या सर्वर के लिए Identity Access Management (IAM) का इस्तेमाल किया जा रहा हो. उपयोगकर्ता की पुष्टि, दोनों डेटाबेस के लिए पुष्टि करने की सुविधा से मैनेज की जाती है. इसलिए, Cloud Firestore का इस्तेमाल शुरू करने पर, आपको पुष्टि करने की सुविधा को लागू करने के तरीके में बदलाव करने की ज़रूरत नहीं है.

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

  • मोबाइल और वेब SDK टूल, Cloud Firestore Security Rules का इस्तेमाल करते हैं. वहीं, सर्वर के SDK टूल, डेटा को सुरक्षित रखने के लिए Identity Access Management (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 सेटअप की पुष्टि करें.