تنفيذ تصنيفات المستخدم / المفضلة على CouchDB

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

  •  20-08-2019
  •  | 
  •  

سؤال

أنا تفكر في استخدام CouchDB القادم الموقع, ولكن أنا في حيرة قليلا الآن بقدر كيفية تنفيذ نظام التقييم المستخدم للموقع.أساسا كل بند من محتوى يمكن تصنيفها من قبل مستخدم معين.ما هي الطريقة للقيام بذلك يجعل معظم معانيها في CouchDB النموذج ؟ أعتقد أن DRYest و الطريقة الأكثر منطقية أن يكون 3 مختلف أنواع المستندات محتوى المستخدمين ، user_rating doc أن يبدو شيئا من هذا القبيل.

{
  user_id: "USERID"
  content_id: "CONTENTID"
  rating: 6
}

ثم أود إنشاء طريقة عرض الخريطة كانت مجموعة من المحتوى مستندات user_rating مستندات مرتبطا حسب المحتوى دكتور معرفات ، حيث تقليل أحصت يعني من التقييم وعاد المحتوى دكتور مرتبطا حسب المحتوى doc id.

هو أن أفضل طريقة للقيام بذلك ؟ لم يتم العثور حتى الآن الكثير من الموارد على CouchDB أفضل الممارسات ولذلك أنا متأكد من كل هذه الأشياء.

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

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

المحلول

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

خريطة/تقليل زوج مثل هذا قد شكل نقطة انطلاق معقولة.

الخريطة:

function(doc) {
   if(doc.type='rating' && doc.content_id) {
     emit(doc.content_id, doc.rating);
   }
}

الحد:

function(keys, values) {
   return sum(values)/values.length
}

ملحوظة::أن map وظيفة يتطلب إضافة نوع المناسبة الخاصة بك Rating نموذج:

{
  type: 'rating',
  user_id: "USERID",
  content_id: "CONTENTID",
  rating: 6
}

نصائح أخرى

حسنا داميان كاتز, واحدة من Couchdb المطورين ، يعطي وصفا عملية مماثلة, لذا أنت يمكن أن تفعل ذلك بالطريقة التي Couchdb الناس تنوي.

كتبت عن حالة مماثلة (على الرغم من أن أبسط من المثال الخاص بك).لقد تم إضافة المادة التقييم إلى بلدي بلوق وقرر استخدام CouchDB لتخزين التقييم أنفسهم.أعتقد أن كنت قد حصلت على فكرة الحق.

وهنا يعتقد ، على الرغم من.لا يهمك من تصنيف ما ، مثل للعرض في مكان ما أو التتبع ؟ إذا كان الأمر كذلك, استمري :)

إذا لم يكن ثم لماذا لا مجرد تحديث محتوى الوثيقة rating السمة += 1 (وربما المستخدم المستند rated السمة .push( doc._id ) إذا كنت تريد منع المستخدم من تصنيف المحتوى أكثر من مرة).

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

يبدو لي أنه في بعض الأحيان CouchDB (وغير قيمة المفتاح قواعد البيانات) هي في أفضل حالاتها عندما تكون الأمور ليست تماما تطبيع.

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