有一张 30W 用户的数据表,里面有用户的手机号码,我需要通过一个 API 查询到手机号的归属地和运营商信息,然后修改到数据库。 目前我做的是循环查询修改,这样效率很低,每秒平均 6 条左右,求推荐效率高的办法,谢谢~~
1
huijiewei 2017-05-03 14:47:42 +08:00
这个和 PHP 没关系,明显是网络请求占用时间,API 支持批量查询吗,支持就分批搞
|
2
kslr 2017-05-03 14:48:16 +08:00
你的 api 支持更快地查询吗? 可以从并行/异步下手。
|
5
gouchaoer 2017-05-03 14:55:01 +08:00 1
php 有最好的 httpclient 是 Guzzle,你可以批量发请求去访问 api,注意使用 php-cli。。。我查询几十个 ip 的归属地,ipip.net 不支持批量查询,用 Guzzle 的话几 s 内返回吧
|
6
kslr 2017-05-03 15:00:16 +08:00
@kk941kk #4 看下这个项目有没有帮助
https://github.com/shitoudev/phone-location 用这份 17 年数据验证下 https://github.com/xluohome/phonedata |
8
Immortal 2017-05-03 15:13:58 +08:00
对的 如果 api 不支持批量就自己建立并发去查询
|
9
jugelizi 2017-05-03 15:23:45 +08:00
可以一次性查几十条出来然后在也页面用 js 批量去查询并更新
一批查完就执行下一批 |
10
we3613040 2017-05-03 15:27:47 +08:00
多任務,多進程或多線程
|
11
php300 2017-05-03 15:29:42 +08:00
.......
|
12
byfar 2017-05-03 16:15:59 +08:00 1
1.25 小时过去了,应该跑了 3w 条了吧,14 个小时之前答题都还有点用
写一个 php 脚本 每次查一条未更新过的更新,直到没有数据退出 运行多个这个脚本,ok |
13
lslqtz 2017-05-03 16:35:10 +08:00
并发。
|
14
asen477 2017-05-03 16:55:14 +08:00
写个存储过程,直接调用存储过程。
|
15
blackshadow 2017-05-03 18:58:01 +08:00
表里数据应该有 id 吧,利用 id%某值,写多个脚本,同时执行
|
18
lygmqkl 2017-05-10 20:24:08 +08:00
用 cli 命令行跑,或者换 其它语言跑,以数据库为分界点。
|