अपने ऐप्लिकेशन में Firebase Realtime Database और Cloud Firestore, दोनों का इस्तेमाल किया जा सकता है. साथ ही, अपनी ज़रूरतों के हिसाब से, हर डेटाबेस सॉल्यूशन के फ़ायदों का इस्तेमाल किया जा सकता है. उदाहरण के लिए, आप प्रेज़ेंस के लिए Realtime Database's की सुविधा का इस्तेमाल करना चाह सकते हैं, जैसा कि Build Presence in Cloud Firestore में बताया गया है.
डेटाबेस के बीच के अंतर के बारे में ज़्यादा जानें .
डेटा को Cloud Firestore में ले जाना
अगर आपने Realtime Database से Cloud Firestore में कुछ डेटा माइग्रेट करने का फ़ैसला लिया है, तो यह तरीका अपनाएं. हर डेटाबेस की ज़रूरतें और स्ट्रक्चर अलग-अलग होते हैं. इसलिए, माइग्रेशन के लिए कोई ऑटोमेटेड पाथ नहीं है. इसके बजाय, यह सामान्य तरीका अपनाया जा सकता है:
के डेटा स्ट्रक्चर और सुरक्षा के नियमों को Realtime Database से Cloud Firestore में मैप करें. Realtime Database और Cloud Firestore दोनों के लिए Firebase Authentication का इस्तेमाल किया जाता है, इसलिए, आपको अपने ऐप्लिकेशन के लिए उपयोगकर्ता की पुष्टि करने की प्रोसेस में बदलाव करने की ज़रूरत नहीं है. हालांकि, सुरक्षा के नियम और डेटा मॉडल अलग-अलग होते हैं. इसलिए, Cloud Firestore में डेटा ले जाने से पहले, इन अंतरों को ध्यान में रखना ज़रूरी है.
पुराना डेटा ले जाना. Cloud Firestore में नया डेटा स्ट्रक्चर सेट अप करते समय, Realtime Database से मौजूदा डेटा को अपने नए Cloud Firestore इंस्टेंस में मैप और ट्रांसफ़र किया जा सकता है. हालांकि, अगर अपने ऐप्लिकेशन में दोनों डेटाबेस का इस्तेमाल किया जा रहा है, तो आपको रीयलटाइम डेटाबेस से पुराना डेटा ट्रांसफ़र करने की ज़रूरत नहीं हैRealtime Database.
रीयलटाइम में नए डेटा को Firestore में मिरर करना. Cloud Functions का इस्तेमाल करके, Realtime Database में नया डेटा जुड़ने पर, उसे अपने नए Cloud Firestore डेटाबेस में लिखें.
माइग्रेट किए गए डेटा के लिए, 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 से ज़्यादा महंगा हो सकता है, खास तौर पर, अगर कई छोटे-छोटे ऑपरेशन किए जाते हैं. अपने डेटाबेस पर किए जाने वाले ऑपरेशन की संख्या कम करें और बिना वजह डेटा लिखने से बचें. और Cloud Firestore के बीच Realtime Database बिलिंग में अंतर के बारे में ज़्यादा जानें.
सबसे सही तरीके लागू करना
यहां दिए गए उदाहरण में, डेटाबेस के बीच डेटा ट्रांसफ़र करते समय ध्यान में रखी जाने वाली कुछ बातों के बारे में बताया गया है. रीयलटाइम डेटाबेस के मुकाबले, शैल रीड और बेहतर क्वेरी करने की सुविधाओं का इस्तेमाल करके, ज़्यादा नैचुरल डेटा स्ट्रक्चर बनाए जा सकते हैं, जिनका इस्तेमाल आपने 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 FirestoreCloud Firestore में अपने ऐप्लिकेशन को ट्रांसफ़र करने के बाद, पुराने डेटा के लिए क्वेरी करनी है, तो अपने नए Cloud FirestoreCloud Firestore डेटाबेस में, पुराने डेटा का एक्सपोर्ट जोड़ें. अगर अपने ऐप्लिकेशन में Realtime Database और Cloud Firestore दोनों का इस्तेमाल करना है, तो इस चरण को छोड़ा जा सकता है.
नए डेटा को पुराने डेटा से ओवरराइट होने से बचाने के लिए, पहले पुराना डेटा जोड़ा जा सकता है. अगर दोनों डेटाबेस में एक साथ नया डेटा जोड़ा जाता है, जैसा कि अगले चरण में बताया गया है, तो पक्का करें कि Cloud Firestore से जोड़े गए नए डेटा को Cloud Functions प्राथमिकता दी जाए.
पुराने डेटा को Cloud Firestore में माइग्रेट करने के लिए, यह तरीका अपनाएं:
- अपने डेटा को Realtime Database से एक्सपोर्ट करें या
हाल ही के बैकअप का इस्तेमाल करें.
- Firebase कंसोल में, डेटाबेस और स्टोरेज > रीयलटाइम डेटाबेस पर जाएं.
- डेटा टैब में, अपने डेटाबेस का रूट-लेवल नोड चुनें और मेन्यू से JSON एक्सपोर्ट करें को चुनें.
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 को मान्य करें.
अगर आपने अपने डेटाबेस के बीच समानता बनाए रखने के लिए Cloud Functions का इस्तेमाल किया है, तो पक्का करें कि लूप में दोनों डेटाबेस में डेटा लिखने के ऑपरेशन डुप्लीकेट न हों. अपने फ़ंक्शन को किसी एक डेटाबेस में डेटा लिखने के लिए स्विच करें या फ़ंक्शन को पूरी तरह से हटाएं. साथ ही, Realtime Database से अब भी जुड़े ऐप्लिकेशन में, माइग्रेट किए गए डेटा के लिए डेटा लिखने की सुविधा को धीरे-धीरे बंद करें. अपने ऐप्लिकेशन के लिए, इसे कैसे हैंडल करना है, यह आपकी खास ज़रूरतों और उपयोगकर्ताओं पर निर्भर करता है.
पुष्टि करें कि आपका डेटा सही तरीके से सुरक्षित है. अपने Cloud Firestore Security Rules या IAM सेटअप को मान्य करें.