PHP 处理大量数据的效率问题。

2017-05-03 14:44:00 +08:00
 kk941kk

有一张 30W 用户的数据表,里面有用户的手机号码,我需要通过一个 API 查询到手机号的归属地和运营商信息,然后修改到数据库。 目前我做的是循环查询修改,这样效率很低,每秒平均 6 条左右,求推荐效率高的办法,谢谢~~

5007 次点击
所在节点    PHP
18 条回复
huijiewei
2017-05-03 14:47:42 +08:00
这个和 PHP 没关系,明显是网络请求占用时间,API 支持批量查询吗,支持就分批搞
kslr
2017-05-03 14:48:16 +08:00
你的 api 支持更快地查询吗? 可以从并行/异步下手。
kk941kk
2017-05-03 14:48:27 +08:00
@huijiewei 不支持啊,只能一条条查出来
kk941kk
2017-05-03 14:50:06 +08:00
@kslr api 不支持,也改不了,只能自己想办法了,您说的我再查一查
gouchaoer
2017-05-03 14:55:01 +08:00
php 有最好的 httpclient 是 Guzzle,你可以批量发请求去访问 api,注意使用 php-cli。。。我查询几十个 ip 的归属地,ipip.net 不支持批量查询,用 Guzzle 的话几 s 内返回吧
kslr
2017-05-03 15:00:16 +08:00
@kk941kk #4 看下这个项目有没有帮助

https://github.com/shitoudev/phone-location
用这份 17 年数据验证下 https://github.com/xluohome/phonedata
kk941kk
2017-05-03 15:04:04 +08:00
@gouchaoer 谢谢,我去试试~
Immortal
2017-05-03 15:13:58 +08:00
对的 如果 api 不支持批量就自己建立并发去查询
jugelizi
2017-05-03 15:23:45 +08:00
可以一次性查几十条出来然后在也页面用 js 批量去查询并更新
一批查完就执行下一批
we3613040
2017-05-03 15:27:47 +08:00
多任務,多進程或多線程
php300
2017-05-03 15:29:42 +08:00
.......
byfar
2017-05-03 16:15:59 +08:00
1.25 小时过去了,应该跑了 3w 条了吧,14 个小时之前答题都还有点用

写一个 php 脚本 每次查一条未更新过的更新,直到没有数据退出

运行多个这个脚本,ok
lslqtz
2017-05-03 16:35:10 +08:00
并发。
asen477
2017-05-03 16:55:14 +08:00
写个存储过程,直接调用存储过程。
blackshadow
2017-05-03 18:58:01 +08:00
表里数据应该有 id 吧,利用 id%某值,写多个脚本,同时执行
sagaxu
2017-05-03 21:56:38 +08:00
@gouchaoer 高级爬虫工程师靠谱
kk941kk
2017-05-04 09:28:14 +08:00
昨天中途去忙别的了,现在用的是 @kslr 的方法,谢谢大家的帮助~~
lygmqkl
2017-05-10 20:24:08 +08:00
用 cli 命令行跑,或者换 其它语言跑,以数据库为分界点。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/358799

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX