我知道MongoDB 实际上并不支持随机记录选择,但我找到了一些方法来解决它。

但是,我想选择一个加权随机项。 使用mySql这很容易 ,但我不确定使用Mongo的最佳方法。

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

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

  1. 使用Cookbook随机选择方法的变体,生成一个随机数组 (等于乘数),以便更有可能记录在查询的随机点附近(但Mongo不支持数组[多键]索引,是的?所以它可能很慢)
  2. 使用地理空间查询的Cookbook随机方法的另一个变体,使用半径等于乘数的圆形多边形而不是简单的随机数(如果这是可能的话,我从未使用过MongoDB地理索引和查询)
  3. 展开新临时集合中的条目,然后使用MongoDB随机选择方法之一
  4. 避免这个问题,首先将重复的条目存储在Mongo中,然后定期随机选择thingamajig
  5. 在mySql中保留MongoID及其权重乘数的单独索引(要么经常同步,要么按需生成),并使用mySql进行随机加权选择
  6. 在PHP中查询一个巨大的数组并希望它不会耗尽内存! :/

我在这里做什么吗? 还有其他任何建议,对于我遗漏的明显解决方案? 我打算做一些实验,看看哪些有用,但欢迎任何有关我最初想法的反馈!

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

  ask by thaddeusmt translate from so

本文未有回复,本站智能推荐: