get.php 및 / 또는`core / file_storage_database`가 생성 된 이유는 무엇입니까?


12

버전 1.5 또는 1.6 이후로 Magento는 루트 폴더에 파일 이름이 get.php이었습니다. core/file_storage_data모델을 사용하는이 파일을 사용 하면 Magento 시스템 소유자 는 파일 시스템에 이미지 파일이 없어도 데이터베이스의 Blob 열에서 직접 제품 미디어 파일을 제공 할 수 있습니다. 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의 Blob 스토리지는 불안정한 역사를 가지고 있으며, 안정적인 데이터베이스 Blob 구현조차도 작업하기 Varien_File_Transfer_Adapter_Http가 쉽지 않으며 내가 볼 수있는 것은 추가하지 않습니다. 이러한 파일에 대한 캐싱 헤더

Magento가이 기능을 개발 한 이유를 아는 사람이 있습니까? 실제로 해결하려는 목표 / 문제를 달성합니까? 누구든지 그것을 사용하고 있습니까?

답변:


12

실제로이 기능에 대한 원래 SRS를 찾았으며 역사적인 목적으로 여기에서 공유 할 수 있습니다.

현재 미디어를 저장하는 다른 옵션은 없지만 웹 서버의 파일 시스템에 있습니다. 이 방법은 시스템 인스턴스가 하나만 실행되고 데이터베이스가 시스템 인스턴스와 동일한 서버에있는 경우에 충분합니다.

그러나 대부분의 시스템 배포 방법은 동일하지 않습니다. 고객은 서로 다른 서버에 여러 시스템 인스턴스가 배치되어 있으며 동기화가 필요합니다. 이것이 바로 이미지 저장 옵션이 데이터베이스와 CDN (Content Delivery Network)이라는 두 가지 옵션으로 개발되어야하는 이유입니다.

대체 미디어 저장소 인 CDN은 시스템에서 특정 CDN과의 완전한 통합이 아니라 지원 옵션으로 만 구현됩니다. 관리자는 CDN을 직접 선택하고 구성하고 시스템 구성을 약간 변경해야합니다.

유스 케이스를 붙여 넣지는 않지만 CDN의 경우 이미지 / 스킨의 기본 URL을 CDN url로 변경하는 것에 대해서만 언급합니다 (PULL CDN이 필요하다고 가정합니다)


3

나는 그것을 광범위하게 테스트하지 않았거나 프로덕션 환경에서 사용했지만 Elastic Beanstalk + Magento 안내서에 사용했습니다. 공유가없는 웹 노드 클러스터의 이점은 관리자를 통해 업로드 할 때 이미지 파일이 DB 백엔드에 저장된 다음 처음부터 제공됩니다 (그리고 그 이후에는 CDN에서 제공). 미디어 공유를 위해 NFS를 피할 수 있음을 의미합니다.


2

내 생각 엔 클러스터 환경을위한 것입니다. 1 개의 db 노드가있는 다중 웹 노드 세션 / 캐시가 db (또는 다른 노드)에도있는 경우 웹 노드는 읽기 전용이며 새 웹 노드를 가져올 때마다 미디어를 동기화 할 필요가 없습니다.

전반적으로 해결해야 할 문제를 찾는 엔지니어링 솔루션처럼 보입니다.


2

개인적으로 Magento에서 이것을보고 기뻤습니다. 다른 사람들이 언급했듯이 NFS 마운트를 처리하지 않고도 여러 웹 노드가있는 스택이 이미지의 단일 소스를 가질 수있는 방법을 제공하기 때문에 개인적으로 기뻤습니다.

나와 같고로드 밸런서 내외부에서 웹 노드를 교체하여 배포를 실행하는 경우 (예 : AWS Launch Configurations / Auto Scaling Groups 사용) 실제로 제정신입니다.

일반적으로 다양한 이유로 이미지를 DB에 넣지 않으려 고하지만이 프로세스 (기본적으로)가 작동하는 방식은 이미지를 DB에서 로컬 파일 시스템으로 가져 와서 후속 요청을 위해 제공하는 것입니다. .

한 걸음 더 나아갈 수 있다면 (파일 시스템에서 이미지를 다운 / 참조하라는 요청이 훨씬 적습니다) CDN을 사용하고 웹 사이트를 원산지로 설정하고 다른 사람들이 설명한대로 미디어 URL을 변경하는 것이 좋습니다.

참고로, 대부분의 MySQL 구성은 "max_allowed_packet"값이 매우 낮아서 DB에 허용되는 데이터 전송 크기를 제한합니다. DB에 이미지를 저장하려는 경우, 직접 확인하지 않도록 확인하고 싶을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.