我有以下格式的帖子一斗:在CouchBase上获取未被用户投票的帖子的最有效方法是什么?
{title:"foo",
description:"bar",
votes: {John:1, Leo:-1, ...}}
我将是那个N多票较少且不是由特定用户投票尚未帖子不断查询。问题是:我无法为每个特定用户创建视图,因此我必须设置一个过滤帖子并使用< 50票,然后以编程方式过滤那些未被特定用户投票的帖子。这是解决这个问题的正确方法吗?
我有以下格式的帖子一斗:在CouchBase上获取未被用户投票的帖子的最有效方法是什么?
{title:"foo",
description:"bar",
votes: {John:1, Leo:-1, ...}}
我将是那个N多票较少且不是由特定用户投票尚未帖子不断查询。问题是:我无法为每个特定用户创建视图,因此我必须设置一个过滤帖子并使用< 50票,然后以编程方式过滤那些未被特定用户投票的帖子。这是解决这个问题的正确方法吗?
如果你有一个可以投票,你不应该用你的方法,因为添加你需要表决许多用户:
所以,如果1个4步骤之间别人的票,你不在回写时检查CAS
,那票将会丢失。如果您检查CAS
并且投票速度非常快,您可以获得非常缓慢的表现。
的解决方案是,正如我以前说过,在JSON separatly保存票,如:
{
"type":"vote",
"voterId": 123,
"votedFor": 321,
"timestamp": 131321321
}
和存储您的项目,而不票,像这样:
{
"type":"item",
"itemId": 321,
"title": foo
}
有了这个计划你的工作只有当你需要统计他们的投票时,看看用户投了些什么项目等等。
另一个窍门:如果你需要显示投票,即在你的网站上,你也可以有“fast_v outes_count”。这意味着您可以创建单独的变量来存储每个项目的票数:votes:count:for:<itemId>
。如果有人投票项目,你应该:通过关键
votes:count:for:<itemId>
{"type":"vote","voterId": 123,"votedFor": 321, "timestamp": 131321321}
)。所以第一个值将用于在网站上显示投票。第二个将用于统计你的统计数据。
为了创建你需要的视图(地图,缩小功能),你可以参考这个manual,它是一个例子。如果你是新来的Map/Reduce首先尝试创建一个仅用于特定的itemId显示票来看,这里是个小例子:
map:
function(){
if (meta.type === "json" && doc.type === "vote"){
emit(doc.votedFor, null);
}
}
然后,如果你想计算(和)那票只需使用_count
作为减少功能。
PS:在我的应用程序,我们使用这种方法来计算的观点为视频:用于显示在网站上的信息,并与userId
,clipId
和timestamp
详细统计其他的详细clipview称为“fast_clip_view”一个键值。顺便说一句,如果你需要像“票前十项”这样的东西,请参阅question。
为什么在一些物体上存票?在你的情况下是否有可能为每个用户保存投票(可能会更简单和更有用):'''type“:”vote“,”voterId“:123,”votedForId“:1} { “类型”: “项目”, “标题”: “foo” 的}'。如果你使用你的方法,你应该处理“同时”投票,如果有许多用户可以投票,它可能会成为一个问题。 – m03geek
@Alex呃,那是令我感到困惑的事情:我以为我实际上应该避免分离那样的物体。那么,那好一点。但我真的需要一个有这些东西的指南/教程!有很多(简单)的事情不清楚,我真的没有找到官方文档!是的,有很多用户可以投票。整个事情实际上只是一个页面,你可以尽快地在帖子中投票。 – MaiaVictor