Menangani Atribusi Volume Tinggi dengan Magento 2
Diterbitkan: 2022-08-30Menangani Atribusi Volume Tinggi dengan Magento 2
Memperluas kemampuan Magento 2 untuk mendukung sejumlah besar atribut total (lebih besar dari 10.000) dan sejumlah besar atribut per kumpulan atribut (lebih dari 1000 per kumpulan)
pengantar
Pasar online menyumbang 67% dari e-commerce global pada tahun 2021. $3,23 triliun dihabiskan secara global di 100 pasar online teratas. Pasar Walmart memiliki lebih dari 100.000 penjual, sementara Amazon menjual hampir 350 juta produk di pasarnya. Platform eCommerce tradisional harus ditingkatkan dengan sangat cepat untuk memproses volume data yang luar biasa yang sekarang harus mereka tangani.
Karena semakin banyak penjual yang masuk ke pasar, bermacam-macam produk yang ditawarkan meningkat. Hal ini menyebabkan tantangan unik dalam mengkategorikan produk ini tanpa memengaruhi kinerja dan kemudahan penggunaan secara keseluruhan. Salah satu tantangan yang dihadapi tim McFadyen Digital selama implementasi pasar baru-baru ini adalah menangani berbagai atribut produk yang disertakan dengan produk penjual.
Kami menerapkan pasar B2B di Magento dan Webkul untuk salah satu klien kami di AS yang menjual produk pengikat industri. Karena semakin banyak penjual yang bergabung, ragam produk meningkat, dan begitu pula jumlah atribut produk unik yang dibawa masing-masing. Jumlah atribut melebihi apa yang direkomendasikan Magento, dan kami menghadapi masalah kinerja yang signifikan. Pakar teknis kami melakukan analisis masalah secara mendetail dan mampu memberikan beberapa solusi untuk menangani situasi tersebut. Beberapa di antaranya akan kita bahas di blog ini.
.
Impor Produk:
Magento merekomendasikan untuk membagi banyak atribut menjadi beberapa set atribut. Namun, jika jumlah set atribut juga menjadi besar, itu berdampak buruk pada kinerja produk dan impor atribut. Ini terjadi karena Magento memuat semua atribut dan set atribut ke dalam memori. Misalnya, ada 1000 set atribut, dan kami hanya mengimpor subset produk. Dalam hal ini, Magento masih memuat semua atribut dan set atribut yang tersedia, yang meningkatkan konsumsi memori, sehingga meningkatkan waktu proses impor. Saat mengimpor produk, metode AbstractType init dipanggil, yang memuat semua atribut yang tersedia di database produk. Pertama, semua atribut dimuat, kemudian set atribut, dan ini kemudian disusun berdasarkan id atribut..
vendor/magento/modul-catalog-import-export/Model/Import/Product/Type/AbstractType

Larutan:
Solusi mudah untuk masalah ini adalah memuat hanya kumpulan atribut /produk yang diperlukan dari file CSV default alih-alih mencoba melakukan impor penuh. Misalnya, kita mencoba mengimpor satu kategori produk. Dalam hal ini, kami memuat atribut hanya dari kategori itu dan bukan set atribut /atribut lainnya ke dalam memori.
Untuk ini, kami mengganti metode init dari tipe Impor Sederhana seperti di bawah ini::

Ini sangat membantu kami meningkatkan kinerja dan waktu yang dibutuhkan untuk impor berkurang hampir 30%.
Daftar Produk:
Saat mengunjungi halaman kategori mana pun, Magento meneruskan semua data atribut ke Pencarian Elastis untuk mengambil detail kategori dan agregasi. Banyak atribut menyebabkan konsumsi memori yang tinggi, mengakibatkan penurunan kinerja..
Kelas FilterableAttributeList akan memuat semua atribut dan set atribut dalam suatu kategori meskipun kita hanya memiliki subset atribut yang diperlukan untuk memfilter pada kategori tertentu..
vendor/magento/module-catalog/Model/Layer/Category/ FilterableAttributeList
Saat kita terhubung dengan Elastic Search, permintaan harus dibangun dengan dua parameter, seperti yang kita lakukan di MySQL saat membuat kueri,
- Parameter Pertandingan
- Agregasi, yang membawa semua data yang kami butuhkan
Magento menggunakan agregasi sebagai navigasi lapisan dan mengembalikan semua data, sehingga jumlah agregasi akan meningkat ketika kita memiliki sejumlah besar data. Ini akan memengaruhi Penelusuran Elastis saat kami mencoba memasukkan lebih banyak data agregasi ke dalam satu kueri.

