التعامل مع الإسناد كبير الحجم باستخدام Magento 2

نشرت: 2022-08-30

التعامل مع الإسناد كبير الحجم باستخدام Magento 2

توسيع إمكانيات Magento 2 لدعم عدد كبير من إجمالي السمات (أكبر من 10000) وعدد كبير من السمات لكل مجموعة سمات (أكبر من 1000 لكل مجموعة)

مقدمة

استحوذت الأسواق عبر الإنترنت على 67٪ من التجارة الإلكترونية العالمية في عام 2021. وتم إنفاق 3.23 تريليون دولار عالميًا على أفضل 100 سوق على الإنترنت. يضم سوق وول مارت أكثر من 100000 بائع ، بينما تبيع أمازون ما يقرب من 350 مليون منتج في السوق. يجب أن تتوسع منصات التجارة الإلكترونية التقليدية بسرعة كبيرة لمعالجة الأحجام الهائلة من البيانات التي يحتاجون إليها الآن للتعامل معها.

مع تزايد عدد البائعين على متن الطائرة في السوق ، تزداد مجموعة المنتجات المعروضة. يتسبب هذا في تحديات فريدة في تصنيف هذه المنتجات دون التأثير على الأداء العام وسهولة الاستخدام. كان أحد هذه التحديات التي واجهها فريق McFadyen Digital أثناء تطبيق السوق مؤخرًا هو التعامل مع سمات المنتجات العديدة التي تأتي مع منتجات البائع.

قمنا بتنفيذ سوق B2B على Magento و Webkul لأحد عملائنا في الولايات المتحدة لبيع منتجات التثبيت الصناعية. مع انضمام المزيد من البائعين ، زادت مجموعة المنتجات ، وكذلك عدد سمات المنتج الفريدة التي جلبها كل منهم. تجاوز رقم السمة ما توصي به Magento ، وواجهنا مشكلات كبيرة في الأداء. أجرى خبراؤنا الفنيون تحليلاً مفصلاً للمشكلة وتمكنوا من وضع بعض الحلول للتعامل مع الموقف. سنناقش اثنين من هؤلاء في هذه المدونة.

.

استيراد المنتج:

توصي Magento بتقسيم العديد من السمات إلى مجموعات سمات متعددة. ولكن إذا أصبح عدد مجموعات السمات كبيرًا أيضًا ، فسيؤثر ذلك سلبًا على أداء المنتج واستيراد السمات. يحدث هذا لأن Magento يقوم بتحميل جميع السمات ومجموعات السمات مسبقًا في الذاكرة. على سبيل المثال ، افترض أن هناك 1000 مجموعة سمات ، ونحن نستورد مجموعة فرعية فقط من المنتجات. في هذه الحالة ، لا يزال Magento يقوم بتحميل جميع السمات ومجموعات السمات المتاحة ، مما يزيد من استهلاك الذاكرة ، وبالتالي زيادة وقت عملية الاستيراد. عند استيراد المنتجات ، يتم استدعاء طريقة AbstractType init ، والتي تقوم بتحميل كافة السمات المتاحة في قاعدة بيانات المنتج. أولاً ، يتم تحميل جميع السمات ، ثم مجموعات السمات ، ثم يتم ترتيبها بناءً على معرف السمة ..

بائع / ماجنتو / وحدة كتالوج-استيراد-تصدير / نموذج / استيراد / منتج / النوع / AbstractType

المحلول:

الحل السهل لهذه المشكلة هو تحميل مجموعة السمات / المنتجات المطلوبة فقط من ملف CSV الافتراضي بدلاً من محاولة إجراء استيراد كامل. على سبيل المثال ، لنفترض أننا نحاول استيراد فئة واحدة من المنتجات. في هذه الحالة ، نقوم بتحميل السمات من تلك الفئة فقط وليس باقي السمات / السمات التي يتم تعيينها في الذاكرة.

لهذا ، قمنا بإلغاء طريقة init لنوع الاستيراد البسيط على النحو التالي:

ساعدنا هذا في تحسين الأداء بشكل ملحوظ وتم تقليل الوقت المستغرق للاستيراد بنسبة 30٪ تقريبًا.

قائمة المنتجات:

أثناء زيارة أي صفحة فئة ، يمرر Magento جميع بيانات السمات إلى Elastic Search لاسترداد تفاصيل الفئة والتجميع. تؤدي العديد من السمات إلى استهلاك عالٍ للذاكرة ، مما يؤدي إلى تدهور الأداء ..

ستقوم فئة FilterableAttributeList بتحميل جميع مجموعات السمات والسمات في فئة ما حتى إذا كان لدينا مجموعة فرعية فقط من السمات المطلوبة للتصفية على فئة معينة ..

بائع / ماجنتو / وحدة كتالوج / نموذج / طبقة / فئة / FilterableAttributeList

