数据库设计 – 在MongoDB中建立投票系统的最佳方式
我试图在MongoDB中建立投票系统.你可以想象它是一个类似于reddit的投票系统.要求:
>投票连接到对象 我在这里看到两种方法(如果我错了,纠正我的话): >在每个对象中嵌入投票文件数组.我可能会存储投票的用户的ObjectId,投票金额和投票时间. voterId将是投票数组中每个嵌入式投票文档的关键,以允许快速哈希查询. 我也玩过一个想法,将投票嵌入到一个单独的集合中按小时分组的“桶”. 对于第2号要求,第1号将非常快,但是我不知道在这种情况下是否有可能要求3. 对于第2号要求,第2号会更慢,我不知道要求3(如何实现)的性能将如何? 基本上看来,我需要从第3号要求开始一个相当快速的解决方案,然后确保2号要求不会太慢.想法? 潜在的解决方案 使用嵌入式方法.为每个对象添加一个参数,用于小时分,每日评分,每月评分等.添加最近投票,最近每小时和最近每日的布尔参数.创建一个在对象上运行map-reduce的脚本来计算和更新这些参数. 脚本将通过cron在三个变体中运行. > 10分钟间隔:计算具有先前小时分数的对象的小时分数> 0最近投票= OR的OR对象.运行此脚本后,最近设置为= false.设置recent-hourly = true. 这个想法是对与运行的分数计算脚本无关的对象进行最小化不必要的处理(每小时只能运行在上次运行小时后投票的对象上,或者没有被投票的对象)并需要重置为0).另一个不错的好处是,*值不仅仅是要根据对象投票来计算.您可以包括页面浏览,例如,或其他.对这种做法的想法? 解决方法
在Mongo Cookbook:
http://cookbook.mongodb.org/patterns/votes/中查看原子运算符的投票食谱.它不告诉你如何实现聚合,但是您也可以通过使代表对象的备用对象来投票,但是对于特定的时间段.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |