6

क्या किसी के पास अनुभव है कि वे MySQL savepoints (सीधे या ओआरएम के माध्यम से) का उपयोग करके साझा कर सकते हैं, खासकर एक गैर-तुच्छ वेब सेवा में? आपने वास्तव में उन्हें कहां उपयोग किया है? क्या वे पर्याप्त भरोसेमंद हैं (मानते हैं कि आप MySQL का एक बिल्कुल हालिया संस्करण चलाने के इच्छुक हैं) या बहुत रक्तस्राव-किनारे या महंगे हैं?वेब सेवाओं में MySQL savepoints के वास्तविक दुनिया के उपयोग?

आखिरकार, क्या किसी को निम्नलिखित उपयोग मामले की तरह कुछ अनुभव है और क्या आपने इसके लिए सेवपॉइंट्स का उपयोग किया है? कहें कि काम की कुछ विशिष्ट इकाई का मुख्य बिंदु Orders तालिका (या जो कुछ भी, ऑर्डर-संबंधित होना आवश्यक नहीं है) में एक पंक्ति जोड़ना है और उसी लेनदेन में OrdersAuditInfo तालिका अपडेट करना है। यह आवश्यक है कि Orders को यथासंभव अपडेट किया जाए, लेकिन OrdersAuditInfo तालिका आवश्यक नहीं है (उदाहरण के लिए, फ़ाइल में कोई त्रुटि लॉग करना ठीक है, लेकिन समग्र लेनदेन के साथ चलते रहें)। एक निम्न स्तर पर यह ऐसा दिख सकता है (चेतावनी, छद्म एसक्यूएल इस प्रकार):

BEGIN; 

INSERT INTO Orders(...) VALUES (...); 
/* Do stuff outside of SQL here; if there are problems, do a 
ROLLBACK and report an error (i.e., Order is invalid in this 
case anyway). */ 

SAVEPOINT InsertAudit; 
INSERT INTO OrdersAudit(...) VALUES(...); 
/* If the INSERT fails, log an error to a log file somewhere and do: */ 
ROLLBACK TO SAVEPOINT InsertAudit; 

/* Always want to commit the INSERT INTO Orders: */ 
COMMIT; 

लेकिन फिर भी यहां शायद ही कोई बेहतर (या कम से कम और अधिक सामान्य) मुहावरा हो जाएगा? कोई OrdersAuditInfo एक पूरी तरह से अलग लेनदेन में सम्मिलित कर सकता है लेकिन यह सुनिश्चित करना अच्छा होगा कि OrdersAuditInfo तालिका नहीं है जब तक कि अंतिम COMMIT वास्तव में काम नहीं करता।

उत्तर

1

मैं आमतौर पर SAVEPOINT से बचने के लिए प्रवृत्त होता हूं, क्योंकि यह समझने और सत्यापित करने के लिए कोड को काफी कठिन बना सकता है।

आपके द्वारा पोस्ट किए गए मामले में, एक ही लेन-देन में लपेटने पर निर्भर करता है कि OrdersAudit रिकॉर्ड Orders के साथ बिल्कुल संबंधित हैं, यह आपके व्यावसायिक नियमों का हिस्सा है।

संपादित करें: बस अपना प्रश्न दोबारा पढ़ें, और आपके पास OrdersAudit और Orders के बीच गारंटीकृत पत्राचार की आवश्यकता नहीं है। तो मैं OrdersAudit रिकॉर्ड्स के सम्मिलन के लिए किसी लेनदेन का उपयोग नहीं करूंगा।

+0

कारण मैं ऑर्डर ऑडिट को समग्र लेनदेन का हिस्सा बनना चाहता था, इस मामले में ऑर्डर में डालने के कारण COMMIT समय पर किसी कारण से विफल रहा। –

संबंधित मुद्दे