MySQL

2012-12-20 4 views
5

में डेटा को समवर्ती रूप से सम्मिलित करने का तेज़ तरीका मेरे पास लगभग 64 बच्चों के साथ समानांतर प्रक्रिया है जिसे प्रत्येक को लैंडिंग तालिका में डेटा डालने की आवश्यकता होती है। मैं वर्तमान में एक MySQL MyISAM इंजन का उपयोग कर रहा हूं, और मैं आवेषण से पहले और बाद में कुंजी अक्षम करता हूं।MySQL

हालांकि, यह मेरी प्रक्रिया में एक बड़ी बाधा प्रतीत होता है। मेरा मानना ​​है कि MySQL प्रत्येक सम्मिलन के लिए टेबल लॉकिंग है और इसलिए प्रक्रियाएं लगातार लिखने की प्रतीक्षा कर रही हैं।

आवेषण स्वतंत्र हैं और विरोधाभासी आवेषण का कोई खतरा नहीं है। इसे लेन-देन या उस प्रकृति के किसी भी चीज की आवश्यकता नहीं है।

क्या कोई अलग इंजन है, या MySQL के सम्मिलित/लिखने के प्रदर्शन को बेहतर बनाने के तरीके हैं?

मैं प्रत्येक प्रक्रिया के लिए एक मेज instantiating बारे में सोचा है, लेकिन इस कोड को और अधिक जटिल हो जाएगा, और कहा कि वास्तव में मेरी शैली नहीं है ....

कोई सुझाव बहुत सराहना की जाएगी।

धन्यवाद!

उत्तर

4

INSERT DELAYED Syntax के तहत दस्तावेज के रूप में:

INSERT बयान के लिए DELAYED विकल्प मानक SQL करने के लिए एक MySQL एक्सटेंशन है, जो बहुत उपयोगी है अगर आप ग्राहकों को नहीं कर सकता है या नहीं की जरूरत है इंतज़ार कि INSERT को पूरा करने के लिए है।

[ deletia ]

INSERT DELAYED का उपयोग करने का एक अन्य प्रमुख लाभ यह है कि कई ग्राहकों से आवेषण एक साथ बंडल और एक ब्लॉक में लिखा जाता है। यह कई अलग-अलग आवेषण करने से बहुत तेज है।

+0

हाँ, मैं इसके बारे में सोच रहा था, लेकिन मेरी चिंता यह है कि प्रसंस्करण मशीन और सर्वर एक ही मशीन है। सम्मिलित विलंब का उपयोग करते समय, MySQL वास्तव में डेटा कहां रखता है? राम, एसडब्ल्यूएपी, डिस्क? मैं प्रसंस्करण बच्चों के साथ पहले ही राम सीमा के करीब बहुत करीब चला जाता हूं ... धन्यवाद! – user1459544

+1

@ user1459544: "* पंक्तिबद्ध पंक्तियों को केवल तब तक स्मृति में रखा जाता है जब तक उन्हें तालिका में डाला नहीं जाता है। *" - ज़ाहिर है, ओ/एस आवश्यकतानुसार वर्चुअल मेमोरी में बदल जाएगा - लेकिन यदि आप रैम पर कम हैं, यह शायद कुछ और निवेश में लायक है। – eggyal

+0

मुझे लगता है कि 256GB पर यह मशीन टैप की गई है, लेकिन इसे जाने दें और मैं आपको बता दूंगा कि यह कैसे निकलता है। शायद अगर यह डीबी में तेजी से पहुंच सकता है तो मेरे बच्चे अपने राम संसाधनों को तेजी से और अच्छे समय के लिए छोड़ देंगे। – user1459544

2

मायिसैम वास्तव में डालने, अपडेट करने या हटाने के दौरान टेबल को लॉक करता है। InnoDB लेनदेन और पंक्ति-आधारित ताले की अनुमति देता है।

आप LOAD DATA INFILE पर भी देख सकते हैं जो थोक आवेषण के लिए तेज़ है।

+1

इनो डीबी अभी भी एक अगली पंक्ति लॉक करेगा, जिसमें अन्य प्रविष्टियों को रिलीज़ करना होगा। अफसोस की बात है कि 'लोड डेटा इन्फाइल' का भी अधिक उपयोग नहीं किया जाएगा, क्योंकि वहां "थोक सम्मिलन" नहीं है बल्कि विभिन्न ग्राहकों से कई व्यक्तिगत आवेषण हैं। – eggyal

+0

मैं टेक्स्ट में आवेषण पाइप कर सकता हूं, शायद एक बड़ी फाइल बनाने के लिए बिल्ली का उपयोग भी कर सकता हूं, लेकिन यह इष्टतम आईएमओ नहीं है, क्योंकि यह प्रसंस्करण की अधिक परत जोड़ रहा है। मैं इसे अंतिम उपाय के रूप में उपयोग कर सकता था, लेकिन मैं उम्मीद कर रहा था कि कुछ कदम हैं जो मैं अतिरिक्त चरणों से बचने के लिए MySQL के साथ ट्विक कर सकता हूं ... या 64 बच्चे एक साथ लिखने की कोशिश कर रहे हैं ... – user1459544

+0

शायद आप प्रत्येक प्रक्रिया के लिए टेबल बना सकते हैं और एक बार सभी बच्चों को पूरा करने के बाद मुख्य तालिका में विलय करें? – snurre

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