我知道MongoDB 实际上并不支持随机记录选择,但我找到了一些方法来解决它。
但是,我想选择一个加权随机项。 使用mySql这很容易 ,但我不确定使用Mongo的最佳方法。
我正在解决的问题是:我有一个收集抽奖活动的集合,根据用户分享/推广比赛的次数,他们得到一个“额外的条目”,以增加他们获胜的机会。 我没有复制用户的条目,而是有一个记录他们共享比赛次数的字段。 我想用这个数字作为乘数来加权“赢家”的随机选择。
以下是我想到的一些方法:
- 使用Cookbook随机选择方法的变体,生成一个随机数组 (等于乘数),以便更有可能记录在查询的随机点附近(但Mongo不支持数组[多键]索引,是的?所以它可能很慢)
- 使用地理空间查询的Cookbook随机方法的另一个变体,使用半径等于乘数的圆形多边形而不是简单的随机数(如果这是可能的话,我从未使用过MongoDB地理索引和查询)
- 展开新临时集合中的条目,然后使用MongoDB随机选择方法之一
- 避免这个问题,首先将重复的条目存储在Mongo中,然后定期随机选择thingamajig
- 在mySql中保留MongoID及其权重乘数的单独索引(要么经常同步,要么按需生成),并使用mySql进行随机加权选择
- 在PHP中查询一个巨大的数组并希望它不会耗尽内存! :/
我在这里做什么吗? 还有其他任何建议,对于我遗漏的明显解决方案? 我打算做一些实验,看看哪些有用,但欢迎任何有关我最初想法的反馈!
性能需要“好”不是很好,因为这些比赛中没有一个可能会有数百万条目(通常更像是几十万条),所以公平/准确性比速度更重要。 谢谢。