2010-08-03 15 views
11

मान लीजिए कि आप एक ऐसी इकाई का मॉडल कर रहे हैं जिसमें कई गुण (2400+) हैं, जो किसी दिए गए डेटाबेस इंजन (उदा। ~ 1000 SQL सर्वर) पर भौतिक सीमा से कहीं अधिक हैं। डोमेन/उम्मीदवार कुंजी के अलावा इन डेटा बिंदुओं के सापेक्ष महत्व (जो कि अक्सर गर्म/उपयोग किए जाते हैं) के सापेक्ष महत्व के बारे में कुछ नहीं जानते, आप इसे कैसे कार्यान्वित करेंगे?आप एक बहुत व्यापक "टेबल" को कैसे कार्यान्वित करेंगे?

ए) ईएवी। (बू ... खिड़की से बाहर निकलने वाले मूल संबंध उपकरण।)

बी) सीधे जाएं। पहली तालिका में प्राथमिक कुंजी और 1000 कॉलम हैं, सीधे सीमा तक। अगली तालिका 1000 है, पहले के लिए विदेशी कुंजी। आखिरी तालिका शेष 400 है, विदेशी कुंजी भी है।

सी) ceil(n/limit) तालिकाओं में समान रूप से पट्टी। प्रत्येक तालिका में कॉलम की संख्या भी होती है, पहली तालिका में विदेशी कुंजीिंग होती है। 800, 800, 800

डी) कुछ और ...

और क्यों?

संपादित करें: यह किसी दार्शनिक/सामान्य प्रश्न से अधिक है, किसी भी विशिष्ट सीमा या इंजन से बंधे नहीं है।

संपादित करें^2: जैसा कि कई ने बताया है, डेटा संभवतः सामान्य नहीं था। सामान्य रूप से, उस समय व्यापार की बाधाओं ने गहन शोध को असंभव बना दिया।

+0

यह मुझे चेतावनी दी कि यह राय का विषय था। एह, मुझे पता नहीं। –

+0

हां मैंने अपना संपादन देखा जब मैंने "क्यों सीडब्ल्यू" क्वेरी हटा दी! –

उत्तर

5

मेरा समाधान: आगे की जांच करें। विशेष रूप से, यह निर्धारित करें कि तालिका वास्तव में सामान्य है या नहीं (2400 कॉलम पर यह बहुत ही असंभव लगता है)।

यदि नहीं, तब तक पुनर्गठन करें जब तक कि यह पूरी तरह सामान्यीकृत न हो (जिस बिंदु पर प्रति तालिका 1000 से कम कॉलम होने की संभावना है)।

यदि यह पहले से ही पूरी तरह से सामान्यीकृत है, तो प्रत्येक विशेषता के लिए जनसंख्या की अनुमानित आवृत्तियों को स्थापित करें (जहां तक ​​संभव हो)। इकाई के लिए "होम" टेबल पर सबसे आम होने वाली विशेषताओं को रखें, कम बार आबादी वाले गुणों के लिए 2 या 3 अतिरिक्त तालिकाओं का उपयोग करें। (यह निर्धारित करने के लिए मानदंडों की आवृत्ति बनाने का प्रयास करें कि कौन से फ़ील्ड टेबल पर जाना चाहिए।)

केवल बेहद कम आबादी वाले विशेषताओं (अधिमानतः, बिल्कुल नहीं) के लिए ईएवी पर विचार करें।

+0

विभिन्न तरीकों का अच्छा संतुलन! –

4

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

+0

यह आदर्श होगा, लेकिन समय की बाधाओं को देखते हुए (उस समय), "आखिरकार सही" मॉडल का शोध करने के लिए समय बिताना संभव नहीं था। आप सही हैं, बहुत सारे denormalized कॉलम थे। –

0

मैं कॉलम घुमाएगा और उन्हें पंक्तियां बनाउंगा। एक स्ट्रिंग (nvarchar) के रूप में विशेषता का नाम रखने वाले कॉलम होने के बजाय, आप इसे एक लुक के रूप में एक लुकअप टेबल पर वापस ले सकते हैं जिसमें सभी संभावित विशेषताओं की एक सूची शामिल है।

