5 mongodb
我有一个大型 MongoDB 集合,其中包含一个 userID 和一个计数器,表示该用户随时间的总点击量。我希望能够计算给定的用户百分比。
从概念上讲,我想做的是对集合进行排序,然后获取该给定用户记录的行号,然后将该数字除以集合的总数:
percentile = row_index / total_rows;
Run Code Online (Sandbox Code Playgroud)
这将如何在 MongoDB 中完成?
这里的简单解决方案是按总点击量降序排序。然后,您可以通过光标浏览结果,直到找到您的用户 ID。
显然,如果您必须经常运行该解决方案,则它不会提供出色的性能。获得“前 20 名”很容易,但获得“后 25%”的计算量要大得多。
如果此查询确实很重要或者您经常运行它,则有几种解决方法。
我认为最简单的方法就是运行一项定期为您构建百分位数的工作。基本上,您构建了一个如下所示的集合:
{ percent : 95, score : 888888 }
{ precent : 90, score : 777777 }
...
Run Code Online (Sandbox Code Playgroud)
要获得用户的百分位数,您只需在相对较小的集合中查找他们的分数即可。要更新这些分数,只需定期运行循环所有用户的作业即可。
| 归档时间: |
|
| 查看次数: |
4305 次 |
| 最近记录: |