2008-10-10 19 views
10

पर बड़ी ईएवी/खुली स्कीमा सिस्टम का प्रदर्शन क्या किसी ने SQL सर्वर में एक बहुत बड़ा ईएवी या ओपन स्कीमा शैली डेटाबेस लागू किया है? मैं सोच रहा हूं कि इसके साथ प्रदर्शन समस्याएं हैं और आप उन बाधाओं को दूर करने में कैसे सक्षम थे।SQL सर्वर

उत्तर

1

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

9

एमएस एसक्यूएल सर्वर के किसी अन्य ब्रांड के बनाम एमएस एसक्यूएल सर्वर के बावजूद, ईएवी के साथ सबसे खराब प्रदर्शन मुद्दा यह है कि लोग एक पंक्ति पर किसी इकाई को पुनर्निर्माण के लिए राक्षस प्रश्नों को करने का प्रयास करते हैं। इसके लिए प्रत्येक विशेषता में एक अलग शामिल होने की आवश्यकता है।

SELECT e.id, a1.attr_value as "cost", a2.attr_value as "color", 
    a3.attr_value as "size", . . . 
FROM entity e 
    LEFT OUTER JOIN attrib a1 ON (e.entity_id = a1.entity_id AND a1.attr_name = 'cost') 
    LEFT OUTER JOIN attrib a2 ON (e.entity_id = a2.entity_id AND a2.attr_name = 'color') 
    LEFT OUTER JOIN attrib a2 ON (e.entity_id = a3.entity_id AND a3.attr_name = 'size') 
    . . . additional joins for each attribute . . . 

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

समाधान कॉलम के बजाय पंक्तियों में गुण लाने के लिए है, और इन पंक्तियों पर लूप के लिए एप्लिकेशन कोड में एक वर्ग लिखना, ऑब्जेक्ट गुणों में मूल्यों को एक-एक करके असाइन करना है।

SELECT e.id, a.attr_name, a.attr_value 
FROM entity e JOIN attrib a USING (entity_id) 
ORDER BY e.id; 

यह SQL क्वेरी इतना सरल और अधिक कुशल है कि यह अतिरिक्त आवेदन कोड के लिए बनाता है।

मैं एक ईएवी ढांचे में जो खोजता हूं वह कुछ बॉयलरप्लेट कोड है जो इस तरह के एक बहु-पंक्ति परिणाम सेट को पुनर्प्राप्त करता है, और गुण गुणों में गुणों को मानचित्र करता है, और फिर आबादी वाले वस्तुओं का संग्रह देता है।