node遇到大数据量的处理方式

项目需求:1.基金状态监测

新建组合条件管理通过微信api匹配用户是否属于这个人群并得到用户是否购买过,是否持有和是否定投过等等

(因为微信就提供了一个用户一个用户判断用户的类型api所以就会遇到大数据的问题)

千万级别的用户量所遇到的问题

1.:当请求api用同步请求的时候,循环千万次去判断用户类型造成时间太久 ,10个多小时都没跑完数据

2.:改良微信api请求成异步,循环千万次,最后一半的时候内存溢出,原因:可能是回调请求太多 ,很多都没请求完请求数一直在增加。

3:改良每次发200个请求之后等几秒钟,避免并发请求太多造成内存溢出。

4.改成异步请求之后千万数据还是在几个小时以上 原因:在查询千万数据的时候数据量太大mysql查询太慢了而且容易请求超时。

5.改良,查询mysql分页查询 查询出总条数,循环每次查询20000条数据 查完之后加入redis 用人群分组 每个人群的用户用hash存json字符串存起来,用户就用队列存起来,在用redis的数据For循环去请求微信api验证。
分页查询出所有数据后速度还是在几个小时以上不过快了大半。

7.改良用node定时器去跑,因为查询出来的用户存的是redis,所以用两个定时器,第一个存用户,第二个马上去队列取用户去请求api. 速度又快了大半,但还是很久。

8.改良用多个进程去跑第一个,第二个定时器加载多个进程,发现还是不够 到这里应该崩溃了吧 哈哈哈哈

9.继续改良:请求api逻辑全换成redis比如说查询出持有基金的用户插入到持有用户表时先插入到Redis,最后在加一个定时器跑这个redis队列取新增数据
到这就会发现千万级数据1-2个小时就跑完筛选出每个用户的基金持有类型,并插入到数据库中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值