千万级别以上的用户表怎么实现在生日当天发优惠券?

123咔哒 发布于 09/21 16:50
阅读 6K+
收藏 11

解锁HarmonyOS核心技能,赢取限量周边好礼>>>

直接根据日期查的应该会很慢吧,有啥好的方案?

加载中
3
约黄昏

算1亿用户,平均每天也就27万条发放数据,感觉完全没压力啊

2
栍椧
栍椧

先一次发下去全部的隐形券,生日当天再显形出来

123咔哒
123咔哒
这个方案咋做push推送?
LarryYan
LarryYan
回复 @栍椧 : 提前一个星期发就行了,这样有啥问题还有7天的时间可以去处理。
栍椧
栍椧
回复 @MuskIron : 发一年就行啊
MuskIron
MuskIron
一次性把100年的都发吗?
2
AK_诚
AK_诚

用户新增修改生日时,将对应的userId加入到生日MM-dd作为索引key的列表中去,如redis的Set或者表日期-userId一对多,每天按MM-dd去获取列表中的用户

1
阿斯兰
阿斯兰

让自己点领取,不点发给他也不知道😂 哈哈哈

1
120011676
120011676

登录自动领

123咔哒
123咔哒
这样是无法做召回的
0
S
SHA-256
1. 最简单应该是日期字段加索引 2. 索引加不上的话,可以按主键升序,然后全量从头开始查,每次n条,记下最大的主键,下次where 主键<刚的主键,然后业务端过滤 3. 或者把生日缓存到其他部分,模拟一个索引出来
S
SHA-256
主键 大于 刚查到的主键,上边打错了
0
wad12302
wad12302

用户数据应该同步一份放 其他存储如缓存,es mongodb ,这样针对用户的扩展业务会很方便

0
ArchitectureMaster
ArchitectureMaster

1.做一张索引表作为延伸

2.设两个字段:生日 int 主键、用户表id 的字符串,多个用户编号用逗号隔开

3.生日 = 日期型时间戳 除以 60*60*24然后取整

birth = timestamp /(60*60*24)

4.birth  userid 一对多关系。同一天出生的人有多个。

查询的时候输入日期就可以找出相对应的userId字段,由于birth是整型聚集索引速度会是同样聚集索引字符串的Userid的2-3倍,而且输入一个日期就可以找出对应字段的userid,只返回一条结果。

比直接用生日日期where birth字段要快得多。先根据日期查出userId再用主键直接找相对应的记录会提高不少效率!

ArchitectureMaster
ArchitectureMaster
回复 @123咔哒 : 查询的并不是用户编号,而是日期字段,所以速度会很快。用户编号可以用text大文本。
123咔哒
123咔哒
所有用户用逗号分隔的话,几百个用户字段就已经很长了啊
0
霖vv
霖vv
很慢怎么了?不行吗
LarryYan
LarryYan
如果平均一点的话也就一天几万上十万的数据,还好不多
0
acclea
acclea

可以把礼券单独存一张表,然后用户生日等于当天就弹出领取界面,把领取后的用户存入缓存或者数据库,防止用户多次领取,如果从领取记录中存在当前登录用户则不提示领取界面,只展示礼物明细

acclea
acclea
回复 @123咔哒 : 你说的召回应该不经常活跃、甚至是僵尸用户,一般来说用户系统应该会有相关的表/日志记录用户的留存数据,不经常活跃的可以在生日前几天推送系统消息,如果在生日前一天消息未读,可以在生日前一天进行短信推送提醒, 如果这些都做了用户还未回应,可能有两种情况,第一、用户完全失效,第二、礼物不够吸引用户
123咔哒
123咔哒
这样可能无法做召回,主动push,用户不登录就不知道
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部