लेन-देन का क्रम संख्या और आइसोलेशन

इस पेज पर, लेन-देन से जुड़े डेटा के विवाद, क्रम के हिसाब से आंकड़े, और आइसोलेशन के बारे में बताया गया है. ट्रांज़ैक्शन कोड के सैंपल देखने के लिए, ट्रांज़ैक्शन और बैच में लिखी गई जानकारी देखें.

लेन-देन और डेटा से जुड़ा विवाद

लेन-देन पूरा होने के लिए, रीड ऑपरेशन के ज़रिए मिले दस्तावेज़ में लेन-देन के बाहर की कार्रवाइयों में कोई बदलाव नहीं होना चाहिए. अगर कोई दूसरी कार्रवाई इनमें से किसी एक दस्तावेज़ को बदलने की कोशिश करती है, तो वह कार्रवाई, ट्रांज़ैक्शन के साथ डेटा को लेकर विवाद की स्थिति में पहुंच जाती है.

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

Cloud Firestore, किसी एक कार्रवाई में देरी करके या उसे पूरा न कर पाने की वजह से, डेटा के विवाद को हल करता है. Cloud Firestore क्लाइंट लाइब्रेरी, उन लेन-देन की अपने-आप फिर से कोशिश करती हैं जो डेटा के विवाद की वजह से पूरे नहीं हो पाते. कुछ बार कोशिश करने के बाद, लेन-देन पूरा नहीं हो पाता है और इससे गड़बड़ी का मैसेज मिलता है:

ABORTED: Too much contention on these documents. Please try again.

किस कार्रवाई को पूरा नहीं करना है या किसे देरी करनी है, यह तय करते समय क्लाइंट लाइब्रेरी के टाइप पर निर्भर करता है.

  • मोबाइल/वेब SDK टूल, उम्मीद के हिसाब से एक साथ कई काम करने के कंट्रोल इस्तेमाल करते हैं.

  • सर्वर क्लाइंट लाइब्रेरी, एक साथ कई काम करने वाले (पाससिमिस्टिक) कंट्रोल का इस्तेमाल करती हैं.

मोबाइल/वेब SDK टूल में डेटा से जुड़ा विवाद

मोबाइल/वेब SDK टूल (Apple प्लैटफ़ॉर्म, Android, वेब, C++), डेटा के विवाद को हल करने के लिए बेहतर और एक साथ काम करने वाले कंट्रोल का इस्तेमाल करते हैं.

ऑप्टिमिस्टिक कॉनकरेंसी कंट्रोल
इस अनुमान पर आधारित है कि डेटा को लेकर विवाद हो सकता है या यह डेटाबेस लॉक को सुरक्षित रखने की क्षमता नहीं रखता. ऑप्टिमिस्टिक ट्रांज़ैक्शन अन्य कार्रवाइयों को डेटा में बदलाव करने से रोकने के लिए, डेटाबेस लॉक का इस्तेमाल नहीं करते.

मोबाइल/वेब SDK टूल, ऐसे डिवाइसों पर बेहतर तरीके से एक साथ काम कर सकते हैं जिन्हें एक साथ कई काम करने के लिए एक साथ इस्तेमाल किया जा सकता है. इससे, उन्हें ज़्यादा इंतज़ार के समय और बिना इंटरनेट के काम करने के लिए नेटवर्क कनेक्शन की ज़रूरत नहीं पड़ती. ज़्यादा इंतज़ार का समय होने पर दस्तावेज़ों को लॉक करने से, डेटा को लेकर कई तरह की समस्याएं हो सकती हैं.

मोबाइल/वेब SDK टूल में, ट्रांज़ैक्शन उन सभी दस्तावेज़ों की जानकारी ट्रैक करता है जिन्हें आपने ट्रांज़ैक्शन के दौरान पढ़ा है. लेन-देन पूरा होने पर, उसमें बदलाव सिर्फ़ तब किया जाता है, जब लेन-देन के दौरान इनमें से कोई भी दस्तावेज़ नहीं बदला गया हो. अगर किसी दस्तावेज़ में बदलाव होता है, तो ट्रांज़ैक्शन हैंडलर फिर से लेन-देन करने की कोशिश करता है. अगर कुछ बार कोशिश करने के बाद भी लेन-देन से बेहतर नतीजा नहीं मिलता, तो डेटा को लेकर विवाद की वजह से लेन-देन पूरा नहीं हो पाएगा.

सर्वर क्लाइंट लाइब्रेरी में डेटा से जुड़ा विवाद

