मैं एक ऐसे एप्लिकेशन का निर्माण कर रहा हूं जिसमें महत्वपूर्ण छवि प्रसंस्करण शामिल है। हम इसे एक वितरित मनोर में बना रहे हैं, जिसमें रैंडिटएमक्यू एक्सचेंज से छवियों को प्रस्तुत करने के लिए अनुरोध प्राप्त करने वाली मशीनों की एक मनमानी संख्या है।वैश्विक लॉकिंग प्राप्त करने के लिए एक mySQL कॉलम का एक साझे तरीका उपयोग कर रहा है?
क्योंकि एक प्रतिपादन पहले से ही प्रक्रिया में है, जबकि एक छवि के लिए अनुरोध हो सकता है, और क्योंकि मैं काम को डुप्लिकेट करने वाले दो रेंडर सर्वर नहीं चाहता हूं, मैंने mySQL छवियों तालिका में एक कॉलम बनाया है जिसे बुलीयन के रूप में is_rendering कहा जाता है ।
- अद्यतन के लिए छवि पंक्ति चुनें
- तो is_rendering == सच बीच में बंद करें प्रस्तुत करना अनुरोध
- :
जब एक सर्वर प्रस्तुत करना एक अनुरोध के लिए प्रस्तुत करना यह है कि इस तरह दिखता है चरणों की एक श्रृंखला इस प्रकार प्राप्त करता है सेट is_rendering == सत्य है और लेनदेन
- छवि प्रस्तुत करें और थंबनेल को वैश्विक स्तर पर सुलभ स्टोर में संग्रहीत करें
- सेट is_rendering == झूठी और वापसी
यह निश्चित रूप से काम करता है, लेकिन मुझे चिंता है कि ये अक्सर डेटाबेस अपडेट थोड़ा मूर्ख लगते हैं। इसके अलावा मैं किनारे के मामले पर विचार कर रहा हूं जहां एक रेंडर सर्वर एक प्रतिपादन के बीच में विफल रहता है और पत्तियों is_rendering == सत्य है, उस छवि को कभी भी प्रस्तुत किए जाने से रोकता है। समाधान मैं इस समस्या पर विचार कर रहा हूं is_rendering कॉलम को tinyint (1) से डेटाटाइम फ़ील्ड में बदलना है, और लॉकिंग की तारीख को "सत्य" मान के रूप में संग्रहीत करना और "झूठा" मान के रूप में शून्य करना है। एक आवधिक सेवा स्वास्थ्य जांच एक निश्चित समय अवधि के साथ is_rendering मूल्य के साथ सभी पंक्तियों का चयन कर सकती है और इस मामले में लॉक जारी कर सकती है।
क्या यह इस समस्या का एक सापेक्ष दृष्टिकोण है, या क्या अन्य और सुरुचिपूर्ण दृष्टिकोण हैं जिन पर मुझे विचार करना चाहिए?
मैंने डेटाटाइम फील्ड लॉक दृष्टिकोण को कई बार सफलतापूर्वक कार्यान्वित किया है – ilanco
मुझे ऐसे कॉलम को पेश करने के अलावा लॉकिंग का कोई अन्य तरीका नहीं दिख रहा है। केवल मैं इसे एक स्थिति बनाउंगा, जैसे '0 = not_rendered, 1 = प्रतिपादन, 2 = rendered'। लेकिन शायद मैंने आपके वर्कफ़्लो को थोड़ा सा समझा। और निश्चित रूप से, 'इनो डीबी' लेनदेन का उपयोग करके यह सुनिश्चित होगा कि केवल एक समवर्ती क्वेरी राज्य को प्रस्तुत करने के लिए एक छवि सेट कर सके। –
क्या दृष्टिकोण स्वयं समझदार है, मुझे नहीं पता लेकिन कॉलम के विकल्प के रूप में एक अलग 1: 1 'is_rendering (int) 'तालिका मेरे लिए अधिक प्रबंधनीय प्रतीत होती है। बस रिकॉर्ड्स जोड़ें/हटाएं और आपको स्वास्थ्य जांच में सभी छवि रिकॉर्ड्स स्कैन करने की आवश्यकता नहीं होगी। यदि आपको एक ही समय में छवि की आवश्यकता है, हालांकि, यह अतिरिक्त काम हो सकता है। – mkjeldsen