2011-02-06 13 views
5

मेरी भेक लॉग में मैं समय-समय परक्षणिक MySQL :: त्रुटि: एक उच्च ट्रैफिक साइट पर डुप्लिकेट प्रविष्टि - कोई विचार?

Mysql::Error: Duplicate entry 'XXXX' for key 'YYY'

यह मेरा मॉडल, सभी में लगभग 6 से ज्यादातर के लिए होता है देखेंगे, और मैं एक साइट 5k अनुरोध/मिनट अनुसार के बारे में कर रही पर इस त्रुटि एक बार हर कुछ घंटों देखेंगे न्यूरेलिक के लिए।

मैं इनमें से प्रत्येक मामले में ActiveRecord.find_or_initialize_by कर रहा हूं। यह संभव है, लेकिन असंभव है कि यह एक ही डेटा के दो एक साथ पोस्ट करने वाले क्षेत्र में एक ग्राहक से है, क्योंकि ये मोबाइल क्लाइंट हैं और कोडपैथ वास्तव में खुद को उधार नहीं देता है (यानी, यह क्लाइंट क्लिक नहीं है एक सबमिट बटन दो बार जल्दी)।

वहाँ find_or_initialize_by साथ एक ज्ञात समस्या है? क्या यह संभव है कि मेरा mysql इंस्टेंस (अमेज़ॅन आरडीएस) हर बार बस बाहर निकलता है (हालांकि मैं उम्मीद करता हूं कि उस मामले में कोई अपवाद उठाने के लिए कोई डेटा नहीं लौटाएगा) ...

इसके अलावा, क्या कोई बेहतर तरीका है रिकॉर्ड डालने के लिए? यदि रिकॉर्ड मौजूद है, तो मैं आमतौर पर केवल अपने अपडेट_ट फ़ील्ड को अपडेट कर रहा हूं।

धन्यवाद!

उत्तर

1

यह संभवतः होता है क्योंकि "वैधता जांचें तो डालें" परमाणु ऑपरेशन नहीं है। इस बात की कोई गारंटी नहीं है कि कोई अन्य वैधता जांच और सम्मिलन के बीच एक अद्वितीय कॉलम के लिए समान मूल्य के साथ एक पंक्ति नहीं डाल सकता है।

official docs इसका उल्लेख है, लेकिन केवल गुजरने में, और वे वास्तव में इसे बहुत अच्छी तरह से समझा नहींते हैं। Rails Warts समस्या पर एक बेहतर पृष्ठ है।

और जैसा कि ऐसा लगता है कि आप अपने डीबी में एक अद्वितीय इंडेक्स के साथ विशिष्टता की स्थिति का समर्थन कर रहे हैं, आप डीबी पक्ष पर इसे रोकने के लिए पहले से ही कर रहे हैं। और मुझे यकीन है कि अगर find_or_initialize_by/ON DUPLICATE KEY UPDATE एक अच्छा विचार है या नहीं नहीं कर रहा हूँ - यह अपने उपयोगकर्ताओं को संपादित कर रहे हैं पर निर्भर करता है, और उनमें से सुरक्षा परिणामों संपादन कुछ वे आवश्यक रूप से करने के लिए इरादा नहीं था।

आशा है कि इससे मदद मिलती है!

+0

धन्यवाद जानकारी के लिए .... आप शायद सही हो, मुझे लगता है यह है कि अगर मेरी डीबी संचालन में से एक में किसी भी विलंबता है और एक उपयोगकर्ता किसी भी तरह एक कार्रवाई को दोहराता है, मैं इस व्यवहार को चालू कर सकते सैद्धांतिक रूप से संभव है। मुझे यह नहीं लगता कि अक्सर कम से कम (एक बार हर कुछ घंटे ऐसा लगता है कि हजारों अनुरोध/मिनट)। मैंने रेल्स वार्स ब्लॉग पोस्ट पढ़ा है, मैं वह कर रहा हूं जो आप और आप सुझाव देते हैं (इसे डीबी वैधता जांच के साथ समर्थन देना), इसलिए मुझे लगता है कि यह उतना अच्छा है जितना अब के लिए मिलता है .... – esilver

0

मैं इस साइट sinograms.com है। मैं आवृत्ति के माध्यम से चीनी अक्षरों को वर्गीकृत करने के लिए स्क्रीन स्कार्पिंग न्यूज साइट्स हूं और मुझे आपके साथ आने वाली वही चीज़ें मिल गई हैं।

मैं कई चरणों के माध्यम से चले गए हैं। वर्तमान एक अप सिर्फ अंतिम परीक्षण है और इसमें केवल कुछ मिलियन इंडेक्स हैं। वे डुप्लीकेट जल्दी से आते हैं; मुझे यह पता है क्योंकि मुझे केवल चीनी अक्षरों के डुप्लीकेट मिलते हैं जो अक्सर दूसरे शब्दों में बहुत आम या अनुक्रमित होते हैं।

+0

लगता है कि आपने अभी तक एक समाधान नहीं मिला या कारण है? और बस स्पष्ट होने के लिए, आप ActiveRecord के साथ एक रूबी ऐप चला रहे हैं, है ना? एफडब्ल्यूआईडब्ल्यू मैं साइनरा के साथ एक रूबी ऐप चला रहा हूं, रेल नहीं। – esilver

+0

रेल और एआर। वे एक ही मणि का उपयोग कर रहे हैं? तो यह संबंधित होना चाहिए। – s84

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