2011-12-27 10 views
5

यह प्रश्न प्रदर्शन के बारे में है और अगर मैं प्रदान करता हूं तो उत्तर विशिष्ट हैं तो मैं सराहना करता हूं।जो अधिक कुशल है: एक लंबी एकल तालिका या वितरित तालिका? और क्यों?

जो अधिक उचित प्रदर्शन के अनुसार है?

  • भी कई क्षेत्रों
  • एक से अधिक तालिका बनाने और

मामला उनके लिए समान क्षेत्रों वितरण के साथ एक मेज बनाने: एक अत्यधिक वेब सीएमएस मॉड्यूल

पैटर्न 1: लंबे लेकिन एक टेबल

cms 
----------------------------------------------- 
Id 
Title 
Description 
Images 
Order 
Status 
Publish 
meta_keywords 
meta_description 
meta_author 

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

पैटर्न 2: कई लेकिन संबंधित तालिका

Cms_content   cms_meta  cms_configuration 
--------------------------------------------------------------------------- 
Id     id    id   
Title    content_id  content_id 
Description   keywords  status 
Content    description  order 
Images    author   publish 

नोट: इस मामले में संबंध एक-से-एक

कौन सा उचित पैटर्न का पालन करने के लिए है? एक टेबल पर एक लंबी लेकिन एक टेबल क्यों चुनें, या क्यों वितरित टेबल नहीं चुनना है?

+1

"उचित" हमेशा लक्ष्य और उपयोग के मामलों पर निर्भर करता है। कोई रजत बुलेट – zerkms

+0

@zerkms नहीं है, इस बात पर सहमति हुई कि मैंने एक मामला भी प्रदान किया :) – Starx

+0

ओह, आपका मतलब है कि यह एक "मामला" है। ठीक। ** एकल ** इकाई को भागों में विभाजित करने का कोई कारण? फ़ील्ड एक ही इकाई से संबंधित हैं, यह स्कीमा अपना काम करता है। तो काम करने वाली चीज़ को छूएं ;-) – zerkms

उत्तर

5

denormalized डेटा (कई कॉलम के साथ एक मेज) मैं के बारे में सोच सकते हैं, होने के लिए ही संभव प्रशंसनीय कारण हैं:

  • एसक्यूएल लिखित रूप में आलस्य JOIN रों
  • पढ़ने बयान पर संभव प्रदर्शन में सुधार

मैं सामान्यीकृत संस्करण हर समय के लिए जाना चाहते हैं, क्योंकि:

    ,210
  • मैं डेटा अखंडता के बारे में सुनिश्चित
  • मैं डीबी से आसानी से जानकारी निकाल सकते हैं (उदाहरण के लिए, कितने पदों कुछ मेटा है, कितने अलग metas देखते हैं, आदि)
+2

आपने क्यों कहा कि 'denormalized डेटा (कई कॉलम वाले एक टेबल) '? सभी फ़ील्ड ** एक ही इकाई ** से संबंधित हैं। तो एकल तालिका ** सामान्य है ** भी – zerkms

+0

बिल्कुल, मेटा पढ़ने के बारे में भी क्यों परवाह करते हैं, जब आप केवल लेख को एक-एक करके सूचीबद्ध करते हैं। – Starx

+0

@Starx: 'SELECT' – zerkms

2

मुझे लगता है कि कुंजी हो सकता है 'आधुनिक' पर प्रदर्शन - मुझे 'आधुनिक' के अर्थ के बारे में बहुत कुछ पता नहीं है, लेकिन - आरडीबीएमएस आधारित एप्लिकेशन न केवल डेटाबेस स्कीमा पर निर्भर करता है।

  • डाटाबेस सेटिंग्स: स्मृति उपयोग रणनीति, कुंजी बफर आकार, क्वेरी कैश आकार, आदि डेटा पर
  • वितरण/प्रसंस्करण: विभाजन, ग्रिड प्रसंस्करण।
  • कैश रणनीति: एम्बेडेड कैश इंजन या अन्य (जैसे memcached) का उपयोग करना।
  • हार्डवेयर प्रदर्शन

तो, का आकलन प्रदर्शन एक साधारण समस्या नहीं है। यहां तक ​​कि 100 फ़ील्ड वाली एक मेज मेमोरी में भी लगाई जा सकती है, लेकिन यहां तक ​​कि दो फ़ील्ड-टेबल भी नहीं हो सकती है। 5 एम पंक्तियों के लिए एक प्रश्न एक मिनट के भीतर किया जा सकता है, लेकिन कभी-कभी एक ही क्वेरी 10 एम पंक्तियों (केवल दो बार!) पर 10 मिनट तक समाप्त नहीं होती है - यह ऊपर बताए गए पर्यावरण पर निर्भर करती है।

इस प्रकार, मुझे लगता है कि हम पूरे मामलों के लिए सबसे अच्छा अभ्यास नहीं चुन सकते हैं। आपके उदाहरण के लिए, कुंजी डीबीए के स्वाद पर लगी हुई है। (मजाक नहीं)

+0

मुझे हिस्सा समझ में नहीं आया, 'कुंजी डीबीए के स्वाद पर लगी हुई है'। चूंकि यह एक मजाक नहीं है, कृपया – Starx

+1

समझाएं, इन तालिकाओं को आम तौर पर केवल 'विभाजन' द्वारा अनुकूलित नहीं किया जाएगा। क्योंकि टेबल के बीच केवल 1: 1 संबंध होंगे। विभाजन के बारे में, मैं @ ट्यूडर कॉन्स्टेंटिन से सहमत हूं, लेकिन मुझे लगता है कि ब्रेकिंग टेबल टेबल 3 टेबल या 5 टेबल या 10 टेबल में प्रदर्शन के लिए एक बड़ा मुद्दा नहीं है। और साथ ही, यह एकत्रीकरण, मानचित्र/कमी, विश्लेषण या ग्रिड जैसी एप्लिकेशन के लिए एक विशाल डेटाबेस नहीं है, है ना? तो, मैंने 'यह डीबीए का स्वाद' लिखा था। – lqez

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