android क्लाउड फायरस्टोर में फ़ायरबेस डाटाबेस को परिवर्तित करना




database firebase (3)

मई आप सभी Firebase द्वारा क्लाउड फायरस्टोर के बारे में अच्छी खबरें प्राप्त करें

जैसा कि मैं अपने Firebase डाटाबेस को क्लाउड फायरस्टोर में कनवर्ट करना चाहता हूं, वहां इसे बदलने का कोई आसान तरीका है?

मैं क्लाउड फायरस्टोर पर जाना चाहता हूं


चूंकि डेटा मॉडल बहुत अलग हैं, इसलिए इसे हासिल करने का कोई स्वचालित तरीका नहीं है। आपको अपने ऐप की ज़रूरतों के आधार पर अपनी खुद की विधि लिखनी होगी।

प्रलेखन अंतर के एक सिंहावलोकन प्रदान करता है


दो डेटाबेस पूरी तरह से अलग डेटा मॉडल हैं इस कारण से, वर्तमान में फायरबसे स्वत: माइग्रेशन टूल नहीं दे रहा है, इसके परिणामस्वरूप कई मामलों में अकाट्य डेटा संरचना का परिणाम होगा।

निकट भविष्य में वे बादल फ़ास्टस्टोर का उपयोग करने के लिए देख रहे आरटीडीबी डेवलपर्स के लिए सर्वोत्तम प्रथाओं का विवरण देने वाले एक गाइड को प्रकाशित करेंगे, इसलिए इसके लिए देखें!

स्रोत लिंक - Google फायरबेज समूह

फायरबेज रीयलटाइम डाटाबेस : - सभी फ़ायरबेज रीयलटाइम डेटाबेस डेटा को JSON ऑब्जेक्ट के रूप में संग्रहीत किया जाता है। आप क्लाउड-होस्टेड JSON ट्री के रूप में डेटाबेस को सोच सकते हैं। एसक्यूएल डेटाबेस के विपरीत, कोई टेबल या रिकॉर्ड नहीं हैं जब आप JSON वृक्ष में डेटा जोड़ते हैं, तो यह मौजूदा कुंजीपटल स्ट्रिंग में एक संबद्ध कुंजी के साथ एक नोड बन जाता है। आप अपनी खुद की कुंजी प्रदान कर सकते हैं, जैसे यूजर आईडी या अर्थ नाम

Example
{ 
   data: {
           first: "foo",
           last: "bar",
           dob: 1993,
         }
}

क्लाउड फायरस्टोर : - क्लाउड फायरस्टोर में, स्टोरेज की इकाई दस्तावेज़ है। दस्तावेज़ एक हल्के रिकॉर्ड है जिसमें फ़ील्ड शामिल हैं, जो मूल्यों को मैप करते हैं। प्रत्येक दस्तावेज़ को एक नाम से पहचाना जाता है एक उपयोगकर्ता अलॉवेलेट का प्रतिनिधित्व करने वाला दस्तावेज़ इस तरह दिख सकता है:

document
first : "foo"
last : "bar"
dob : 1994

क्लाउड फायरस्टोर में एक और बात, डेटा मॉडल को संग्रह और दस्तावेज़ में संग्रहित किया जाता है, और रीयलटाइम डाटाबेस में ऐसी कोई अवधारणा नहीं है।


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

फायरबेज रीयलटाइम डाटाबेस से क्लाउड फायरस्टोर में माइग्रेट करना

क्यों, और क्यों नहीं, फ़ायरबेज रीयलटाइम डाटाबेस?

दो साल से अधिक के लिए मेरा गेट-स्टैक कोणीय और फायरबेज है डेटा बाइंडिंग ने मेरी आंखों को पकड़ा - अगर कोई उपयोगकर्ता दृश्य में डेटा बदलता है, तो डेटा तुरन्त नियंत्रक में बदलता है और क्लाउड डेटाबेस में। या घटनाओं के किसी भी अन्य आदेश मेरा पहला फायरबेज प्रोजेक्ट एक टिक-टेक-टो गेम था जहां दो खिलाड़ी दूरस्थ रूप से खेल सकते थे, मेरे क्लिक के साथ अपनी स्क्रीन पर तुरन्त दिखते थे, और इसके विपरीत, क्लाउड डेटाबेस के बीच में अपडेट किया गया था। (फायरबेज "क्लाइंट में रीयलटाइम में सिंक्रनाइज़ किए गए राज्यों को कहते हैं।")

