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

अपने ऐप्लिकेशन में, Firebase Realtime Database और Cloud Firestore दोनों का इस्तेमाल किया जा सकता है. साथ ही, अपनी ज़रूरतों के हिसाब से, हर डेटाबेस सलूशन के फ़ायदों का इस्तेमाल किया जा सकता है. उदाहरण के लिए, हो सकता है कि आपको मौजूदगी की जानकारी देने की सुविधा बनाने के लिए, Realtime Database की मौजूदगी की जानकारी देने की सुविधा का इस्तेमाल करना हो. इसके बारे में, Build Presence in 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 का इस्तेमाल करके, Realtime Database में नया डेटा जुड़ने पर, उसे अपने नए Cloud Firestore डेटाबेस में लिखें.

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

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

  • मोबाइल और वेब 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 Firestore से जोड़े गए नए डेटा को Cloud Functions प्राथमिकता दी जाए.

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

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

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

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

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

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

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

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

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

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

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