इस तरह से यह घूर्णन आप का मतलब है:

  • सिर्फ एक आइटम के विवरण दर्ज करने के लिए
  • बड़े पैमाने पर विस्तृत तालिकाओं
  • आप केवल स्टोर कर सकते हैं की जरूरत नहीं है तालिकाओं की जनता की जरूरत नहीं है रोटेशन के कारण आपको जो जानकारी चाहिए, (यदि आप किसी विशेष विशेषता को स्टोर नहीं करना चाहते हैं, तो बस उस पंक्ति में नहीं है)
+4

यह अभी भी एक ईएवी संस्करण है, हालांकि –

1

मैं एक विदेशी कुंजी के साथ कई विशेषता तालिका में से एक का उपयोग करूंगा इकाई के लिए।

जैसे

संस्थाओं: आईडी,

attrs: आईडी, ENTITY_ID, ATTR_NAME, मूल्य

जोड़ा

या Butler Lampson के रूप में कह सकते हैं कि, "कंप्यूटर विज्ञान में सभी समस्याओं को हल किया जा सकता है संकेत के दूसरे स्तर से "

+3

यह भी ईएवी है। –

0
  1. मैं डेटा मॉडल को बहुत अधिक ध्यान से पर ध्यान से देखता हूं। क्या यह 3 सामान्य रूप है? क्या गुणों के समूह हैं जिन्हें तर्कसंगत रूप से को अपनी तालिका में समूहीकृत किया जाना चाहिए?

  2. यह मान लिया जाये कि है सामान्यीकृत और इकाई सही मायने में 2400 + गुण होते हैं, मैं तो एक EAV model बू त्वरित नहीं होगा। आईएमएचओ, यह सबसे अच्छा है, आपके द्वारा वर्णित स्थिति के लिए सबसे लचीला समाधान। यह आपको स्पैस डेटा के लिए समर्थन में बनाया गया है और आपको अच्छी खोज गति देता है क्योंकि किसी भी दिए गए गुण के मान एक ही इंडेक्स में पाए जा सकते हैं।

2

मुझे करने के लिए महत्वपूर्ण आइटम इस टुकड़े है:

इन डेटा बिंदुओं के सापेक्ष महत्व के बारे में कुछ भी नहीं है (कौन सा गरम/सबसे अक्सर इस्तेमाल कर रहे हैं)

यह जानते हुए हैं आपको पता है कि कौन से फ़ील्ड अधिक महत्वपूर्ण हैं, मैं उन महत्वपूर्ण क्षेत्रों को "मूल" तालिका में रखूंगा और एक ईएवी संरचना को बाकी हिस्सों को संभालने दूंगा।

बात यह है कि, इस जानकारी के बिना आप वास्तव में अंधे शूटिंग कर रहे हैं। चाहे आपके पास 2400 फ़ील्ड हों या केवल 24 हों, आपको अपने डेटा बिंदुओं (और इसलिए सापेक्ष महत्व, या कम से कम तार्किक समूह) के बारे में कुछ प्रकार का विचार होना चाहिए।

6

30000 कॉलम के लिए Sparse Columns का उपयोग करें। ईएवी या एक्सएमएल पर बड़ा लाभ यह है कि आप सामान्य गुणों पर बहुत ही कुशल खोजों के लिए स्पैस कॉलम के साथ Filtered Indexes का उपयोग कर सकते हैं।

0

मैं क्षैतिज (स्तंभों की संख्या में वृद्धि) के बजाय ऊर्ध्वाधर (पंक्तियों की संख्या में वृद्धि) दृष्टिकोण का उपयोग करना चाहता हूं। आईडी, property_name - - property_value

आप की तरह

टेबल इस तरीके का प्रयास कर सकते हैं।

दृष्टिकोण के साथ लाभ है, जब आप नई संपत्ति/कॉलम पेश करते हैं तो तालिका को बदलने/बनाने की आवश्यकता नहीं होती है।

+2

यह ईएवी भी होगा। –

+0

यह भी वही उत्तर है जो मैंने प्रस्तावित किया था। – slugster

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