عندما نتواصل مع Elastic Search ، يجب أن يتم بناء الطلب بمعاملتين ، مثل ما نفعله في MySQL أثناء إنشاء استعلام ،

  1. معلمة المباراة
  2. التجميع ، الذي يجمع كل البيانات التي نطلبها

يستخدم Magento التجميع كتصفح طبقة ويعيد جميع البيانات ، لذلك سيزداد عدد التجميع عندما يكون لدينا كمية كبيرة من البيانات. سيؤثر هذا على Elastic Search عندما نحاول الحصول على المزيد من بيانات التجميع في استعلام واحد.

يمكن أن يتسبب هذا أيضًا في حدوث مشكلات في الفهرسة في جداول الكيانات المسطحة. جداول الكيانات المسطحة ليست لكل مجموعة سمات ، وبالتالي فهي عبارة عن تجميع لجميع السمات التي يمكن أن تصل إلى حدود العمود القصوى في MySQL.

اعتبارًا من MySQL 5.6.9 ، يكون الحد الأقصى لعدد الأعمدة هو 1017 ، مما يجعل صفحة تحرير منتج المسؤول زحفًا غير قابل للاستخدام مما يتسبب في تأثير شديد على عرض المنتجات على الواجهة الأمامية.

كيف يعمل Magento:

يقوم Magento بتحميل البيانات الوصفية للسمة ثم قيمة تلك السمة. سيتعين على الكيانات تخزين هذه المعلومات في الذاكرة. ومع ذلك ، نظرًا لتخزين البيانات الوصفية للسمات في ذاكرة التخزين المؤقت لـ Magento ، ستظهر أسوأ التأثيرات عند تحميل الصفحة الأولى.

مرة أخرى ، لم يتم تصميم KnockoutJS للأداء العالي ..

المحلول:

نظرًا لأن Magento يحاول تمرير جميع سمات فئة واحدة ، وتجاوز منشئ الطلب ، وتضييق نطاقها إلى السمات المحددة المتعلقة بالفئة وتوفير ميزة تعيين للفئة. لذلك ، عندما يتم تحميل صفحة الفئة ، نقوم بتحميل سمات تلك الفئة فقط.

يجب تجاوز وظيفة الإنشاء () لإنشاء طلب ديناميكي استنادًا إلى صفحة بحث الفئة ، وتمرير معرف الفئة أو معرف العلامة التجارية أو معرف البائع.

وفقًا لوثائق Magento ، فإن الحد الأقصى لسمات المنتج هو 2000 مع إمكانية تصفية 500. تؤدي أكثر من 500 سمة منتج أو أكثر من 10 آلاف إلى حدوث العديد من تدهور الأداء في واجهة المتجر ومسؤول Magento (بما في ذلك المشكلة المبلغ عنها).

باختصار ، يجب مراعاة أفضل الممارسات التالية أثناء التعامل مع عدد كبير من سمات المنتج:

  • استخدم قوالب منتجات مختلفة (مجموعات سمات) لمنتجات مختلفة.
  • في Magento Admin ، يوجد حقل "استخدام في قائمة المنتجات". قم بتمكين السمات التي نخطط لتمكينها في صفحة الفئة فقط
  • الاستفادة من الخيارات المخصصة والمنتجات المعقدة لإدارة الاختلافات
  • قلل عدد السمات القابلة للبحث
  • إزالة خصائص المنتج غير المستخدمة.
  • تخزين وإدارة السمات غير المتعلقة بالتجارة في أنظمة PMS الخارجية

بينما تم تقديم هذه الحلول كحلول للمشكلة الفعلية ، على المدى الطويل ، سيتعين على منصات التجارة الإلكترونية التوسع لمواجهة هذه التحديات التي تفرضها الأحجام المتزايدة باستمرار لبيانات المنتجات التي تأتي مع الأسواق عبر الإنترنت.

في McFadyen Digital ، نعمل على تطوير أسواق عبر الإنترنت لأكثر من 15 عامًا ونتعرض باستمرار للمنصات المتاحة. تشمل خدماتنا التكنولوجية لمشغلي السوق مراجعة البنية وتحليل البائعين والتنفيذ والمزيد. لمعرفة المزيد قم بزيارة حلول تكنولوجيا السوق لدينا. لمزيد من المعلومات حول كل ما تحتاجه لإنشاء وإدارة متجر تجاري مخصص. قم بزيارة https://devdocs.magento.com/

عن المؤلف

Sharada Rao هي كبيرة مهندسي البرمجيات في McFadyen Digital. إنها مغرمة بتعلم وتطبيق التقنيات الجديدة. مسافر متعطش وذوق رفيع ، يحب شاردا استكشاف أماكن جديدة. تقيم مع زوجها وابنها البالغ من العمر 11 شهرًا في بنغالورو. خلال فترة عملها مع McFadyen Digital ، كانت جزءًا من بعض مشاريع تنفيذ التجارة الإلكترونية / السوق ذات التذاكر الكبيرة.