Ini juga dapat menyebabkan masalah dengan pengindeksan di tabel entitas datar. Tabel entitas datar tidak per set atribut dan dengan demikian merupakan agregasi dari semua atribut yang dapat berjalan ke batas kolom maksimum MySQL.
Pada MySQL 5.6.9, jumlah kolom maksimum adalah 1017, yang akan membuat halaman edit produk admin menjadi perayapan yang tidak dapat digunakan yang menyebabkan dampak parah pada rendering produk di bagian depan.

Cara kerja Magento:
Magento memuat metadata atribut dan kemudian nilai untuk atribut tersebut. Entitas harus menyimpan informasi ini dalam memori. Namun, karena metadata atribut disimpan dalam cache Magento, efek terburuk akan terlihat pada pemuatan halaman pertama.

Sekali lagi, KnockoutJS tidak dirancang untuk kinerja tinggi..
Larutan:
Karena Magento mencoba meneruskan semua atribut dari satu kategori, timpa pembuat permintaan, persempit ke yang spesifik yang terkait dengan kategori dan berikan fitur pemetaan ke kategori tersebut. Jadi, setiap kali halaman kategori dimuat, kami hanya memuat atribut kategori itu.
Buat () fungsi harus diganti untuk membuat permintaan dinamis berdasarkan halaman pencarian kategori, melewati ID kategori atau ID merek atau ID penjual.

Sesuai dokumentasi Magento, batas untuk atribut produk adalah 2000 dengan 500 dapat difilter. Lebih dari 500 atau lebih dari 10 ribu atribut produk menyebabkan beberapa penurunan performa di etalase dan admin Magento (termasuk masalah yang dilaporkan).
Singkatnya, praktik terbaik berikut harus diingat saat menangani sejumlah besar atribut produk:
- Gunakan template Produk yang berbeda (set atribut) untuk produk yang berbeda.
- Di Admin Magento, ada bidang "Gunakan di Daftar Produk." Aktifkan hanya atribut yang kami rencanakan untuk diaktifkan di halaman kategori
- Manfaatkan opsi khusus dan produk kompleks untuk manajemen variasi
- Minimalkan jumlah atribut yang dapat dicari
- Hapus properti produk yang tidak digunakan.
- Simpan dan kelola atribut yang tidak terkait dengan perdagangan dalam sistem PMS eksternal
Sementara solusi ini diperkenalkan sebagai solusi untuk masalah yang sebenarnya, dalam jangka panjang, platform eCommerce harus ditingkatkan untuk mengatasi tantangan yang ditimbulkan oleh volume data produk yang terus meningkat yang datang dengan pasar online.
Di McFadyen Digital, kami telah mengembangkan pasar online selama lebih dari 15 tahun dan terus-menerus terpapar pada platform yang tersedia. Layanan teknologi kami untuk operator marketplace mencakup tinjauan arsitektur, analisis vendor, implementasi, dan banyak lagi. Untuk mengetahui lebih banyak, kunjungi solusi teknologi pasar kami. Untuk informasi lebih lanjut tentang semua yang Anda butuhkan untuk membangun dan mengelola toko Commerce yang disesuaikan. Kunjungi https://devdocs.magento.com/
tentang Penulis
Sharada Rao adalah Insinyur Perangkat Lunak Senior di McFadyen Digital. Dia suka belajar dan menerapkan teknologi baru. Seorang pengembara dan gastronomi yang rajin, Sharada suka menjelajahi tempat-tempat baru. Dia tinggal bersama suami dan putranya yang berusia 11 bulan di Bengaluru. Selama bertugas di McFadyen Digital, dia telah menjadi bagian dari beberapa proyek implementasi eCommerce/marketplace yang besar.