Heim > Backend-Entwicklung > PHP-Tutorial > ecshop实现定时任务,我先说下我的思路,也请你们给出思路

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

WBOY
Freigeben: 2016-07-06 13:52:14
Original
1689 Leute haben es durchsucht

需求描述:

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用户表中有约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 </code>
Nach dem Login kopieren

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage