从三十万观众中选出 30 个人作为中奖用户,还要在前端展示滚动抽奖的效果 ,后台的思路应该是怎样的呢?

2020-03-19 13:18:41 +08:00
 kaigong

如题 : 观众数量预计 30-40 万人 ,数据可以存储在 mysql/redis 中 需要前端页面点击抽奖,然后开始滚动观众数据 点击停止,返回给前端中奖的观众数据,展示

问题一 : 前台滚动的全量观众数据如何返回给前端。我的方案是做一个大分页,前端分页调取,追加到他的滚动的那个数据 list 里面,如果网络延迟导致后面的分页没有及时加载,就回到开始重新滚动。

问题二 : 中奖的逻辑该怎样实现? 业务方没有指定规则。我的方案是 从点击开始的那一刻开始,就按照一定的概率过滤每一个用户。遍历到该用户时,该用户的随机数如果在概率区间之内,就中奖。知道中奖用户数量足够为止。 需要注意的是,可能前端页面点击停止的时候,后台仍然没有足够的中奖人数,此时提高中奖概率,尽快返回结果 ?

因为是第一次做这种抽奖 ,所以想不到太好的方案,请教有没有做过的大神,给说一下思路?

4502 次点击
所在节点    程序员
36 条回复
fancy111
2020-03-19 13:22:53 +08:00
你想多了,别说三十万,就算三万人选 30 个,也不会去用遍历。
另外你系统里面有这三十万人的数据吗?如果都是登录的好说,直接生成 30 个 1-30W 的随机数,一一对应给他们就行了。
前端展示就随便选几百个滚动就行了,你以为抽奖还搞什么全量数据。
Aliennnnnn
2020-03-19 13:23:59 +08:00
为啥要这么麻烦,每个人给个序号(1-400000),然后从这里面随机取 30 个整数呗
jangit
2020-03-19 13:24:40 +08:00
先抽 n 个用户名给页面滚动去刷,然后再根据规则在所有人里面抽,抽完返回前端
然后点停的时候显示这堆被抽中的人就好了
dovme
2020-03-19 13:26:52 +08:00
前端展示的话,提前取几百条用户名,然后以毫秒为间隔随机展示,
中奖操作,直接数据库随机取 30 条数据就好了啊,
dangyuluo
2020-03-19 13:29:29 +08:00
后台当然是加后门了😂

大学的时候我给我们学校李玉导演见面会做了一个抽奖活动,一共抽五个人,我做了个后门,后来发现奖品是一套护肤品就作罢
qiayue
2020-03-19 13:38:19 +08:00
三十万人编号,然后你生成 1~30 万的随机数,生成 30 次即可
sweat89
2020-03-19 13:43:28 +08:00
set spop
SuperAllen
2020-03-19 13:43:49 +08:00
1.前端,前端仅作展示和交互,接口提供几百个名字用作滚动,点抽奖后,请求抽奖接口,减慢滚动速度至展示结果停止
2.后台设定奖池,对应奖品,数量,中奖人信息,这里你也可以指定谁中奖[狗头]
3.抽奖逻辑一般都是随机数了,有其他规则的再具体设计算法
justin2018
2020-03-19 13:44:47 +08:00
随机撒 你写死了 都没有人晓得 你除外 😁
wmhx
2020-03-19 13:51:31 +08:00
30 万, 你选前 1000 个用户, 然后在取中间 100 ,然后想怎么随机就怎么随机,
flowercoder
2020-03-19 13:54:20 +08:00
不能把事情想的太真实,老板又不可能为这事给你加服务器配置,从简,真心的,想简单些。
kaigong
2020-03-19 13:56:51 +08:00
我就知道我拐近坑里了,感谢各位大佬的提示。
随机数对应人才是正道
@Aliennnnnn @fancy111 @qiayue
zjlletian
2020-03-19 14:06:47 +08:00
直接后端随机选 30 个人中奖的和 300 个不中奖的给前端,前端滚动显示这 300 个不中奖的,等停的时候显示 30 个中奖的
jackchao7432
2020-03-19 14:17:46 +08:00
随机数不就好了,这么简单的技术性问题.....
loryyang
2020-03-19 14:34:54 +08:00
有编号的话,其实可以通过编号来,给 30 个坑,每次随机每个坑的一位数字,直到结束,一般来说根本不需要去重,几乎没有重复的可能
名字的话,页面打开时先随机粗选一波名字到前端,就在这波人里面抽 30 个好了。具体粗选选多少就看前端能顶住多少了
loryyang
2020-03-19 14:35:34 +08:00
@loryyang #15 想了下,第一个方案也不好搞,有点麻烦,毕竟有些号是没人的
Tink
2020-03-19 14:37:17 +08:00
随机数
wagjia
2020-03-19 15:00:11 +08:00
import random
alist = random.sample(range(1,200000),20)
print(alist)
violetlai
2020-03-19 15:17:51 +08:00
随机整数,然后返回。
建议先问问你们老大要不要真随机
tz894305532
2020-03-19 15:37:43 +08:00
内定 30 人就完事了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/654212

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX