मुझे नीचे कुछ धागा मिला है जो इस परिदृश्य के बारे में बात करते हैं।फायरबेस: एकल लेनदेन में एकाधिक ऑब्जेक्ट्स अपडेट करें
- Firebase: How do I update multiple resources atomically
- Firebase data consistency across multiple nodes
- How to store users and groups for a chat using Firebase
हालांकि अभी भी लगता है के लिए संघर्ष कर, अगर कोई इस के लिए सिफारिश की डेटा संरचना डिजाइन। मुझे एक मल्टी-राइट लाइब्रेरी firebase-multi-write दिखाई देती है जो कहती है कि आपको शायद ज्यादातर मामलों में इसकी आवश्यकता नहीं है।
लेकिन मैं मैं इस की जरूरत है लगता है, मेरे परिदृश्य है:। 3 उपयोगकर्ताओं
/users/A : {credit:20}
/users/B : {credit:3}
/users/C : {credit:10}
और प्रत्येक उपयोगकर्ता के सभी एक ही समय पर एक दूसरे से क्रेडिट चोरी कर सकते हैं,
- एक बी क्रेडिट से चोरी {21, 2}
- सी क्रेडिट से बी चोरी करता है जैसे {3, 9}
- सी क्रेडिट से चोरी करता है जैसे {11, 2 0}
अब मुझे प्रत्येक स्थिरता को बनाए रखने के लिए प्रत्येक उपयोगकर्ता के लिए क्रेडिट अपडेट करने की आवश्यकता है, ताकि प्रत्येक चोरी ऑपरेशन प्रकृति में परमाणु हो।
जावा में डेटा अखंडता को बनाए रखते हुए, इस तरह के परिदृश्य को संभालने का सबसे अच्छा तरीका क्या होगा?
आपका पहला जुड़ा हुआ धागा वार्ता (इवेंट सोर्सिंग - http://martinfowler.com/eaaDev/ EventSourcing.html)। आप एक ही घटना लिखेंगे जो सभी तीन चोरी घटनाओं को कैप्चर करेगी और फिर जब आपको वर्तमान क्रेडिट शेष राशि खोजने की आवश्यकता होगी तो आप प्रारंभिक स्थिति (शायद 0 क्रेडिट) लोड करेंगे और फिर अंतिम स्थिति में समाप्त होने तक ईवेंट इतिहास को प्लेबैक करेंगे। बोनस अंक - आपके पास सभी "चोरी" का इतिहास है। क्या कोई कारण स्वीकार्य नहीं है? –
धन्यवाद, मैंने जो परिदृश्य उल्लेख किया है वह वर्कफ़्लो का सरलीकृत संस्करण था जिसे मैं कल्पना करता हूं। यह सरल गेमिंग ऐप का एक हिस्सा है, जहां ए बी को चुराता है, और अगले पल में बी ने सी और डी खिलाड़ियों के मिश्रण के साथ इसे वापस चुरा लिया। तो यह एक साधारण परमाणु अद्यतन के लिए बस बहुत अधिक गणना ?? – duskandawn
मुझे पता नहीं है कि परमाणु परिचालन काम करेगा या नहीं - लेकिन जो आप वर्णन कर रहे हैं वह मुझे परमाणु ऑपरेशन की तरह नहीं लगता है। यदि ए बी से लेता है और फिर "अगले पल में" बी इसे वापस चुरा लेता है ... यह परमाणु नहीं है। यह दो अलग-अलग ऑपरेशन है जो समय पर एक दूसरे के पास होते हैं। वास्तव में –