2009-03-02 15 views
6

मैं एक परियोजना पर काम कर रहा हूं जो वेबसाइट विज़िटर विश्लेषण के लिए प्रकृति में समान है। इसका उपयोग 100 से अधिक वेबसाइटों के साथ 10,000 से 100,000 पृष्ठ दृश्यों के साथ किया जाएगा, इसलिए प्रत्येक दिन डेटा की मात्रा बहुत बड़ी होगी।mysql टेबल संरचना - एक बहुत बड़ी टेबल या अलग टेबल?

क्या मुझे वेबसाइट या वेबसाइट के साथ एक अलग तालिका का उपयोग करना चाहिए?

प्रत्येक के लिए अलग-अलग तालिकाओं वाली 100 वेबसाइटों के साथ एक लाइव सेवा में परिवर्तन करना एक बड़ी समस्या की तरह लगता है। दूसरी ओर प्रदर्शन और स्केलेबिलिटी शायद इस तरह के बड़े डेटा के साथ एक समस्या होने जा रहे हैं। किसी भी सुझाव, टिप्पणियां या सलाह का स्वागत है।

उत्तर

8

कैसे के बारे में एक वेबसाइट FK द्वारा तालिका partitioned?

+0

बस यह कहकर कि मैं पीके/एफके पर क्षैतिज विभाजन से सहमत हूं। – thr

+0

धन्यवाद, मैं इस विकल्प को देख रहा हूं – Nir

1

मैं उस डिज़ाइन का उपयोग करूंगा जो आपके डेटा को सबसे अधिक समझ में आता है - इस मामले में एक बड़ी तालिका।

रिकॉर्ड सब, एक ही प्रकार के हो जाएगा एक ही कॉलम के साथ है, तो एक डेटाबेस सामान्य दृष्टि से वे समझ बनाने के लिए उन्हें एक ही तालिका में है। एक सूचकांक विशेष पंक्तियों को चुनने में आसान बनाता है, खासकर जब एक ही इंडेक्स में डेटा द्वारा पूरे प्रश्नों को संतुष्ट किया जा सकता है (जो अक्सर मामला हो सकता है)।

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

+0

धन्यवाद! किसी को भी ऐसे सिस्टम और उनके वास्तुकला के बारे में पढ़ने के लिए एक अच्छी जगह पता है? – Nir

+0

खैर, यदि आप थोड़ी सी खोज करना चाहते हैं तो स्टैक ओवरफ्लो बहुत अच्छा हो सकता है। इसके अलावा mysqlperformanceblog.com मुझे लगता है कि अच्छा है, फिर भी आपको थोड़ा सा खोजना पड़ सकता है। कुछ सिफारिश करने के लिए मुश्किल है, आप मुझे लगता है कि एक और सवाल पूछने की कोशिश कर सकते हैं। – thomasrutter

1

यदि डेटा समान है, तो एक तालिका के साथ जाएं। यदि आपको कभी भी सभी वेबसाइटों पर चयन करने की आवश्यकता है एकाधिक तालिकाओं में दर्द होता है। हालांकि यदि आप पर्याप्त स्क्रिप्टिंग लिखते हैं तो आप इसे कई तालिकाओं के साथ कर सकते हैं।

आप टेबल पर SELECT को करने के लिए MySQL के मेरिज स्टोरेज इंजन का उपयोग कर सकते हैं (लेकिन अच्छे प्रदर्शन की अपेक्षा न करें, और खुली फ़ाइलों की संख्या पर विंडोज हार्ड सीमा के लिए देखें - लिनक्स में आप उलझाने के लिए उलिमिट का उपयोग कर सकते हैं सीमा। विंडोज़ में ऐसा करने का कोई तरीका नहीं है)।

मैंने कई (सैकड़ों) तालिकाओं में एक विशाल तालिका तोड़ दी है और चयन करने के लिए मेर्ज का उपयोग किया है। मैंने ऐसा किया ताकि मैं प्रत्येक छोटी टेबल के ऑफ़लाइन निर्माण और अनुकूलन कर सकूं। (जैसे ऑप्टिमाइज़ या वैकल्पिक तालिका ... द्वारा आदेश)। हालांकि मेरजे के साथ चयन के प्रदर्शन ने मुझे अपना खुद का कस्टम स्टोरेज इंजन लिखने का कारण बना दिया। (वर्णित http://blog.coldlogic.com/categories/coldstore/'>here)

0

उपयोग एक मेज जब तक आप MySQL के साथ प्रदर्शन समस्या है।

कोई भी यहां प्रदर्शन सवालों का जवाब नहीं कर सकते हैं, तो आप सिर्फ है कि क्या एक बड़ी मेज होने के लिए पर्याप्त है प्रदर्शन अपने आप को समझने के लिए परीक्षण करना चाहिए,।

1

एकल डेटा संरचना का उपयोग करें। एक बार जब आप प्रदर्शन समस्याओं का सामना करना शुरू कर देते हैं तो ऐसे कई समाधान होते हैं जैसे आप अपनी आईडी को वेबसाइट आईडी द्वारा विभाजित कर सकते हैं जिसे क्षैतिज विभाजन के रूप में भी जाना जाता है या आप प्रतिकृति का भी उपयोग कर सकते हैं। यह सब पाठ बनाम लिखने के अनुपात पर निर्भर करता है।

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

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