मुझे भी फायरबेज की एथ लाइब्रेरी पसंद है OAuth2 उपयोगकर्ता लॉगिन wth फेसबुक, गूगल, ट्विटर, GitHub, या एक फोन नंबर, या पुराने स्कूल ईमेल और पासवर्ड स्थापित करना आसान है।

मुझे एक सर्वर की स्थापना और रखरखाव से निपटने की ज़रूरत नहीं है

और मुझे एक डाटाबेस का उपयोग करना पसंद है I मैं जावास्क्रिप्ट में ऑब्जेक्ट्स के सरणियों का उपयोग करता हूं, इसलिए डेटाबेस में एक ही डाटा स्ट्रक्चर का उपयोग क्यों न करें?

मुझे इसकी ज़रूरत नहीं है, लेकिन मोबाइल ऐप डेवलपर्स फायरबेज रीयलटाइम डाटाबेस की ऑफ़-लाइन क्षमताओं का उपयोग कर सकते हैं। जब उपयोगकर्ता सेवा सीमा से बाहर है, तो डाटाबेस अद्यतन करना जारी रख सकता है, ताकि जब उपयोगकर्ता ऑनलाइन वापस आ जाए तो वह वर्तमान डाटा को एक्सेस कर सकता है।

प्लस फायरबेज में बड़ी बाइनरी फ़ाइलों जैसे चित्र, ऑडियो, और वीडियो के लिए भंडारण है।

फ़ायरबेज रीयलटाइम डाटाबेस के बारे में क्या पसंद नहीं है? प्रश्न मेरे कुत्ते की इतनी पड़ोसी गर्लफ्रेंड है कि मुझे उन सभी का ट्रैक रखने के लिए एक डेटाबेस की ज़रूरत है मैं चीन के मालिकों को एक नाटक की तारीख के लिए उसे आमंत्रित करने के लिए कॉल करना चाहता हूं। अपना फोन नंबर प्राप्त करना आसान नहीं है मैं सरणी dogs को देखने के लिए फायरबसे को नहीं बता सकता, China बराबर name साथ ऑब्जेक्ट को ढूंढें, और फ़ील्ड phone_number मुझे पूरी सरणी डाउनलोड करने के लिए Firebase को बताना होगा, फिर प्रत्येक ऑब्जेक्ट पर पुनरावृति करने के लिए प्रत्येक पाश को forEach , name === China तलाश name === China । इसे "गहरी क्वेरी" कहा जाता है क्योंकि यह हर ऑब्जेक्ट सरणी में देता है, और हर उप-सरणी, और सभी नेस्टेड उप-स्तर मेरे कुत्ते की इतनी गर्लफ्रेंड है कि ये सभी को डाउनलोड करने में सेकंड ले जा सकते हैं!

फायरबेज रीयलटाइम डाटाबेस में सॉर्ट किया गया है, इसलिए मैं नाम, आयु, आदि के आधार पर पड़ोस कुत्तों की सरणी डाउनलोड कर सकता हूं। मैं फ़िल्टर कर सकता हूँ, उदाहरण के लिए, केवल कुत्तों को पांच साल से ज्यादा पुराना है, लेकिन फायरबेज रीयलटाइम डाटाबेस सॉर्ट और फ़िल्टर नहीं कर सकता

