ทำไม get.php และ / หรือ `core / file_storage_database` ถูกสร้างขึ้น


12

ตั้งแต่รอบรุ่น 1.5 หรือ 1.6, 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;
    }
}

นี่คือการเข้าไปในดินแดนประวัติศาสตร์วีโอไอพี แต่ทำไมคุณสมบัตินี้ถึงพัฒนาขึ้น? ดูเหมือน - บ้าเล็กน้อย PHP ไม่ใช่วิธีที่มีประสิทธิภาพมากที่สุดในการให้บริการไฟล์การจัดเก็บหยดของ MySQL นั้นมีประวัติที่ไม่เสถียรและแม้แต่การใช้หยดฐานข้อมูลที่เสถียรก็เป็นปัญหาในการทำงานด้วยและจากสิ่งที่ฉันเห็นVarien_File_Transfer_Adapter_Httpไม่เพิ่ม ส่วนหัวแคชใด ๆ กับไฟล์เหล่านี้

ไม่มีใครรู้ว่าทำไม Magento จึงพัฒนาคุณสมบัตินี้ขึ้นมา? จริง ๆ แล้วมันบรรลุเป้าหมายหรือปัญหาใด ๆ ที่กำหนดไว้เพื่อแก้ไขหรือไม่ มีใครใช้หรือไม่

คำตอบ:


12

ฉันพบ SRS ดั้งเดิมสำหรับคุณลักษณะนี้และสามารถแบ่งปันได้ที่นี่เพื่อวัตถุประสงค์ทางประวัติศาสตร์:

ขณะนี้ไม่มีตัวเลือกอื่นสำหรับเก็บสื่อ แต่ในระบบไฟล์ของเว็บเซิร์ฟเวอร์ วิธีการนี้ดีพอเมื่อมีเพียงอินสแตนซ์เดียวของระบบที่ทำงานและฐานข้อมูลอยู่บนเซิร์ฟเวอร์เดียวกันกับอินสแตนซ์ของระบบ

อย่างไรก็ตามวิธีการปรับใช้ระบบที่เป็นไปได้มากที่สุดนั้นไม่เหมือนกัน ลูกค้ามีระบบหลายอินสแตนซ์ของการใช้งานบนเซิร์ฟเวอร์ที่แตกต่างกันซึ่งต้องมีการประสาน นี่คือเหตุผลว่าทำไมจึงต้องพัฒนาตัวเลือกการจัดเก็บภาพสองแบบเป็นตัวเลือก: ฐานข้อมูลและ CDN (เครือข่ายการจัดส่งเนื้อหา)

CDN เป็นสื่อบันทึกข้อมูลสำรองจะถูกนำไปใช้ในระบบเป็นตัวเลือกการสนับสนุนเท่านั้นไม่ใช่เป็นการรวมเข้ากับ CDN เฉพาะอย่างสมบูรณ์ ผู้ดูแลระบบจะต้องเลือกและกำหนดค่า CDN เองเช่นเดียวกับการเปลี่ยนแปลงเล็กน้อยในการกำหนดค่าระบบ

ฉันจะไม่วางกรณีการใช้งาน แต่สำหรับ CDN เพียงกล่าวถึงการเปลี่ยน URL พื้นฐานสำหรับรูปภาพ / สกินเป็น CDN url (ฉันถือว่ามันต้องใช้ PULL CDN)


3

ฉันไม่ได้ทำการทดสอบอย่างกว้างขวางหรือใช้ในการผลิต แต่ใช้สำหรับคู่มือElastic Beanstalk + Magentoของฉัน ประโยชน์สำหรับกลุ่มเว็บโหนดแบบไม่มีอะไรแชร์ - ไฟล์รูปภาพจะถูกเก็บไว้ในแบ็กเอนด์ฐานข้อมูลเมื่ออัพโหลดผ่านผู้ดูแลระบบจากนั้นให้บริการเริ่มแรกจากที่นั่น (และจาก CDN หลังจากนั้น) หมายความว่าคุณสามารถหลีกเลี่ยง NFS สำหรับการแชร์สื่อ


2

ฉันเดาว่านี่คือมันมีไว้สำหรับสภาพแวดล้อมแบบคลัสเตอร์ หลาย webnodes ที่มี 1 db node หากเซสชัน / แคชอยู่ใน db (หรือโหนดอื่น ๆ ) webnode ของคุณจะอ่านได้อย่างเดียวและคุณไม่ต้องซิงค์สื่อทุกครั้งที่คุณเปิด webnode ใหม่

โดยรวมแล้วฉันเห็นด้วยว่ามันดูเหมือนว่าโซลูชันที่ออกแบบมาเพื่อค้นหาปัญหาที่จะแก้ไข


2

ฉันยินดีเป็นอย่างยิ่งที่ได้เห็นสิ่งนี้ภายใน Magento โดยส่วนตัวเพราะ (อย่างที่คนอื่นพูดถึง) มันเป็นวิธีสำหรับกองซ้อนที่มีหลายเว็บโหนดให้มีแหล่งภาพที่เชื่อถือได้เพียงภาพเดียวโดยไม่ต้องจัดการกับ NFS mounts

หากคุณเป็นเหมือนฉันและใช้งาน deploys โดยแทนที่เว็บโหนดเข้าและออกจาก load balancer (เช่นการใช้ AWS Launch Configurations / Auto Scaling Groups) นี่เป็นเหตุผลที่ค่อนข้างดี

โดยทั่วไปแล้วคุณต้องการหลีกเลี่ยงการใส่ภาพลงในฐานข้อมูลด้วยเหตุผลหลายประการ แต่วิธีการทำงาน (โดยทั่วไป) กระบวนการนี้คือภาพจะถูกดึงเข้าสู่ระบบไฟล์ในเครื่องจากฐานข้อมูลจากนั้นให้บริการจากคำขอนั้น .

หากคุณสามารถดำเนินการขั้นตอนต่อไปได้ (มีการร้องขอให้ดึงรูปภาพลง / อ้างอิงจากระบบไฟล์น้อยลง) ฉันขอแนะนำให้ใช้ CDN และตั้งค่าเว็บไซต์ของคุณเป็นจุดเริ่มต้นและแก้ไข URL สื่อตามที่ผู้อื่นอธิบายไว้

หมายเหตุด้านการกำหนดค่า MySQL ส่วนใหญ่จะมีค่า "max_allowed_packet" ต่ำมากซึ่ง จำกัด ขนาดของการถ่ายโอนข้อมูลที่อนุญาตให้ DB ของคุณ หากคุณวางแผนที่จะเก็บภาพไว้ในฐานข้อมูลคุณอาจต้องการตรวจสอบว่าคุณไม่ได้ยิงด้วยตัวเอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.