सर्वर क्लाइंट लाइब्रेरी (C#, Go, Java, Node.js, PHP, Python, Ruby) बिना किसी रुकावट के एक साथ कई काम करने के कंट्रोल का इस्तेमाल करके डेटा के विवाद को हल करती हैं.

पेसिमिस्टिक कॉन करंसी कंट्रोल
इस अनुमान के आधार पर कि डेटा के बीच विवाद हो सकता है. पेसिमिस्टिक ट्रांज़ैक्शन, अन्य कार्रवाइयों को डेटा में बदलाव करने से रोकने के लिए डेटाबेस लॉक का इस्तेमाल करते हैं.

सर्वर क्लाइंट लाइब्रेरी, एक साथ काम न करने वाले कंट्रोल का इस्तेमाल करती हैं, क्योंकि वे इंतज़ार का समय कम होने के साथ-साथ डेटाबेस से सही तरीके से कनेक्ट होने का अनुमान लगाती हैं.

सर्वर क्लाइंट लाइब्रेरी में, लेन-देन की वजह से पढ़े गए दस्तावेज़ों पर लॉक लग जाता है. किसी दस्तावेज़ पर ट्रांज़ैक्शन लॉक होने पर, अन्य ट्रांज़ैक्शन, बैच किए गए राइट, और बिना लेन-देन वाले राइट को उस दस्तावेज़ में बदलाव करने से रोका जाता है. किसी लेन-देन से तय समय पर, उसके दस्तावेज़ लॉक हो जाते हैं. अगर समय खत्म हो जाता है या किसी वजह से अपडेट नहीं हो पाता है, तो अपने लॉक भी हटा दिए जाते हैं.

जब लेन-देन किसी दस्तावेज़ को लॉक करता है, तो लिखने से जुड़ी अन्य कार्रवाइयों को तब तक इंतज़ार करना पड़ता है, जब तक लेन-देन लॉक हो जाता है. लेन-देन पर, उनके लॉक समय के हिसाब से मिलते-जुलते होते हैं.

क्रम से लगाया जा सकने वाला आइसोलेशन

लेन-देन के बीच डेटा को लेकर विवाद, डेटाबेस आइसोलेशन लेवल से काफ़ी हद तक जुड़ा है. डेटाबेस के अलग-अलग आइसोलेशन लेवल से पता चलता है कि सिस्टम, एक साथ की जाने वाली कार्रवाइयों के बीच कितनी अच्छी तरह से टकराव होता है. नीचे दी गई डेटाबेस की ज़रूरी शर्तों की वजह से इस समस्या का सामना करना पड़ता है:

  • लेन-देन के लिए, सटीक और एक जैसा डेटा चाहिए.
  • संसाधनों का बेहतर तरीके से इस्तेमाल करने के लिए, डेटाबेस एक साथ कार्रवाइयां करते हैं.

कम आइसोलेशन लेवल वाले सिस्टम में, लेन-देन में पढ़ने की कार्रवाई में, एक साथ की जाने वाली कार्रवाइयों की वजह से, न किए गए बदलावों का गलत डेटा दिख सकता है.

क्रम से लगाया जा सकने वाला आइसोलेशन, सबसे ज़्यादा आइसोलेशन लेवल के बारे में बताता है. लगातार अलग-अलग दिखने का मतलब है कि:

  • यह माना जा सकता है कि डेटाबेस, सीरीज़ में ट्रांज़ैक्शन करता है.
  • एक साथ की जाने वाली कार्रवाइयों में कोई बदलाव न करने से, लेन-देन पर कोई असर नहीं पड़ता है.

यह गारंटी तब भी बनी रहनी चाहिए, जब डेटाबेस साथ-साथ कई ट्रांज़ैक्शन करता है. डेटाबेस को इस गारंटी को तोड़ने वाले विवादों को हल करने के लिए एक साथ कई कंट्रोल लागू करने होंगे.

Cloud Firestore, लेन-देन को क्रम से अलग-अलग करने की गारंटी देता है. Cloud Firestore में लेन-देन को तय समय के हिसाब से क्रम में लगाया जाता है और अलग-अलग रखा जाता है.

तय समय के हिसाब से, क्रम से लगाने लायक आइसोलेशन

Cloud Firestore हर लेन-देन के लिए एक तय समय असाइन करता है, जो समय के हिसाब से एक पॉइंट दिखाता है. जब Cloud Firestore डेटाबेस में किसी लेन-देन से जुड़े बदलाव करता है, तो आपके पास यह मानकर आगे बढ़ने का विकल्प होता है कि लेन-देन में किए गए सभी बदलाव, तय समय पर ही पूरे होंगे.

लेन-देन के पूरा होने में कुछ समय लगता है. तय समय से पहले ट्रांज़ैक्शन की प्रोसेस शुरू हो जाती है और एक से ज़्यादा बार एक से ज़्यादा बार पेमेंट हो सकता है. Cloud Firestore, सीरियल के हिसाब से आइसोलेशन करता है और यह गारंटी देता है कि:

  • Cloud Firestore, तय किए गए समय के हिसाब से लेन-देन करता है.
  • Cloud Firestore, एक साथ होने वाले लेन-देन को बाद में तय किए गए समय के हिसाब से अलग करता है.

एक साथ काम करने वाली कार्रवाइयों के बीच डेटा को लेकर विवाद के मामले में, Cloud Firestore, उम्मीद के हिसाब से और एक ही जगह पर कई तरह के अनुमान लगाने वाले कंट्रोल का इस्तेमाल करता है. इससे विवाद को सुलझाने में मदद मिलती है.

लेन-देन में अलग-अलग लोगों को शामिल करना

ट्रांज़ैक्शन आइसोलेशन, ट्रांज़ैक्शन के तहत की जाने वाली कार्रवाइयों पर भी लागू होता है. ट्रांज़ैक्शन में क्वेरी और रीड के पिछले राइट के नतीजे नहीं दिखते. भले ही, आपने ट्रांज़ैक्शन में किसी दस्तावेज़ में बदलाव किया हो या उसे मिटाया हो, तब भी उस ट्रांज़ैक्शन में पढ़े गए सभी दस्तावेज़, तय समय पर दस्तावेज़ का वर्शन दिखाते हैं. ऐसा ट्रांज़ैक्शन में बदलाव करने से पहले किया जाता है. अगर दस्तावेज़ मौजूद नहीं है, तो रीड ऑपरेशन कुछ भी नहीं लौटाता.

डेटा के विवाद से जुड़ी समस्याएं

डेटा के विवाद और उसे हल करने के तरीके के बारे में ज़्यादा जानने के लिए, समस्या हल करने वाला पेज देखें.