خوارزمية لتحديد الأماكن الأكثر شعبية من قاعدة البيانات

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

  •  01-10-2019
  •  | 
  •  

سؤال

لدينا موقع على شبكة الانترنت الذي يحتوي على قاعدة بيانات الأماكن.لكل مكان المستخدمين لدينا هي قادرة على اتخاذ واحد من اتبع الإجراءات التي نسجل:

  1. عرض - عرض الملف الشخصي
  2. تصنيف الدرجة على مقياس من 1-5 نجوم
  3. مراجعة - مراجعة ذلك
  4. الانتهاء - العلامة التي كانوا هناك
  5. قائمة علامة أنها ترغب في الذهاب إلى هناك
  6. المفضلة - مارك أنه واحد من المفضلة

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

  • الآراء
  • التقييم
  • avg_rating
  • الانتهاء
  • مفضلة
  • المفضلة

ما نريد أن تكون قادرة على القيام به هو إنشاء قوائم من أهم الأماكن باستخدام المعلومات الواردة أعلاه.وحبذا لو تريد أن تكون قادرة على توليد هذه القائمة باستخدام بسيطة نسبيا استعلام SQL دون الحاجة إلى القيام بأي يغوورك لحساب حقول إضافية أو كومة رتبة الأماكن ضد بعضها البعض.أن يقال, لأن لدينا حوالي 50 ، 000 الأماكن التي يمكن أن تعمل ليلا وظيفة كرون لحساب بعض المجالات مثل التصنيف على فئات مختلفة إذا كان من شأنه إحداث تغيير ذي مغزى في النتائج الإجمالية من أعلى الأماكن.

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

شيء واحد هو أن نلاحظ أنه في هذا الوقت نحن أقل قلقا مع حداثة من مكان الشعبية - معنى أن تبحث في المعلومات المجمعة على ما يرام و أن المزيد من البيانات الأخيرة لا تحتاج إلى مرجح بشكل أكبر.

شكرا مقدما على المساعدة و النصيحة!

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

المحلول

الصيغة الدقيقة المفضلة في حاجة إلى أن يأتي منك ، سوف نسميها f(x).
من أجل التنفيذ الفعلي أود أن أضيف popularity_score الميدانية التي أود أن حساب كما قلت من ليلا وظيفة كرون باستخدام f(x) لكل صف.

ثم هو ببساطة حالة من القيام "حدد اسم مكان من جدول ترتيب حسب popularity_score desc".

حسنا دعنا تعطيه طعنة popularity_score = (المفضلة * 3 + اكتمل * 2 + مفضلة) * تصنيف * عرض / AVG_VIEWS_OF_ALL_PROFILES

نصائح أخرى

ليس لدي رأي في كيف تزن الأمور.

وقال لماذا لا مجرد إضافة شعبية العمود إلى الموقع الطاولة ؟ فجأة استعلام SQL بسيطة بشكل لا يصدق.

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

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

إذا كنت ذكي كنت قد تكون قادرة على ابتكار بسيط بما فيه الكفاية الصيغة بحيث شعبية يمكن تتبع في الوقت الحقيقي.على سبيل المثال, إذا نحن فقط يهتم متوسط التقييم, يمكنك تعديل تصنيف متوسط مع ثلاثة متغيرات:الحالي تصنيف متوسط عدد مرات الكائن وقد تم تصنيف جديد تصنيف القيمة.

بالطبع الأمور أكثر تعقيدا عند البدء في خلط كم مرة كائن تم الاطلاع, استعراض, المفضله, الخ ...ولكن قد تجد أنه يمكنك وضع الأسلوب الذي حسابيا رخيصة بما فيه الكفاية التي يمكنك تحديث شعبية الشاملة قيمة فقط عن كل عمل.

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