2015-04-29 13 views
5

को the firebase docs डेटा चपटा है और सूचकांक पेड़ में अलग नोड्स से जोड़ने के लिए उपयोग किया जाता है अनुसार:Firebase डेटा स्थिरता

users 
    $userId 
    widgets 
     $widgetId 
widgets 
    $widgetId 

उपरोक्त उदाहरण में, एक उपयोगकर्ता एक विजेट बनाता है, कि widgetid भी है उपयोगकर्ता नोड के तहत संग्रहीत।

मेरा सवाल यह है कि ऑपरेशन की स्थिरता की गारंटी देने का कोई तरीका है, क्योंकि अब एक से अधिक लिखने की आवश्यकता है।

मान लिया जाये कि पहला ऑपरेशन है:

var newKey = fb.child('widgets').push({ name: 'widge' }).key();

मैं तो करने के लिए यह लिख सकते हैं:

fb.child('users').child(auth.id).child('widgets').child(newKey).set(true);

लेकिन क्या होगा अगर वहाँ एक विफलता या दो लेखन के बीच दूसरी समस्या थी? या यदि मेरे पास कई जगह हैं तो मुझे उस कुंजी को स्टोर करने की आवश्यकता है और उन लिखने के बीच विफलता होती है?

क्या वर्तमान में फ़ायरबेस में इसे संभालने का कोई तरीका है?

यदि नहीं, तो क्या भविष्य में इसका समर्थन करने की योजना है?

और यदि ऐसा है, तो क्या कोई ऐसा विशिष्ट उदाहरण प्रदान कर सकता है कि यह कैसे किया जाएगा?

+0

सी [firebase-बहु लिखने] (https://github.com/katowulf/firebase-multi-write) और ** अवश्य पढ़ लें ** "आप यह आवश्यकता है"। संकेत: आप शायद नहीं करते हैं। – Kato

+0

@ काटो थक्स! यह जगह पर दिखता है - मुझे एक नज़र आएगी। "क्या आपको इसकी आवश्यकता है" के संबंध में, यह हमेशा इसकी आवश्यकता के बारे में नहीं है, प्रश्नों को समझाने और जवाब देने में भी सक्षम है। – martypdx

+0

और वे महान प्रश्न हैं। काउंटर करने के लिए, बहुत से लोग इसे पढ़ लेंगे और टेबल पर आगे बढ़ना सबसे अच्छा होगा। – Kato

उत्तर

2

ध्यान दें कि यह अब कोर फायरबेस एपीआई का हिस्सा है। विवरण के लिए this blog post देखें।

var mergedUpdate = {}; 
mergedUpdate[ 'users/' + userId + '/widgets/' + widgetId ] = true; 
mergedUpdate[ 'widgets/' + widgetId ] = widgetData; 

var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/"); 
ref.update(mergedUpdate); 
+0

क्या आप एक सत्यापन नियम में कुछ अंतर्दृष्टि प्रदान कर सकते हैं जो केवल उपयोगकर्ताओं/नोड में विजेट आईडी को अपडेट करेगा जब नए डेटा में दोनों पथ होंगे? – Felipe

+0

मुझे मदद करने में खुशी होगी। यह एक अलग प्रश्न की तरह लगता है और किसी भी मदद के लिए विशिष्ट विवरण की आवश्यकता होगी। देखें [कैसे पूछें] (http://stackoverflow.com/help/how-to-ask) और [एक mcve बनाना] (http://stackoverflow.com/help/mcve)। – Kato

+0

@ काटो क्या वर्तमान में फायरबेस लेनदेन में दो अलग-अलग नोड्स लिखना संभव है?मुझे लगता है कि आपका उत्तर लागू नहीं होगा यदि एकाधिक उपयोगकर्ता एक ही संसाधन को लिखने का प्रयास करेंगे और केवल एक उपयोगकर्ता को ऐसा करने की अनुमति दी जानी चाहिए। कृपया सलाह दें। मेरा सवाल https://stackoverflow.com/questions/45508007 है – bibscy

0

transaction operation पर एक नज़र डालें और अपना दूसरा लेखन करने के लिए पूर्ण कॉलबैक पर उपयोग करें। आप लेनदेन को श्रृंखलाबद्ध कर सकते हैं।
फायरबेस साइट पर उपलब्ध उदाहरण काउंटरों को सुरक्षित रूप से बढ़ाने के लिए हैं।

मैंने एक अन्य प्रश्न के लिए नमूना कोड प्रदान किया है जो आपकी मदद कर सकता है। How to store users and groups for a chat using Firebase

+0

लिंक के लिए धन्यवाद, लेकिन आईएमओ एक हैक है यदि ग्राहक मैन्युअल रूप से डेटा को वापस कर रहा है। यह सबसे अच्छा हैक हो सकता है, लेकिन मैं यह सुनना चाहता हूं कि अग्निशामक करता है या नहीं (अभी तक) इसका समर्थन करता है। – martypdx

+0

जहां तक ​​मुझे पता है, पारंपरिक डेटाबेस लेनदेन (एक साथ समूहित कई अपडेट) जो आपके परिवर्तनों को स्वचालित रूप से वापस ले जाएंगे, समर्थित नहीं है। वर्तमान .transaction केवल समवर्ती अद्यतन (डीबीएमएस की लॉकिंग सुविधा की तरह) की रक्षा करता है। –

संबंधित मुद्दे