الشعبية ، كيف تجعل الزيارات الجديدة تحسب أكثر من الزيارات القديمة؟

StackOverflow https://stackoverflow.com/questions/3753493

سؤال

كل منتج أ product_date_added وهو Date يحتوي الحقل على التاريخ الذي تمت إضافته. لديهم أيضا product_views وهو int الحقل الذي يحتوي على عدد المرات التي تم عرض المنتج.

لعرض المنتجات حسب الشعبية ، أنا خوارزمية لحساب عدد الزيارات في اليوم التي يتمتع بها المنتج.

SELECT 
    AVG(product_views / DATEDIFF(NOW(), product_date_added)) as avg_hits
    , product_table.* 
FROM product_table
WHERE product_available = "yes" 
GROUP BY product_id
ORDER BY avg_hits DESC

هذا يعمل ، لكن الرئيس يلاحظ الكثير من المنتجات القديمة التي تظهر أولاً. لذلك فهو يريد أساسا مناظر أحدث أن يكون لها وزن أكبر من وجهات النظر القديمة.

كان اقتراحه هو أن أي وجهات نظر أكثر من عام لا تحسب. أعتقد أنه سيتعين علي الاحتفاظ بموعد لكل عرض من أجل القيام بذلك ، والذي أعتقد أنه سيؤدي إلى إبطاء الأداء.

ما هي أفضل طريقة لإنشاء خوارزمية شعبية مثل ما يطلبه مديري؟

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

هل كانت مفيدة؟

المحلول

لن تضطر (على هذا النحو) إلى الحفاظ على تاريخ كل عرض. يمكنك بدلاً من ذلك مواكبة ما يصل إلى 366 صفًا لكل عنصر في جدول به أعمدة: Product_id ، day_of_year ، العد. كل يوم تدير مهمة إلى الصفر جميع التهم منذ عام واحد. إذا كنت لا تمانع في تغيير البيانات ، فيمكن أن تحديث هذه المهمة أيضًا حقل "العد" في العنصر نفسه لاسترجاع سريع ، بحيث لا يحتاج استعلامك إلى التغيير. product_views فقط يصبح product_views_in_the_last_year. الفترة الزمنية من يوم واحد تعسفي - أشك في أنك تهتم بأن الشعبية تستند إلى نافذة مدتها عام واحد على وجه التحديد ، لذلك أتوقع أن تكون كذلك ساعة أو أسبوع أو أسبوعين ، اعتمادًا على عدد الجرافات التي ترتديها ". إعادة على استعداد للتعامل مع.

قد يكون المخطط البديل هو استخدام تسوس أسي. تحويل حقل العد إلى نوع عشري. مرة واحدة في اليوم ، قلل من عدد كل عنصر بنسبة مئوية ثابتة (أقل من 1 ٪ ، أكثر من 0.1 ٪) ، بحيث تكون الضربة الأكثر حداثة ، كلما زادت "الوزن". لا تموت الشعبية القديمة أبدًا تمامًا ، لكن الضربات منذ عام لن تسهم كثيرًا. من المعادل لهذا المخطط ، بالمناسبة ، ترك الرمز كما هو ولكن تأكد من أن موقع الويب الخاص بك ككل يصبح أكثر شعبية مع مرور الوقت ؛-)

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

نصائح أخرى

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top