मैं लागू करने के लिए (क्या मुझे लगता है कि है) के लिए एक काउंटर के लिए एक बहुत सरल डाटा मॉडल कोशिश कर रहा हूँ:Django में परमाणु संचालन?
class VisitorDayTypeCounter(models.Model):
visitType = models.CharField(max_length=60)
visitDate = models.DateField('Visit Date')
counter = models.IntegerField()
जब कोई माध्यम से आता है, यह एक पंक्ति है कि visitType और visitDate मैच के लिए दिखेगा; यदि यह पंक्ति मौजूद नहीं है, तो यह काउंटर = 0 के साथ बनाई जाएगी।
फिर हम काउंटर को बढ़ाते हैं और बचाते हैं।
मेरी चिंता यह है कि यह प्रक्रिया पूरी तरह से दौड़ है। दो अनुरोध एक साथ देख सकते हैं कि यह देखने के लिए कि इकाई क्या है, और दोनों इसे बना सकते हैं। काउंटर पढ़ने और परिणाम को सहेजने के बीच, एक और अनुरोध आ सकता है और इसे बढ़ा सकता है (जिसके परिणामस्वरूप खोई गई गिनती होती है)।
अब तक मुझे वास्तव में Django दस्तावेज़ीकरण में या ट्यूटोरियल में एक अच्छा तरीका नहीं मिला है (वास्तव में, ऐसा लगता है कि ट्यूटोरियल की वोट हिस्से में दौड़ की स्थिति है)।
मैं इसे सुरक्षित तरीके से कैसे कर सकता हूं?
क्या यह अभी भी संभव नहीं है कि डेटाबेस इस क्वेरी को दो अलग-अलग कनेक्शनों पर एक साथ निष्पादित करेगा और अभी भी एक (बहुत कम संभावना) दौड़ की स्थिति है?यह सब इस क्वेरी के आस-पास छिपे लेनदेन पर निर्भर करता है जो कनेक्शन परत द्वारा लगाया जाता है जो ओप परमाणु बनाता है। –
यदि आप DjangoCon से "क्यों मैं नफरत है Django" मुख्य नोट देखते हैं, तो इस प्रकार की क्वेरी को एसक्यूएल में वृद्धि करने के लिए उचित, रेस कंडीशन-फ्री तरीका के रूप में दिया जाता है (यह जानकर कि Django के ORM आपके लिए यह नहीं कर सकता)। – iconoplast
मैं आपकी स्लाइड देखूंगा ... आपने मेरे संदेह की बहुत पुष्टि की है कि ओआरएम इसे अपने आप नहीं करेगा। सहायता के लिए धन्यवाद! –