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