फायरबेज रीयलटाइम डाटाबेस में किसी विशेष ऑब्जेक्ट को खोजने की कुंजी इसकी चाबी जानना है। कीज़ हल्के ऑब्जेक्ट हैं जो की तरह -KloeQHDC-mugPjJMAG4 । यदि आप ऑब्जेक्ट की कुंजी का ट्रैक रखते हैं, तो आप आसानी से ऑब्जेक्ट को डेटाबेस से पुनः प्राप्त कर सकते हैं। उदाहरण के लिए, जब कोई नया उपयोगकर्ता फेसबुक के साथ लॉग करता है और एथ डेटाबेस में एक रिकार्ड बनाता है, और फिर आप रीयलटाइम डाटाबेस में एक उपयोगकर्ता खाता बनाते हैं, तो उपयोगकर्ता के खाते में यूजर के ऑथ कुंजी को एक कुंजी-वैल्यू जोड़ सकते हैं ताकि आप इस उपयोगकर्ता से संबद्ध photoURL डेटा ( displayName , photoURL , आदि) आसानी से पा सकते हैं।

एथ के लिए एक डाटाबेस के साथ, द्विआधारी फाइल भंडारण के लिए और बाकी सब के लिए एक तीसरा डाटाबेस के साथ, आपके पास ट्रैक रखने के लिए बहुत सी चाबियाँ हैं

बड़ी डेटा प्रोजेक्ट्स के लिए, फायरबेज रीयलटाइम डाटाबेस में अतिरिक्त सीमाएं हैं। डेटा केवल 32 परतें गहरी कर सकते हैं। स्केलिंग करने के लिए चीडिंग की आवश्यकता है यदि आपका ग्राहक बड़ा डेटा कर रहा है, या भ्रम में सोचता है कि उसका 5000 रिकॉर्ड बड़ा डेटा है, तो आपके पास अपने ग्राहक को किसी सर्वर पर एसक्यूएल का उपयोग न करने के लिए बहस करने के लिए कुछ बहस होगी।

क्यों बादल फायरस्टोर?

क्यूं कर? प्रश्न! क्लाउड फायरस्टोर के साथ मैं अब अपने dogs सरणी को पूछ सकता हूं, China बराबर name साथ रिकॉर्ड का अनुरोध कर रहा हूं। फ़ायरबसे केवल वही वस्तु देता है जो मुझे चाहिए।

क्लाउड फायरस्टोर डेटा सॉर्ट और फ़िल्टर कर सकता है

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

क्लाउड फायरस्टोर भी फायरबेज रीयलटाइम डाटाबेस की तुलना में बेहतर है। सुरक्षा बेहतर है, और अन्य नई सुविधाएं और सुधार हैं

निर्भरता इंजेक्षन

सबसे पहले, आपको अपने प्रोजेक्ट में क्लाउड फायरस्टोर को जोड़ना होगा। आपके फ़ायरबेज सीडीएन से लिंक करने के बाद आपकी index.html फ़ाइल में, क्लाउड फायरस्टोर सीडीएन से लिंक करें:

<script src="https://www.gstatic.com/firebasejs/4.5.0/firebase.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.5.0/firebase-firestore.js"></script>

या नोड मॉड्यूल डाउनलोड करें और इसे लिंक करें:

npm install [email protected].5.0 --save

यदि आप नोड सर्वर पर फायरबेज एसडीके का उपयोग कर रहे हैं तो आपको एक निर्भरता जोड़ने की आवश्यकता होगी:

const firebase = require("firebase");
// Required for side-effects
require("firebase/firestore");

इसके अलावा index.html आपको ऐप को इनिशियलाइज़ करना होगा:

firebase.initializeApp({
  apiKey: '### FIREBASE API KEY ###',
  authDomain: '### FIREBASE AUTH DOMAIN ###',
  projectId: '### CLOUD FIRESTORE PROJECT ID ###'
});

यदि आप फ़ायरबेज रीयलटाइम डाटाबेस, स्टोरेज और क्लाउड मेसेजिंग का भी उपयोग कर रहे हैं तो आपके पास अधिक सामान होंगे:

firebase.initializeApp({
  apiKey: '### FIREBASE API KEY ###',
  authDomain: '### FIREBASE AUTH DOMAIN ###',
  databaseURL: "https://###.firebaseio.com",
  messagingSenderId: "###",
  projectId: '### CLOUD FIRESTORE PROJECT ID ###',
  storageBucket: "###.appspot.com"
});

और, आखिरकार, अपने नियंत्रक में क्लाउड फ़ायरस्टोर के लिए एक संदर्भ बनाएं:

var db = firebase.firestore();

आपका डेटा माइग्रेट करना

इसके बाद, आप अपने डेटा को फायरबेज रीयलटाइम डेटाबेस से क्लाउड फायरस्टोर में माइग्रेट करना चाहते हैं। यह आसान है।

return firebase.database().ref('dogs').once('value') // get a snapshot of the user's data
.then(function(snapshot) { // then execute a promise on the snapshot
  snapshot.forEach(function(childSnapshot) { // iterate through the user's data
    let childData = childSnapshot.val(); // this is the user's data
    db.collection('dogs').doc(childData.dog).set(childData); // each dog is written to Cloud Firestore
  })
});

ऐसा मत करो:

return firebase.database().ref('dogs').once('value') // get a snapshot of the user's data
.then(function(snapshot) { // then execute a promise on the snapshot
    db.collection('dogs').set(snapshot); // copy the array to Cloud Firestore
});

बाद में फायरबेज रीयलटाइम डाटाबेस की कॉपी की जाएगी। यह भी काम नहीं करेगा क्योंकि आप क्लाउड फायरस्टोर पर संग्रह अपलोड नहीं कर सकते हैं, आप केवल दस्तावेज़ अपलोड कर सकते हैं।

पूर्व उदाहरण में, forEach लूप प्रत्येक रिकॉर्ड के माध्यम से पुनरावृत्त करता है और क्लाउड फायरस्टोर को एक दस्तावेज़ के रूप में अपलोड करता है। संग्रह स्वचालित रूप से और dogs नाम से बना है। यह फ़ायरबेज रीयलटाइम डाटाबेस कुंजियों को भी हटा देता है और उन्हें क्लाउड फायरस्टोर कुंजियों के साथ बदल देता है।

return इस आदेश के बाद किसी भी कोड निष्पादन को रोक देता है। यदि आप कई सरणियों को माइग्रेट करना चाहते हैं, तो केवल अंतिम आदेश पर return उपयोग करें:

firebase.database().ref('dogs').once('value') // get a snapshot of the user's data
.then(function(snapshot) { // then execute a promise on the snapshot
  snapshot.forEach(function(childSnapshot) { // iterate through the user's data
    let childData = childSnapshot.val(); // this is the user's data
    db.collection('dogs').doc(childData.dog).set(childData); // each dog is written to Cloud Firestore
  })
});

firebase.database().ref('cats').once('value') // get a snapshot of the user's data
.then(function(snapshot) { // then execute a promise on the snapshot
  snapshot.forEach(function(childSnapshot) { // iterate through the user's data
    let childData = childSnapshot.val(); // this is the user's data
    db.collection('cats').doc(childData.cat).set(childData); // each cat is written to Cloud Firestore
  })
});

return firebase.database().ref('cetaceans').once('value') // get a snapshot of the user's data
.then(function(snapshot) { // then execute a promise on the snapshot
  snapshot.forEach(function(childSnapshot) { // iterate through the user's data
    let childData = childSnapshot.val(); // this is the user's data
    db.collection('cetaceans').doc(childData.cetacean).set(childData); // each whale and dolphin is written to Cloud Firestore
  })
});

संग्रह और दस्तावेज़ में घोंसले का शिकार डेटा

फायरबेज रीयलटाइम डाटाबेस आपको सरणियों में ऑरेज़, ऑब्जेक्ट्स ऑब्जेक्ट, ऑब्जेक्ट्स में सरणियों, या एरेज़ में ऑरेंज की अनुमति देता है। क्लाउड फायरबसे केवल दस्तावेज़ों (एरेज़) में दस्तावेज़ों (ऑब्जेक्ट्स) और दस्तावेजों में संग्रह की अनुमति देता है। दूसरे शब्दों में, क्लाउड फायरबेस डेटा हमेशा संग्रहित संग्रह - दस्तावेज़ - संग्रह - दस्तावेज़, आदि।

