Magento 2 ile Yüksek Hacimli İlişkilendirmeyi Yönetme
Yayınlanan: 2022-08-30Magento 2 ile Yüksek Hacimli İlişkilendirmeyi Yönetme
Çok sayıda toplam özniteliği (10.000'den fazla) ve öznitelik kümesi başına çok sayıda özniteliği (küme başına 1000'den fazla) desteklemek için Magento 2 yeteneklerini genişletme
giriiş
Çevrimiçi pazar yerleri 2021'de küresel e-ticaretin %67'sini oluşturuyordu. En büyük 100 çevrimiçi pazaryerinde dünya çapında 3,23 trilyon dolar harcandı. Walmart'ın pazarında 100.000'den fazla satıcı bulunurken, Amazon kendi pazarında 350 milyona yakın ürün satıyor. Geleneksel e-Ticaret platformları, şimdi işlemeleri gereken muazzam miktarda veriyi işlemek için çok hızlı bir şekilde ölçeklendirilmelidir.
Gittikçe daha fazla satıcı pazara girdikçe, sunulan ürün çeşitleri de artıyor. Bu, genel performansı ve kullanım kolaylığını etkilemeden bu ürünleri kategorilere ayırmada benzersiz zorluklara neden olur. McFadyen Digital ekibinin yakın tarihli bir pazar yeri uygulaması sırasında karşılaştığı bu tür zorluklardan biri, satıcı ürünleriyle birlikte gelen çok sayıda ürün özelliğini ele almaktı.
ABD'de endüstriyel bağlantı ürünleri satan müşterilerimizden biri için Magento ve Webkul üzerinde bir B2B pazaryeri uyguladık. Daha fazla satıcı işe alındıkça, ürün çeşitliliği arttı ve her birinin getirdiği benzersiz ürün özelliklerinin sayısı da arttı. Öznitelik numarası, Magento'nun önerdiğini aştı ve önemli performans sorunlarıyla karşılaştık. Teknik uzmanlarımız, sorunun ayrıntılı bir analizini gerçekleştirdi ve durumu ele almak için bazı geçici çözümler sunabildi. Bu blogda bunlardan birkaçına değineceğiz.
.
Ürün İthalatı:
Magento, birçok özniteliğin birden çok öznitelik kümesine bölünmesini önerir. Ancak öznitelik setlerinin sayısı da artarsa, ürünün ve özniteliklerin içe aktarılmasının performansını olumsuz etkiler. Bunun nedeni, Magento'nun tüm öznitelikleri ve öznitelik kümelerini belleğe önceden yüklemesidir. Örneğin, 1000 öznitelik kümesi olduğunu ve yalnızca bir ürün alt kümesini içe aktardığımızı varsayalım. Bu durumda, Magento hala mevcut tüm öznitelikleri ve öznitelik kümelerini yükler, bu da bellek tüketimini artırır, böylece içe aktarma işlem süresini artırır. Ürünleri içe aktarırken, ürün veritabanında bulunan tüm öznitelikleri yükleyen AbstractType init yöntemi çağrılır. Önce tüm nitelikler yüklenir, ardından nitelik kümeleri ve bunlar daha sonra nitelik kimliğine göre düzenlenir.
satıcı/magento/modül-katalog-içe aktarma-dışa aktarma/Model/İçe Aktarma/Ürün/Tür/ÖzetTürü

Çözüm:
Bu sorunun kolay çözümü, tam bir içe aktarma yapmaya çalışmak yerine yalnızca varsayılan CSV dosyasından gereken öznitelik kümesini /ürünleri yüklemektir. Örneğin, tek bir ürün kategorisi ithal etmeye çalıştığımızı varsayalım. Bu durumda, öznitelikleri / öznitelik kümelerinin geri kalanını belleğe değil, yalnızca o kategoriden yükleriz.
Bunun için Basit İçe Aktarma türünün init yöntemini aşağıdaki gibi geçersiz kılıyoruz:

Bu, performansı önemli ölçüde iyileştirmemize yardımcı oldu ve ithalat için geçen süre neredeyse %30 azaldı.
Ürün Listeleme:
Herhangi bir kategori sayfasını ziyaret ederken, Magento, kategori ve toplama ayrıntılarını almak için tüm öznitelik verilerini Elastic Search'e iletir. Birçok öznitelik, yüksek bellek tüketimine yol açarak performansın düşmesine neden olur.
FilterableAttributeList sınıfı, belirli bir kategoride filtrelemek için gereken yalnızca bir öznitelik alt kümemiz olsa bile, bir kategorideki tüm öznitelik ve öznitelik kümelerini yükleyecektir.
satıcı/magento/modül-katalog/Model/Katman/Kategori/ FilterableAttributeList
Elastic Search ile bağlantı kurduğumuzda, sorgu oluştururken MySQL'de yaptığımız gibi istek iki parametre ile oluşturulmalıdır,
- Maç Parametresi
- İhtiyacımız olan tüm verileri getiren toplama
Magento, katman navigasyonu olarak toplama kullanır ve tüm verileri döndürür, bu nedenle büyük miktarda verimiz olduğunda toplama sayısı artacaktır. Bu, tek bir sorguda daha fazla toplama verisi almaya çalıştığımızda Elastik Arama'yı etkileyecektir.

