2013-02-04 15 views
8

यदि 2 या अधिक उपयोगकर्ता ऑफ़लाइन दोनों हैं और वे एक ही डेटा संपादित कर रहे हैं, जो जीतता है? या, बेहतर अभी तक, क्या कोई विवाद/विलय समाधान है?संघर्ष समाधान?

उत्तर

12

उत्तर इस बात पर निर्भर करता है कि वे डेटा को कैसे संशोधित कर रहे हैं।

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

तो यदि आपको परवाह नहीं है कि कौन जीतता है, सेट() का उपयोग करें। यदि आपको संघर्ष/विलय समाधान के माध्यम से किसी प्रकार की स्थिरता सुनिश्चित करने की आवश्यकता है, तो लेनदेन() का उपयोग करें।

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