क्यों प्राप्त किया गया था। php और / या `कोर / file_storage_database` को बनाया गया था?


12

संस्करण 1.5 या 1.6 के आसपास से, Magento के रूट फ़ोल्डर में एक फ़ाइल थी जिसका नाम था get.php। यह फ़ाइल, core/file_storage_dataमॉडल का उपयोग करके , Magento सिस्टम मालिकों को डेटाबेस में बूँद कॉलम से फ़ाइल सिस्टम पर छवि फ़ाइल के बिना सीधे अपने उत्पाद मीडिया फ़ाइलों की सेवा करने की अनुमति देता है। PHP फाइल भेजना संभालती है

#File: get.php
function sendFile($file)
{
    if (file_exists($file) || is_readable($file)) {
        $transfer = new Varien_File_Transfer_Adapter_Http();
        $transfer->send($file);
        exit;
    }
}

यह Magento के इतिहास क्षेत्र में दिखाई दे रहा है, लेकिन यह सुविधा क्यों विकसित की गई थी? ऐसा लगता है - थोड़ा पागल। PHP किसी फ़ाइल को परोसने का सबसे कारगर तरीका नहीं है, MySQL के ब्लॉब स्टोरेज के अस्थिर होने का इतिहास है, और यहां तक ​​कि एक स्थिर डेटाबेस ब्लॉब कार्यान्वयन के साथ काम करने के लिए एक दर्द है, और जो मैं देख सकता हूं, उससे Varien_File_Transfer_Adapter_Httpकोई जोड़ नहीं है इन फ़ाइलों के लिए कोई कैशिंग हेडर।

क्या किसी को पता है कि Magento ने यह सुविधा क्यों विकसित की है? क्या यह वास्तव में जो भी लक्ष्य / समस्या को हल करने के लिए निर्धारित है उसे पूरा करता है? क्या कोई इसका उपयोग कर रहा है?

जवाबों:


12

मुझे वास्तव में इस सुविधा के लिए मूल SRS मिला और इसे ऐतिहासिक उद्देश्यों के लिए यहाँ साझा कर सकते हैं:

वर्तमान में मीडिया स्टोर करने के लिए कोई अन्य विकल्प नहीं है, लेकिन वेब सर्वर की फाइल सिस्टम में। यह दृष्टिकोण काफी अच्छा है जब सिस्टम चलाने का केवल एक ही उदाहरण है और डेटाबेस उसी सर्वर पर सिस्टम इंस्टेंस के रूप में स्थित है।

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

वैकल्पिक मीडिया स्टोरेज के रूप में सीडीएन को सिस्टम में केवल एक समर्थन विकल्प के रूप में लागू किया जाएगा, विशिष्ट सीडीएन (एस) के साथ पूर्ण एकीकरण के रूप में नहीं। व्यवस्थापक को CDN को स्वयं चुनना और कॉन्फ़िगर करना होगा और साथ ही सिस्टम कॉन्फ़िगरेशन में मामूली बदलाव करने के लिए भी करना होगा।

मैं मामलों का उपयोग नहीं करूंगा लेकिन CDN के लिए इसमें CDN url के लिए चित्र / स्कीन के लिए बेस URL बदलने का उल्लेख है (मुझे लगता है कि इसके लिए PULL CDN की आवश्यकता है)


3

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


2

यहाँ मेरा अनुमान है कि यह क्लस्टर वातावरण के लिए है। 1 डीबी नोड के साथ कई वेबकोड। यदि सत्र / कैश भी db (या अन्य नोड) में हैं, तो आपका वेबनोड केवल पढ़ा जाएगा और जब भी आप नया वेबनोड लाते हैं, तो आपको मीडिया को सिंक करने की आवश्यकता नहीं होती है।

कुल मिलाकर मैं सहमत हूं कि यह एक इंजीनियर समाधान की तरह दिखता है जिसे हल करने के लिए एक समस्या की तलाश है।


2

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

यदि आप मेरे जैसे हैं, और लोड नोड्सर (जैसे AWS लॉन्च कॉन्फ़िगरेशन / ऑटो स्केलिंग ग्रुप्स का उपयोग करके) में वेब नोड्स को बदलकर और डिप्लॉय चलाते हैं, तो यह वास्तव में काफी समझदार है।

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

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

एक साइड नोट पर, अधिकांश MySQL कॉन्फ़िगरेशन में बहुत कम "max_allowed_packet" मान होगा जो आपके DB को अनुमत डेटा स्थानांतरण के आकार को सीमित करता है। यदि आप DB में छवियों को संग्रहीत करने की योजना बना रहे हैं, तो आप जाँच कर सकते हैं कि आप अपने आप को पैर में गोली नहीं मारते।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.