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

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

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

डेटा को Cloud Firestore में ले जाना

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

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

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

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

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

पक्का करें कि आपने रीयलटाइम डेटाबेस और Cloud Firestore, दोनों के लिए बिलिंग लागत को दर्ज किया हो.

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

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

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

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

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

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

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

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

// /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 ...]
}

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

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

{
   cities: {
    // ...
   },

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

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

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

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

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

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

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

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

पुराने डेटा को Cloud Firestore में ले जाएं

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

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

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

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

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

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

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

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

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

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

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

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

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