Magento 2로 대용량 어트리뷰션 처리

게시 됨: 2022-08-30

Magento 2로 대용량 어트리뷰션 처리

많은 수의 총 속성(10,000개 이상) 및 속성 세트당 많은 수의 속성(세트당 1000개 이상)을 지원하도록 Magento 2 기능 확장

소개

온라인 마켓플레이스는 2021년에 전 세계 전자상거래의 67%를 차지했습니다. 3조 2300억 달러가 상위 100대 온라인 마켓플레이스에서 전 세계적으로 지출되었습니다. Walmart의 시장에는 100,000명 이상의 판매자가 있으며 Amazon은 시장에서 거의 3억 5천만 개의 제품을 판매합니다. 기존 전자 상거래 플랫폼은 현재 처리해야 하는 엄청난 양의 데이터를 처리하기 위해 매우 빠르게 확장해야 합니다.

점점 더 많은 판매자가 시장에 등록됨에 따라 제공되는 제품의 구색이 증가합니다. 이로 인해 전반적인 성능과 사용 편의성에 영향을 미치지 않으면서 이러한 제품을 분류하는 데 고유한 문제가 발생합니다. McFadyen Digital 팀이 최근 시장을 구현하는 동안 직면한 이러한 과제 중 하나는 판매자 제품과 함께 제공되는 수많은 제품 속성을 처리하는 것이었습니다.

우리는 산업용 고정 제품을 판매하는 미국 고객 중 한 명을 위해 Magento 및 Webkul에서 B2B 시장을 구현했습니다. 더 많은 판매자가 등록됨에 따라 제품 구색이 증가했고 각각이 가져오는 고유한 제품 속성의 수도 증가했습니다. 속성 번호가 Magento가 권장하는 값을 초과했으며 심각한 성능 문제에 직면했습니다. 당사의 기술 전문가는 문제에 대한 자세한 분석을 수행했으며 상황을 처리하기 위한 몇 가지 해결 방법을 제시할 수 있었습니다. 우리는 이 블로그에서 이들 중 몇 가지를 논의할 것입니다.

.

제품 수입:

Magento는 많은 속성을 여러 속성 세트로 나눌 것을 권장합니다. 그러나 속성 집합의 수도 많아지면 제품 및 속성 가져오기의 성능에 부정적인 영향을 미칩니다. 이것은 Magento가 모든 속성과 속성 세트를 메모리에 미리 로드하기 때문에 발생합니다. 예를 들어, 1000개의 속성 집합이 있고 제품의 하위 집합만 가져왔다고 가정합니다. 이 경우 Magento는 여전히 사용 가능한 모든 속성과 속성 세트를 로드하므로 메모리 소비가 증가하므로 가져오기 프로세스 시간이 늘어납니다. 제품을 가져올 때 제품 데이터베이스에서 사용 가능한 모든 속성을 로드하는 AbstractType init 메소드가 호출됩니다. 먼저 모든 속성을 로드한 다음 속성 집합을 로드한 다음 속성 ID를 기반으로 정렬합니다.

공급업체/magento/module-catalog-import-export/Model/Import/Product/Type/AbstractType

해결책:

이 문제에 대한 쉬운 해결 방법은 전체 가져오기를 시도하는 대신 기본 CSV 파일에서 필요한 속성 집합 /products만 로드하는 것입니다. 예를 들어 단일 범주의 제품을 가져오려고 한다고 가정합니다. 이 경우 해당 범주의 속성만 로드하고 /attributes 세트의 나머지 속성은 메모리에 로드하지 않습니다.

이를 위해 아래와 같이 Simple Import 유형의 init 메소드를 재정의합니다.

이를 통해 성능이 크게 향상되었으며 가져오기에 소요되는 시간이 거의 30% 단축되었습니다.

제품 목록:

카테고리 페이지를 방문하는 동안 Magento는 카테고리 및 집계 세부 정보를 검색하기 위해 모든 속성 데이터를 Elastic Search에 전달합니다. 많은 속성이 높은 메모리 소비로 이어져 성능 저하로 이어집니다..

FilterableAttributeList 클래스는 특정 범주를 필터링하는 데 필요한 속성의 하위 집합만 있는 경우에도 범주의 모든 속성 및 속성 집합을 로드합니다.

vendor/magento/module-catalog/Model/Layer/Category/ FilterableAttributeList

