के रूप में एक डीबी तालिका का उपयोग करने का सबसे अच्छा तरीका मेरे पास ~ 50K पंक्तियों के साथ एक डेटाबेस तालिका है, प्रत्येक पंक्ति एक नौकरी का प्रतिनिधित्व करती है जिसे करने की आवश्यकता है। मेरे पास एक ऐसा प्रोग्राम है जो डीबी से नौकरी निकालता है, नौकरी करता है और परिणाम को वापस डीबी में डाल देता है। (यह प्रणाली अभी चल रही है)संदेश/नौकरी कतार
अब मैं एक से अधिक प्रसंस्करण कार्य को नौकरियों को करने की अनुमति देना चाहता हूं लेकिन यह सुनिश्चित कर लें कि कोई कार्य दो बार नहीं किया जाता है (प्रदर्शन चिंता के रूप में यह अन्य समस्याओं का कारण नहीं बनता है)। क्योंकि पहुँच एक sproce के रास्ते, मेरे वर्तमान से है, हालांकि इस
update tbl set owner=connection_id() where avalable and owner is null limit 1;
select stuff from tbl where owner = connection_id();
BTW तरह दिखता है कि कुछ के साथ sproce कहा की जगह; कार्यकर्ता के कार्य नौकरी पाने और परिणामों को सबमिट करने के बीच कनेक्शन छोड़ सकते हैं। इसके अलावा, मुझे उम्मीद नहीं है कि डीबी बोतल की गर्दन होने के करीब भी आ जाए, जब तक कि मैं उस भाग को गड़बड़ न करूं (~ 5 नौकरियां प्रति मिनट)
क्या इसमें कोई समस्या है? क्या ऐसा करने के लिए इससे अच्छा तरीका है?
नोट: "Database as an IPC anti-pattern" केवल थोड़ी अप्रिय है क्योंकि 1) मैं आईपीसी नहीं कर रहा हूं (पंक्तियों को उत्पन्न करने की कोई प्रक्रिया नहीं है, वे सभी अभी पहले से मौजूद हैं) और 2) उस विरोधी पैटर्न के लिए वर्णित प्राथमिक पकड़ यह है कि यह डीबी पर अनियंत्रित लोड के परिणामस्वरूप होता है क्योंकि प्रक्रियाओं के लिए संदेश इंतजार करते हैं (मेरे मामले में, यदि कोई संदेश नहीं है, सबकुछ बंद हो जाता है क्योंकि सबकुछ बंद हो जाता है)
सही-खराब = सिंक्रोनस आईपीसी एक डीबीएमएस पर अवरुद्ध करने के साथ पढ़ने के रूप में चुनें। आप संभवतः एसिंक्रोनिटी को पेश करने की रणनीति के रूप में ऐसा कर रहे हैं। – dkretz
बीटीडब्ल्यू, यदि आप एक टाइमर पर पाठक रखना चाहते हैं, तो उन्हें बार-बार जांचना उपयोगी होता है, लेकिन अगर उन्हें काम मिल जाता है, तो वे फिर से सोने से पहले कतार को निकाल सकते हैं। – dkretz
मेरा संपादन नोट करें: यदि उन्हें कोई काम नहीं मिलता है, तो उन्हें कभी भी काम नहीं मिलेगा। लेकिन अगर यह सच नहीं था ... – BCS