从MongoDB集合中选择加权随机文档

时间:2013-04-16 02:42:11

标签: mongodb random

我知道MongoDB的随机记录选择是not actually supported,但我找到了few ways来解决它。

但是,我想选择加权随机项。这是fairly easy with mySql,但我不确定使用Mongo的最佳方式。

我正在解决的问题是:我有一个收集抽奖活动的集合,根据用户分享/推广比赛的次数,他们得到一个“额外的条目”,以增加他们获胜的机会。我没有复制用户的条目,而是有一个记录他们共享比赛次数的字段。我想用这个数字作为乘数来加权随机选择“胜利者”。

以下是我想到的一些方法:

  1. Cookbook random selection method上使用变体,生成随机数的数组(等于乘数),以便记录更接近查询的随机点(但是Mongo没有不支持数组[多键]索引,是吗?所以它可能很慢)
  2. 使用地理空间查询的Cookbook随机方法的另一个变体,使用半径等于乘数的圆形多边形而不是简单的随机数(如果这是可能的话,我从未使用过MongoDB地理索引和查询)
  3. 展开新临时集合中的条目,然后使用MongoDB随机选择方法之一
  4. 避免这个问题,首先将重复的条目存储在Mongo中,然后定期随机选择thingamajig
  5. 在mySql中保留MongoID及其权重乘数的单独索引(经常同步或按需生成)并使用mySql进行随机加权选择
  6. 在PHP中查询一个巨大的数组并希望它不会耗尽内存! :/
  7. 我在这里做什么吗?还有其他任何建议,对于我遗漏的明显解决方案?我打算做一些实验,看看哪些有用,但欢迎任何有关我最初想法的反馈!!

    性能需要“好”不是很好,因为这些竞赛中没有一个可能会有百万条目(通常更像是几十万),所以公平性/准确性是比速度更重要。感谢。

0 个答案:

没有答案