การจัดการการระบุแหล่งที่มาปริมาณมากด้วย Magento 2
เผยแพร่แล้ว: 2022-08-30การจัดการการระบุแหล่งที่มาปริมาณมากด้วย Magento 2
การขยายความสามารถของ Magento 2 เพื่อรองรับแอตทริบิวต์ทั้งหมดจำนวนมาก (มากกว่า 10,000 รายการ) และแอตทริบิวต์จำนวนมากต่อชุดแอตทริบิวต์ (มากกว่า 1,000 รายการต่อชุด)
บทนำ
ตลาดออนไลน์คิดเป็น 67% ของอีคอมเมิร์ซทั่วโลกในปี 2564 มีการใช้จ่าย 3.23 ล้านล้านดอลลาร์ทั่วโลกในตลาดออนไลน์ 100 อันดับแรก ตลาดของ Walmart มีผู้ขายมากกว่า 100,000 ราย ในขณะที่ Amazon ขายผลิตภัณฑ์เกือบ 350 ล้านรายการในตลาดของตน แพลตฟอร์มอีคอมเมิร์ซแบบดั้งเดิมต้องขยายขนาดอย่างรวดเร็วเพื่อประมวลผลข้อมูลปริมาณมหาศาลที่พวกเขาต้องจัดการในตอนนี้
เนื่องจากมีผู้ขายจำนวนมากขึ้นเรื่อยๆ เข้าสู่ตลาด การเลือกสรรผลิตภัณฑ์ที่นำเสนอจึงเพิ่มขึ้น สิ่งนี้ทำให้เกิดความท้าทายเฉพาะในการจัดหมวดหมู่ผลิตภัณฑ์เหล่านี้โดยไม่กระทบต่อประสิทธิภาพโดยรวมและความสะดวกในการใช้งาน ความท้าทายอย่างหนึ่งที่ทีม McFadyen Digital เผชิญระหว่างการใช้งานตลาดล่าสุดคือการจัดการคุณลักษณะของผลิตภัณฑ์มากมายที่มาพร้อมกับผลิตภัณฑ์ของผู้ขาย
เราใช้ตลาด B2B บน Magento และ Webkul สำหรับหนึ่งในลูกค้าของเราในสหรัฐอเมริกาที่จำหน่ายผลิตภัณฑ์รัดสายทางอุตสาหกรรม เมื่อมีผู้ขายเข้าร่วมมากขึ้น การแบ่งประเภทผลิตภัณฑ์ก็เพิ่มขึ้น และจำนวนของคุณลักษณะของผลิตภัณฑ์ที่ไม่ซ้ำกันก็เพิ่มขึ้นเช่นกัน จำนวนแอตทริบิวต์เกินที่วีโอไอพีแนะนำ และเราประสบปัญหาด้านประสิทธิภาพที่สำคัญ ผู้เชี่ยวชาญด้านเทคนิคของเราได้ทำการวิเคราะห์ปัญหาโดยละเอียดและสามารถแก้ไขปัญหาชั่วคราวเพื่อจัดการกับสถานการณ์ได้ เราจะพูดถึงสองสิ่งนี้ในบล็อกนี้
.
การนำเข้าสินค้า:
Magento แนะนำให้แบ่งแอตทริบิวต์จำนวนมากออกเป็นชุดแอตทริบิวต์หลายชุด แต่ถ้าจำนวนของชุดแอตทริบิวต์มีมากก็จะส่งผลเสียต่อประสิทธิภาพของผลิตภัณฑ์และการนำเข้าแอตทริบิวต์ สิ่งนี้เกิดขึ้นเนื่องจาก Magento โหลดแอตทริบิวต์และชุดแอตทริบิวต์ทั้งหมดไว้ในหน่วยความจำล่วงหน้า ตัวอย่างเช่น สมมติว่ามีชุดแอตทริบิวต์ 1,000 ชุด และเรานำเข้าเฉพาะชุดย่อยของผลิตภัณฑ์ ในกรณีนั้น Magento ยังคงโหลดแอตทริบิวต์และชุดคุณลักษณะทั้งหมดที่มีอยู่ ซึ่งจะเพิ่มการใช้หน่วยความจำ ซึ่งจะเป็นการเพิ่มเวลาในกระบวนการนำเข้า เมื่อนำเข้าผลิตภัณฑ์ จะเรียกเมธอด AbstractType init ซึ่งจะโหลดแอตทริบิวต์ทั้งหมดที่มีอยู่ในฐานข้อมูลผลิตภัณฑ์ ขั้นแรก โหลดแอตทริบิวต์ทั้งหมด จากนั้นจึงตั้งค่าแอตทริบิวต์ จากนั้นจัดเรียงตามรหัสแอตทริบิวต์
vendor/magento/module-catalog-import-export/Model/Import/Product/Type/AbstractType

