ecshop实现定时任务,我先说下我的思路,也请你们给出思路

php中文网
发布: 2016-07-06 13:52:14
原创
2007人浏览过

需求描述:

user用户表中有约100万条用户记录,现在想根据注册时间(create_time)这个字段,
判断该用户是老用户还是新用户(user_type new新用户 old老用户)
1、新用户:注册两周内,14(含)天以内。
2、老用户:注册两周以上,14(不含)天以上。
我的思路如下:

因为ECShop不是纯OOP的框架,所以我打算在根目录建个crontab目录
里面新建个user.php
user.php里面 先统计出整张表的总记录数 total
然后分页获取100条,循环update 整张表的数据
查询的时候 where条件过滤已经是老用户的数据
也就是说where永远是 user_type='new',整个表
默认全是new

问题来了,表里有100万条记录,我怕执行我PHP脚本的时候
循环查库会把数据库MySQL拖垮,咋办?

360智图
360智图

AI驱动的图片版权查询平台

360智图 143
查看详情 360智图

100万数据每一页100条,那就是1万页,如何处理呢?
for循环这个思路是否可靠?

回复内容:

需求描述:

user用户表中有约100万条用户记录,现在想根据注册时间(create_time)这个字段,
判断该用户是老用户还是新用户(user_type new新用户 old老用户)
1、新用户:注册两周内,14(含)天以内。
2、老用户:注册两周以上,14(不含)天以上。
我的思路如下:

因为ECShop不是纯OOP的框架,所以我打算在根目录建个crontab目录
里面新建个user.php
user.php里面 先统计出整张表的总记录数 total
然后分页获取100条,循环update 整张表的数据
查询的时候 where条件过滤已经是老用户的数据
也就是说where永远是 user_type='new',整个表
默认全是new

问题来了,表里有100万条记录,我怕执行我PHP脚本的时候
循环查库会把数据库MySQL拖垮,咋办?

100万数据每一页100条,那就是1万页,如何处理呢?
for循环这个思路是否可靠?

我觉得这件事儿不着急动手,最好还是先分析一下需求,其要点是老用户和新用户有什么区别?同时是否涉及批量操作(如给老用户群发站短属于批量操作,而某特定优惠必须当前用户是老用户才能用则不属于批量操作)。

很多时候这个新老用户只是显示上的区分,没有什么本质的变化,或者说总是应用在当前登录者自身,此时你根本没必要增加一个 user_type 字段,直接判断当前用户的create_time - time()是否大于142460*60就足够用了。

如果确实需要该功能也不需要过于担心,还是注意细节:
1- 首次更新是针对所有数据的,一条update语句搞定,你早晨早来一会儿在数据库上直接执行一下就行了(请再三确认语句正确),比你想象的快得多。
2- 定时更新: 注意,你每次仅需要针对 user_type = new and create_time

直接根据创建时间批量更新,一条语句执行完毕,每天定时执行即可,
当前时间 - (创建时间+86400*14)

UPDATE user SET user_type = 'old' WHERE (unix_timestamp(now()) - (create_time+86400*14))

你可以评估一下你的数据库增量,因为其实你可以每天将今天变成老用户的修改一下,这样子筛选的数据量会大幅度降低

对user表的create_time添加索引(索引字段必须放在where中的左边),执行以下sql,

<code>UPDATE user SET user_type = 'old' WHERE create_time < date_sub(curdate(),interval 14 day)</code>
登录后复制

每天凌晨3:00执行即可(truncate),100万条数据不算很多

相关标签:
php
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号