Bu, düz varlık tablolarında indeksleme ile ilgili sorunlara da neden olabilir. Düz varlık tabloları, öznitelik kümesi başına değildir ve bu nedenle, MySQL maksimum sütun sınırlarına girebilecek tüm özniteliklerin bir toplamıdır.
MySQL 5.6.9'dan itibaren, maksimum sütun sayısı 1017'dir ve bu, yönetici ürün düzenleme sayfasını kullanılamaz bir tarama haline getirecek ve ürünlerin ön uçta oluşturulması üzerinde ciddi bir etkiye neden olacaktır.

Magento nasıl çalışır:
Magento, öznitelik meta verilerini ve ardından bu özniteliğin değerini yükler. Varlıklar bu bilgileri bellekte depolamak zorunda kalacaklar. Ancak, öznitelik meta verileri Magento önbelleğinde depolandığından, en kötü etkiler ilk sayfa yüklemesinde görülecektir.

Yine, KnockoutJS yüksek performans için tasarlanmamıştır..
Çözüm:
Magento, tek bir kategorinin tüm özelliklerini geçirmeye çalıştığından, istek oluşturucuyu geçersiz kılın, kategoriyle ilgili belirli olanları daraltın ve kategoriye bir eşleme özelliği sağlayın. Bu nedenle, kategori sayfası her yüklendiğinde, yalnızca o kategorinin özelliklerini yükleriz.
Kategori arama sayfasına dayalı, kategori kimliğini veya marka kimliğini veya satıcı kimliğini geçerek dinamik bir istek oluşturmak için Create () işlevi geçersiz kılınmalıdır.

Magento belgelerine göre, ürün öznitelikleri sınırı 2000'dir ve 500 filtrelenebilirdir. 500'den fazla veya 10.000'den fazla ürün özelliği, vitrinde ve Magento yöneticisinde (bildirilen sorun dahil) çeşitli performans düşüşlerine neden olur.
Özetlemek gerekirse, çok sayıda ürün özelliği işlenirken aşağıdaki en iyi uygulamalar akılda tutulmalıdır:
- Farklı ürünler için farklı Ürün şablonları (özellik kümeleri) kullanın.
- Magento Admin'de “Ürün Listelemede Kullan” alanı vardır. Yalnızca kategori sayfasında etkinleştirmeyi planladığımız özellikleri etkinleştirin
- Varyasyon yönetimi için özel seçeneklerden ve karmaşık ürünlerden yararlanın
- Aranabilir özniteliklerin sayısını en aza indirin
- Kullanılmayan ürün özelliklerini kaldırın.
- Ticaretle ilgili olmayan özellikleri harici PMS sistemlerinde depolayın ve yönetin
Bu çözümler asıl soruna geçici çözümler olarak sunulurken, uzun vadede e-Ticaret platformlarının, çevrimiçi pazar yerleriyle birlikte gelen sürekli artan ürün verisi hacminin ortaya çıkardığı bu zorlukların üstesinden gelmek için ölçeklendirilmesi gerekecektir.
McFadyen Digital'de 15 yılı aşkın bir süredir çevrimiçi pazar yerleri geliştiriyoruz ve sürekli olarak mevcut platformlara maruz kalıyoruz. Pazar yeri operatörlerine yönelik teknoloji hizmetlerimiz, mimari inceleme, satıcı analizi, uygulama ve daha fazlasını içerir. Daha fazlasını öğrenmek için pazaryeri teknoloji çözümlerimizi ziyaret edin. Özelleştirilmiş bir Ticaret mağazası oluşturmak ve yönetmek için ihtiyacınız olan her şey hakkında daha fazla bilgi için. https://devdocs.magento.com/ adresini ziyaret edin.
yazar hakkında
Sharada Rao, McFadyen Digital'de Kıdemli Yazılım Mühendisidir. Yeni teknolojileri öğrenmeye ve uygulamaya düşkündür. Hevesli bir gezgin ve gastronomi olan Sharada, yeni yerler keşfetmeyi sever. Kocası ve 11 aylık oğluyla birlikte Bengaluru'da kalıyor. McFadyen Digital'deki görevi sırasında, bazı büyük biletli e-ticaret/pazaryeri uygulama projelerinin bir parçası olmuştur.