mango example batch_size alldocs all couchdb mapreduce

couchdb - example - pouchdb batch_size



Implementando clasificaciones de usuarios/favoritos en CouchDB (3)

Bueno, Damien Katz , uno de los desarrolladores de Couchdb, da una descripción de un proceso similar , por lo que puede que lo hagas de la forma en que la gente de Couchdb lo intenta.

Estoy considerando usar CouchDB para un sitio próximo, pero estoy un poco confundido en cuanto a cómo implementar un sistema de calificaciones de usuario para el sitio. Básicamente, cada elemento de contenido puede ser calificado por un usuario determinado. ¿Qué forma de hacer esto tiene más sentido en el modelo CouchDB? Creo que la manera más práctica y más segura sería tener 3 tipos de documentos diferentes, Contenido, Usuarios y un documento de usuario que se parece a esto.

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

Luego, crearía una vista en la que el mapa era el conjunto de todos los documentos de contenido y documentación de usuario etiquetados por los identificadores de documentos de contenido, y donde la reducción contaba el promedio de las calificaciones y devolvía el documento de contenido codificado por la ID del documento de contenido.

¿Es esa la mejor manera de hacer esto? Todavía no he encontrado mucho en cuanto a los recursos en las mejores prácticas de CouchDB, así que estoy bastante inseguro de todo esto.

Mi conclusión: la respuesta aceptada a continuación, que es lo que prácticamente iba a implementar, funciona, pero cuidado, los documentos deben estar codificados por la id del documento de contenido, lo que hace que las consultas avanzadas basadas en otras propiedades del documento sean problemáticas. Volveré a SQL para mis necesidades en esta aplicación.


Escribí sobre una situación similar (aunque es más simple que tu ejemplo). Estaba agregando clasificaciones de artículos a mi blog y decidí usar CouchDB para almacenar las clasificaciones. Creo que tienes la idea correcta.

Aquí hay un pensamiento, sin embargo. ¿Te importa quién calificó qué, como para mostrar en alguna parte o seguir? Si es así, continúa :)

Si no es así, ¿por qué no simplemente actualiza el atributo de rating del documento de contenido a += 1 (y quizás el atributo rated del documento del usuario a .push( doc._id ) si desea evitar que un usuario .push( doc._id ) contenido más de una vez).

Esto simplificaría enormemente el manejo de su documento y le daría un mejor rendimiento cuando ''lea'' clasificaciones para mostrar en las páginas (dado que ya tendrá el documento de contenido). Esto sería a costa de encarecer el proceso real de clasificación. (documentos más grandes que van al servidor, etc.).

Me parece que a veces CouchDB (y otras bases de datos de valores-clave) se encuentran en su mejor momento cuando las cosas no están totalmente normalizadas.


Parece que tienes una idea razonable. CouchDB es tan nuevo que creo que tomará un tiempo para que las mejores prácticas desaparezcan.

Un par de mapa / reducción como este podría formar un punto de partida razonable.

mapa:

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

reducir:

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

NB: Esa función de map requiere agregar el tipo apropiado a su modelo de Rating :

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