शायद आप एक नेस्टेड एरे को एक उपसंपादित करना चाहते हैं:

return firebase.database().ref('dogs').child('girlfriends').once('value') // get a snapshot of the user's data
.then(function(snapshot) { // then execute a promise on the snapshot
  snapshot.forEach(function(childSnapshot) { // iterate through the user's data
    let childData = childSnapshot.val(); // this is the user's data
    db.collection('dogs').doc(childData.word).set(childData); // write the data to Cloud Firestore
    db.collection('dogs').doc('dogs').collection('girlfriends').doc(childData.dog).set(childData);

  })
});

यहाँ हम सरणी dogs से सरणी girlfriends हो रहे हैं, हर एक पाश के लिए सरणी के माध्यम से forEach है, और एक संग्रह dogs को एक संग्रह dogs में एक संग्रह girlfriends लिए प्रत्येक रिकॉर्ड लिख रहा है। मैंने शीर्ष संग्रह और शीर्ष दस्तावेज़ dogs दोनों का नाम रखा है। आप विभिन्न नामों का उपयोग कर सकते हैं

कोड अपडेट करना

अब हम अपना कोड अपडेट करना शुरू कर देंगे

संदर्भों को अद्यतन करना

हमने पहले से ही कोड की एक पंक्ति अपडेट कर ली है हमने अपने फायरबेज रीयलटाइम डाटाबेस संदर्भ को अपडेट किया है:

let ref = firebase.database().ref();

क्लाउड फायरस्टोर को:

let db = firebase.firestore();

आप पल के लिए फायरबेज रीयलटाइम डाटाबेस संदर्भ को छोड़ सकते हैं, और फिर इसे समाप्त कर सकते हैं या इसे समाप्त कर सकते हैं जब हम समाप्त कर लेंगे।

मेरे पास अन्य फ़ायरबेज रीयलटाइम डाटाबेस संदर्भ हैं, मेरे users सरणी के लिए:

let users = firebase.database().ref('users');

हम इसे अपडेट करेंगे:

let usersFS = firebase.firestore().collection('users');

हम अलग-अलग नामों का उपयोग करेंगे ताकि हम दोनों डेटाबेस को एक साथ चला सकें, जब तक कि हम अपना माइग्रेशन पूरा न करें।

क्वेरी अपडेट करना

अब हम अपने प्रश्नों को अद्यतन करना शुरू कर सकते हैं। मेरे नियंत्रक में, मेरी पहली firebase.database().ref क्वेरी है:

firebase.database().ref('userLoginEvent').update({'user': user.uid})

क्लाउड फायरस्टोर के लिए हम इसका उपयोग करते हैं:

db.collection('userLoginEvent').doc('HUSEj7dPh8xsOw32feQY').update({'user': user.uid});

यह कोड लगभग समान है, सिवाय इसके कि क्लाउड फायरस्टोअर को संग्रह में किसी दस्तावेज़ को निर्दिष्ट करने की आवश्यकता है। यहां मैं दस्तावेज़ की कुंजी का संदर्भ देता हूं क्योंकि यह आदेश हमेशा डेटाबेस में उसी स्थान पर लिखता है।

इसके बाद, मेरे पास है:

firebase.database().ref('users').child($scope.userAccountKey).update(englishWords);

हम इसे अपडेट करेंगे:

db.collection('users').doc($scope.userAccountKey).update(englishWords);  // this isn't working

और विपणन में कौन बादल फ़ायरस्टोर नाम दिया है?

वह नाम बहुत लंबा है! डोमेन नाम की तलाश में, मुझे लगता है कि fire.me अभी भी उपलब्ध है। मुझे आश्चर्य है कि क्यों विपणन में कोई भी कम, यादगार डोमेन नाम सुझाया?





google-cloud-firestore