Elastic Search에 연결할 때 쿼리를 생성하는 동안 MySQL에서 수행하는 작업과 같이 두 개의 매개변수를 사용하여 요청을 빌드해야 합니다.

  1. 매개변수 일치
  2. 필요한 모든 데이터를 가져오는 집계

Magento는 계층 탐색으로 집계를 사용하고 모든 데이터를 반환하므로 데이터 양이 많을 때 집계 수가 증가합니다. 이는 단일 쿼리에 더 많은 집계 데이터를 가져오려고 할 때 Elastic Search에 영향을 미칩니다.

이로 인해 플랫 엔터티 테이블의 인덱싱에 문제가 발생할 수도 있습니다. 플랫 엔터티 테이블은 속성 세트별로 구성되지 않으므로 MySQL 최대 열 제한에 도달할 수 있는 모든 속성의 집합입니다.

MySQL 5.6.9부터 최대 열 수는 1017개이므로 관리 제품 편집 페이지를 사용할 수 없는 크롤링으로 만들어 프런트 엔드의 제품 렌더링에 심각한 영향을 미칩니다.

Magento 작동 방식:

Magento는 속성 메타데이터를 로드한 다음 해당 속성의 값을 로드합니다. 엔티티는 이 정보를 메모리에 저장해야 합니다. 그러나 속성 메타데이터가 Magento 캐시에 저장되기 때문에 첫 페이지 로드에서 최악의 영향을 볼 수 있습니다.

다시 말하지만, KnockoutJS는 고성능을 위해 설계되지 않았습니다..

해결책:

Magento는 단일 범주의 모든 속성을 전달하려고 하므로 요청 빌더를 재정의하고 범주와 관련된 특정 속성으로 범위를 좁히고 범주에 대한 매핑 기능을 제공합니다. 따라서 카테고리 페이지가 로드될 때마다 해당 카테고리의 속성만 로드합니다.

카테고리 ID 또는 브랜드 ID 또는 판매자 ID를 전달하여 카테고리 검색 페이지를 기반으로 동적 요청을 생성하려면 Create() 함수를 재정의해야 합니다.

Magento 문서에 따르면 제품 속성의 제한은 2000이고 500은 필터링 가능합니다. 500개 이상의 제품 속성 또는 10,000개 이상의 제품 속성은 상점 및 Magento 관리자(보고된 문제 포함)에서 몇 가지 성능 저하를 초래합니다.

요약하면 많은 제품 속성을 처리할 때 다음 모범 사례를 염두에 두어야 합니다.

  • 다른 제품에 대해 다른 제품 템플릿(속성 집합)을 사용합니다.
  • Magento Admin에는 "제품 목록에 사용" 필드가 있습니다. 카테고리 페이지에서 활성화하려는 속성만 활성화합니다.
  • 변형 관리를 위해 맞춤형 옵션 및 복잡한 제품 활용
  • 검색 가능한 속성 수 최소화
  • 사용하지 않는 제품 속성을 제거합니다.
  • 외부 PMS 시스템에 비상거래 관련 속성 저장 및 관리

이러한 솔루션은 실제 문제에 대한 해결 방법으로 도입되었지만 장기적으로 전자 상거래 플랫폼은 온라인 마켓플레이스와 함께 제공되는 제품 데이터의 계속해서 증가하는 볼륨으로 인해 제기되는 이러한 문제를 해결하기 위해 확장해야 합니다.

McFadyen Digital에서 우리는 15년 넘게 온라인 마켓플레이스를 개발해 왔으며 사용 가능한 플랫폼에 지속적으로 노출되어 있습니다. 시장 운영자를 위한 당사의 기술 서비스에는 아키텍처 검토, 공급업체 분석, 구현 등이 포함됩니다. 자세히 알아보려면 시장 기술 솔루션을 방문하십시오. 맞춤형 Commerce Store를 구축하고 관리하는 데 필요한 모든 것에 대한 자세한 내용은 방문 https://devdocs.magento.com/

저자 소개

Sharada Rao는 McFadyen Digital의 수석 소프트웨어 엔지니어입니다. 그녀는 새로운 기술을 배우고 구현하는 것을 좋아합니다. 열렬한 여행자이자 미식가인 Sharada는 새로운 장소를 탐험하는 것을 좋아합니다. 그녀는 남편과 11개월 된 아들과 함께 벵갈루루에 머물고 있습니다. McFadyen Digital에서 근무하는 동안 그녀는 일부 고액 전자 상거래/마켓플레이스 구현 프로젝트에 참여했습니다.