วิธีการแก้:
วิธีแก้ปัญหาอย่างง่ายสำหรับปัญหานี้คือการโหลดเฉพาะชุดแอตทริบิวต์ /products ที่จำเป็นจากไฟล์ CSV เริ่มต้น แทนที่จะพยายามนำเข้าแบบเต็ม ตัวอย่างเช่น สมมติว่าเรากำลังพยายามนำเข้าผลิตภัณฑ์ประเภทเดียว ในกรณีนั้น เราโหลดแอตทริบิวต์จากหมวดหมู่นั้นเท่านั้น และไม่ใช่แอตทริบิวต์ที่เหลือ /attributes ที่ตั้งค่าไว้ในหน่วยความจำ
สำหรับสิ่งนี้ เราแทนที่เมธอด init ของประเภท Simple Import ดังนี้::

สิ่งนี้ช่วยให้เราปรับปรุงประสิทธิภาพได้อย่างน่าทึ่ง และเวลาที่ใช้ในการนำเข้าลดลงเกือบ 30%
รายการสินค้า:
ขณะเยี่ยมชมหน้าหมวดหมู่ใดๆ Magento จะส่งข้อมูลแอตทริบิวต์ทั้งหมดไปยัง Elastic Search เพื่อดึงข้อมูลหมวดหมู่และรายละเอียดการรวม คุณลักษณะหลายอย่างทำให้ใช้หน่วยความจำสูง ส่งผลให้ประสิทธิภาพลดลง..
คลาส FilterableAttributeList จะโหลดแอตทริบิวต์และชุดแอตทริบิวต์ทั้งหมดในหมวดหมู่ แม้ว่าเราจะมีเพียงชุดย่อยของแอตทริบิวต์ที่จำเป็นในการกรองหมวดหมู่เฉพาะ
vendor/magento/module-catalog/Model/Layer/Category/ FilterableAttributeList
เมื่อเราเชื่อมต่อกับ Elastic Search คำขอจะต้องสร้างด้วยสองพารามิเตอร์ เช่น สิ่งที่เราทำใน MySQL ขณะสร้างการสืบค้น
- จับคู่พารามิเตอร์
- การรวมเอาข้อมูลทั้งหมดที่เราต้องการ
Magento ใช้การรวมเป็นการนำทางเลเยอร์และส่งคืนข้อมูลทั้งหมด ดังนั้นจำนวนการรวมจะเพิ่มขึ้นเมื่อเรามีข้อมูลจำนวนมาก การดำเนินการนี้จะส่งผลต่อ Elastic Search เมื่อเราพยายามดึงข้อมูลการรวมกลุ่มมากขึ้นในการสืบค้นเดียว

นอกจากนี้ยังอาจทำให้เกิดปัญหากับการทำดัชนีในตารางเอนทิตีแบบเรียบ ตารางเอนทิตีแบบเรียบไม่ได้ต่อชุดแอตทริบิวต์ จึงเป็นการรวมแอตทริบิวต์ทั้งหมดที่สามารถเรียกใช้ในขีดจำกัดคอลัมน์สูงสุดของ MySQL
สำหรับ MySQL 5.6.9 จำนวนคอลัมน์สูงสุดคือ 1,017 ซึ่งจะทำให้หน้าแก้ไขผลิตภัณฑ์ของผู้ดูแลระบบเป็นการรวบรวมข้อมูลที่ไม่สามารถใช้งานได้ ซึ่งส่งผลกระทบอย่างรุนแรงต่อการแสดงผลของผลิตภัณฑ์ในส่วนหน้า

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

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

