couchdb - 在 CouchDB 上实现用户评分/收藏夹

标签 couchdb mapreduce

我正在考虑将 CouchDB 用于即将推出的网站,但就如何为该网站实现用户评分系统而言,我有点困惑。基本上,每个内容项都可以由给定用户评分。哪种方式在 CouchDB 模型中最有意义?我认为最干燥和最合乎逻辑的方法是拥有 3 种不同的文档类型,内容、用户和一个看起来像这样的 user_rating 文档。

{
用户 ID:“用户 ID”
content_id: "内容 ID"
评分:6
}

然后,我将创建一个 View ,其中 map 是由内容文档 id 键控的所有内容文档和 user_rating 文档的集合,其中 reduce 计算评级的平均值并返回由内容文档 ID 键控的内容文档。

这是最好的方法吗?我还没有找到太多关于 CouchDB 最佳实践的资源,所以我对所有这些东西都不太确定。

我的结论:
下面接受的答案,这是我几乎要实现的工作,但要注意,文档需要由内容文档 id 键控,这使得基于其他文档属性的高级查询变得很麻烦。我将回到 SQL 来满足我在这个应用程序中的需要。

最佳答案

听起来你有一个合理的想法。 CouchDB 太新了,我认为最佳实践需要一段时间才能动摇。

像这样的 map/reduce 对可能会形成一个合理的起点。

map :

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 上实现用户评分/收藏夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/501304/

相关文章:

node.js - 通过 cradle 将参数传递给 couchdb 中的 View

python - 在 Hadoop 上运行 MapReduce 程序仅输出一半的数据

hadoop - Mapreduce作业,它从多个文件中获取输入,并将输出显示为word(文件列表)

java - 运行文件的 Hadoop 错误给出了错误

hadoop - 如何指定应在其上运行mapreduce的各个tasktrackers(节点)?

mapreduce - CouchDB 的 stale=update_after 性能如何?

c# - 使用 HttpWebRequest.GetResponse 时出现 KeepAliveException

javascript - 带有 websocket 接口(interface)的数据库?

http - CouchDB/MochiWeb : negative effect of persistent connections

apache - NoClassDefFoundError HBase与YARN