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

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

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

डेटा को 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 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 के लागू करने के तरीके में बदलाव करने की ज़रूरत नहीं है.

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

  • मोबाइल और वेब 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 सेटअप की पुष्टि करें.