ตามเอกสารของ Magento ขีดจำกัดสำหรับคุณลักษณะของผลิตภัณฑ์คือ 2,000 โดยสามารถกรองได้ 500 รายการ คุณลักษณะของผลิตภัณฑ์มากกว่า 500 รายการหรือมากกว่า 10,000 รายการทำให้เกิดประสิทธิภาพการทำงานที่ลดลงหลายประการในหน้าร้านและผู้ดูแลระบบ Magento (รวมถึงปัญหาที่รายงาน)
โดยสรุปแล้ว ควรคำนึงถึงแนวทางปฏิบัติที่ดีที่สุดต่อไปนี้ในขณะที่จัดการกับคุณลักษณะของผลิตภัณฑ์จำนวนมาก:
- ใช้เทมเพลตผลิตภัณฑ์ต่างๆ (ชุดแอตทริบิวต์) สำหรับผลิตภัณฑ์ต่างๆ
- ใน Magento Admin จะมีช่อง "ใช้ในรายการผลิตภัณฑ์" เปิดใช้งานเฉพาะแอตทริบิวต์ที่เราวางแผนที่จะเปิดใช้งานในหน้าหมวดหมู่
- ใช้ประโยชน์จากตัวเลือกที่กำหนดเองและผลิตภัณฑ์ที่ซับซ้อนสำหรับการจัดการรูปแบบต่างๆ
- ลดจำนวนแอตทริบิวต์ที่ค้นหาได้ให้น้อยที่สุด
- ลบคุณสมบัติของผลิตภัณฑ์ที่ไม่ได้ใช้
- จัดเก็บและจัดการแอตทริบิวต์ที่ไม่เกี่ยวข้องกับการค้าในระบบ PMS ภายนอก
แม้ว่าโซลูชันเหล่านี้จะถูกนำมาใช้เป็นวิธีแก้ปัญหาชั่วคราว แต่ในระยะยาว แพลตฟอร์มอีคอมเมิร์ซจะต้องขยายขนาดขึ้นเพื่อจัดการกับความท้าทายเหล่านี้ที่เกิดจากปริมาณข้อมูลผลิตภัณฑ์ที่มาพร้อมกับตลาดออนไลน์ที่เพิ่มมากขึ้นเรื่อยๆ
ที่ McFadyen Digital เราได้พัฒนาตลาดออนไลน์มาเป็นเวลากว่า 15 ปี และได้สัมผัสกับแพลตฟอร์มที่มีอยู่อย่างต่อเนื่อง บริการเทคโนโลยีของเราสำหรับผู้ดำเนินการตลาดรวมถึงการตรวจสอบสถาปัตยกรรม การวิเคราะห์ผู้ขาย การนำไปใช้งาน และอื่นๆ หากต้องการทราบข้อมูลเพิ่มเติม โปรดไปที่โซลูชันเทคโนโลยีการตลาดของเรา สำหรับข้อมูลเพิ่มเติมเกี่ยวกับทุกสิ่งที่คุณต้องการในการสร้างและจัดการร้านค้า Commerce ที่กำหนดเอง เยี่ยมชม https://devdocs.magento.com/
เกี่ยวกับผู้เขียน
Sharada Rao เป็นวิศวกรซอฟต์แวร์อาวุโสที่ McFadyen Digital เธอชอบการเรียนรู้และใช้เทคโนโลยีใหม่ๆ นักเดินทางตัวยงและนักชิมอาหาร ชาราดะชอบสำรวจสถานที่ใหม่ๆ เธออาศัยอยู่กับสามีและลูกชายวัย 11 เดือนในเมืองเบงกาลูรู ระหว่างที่เธอทำงานกับ McFadyen Digital เธอได้เป็นส่วนหนึ่งของโครงการนำอีคอมเมิร์ซ/ตลาดกลางที่มีราคาสูงมาใช้งาน