5

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

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

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

以下是我想到的几种方法:

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

我在这里做什么?对于我缺少的明显解决方案,还有其他建议吗?我将做一些试验,看看什么是有效的,但欢迎对我最初的想法提出任何反馈!

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

4

0 回答 0