我试图在MongoDB中建立一个投票系统。你可以想象它是一个类似于reddit的投票系统。要求:
我在这里看到两种方法(如果我错了,请纠正我!):
我还玩过把选票嵌入到一个单独的集合中按小时分组的“水桶”中的想法。
第一条对于第二项要求来说是非常快的,但我不知道在这种情况下第三项要求是否可行。
对于第二项要求,第二项的速度要慢一些,我不知道第三项要求的表现如何/如何实现(地图减少?)
基本上,我似乎需要从第3号需求的快速解决方案开始,然后确保第2号需求不会太慢。想法?
势解
采用嵌入式方法。为每个对象添加一个参数,用于小时得分、日得分、月得分等。添加另一个布尔参数最近投票,最近每小时和最近一天。创建一个在对象上运行map-还原的脚本来计算和更新这些参数。
脚本将以三个变体通过cron运行。
这样做的目的是最大限度地减少对与正在运行的分数计算脚本无关的对象的不必要处理(每小时只应在上次运行时已对其进行投票的对象上运行,或者对未被投票且需要重置为0的对象运行)。另一个很好的好处是*-分数值不需要仅仅根据对象投票来计算。例如,您可以包括页面视图或其他任何内容。对这种方法的想法?
发布于 2011-08-15 10:23:39
请查看Mongo中的“原子操作人员投票”食谱:http://cookbook.mongodb.org/patterns/votes/。它没有告诉您如何实现聚合,但是您也许可以通过创建表示要投票的对象的驻留对象来实现这一点,但是要在特定的时间内这样做。
发布于 2011-08-12 22:48:41
如果您使用的是红宝石,则有一个用于Mongoid & MongoMapper的蒙戈插件。
https://stackoverflow.com/questions/7046462
复制相似问题