मैं SQLite (3.7.3)बचना sqlite3 डेटाबेस बंद कर दिया
मैं डेटाबेस बंद कर दिया त्रुटि है कि काफी प्रचलित हो रहा है मार रहा हूँ का उपयोग करता है एक बहु आवेदन किया है। मैं सोच रहा हूं कि मेरे मामले में इससे कैसे बचें।
मुझे बताएं कि मैं क्या बना रहा हूं। क्षमा करें, कोई कोड यह बहुत बड़ा और जटिल नहीं है।
मेरे पास लगभग 8 धागे हैं जो डेटाबेस के साथ-साथ पहुंचते हैं। उन धागे में से कोई भी एक ही समय में पढ़ या लिख सकता है।
डेटाबेस में किसी तालिका में प्रत्येक पंक्ति में एक फ़ाइल पथ होता है जो उस संसाधन से संबंधित संसाधन + अन्य विशेषताओं को इंगित करता है।
नोट के 3 फ़ील्ड पाठक, स्थिति और डेल हैं।
पाठकों हर बार एक धागा संसाधन से पढ़ता वृद्धि की जाती है, लेकिन केवल तभी स्थिति> 0 और डेल = 0.
तो मुझे लगता है कि
UPDATE resource set readers=readers+1 where id=? AND del=0 AND status>0
करता है उसके बाद कुछ एसक्यूएल, मैं जाँच की है पंक्तियों की संख्या अद्यतन। यह केवल 1. होना चाहिए इसके बाद मैं एक चयन के साथ पंक्ति को वापस पढ़ने की कोशिश करता हूं। मैं ऐसा करता हूं कि अगर यह अद्यतन करने के लिए विफल रहा है क्योंकि मुझे यह जानने की आवश्यकता है कि यह विफल रहा है।
मैंने दोनों लेनदेन में अपडेट और चयन को लपेटने की कोशिश की लेकिन इससे मदद नहीं मिली। मैंने जांच की है कि मैं भी अपने बयान पर अंतिम रूप दे रहा हूं।
अब, मैंने सोचा था कि एसक्लाइट डिफ़ॉल्ट रूप से क्रमबद्ध करता है। मैंने कुछ खुले मोड की कोशिश की है लेकिन मुझे अभी भी वही त्रुटि मिलती है।
और इससे पहले कि आप पूछें, नहीं, मैं mysql पर जाने का इरादा नहीं रख रहा हूं। मुझे बिल्कुल शून्य विन्यास की आवश्यकता है।
क्या कोई इस प्रकार की समस्या से बचने के तरीके पर कुछ पॉइंटर्स प्रदान कर सकता है? क्या मुझे पाठकों को डीबी से बाहर ले जाना चाहिए? अगर मैं ऐसा करता हूं तो मुझे इसे किस तंत्र से बदलना चाहिए? मैं सी ++ के तहत लिनक्स का उपयोग कर रहा हूं और बूस्ट लाइब्रेरी उपलब्ध है।
संपादित करें: दिलचस्प बात यह है कि मेरे अपडेट किए गए कॉल के बाद COMMIT को नाटकीय रूप से सुधारने के बाद COMMIT जोड़ना।
अधिकांशतः प्रतिबद्धता डेटाबेस फ़ाइल पर अधिक बारीक विशिष्ट ताले की अनुमति देती है, जो पाठकों को अनलॉक करने के लिए प्रतीक्षा करने वाले समय पाठकों को कम करने में कमी करेगी। यह बढ़ी जर्नल फ़ाइल ओवरहेड की कीमत पर आता है। अधिक जानकारी के लिए http://sqlite.org/lockingv3.html#writing देखें। – checker