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

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

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