2008-09-15 21 views
24

हमारे पास एक लाइव MySQL डेटाबेस है जो 99% INSERTs है, लगभग 100 प्रति सेकेंड। हम प्रत्येक दिन डेटा संग्रहित करना चाहते हैं ताकि हम मुख्य, लाइव डेटाबेस को प्रभावित किए बिना इसके प्रश्न पूछ सकें। इसके अतिरिक्त, संग्रह पूरा होने के बाद, हम लाइव डेटाबेस को साफ़ करना चाहते हैं।लाइव MySQL डेटाबेस संग्रहित करने का सबसे अच्छा तरीका

INSERT को लॉक करने के बिना (यदि संभव हो) इसे करने का सबसे अच्छा तरीका क्या है? हम प्रश्नों के लिए INSERT DELAYED का उपयोग करते हैं।

उत्तर

13

http://www.maatkit.org/ MK-archiver

अभिलेखागार है या किसी अन्य तालिका और/या एक फाइल करने के लिए एक मेज से पंक्तियों को मिटा देता है। यह महत्वपूर्ण ऑनलाइन लेनदेन प्रसंस्करण (OLTP) प्रश्नों के साथ हस्तक्षेप किए बिना बहुत छोटे हिस्सों में कुशलता से "निबल" डेटा के लिए डिज़ाइन किया गया है। यह इसे एक गैर-बैकट्रैकिंग क्वेरी प्लान के साथ पूरा करता है जो तालिका में अपनी क्वेरी को क्वेरी से क्वेरी में रखता है, इसलिए प्रत्येक बाद की क्वेरी अधिक संग्रहणीय पंक्तियों को खोजने के लिए बहुत कम काम करती है।

एक और विकल्प हर दिन एक नई डेटाबेस तालिका बनाने के लिए है। MyIsam के लिए इसके कुछ फायदे हैं, क्योंकि तालिका के अंत में INSERTs आम तौर पर किसी भी तरह से अवरुद्ध नहीं होते हैं, और एक साथ विलय तालिका प्रकार होता है ताकि वे सभी एक साथ वापस आ सकें। कई वेबसाइटें इस तरह की टेबल पर httpd ट्रैफ़िक लॉग करती हैं।

माइस्क्ल 5.1 के साथ, विभाजन तालिका भी हैं जो बहुत कुछ कर सकती हैं।

+0

MK-archiver बिल्कुल वही करती है कि मैं क्या चाहता हूँ! – DavidM

+2

मातकिट पेर्कोना टूलकिट का हिस्सा बन गया है - http://www.percona.com/doc/percona-toolkit/2.1/pt-archiver.html –

0

क्या आप दो दर्पण डेटाबेस रख सकते हैं? एक को लिखें, दूसरा संग्रह के रूप में रखें। हर घंटे स्विच करें, कहें, 24 घंटे (या हालांकि आप उचित मानते हैं)। डेटाबेस में जो संग्रह था, आज की सभी गतिविधियों को सम्मिलित करें। फिर दो डेटाबेस मेल खाना चाहिए। इसे नए लाइव डीबी के रूप में प्रयोग करें। संग्रहीत डेटाबेस ले लो और जो कुछ भी आप चाहते हैं उसे करें। आप अब जो चाहते हैं उसे बैकअप/निकालें/पढ़ सकते हैं जिसे सक्रिय रूप से लिखा नहीं जा रहा है।

इसकी तरह प्रतिबिंबित छापे की तरह है जहां आप बैकअप के लिए एक ड्राइव ऑफ़लाइन ले सकते हैं, इसे पुनर्वित्त करें, फिर बैकअप के लिए अन्य ड्राइव ले जाएं।

1

MySQL प्रतिकृति इसके लिए पूरी तरह से काम करेगी।
मास्टर -> लाइव सर्वर।
दास -> एक ही नेटवर्क पर एक अलग सर्वर।

2

प्रतिकृति की तरह लगता है इस के लिए सबसे अच्छा समाधान है। प्रारंभिक सिंक के बाद दास को Binary Log के माध्यम से अपडेट मिलते हैं, इस प्रकार मास्टर डीबी को प्रभावित नहीं करते हैं।

More on replication.

2

मैं mysql पार्टीशन टेबल का उपयोग करें और मैं सभी पहलुओं में अद्भुत परिणाम प्राप्त किया है।

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