2014-09-07 7 views
5

हमारे पास एक MySQL ट्रैकिंग डेटाबेस है जिसमें ~ 100M पंक्तियां हैं। हम आम तौर पर कुछ कार्यवाही, अनन्य यात्राओं आदि के लिए क्वेरी समूह चलाते हैं। समस्या यह है कि इंडेक्स के इंटरप्ले की वजह से मासिक रिपोर्ट उत्पन्न करने के लिए प्रश्न धीमे हो रहे हैं (हमारे पास तिथि के लिए एक श्रेणी स्कैन है, फिर एकाधिक पर आधारित प्रश्न अन्य फ़ील्ड।)क्या तारीख तक ट्रैकिंग तालिका को सहेजने के नुकसान हैं?

प्रदर्शन में सुधार करने के लिए, हमने सीमा स्कैन से बचने के लिए तिथि के आधार पर यूनियनों को करने के लिए स्विच किया है और प्रदर्शन बहुत बेहतर है। तो विचार प्रस्तुत किया गया था कि शायद हमें दिन के लिए प्रत्येक दिन एक अलग मेज के साथ सुनाया जाना चाहिए। फायदे प्रतीत होते हैं:

  • तेज़ आवेषण - प्रत्येक दिन तालिका नई/छोटी होती है, इसलिए यह हमेशा तेज़ होती है।
  • पुराना डेटा हटाना सरल है (100 एम पंक्ति तालिका से 5 एम पंक्तियों को हटाने के बजाय, हम केवल एक टेबल छोड़ सकते हैं)
  • हमारा वर्तमान दृष्टिकोण यूनियनों को वैसे भी कर रहा है - इसलिए हम अलग-अलग मूल्यों के बजाय अलग-अलग तालिकाओं को जोड़ रहे हैं एक टेबल से

क्या किसी ने इस दृष्टिकोण के बारे में सुना है या कोशिश की है? क्या कोई पूर्व समस्या है?

नोट: हम अन्य NoSQL दृष्टिकोण पर विचार कर रहे है - लेकिन हम अगर यह एक वैध तरीका है हम MySQL के साथ रहने का फैसला करता है, तो जानना चाहूंगा (ताकि सुझाव है कृपया नहीं "XYZ NoSQL डीबी कोशिश")। साथ ही, मैं समझता हूं कि हम केवल एक बेहतर मशीन प्राप्त कर सकते हैं और डेटा सेट के दायरे में, यह इतना बड़ा नहीं है - लेकिन अगर हम छोटे बिना अतिरिक्त काम करेंगे तो हम बड़ी मशीन पर पैसे बर्बाद नहीं करना चाहते हैं काम।

+0

यदि संभव हो तो, आपको दैनिक परिणामों को एक अलग तालिका में स्टोर करने में उपयोगी हो सकता है, फिर उस पर रिपोर्टिंग क्वेरी चलाएं। साथ ही, यदि आप साप्ताहिक रिपोर्ट भी करते हैं (कभी-कभी यदि आप नहीं करते हैं), तो दैनिक समेकित मूल्यों पर साप्ताहिक प्रश्नों को चलाने और परिणामों को एक और, साप्ताहिक, तालिका में स्टोर करने के लिए सार्थक हो सकता है। थोड़ी सी झुकाव के साथ आप तुरंत * लगभग * किसी भी अवधि की जानकारी प्राप्त कर सकते हैं (मुझे AJAX गतिशील चार्ट के माध्यम से रिपोर्टिंग का समर्थन करने के लिए यह एक बार करना था)। स्टोरेज और आईएनएसईआरटी के लिए, क्षैतिज दिनांक-आधारित विभाजन आपका मित्र होगा। – LSerni

उत्तर

2

ऐसा लगता है कि आप MySQL Partitioning पर एक नज़र डाल सकते हैं।

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

CREATE TABLE Mydata (id INT, amount DECIMAL(7,2), tr_date DATE) 
    ENGINE=INNODB 
    PARTITION BY HASH(MONTH(tr_date)) 
    PARTITIONS 12; 

विभाजन समाधान तुम्हारा के रूप में धारणात्मक ही होगा, लेकिन आरडीबीएमएस आप के लिए कई पहलुओं को संभाल लेंगे।

+0

धन्यवाद - यह एक दिलचस्प टूल है। मैंने हमेशा कई डेटाबेस में विभाजन के बारे में सोचा। यह एक डेटाबेस के माध्यम से भी काम करेगा? क्या मुझे अलग-अलग विभाजनों से अलग बात करने की ज़रूरत होगी या डेटाबेस मेरे लिए इसे संभालेगा? हमारे मामले में विचार प्रति दिन विभाजन या शेड करना होगा, क्योंकि इस तरह हम इसका उपयोग कर रहे हैं।हमारे पास कुछ महीनों के आंकड़े नहीं होंगे - क्या यह समाधान ~ 90 विभाजन होने के लिए अच्छा होगा? – Yehosef

+0

इसकी आरडीबीएमएस (एकल डेटाबेस) की क्षमता है। पार्टियों में निर्दिष्ट संख्या सिर्फ यह दिखा रही है कि विभाजन प्रक्रिया में कितनी भौतिक फाइलें भाग लेती हैं। आरडीबीएमएस बाकी को संभालेगा। उपरोक्त नमूना भाग 3 या 6 द्वारा किया जा सकता है और परिणाम वही होगा। –

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