क्या कोई मुझे समझा सकता है कि अगर हम लेन-देन प्रबंधन के लिए स्प्रिंग का उपयोग करते हैं, तो समवर्ती अद्यतनों को हाइबरनेट (हाइबरनेट के मेमोरी स्वचालित संस्करण प्रबंधन में) द्वारा कैसे नियंत्रित किया जाएगा या मुझे मैन्युअल रूप से समवर्ती अद्यतनों की देखभाल करने के लिए डेटाबेस में संस्करण कॉलम रखना होगा।पी>
आप लेन-देन प्रबंधन के लिए स्प्रिंग का उपयोग कर रहे हैं या नहीं, यह वास्तव में मायने नहीं रखता है और जब संगामिति प्रबंधन की बात आती है तो यह प्रासंगिक नहीं है, यह वास्तव में हाइबरनेट द्वारा नियंत्रित किया जाता है। समवर्ती अद्यतनों को संभालने के लिए हाइबरनेट 2 रणनीतियों का उपयोग कर सकता है:आशावादी लॉकिंग और निराशावादी लॉकिंग।
आशावादी
आशावादी लॉकिंग का उपयोग करते समय, आप एक विशेष विशेषता (एक संख्या, एक टाइमस्टैम्प) को संस्करण के रूप में मैप करते हैं (इसलिए आपके पास वास्तव में इसके लिए एक कॉलम है)। यह संस्करण तब पढ़ा जाता है जब आप किसी निकाय को पुनः प्राप्त करते हैं और शामिल जहां खंड में एक अद्यतन के दौरान और वृद्धि हुई हाइबरनेट द्वारा।
यह कैसे काम करता है यह समझाने के लिए, आइए कल्पना करें कि आप एक व्यक्ति इकाई को आईडी =1 और वर्तमान संस्करण =1 के साथ लोड करते हैं। सेव करने के बाद, हाइबरनेट कुछ इस तरह करेगा:
update PERSON set ID=1, NAME='NAME 1', VERSION=2 where ID=1 and VERSION=1;
तो, अब, कल्पना करें कि आपके पास दो समवर्ती लेन-देन चल रहे हैं, उनमें से प्रत्येक समान . को लोड कर रहा है इकाई (समान संस्करण संख्या) और नाम बदलना।
मान लें कि लेन-देन #1 पहले प्रतिबद्ध है, निम्नलिखित क्वेरी की जाती है:
update PERSON set ID=1, NAME='NAME 1', VERSION=2 where ID=1 and VERSION=1;
यह सफल होता है और संस्करण बढ़ता जाता है।
फिर लेन-देन #2 प्रतिबद्ध है, निम्नलिखित क्वेरी की जाती है:
update PERSON set ID=1, NAME='NAME 2', VERSION=2 where ID=1 and VERSION=1;
यह कुछ भी अपडेट नहीं करेगा क्योंकि जहां क्लॉज किसी रिकॉर्ड से मेल नहीं खाएगा। यह वह जगह है जहाँ आपको एक आशावादी समवर्ती अपवाद मिलेगा।
यह रणनीति उपयुक्त है जब आप कनेक्शन को बनाए नहीं रखते हैं, जब समवर्ती पहुंच अक्सर नहीं होती है, और स्केल वास्तव में अच्छी तरह से होता है। और जब तक आप संस्करण विशेषता को मैप करते हैं, तब तक आपके लिए हाइबरनेट द्वारा सब कुछ पारदर्शी रूप से संभाला जाता है।
निराशावादी
निराशावादी लॉकिंग का उपयोग करते समय, हाइबरनेट आपके विशिष्ट उपयोग के लिए एक रिकॉर्ड को तब तक लॉक कर देता है जब तक कि आप इसे समाप्त नहीं कर लेते (आमतौर पर SELECT ... FOR UPDATE
का उपयोग करके) ) उसी रिकॉर्ड तक पहुंचने का प्रयास करने वाला कोई अन्य समवर्ती लेनदेन तब तक निलंबित रहेगा जब तक कि ताला हटा नहीं दिया जाता। यह रणनीति प्रदर्शन की कीमत पर बेहतर भविष्यवाणी देती है और अनिश्चित काल तक नहीं बढ़ती है।
संदर्भ
- हाइबरनेट कोर संदर्भ मार्गदर्शिका
- 11.3. आशावादी समवर्ती नियंत्रण
- 11.4. निराशावादी लॉकिंग