मैं एक पृष्ठभूमि सेवा लिख रहा हूं जिसे एक वर्ग की श्रृंखला को संसाधित करने की आवश्यकता है, जिसे SQL सर्वर तालिका में रिकॉर्ड के रूप में संग्रहीत किया जाता है। सेवा को सबसे पुरानी 20 नौकरियों को खोजने की ज़रूरत है जिन्हें काम करने की आवश्यकता है (where status = 'new'
), उन्हें चिह्नित करें (set status = 'processing'
), उन्हें चलाएं, और बाद में नौकरियों को अपडेट करें।परमाणु रूप से डेटाबेस में पंक्तियों के समूह को चिह्नित और वापस करें
यह पहला भाग है जिसके लिए मुझे सहायता चाहिए। एक ही समय में डेटाबेस तक पहुंचने वाले कई धागे हो सकते हैं, और मैं यह सुनिश्चित करना चाहता हूं कि "मार्क & वापसी" क्वेरी परमाणु रूप से चलती है, या लगभग।
यह सेवा डेटाबेस तक पहुंचने के अपेक्षाकृत कम समय व्यतीत करेगी, और अगर नौकरी दो बार चलती है तो यह दुनिया का अंत नहीं है, इसलिए मैं बढ़ी सादगी के लिए एक से अधिक बार चल रही नौकरियों की एक छोटी संभावना को स्वीकार करने में सक्षम हो सकता हूं कोड में
ऐसा करने का सबसे अच्छा तरीका क्या है? मैं अपनी डेटा परत के लिए linq-to-sql का उपयोग कर रहा हूं, लेकिन मुझे लगता है कि मुझे इसके लिए टी-एसक्यूएल में ड्रॉप करना होगा।
क्या आप समझा सकते हैं कि यदि आपके द्वारा निर्धारित 3 संकेतों का उपयोग करने के बाद भी तालिका को क्लस्टर नहीं किया गया है (स्थिति, enqueue_time)? –
मुझे आउटपुट क्लॉज के बारे में पता नहीं था, जो संकेतों के साथ एक पूर्ण समाधान बनाता है। यह SO पर अपने स्वयं के प्रश्न का उत्तर देता है। –