Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

क्या कोई Magentos अनुक्रमण सुविधा के बारे में विस्तार से बता सकता है?

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

अधिक "विशिष्ट" MySQL डेटाबेस में, कैटलॉग उत्पादों को संग्रहीत करने के लिए एक तालिका कुछ इस तरह संरचित की जाएगी:

PRODUCT:
    product_id INT
    sku        VARCHAR
    name       VARCHAR
    size       VARCHAR
    longdesc   VARCHAR
    shortdesc  VARCHAR
    ... etc ...

यह पुनर्प्राप्ति के लिए तेज़ है, लेकिन यह ईकामर्स सॉफ़्टवेयर के एक टुकड़े के लिए एक मूलभूत समस्या छोड़ देता है:जब आप अधिक विशेषताएँ जोड़ना चाहते हैं तो आप क्या करते हैं? क्या होगा यदि आप खिलौने बेचते हैं, और आकार कॉलम के बजाय, आपको age_range . की आवश्यकता है ? ठीक है, आप एक और कॉलम जोड़ सकते हैं, लेकिन यह स्पष्ट होना चाहिए कि एक बड़े स्टोर में (उदाहरण के लिए, वॉलमार्ट के बारे में सोचें), इसके परिणामस्वरूप 90% खाली पंक्तियाँ होंगी और नई विशेषताओं को बनाए रखने का प्रयास करना लगभग असंभव है।

इस समस्या से निपटने के लिए, मैगेंटो टेबल को छोटी इकाइयों में विभाजित करता है। मैं इस उत्तर में संपूर्ण ईएवी प्रणाली को फिर से बनाना नहीं चाहता, इसलिए कृपया इस सरलीकृत मॉडल को स्वीकार करें:

PRODUCT:
    product_id INT
    sku        VARCHAR

PRODUCT_ATTRIBUTE_VALUES
    product_id   INT
    attribute_id INT
    value        MISC

PRODUCT_ATTRIBUTES
    attribute_id
    name

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

हालाँकि, यह लचीलापन एक कीमत पर आता है। अगर मैं color खोजना चाहता हूं मेरे सिस्टम में एक शर्ट की (एक तुच्छ उदाहरण), मुझे खोजने की जरूरत है:

  1. product_id आइटम का (उत्पाद तालिका में)
  2. attribute_id color . के लिए (विशेषता तालिका में)
  3. आखिरकार, वास्तविक value (विशेषता_मान तालिका में)

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

ये परिणामी लुकअप टेबल Magento "इंडेक्स" हैं। जब आप पुन:अनुक्रमित करते हैं, तो आप पुरानी तालिका को उड़ा रहे हैं और इसे फिर से बना रहे हैं।

आशा है कि यह चीजों को थोड़ा स्पष्ट करता है!

धन्यवाद, जो



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. इस प्रश्न को वाक्पटु के लिए परिवर्तित करें

  2. JDBC में JTable पर डेटा कॉलिंग का अनुकूलन करें

  3. PHP में डेटाबेस में डेटा को स्वचालित रूप से कैसे अपडेट करें

  4. PHP जोड़ता है एसक्यूएल इंजेक्शन अभी भी मान्य है?

  5. चयन करें जो किसी भी पंक्ति में नहीं होने वाले मानों की सूची देता है