如何处理一亿条数据请求api, 求一个思路或者流程?
项目想实现的效果是这样的
1.)前端提交一个txt文件, 文件内有一亿条数据,一行一条数据
2.)后端接受txt文件,取出一条数据,拼接api, 生成新的url链接
3.)后端curl发起请求,获取返回数据,保存数据
4.)前端此时,可以实时显示一亿条数据跑了多少条了
项目现状
前端用js模拟多线程,不停的向后端发起请求,后端laravel不停的接收数据并返回数据
效果并不理想,速度特别慢,前端页面还会卡死不动!
求
1.)希望一亿条数据在后端循环处理,目前是前端发起一亿次请求,后端只是处理一条数据,相当于一亿条数据在前端处理
2.)前端显示实时跑到了第几条数据!
3.)希望速度快一些,最好一天跑完!提供最快的方式就行!
4.)求这个的解题思路,要用到laravel的那些插件框架或者技术名词?
5.)是否用Guzzle合适?
队列,websocket
数据不要只一条,几百条一起也是没问题的
直接录入后端,前端不用操作什么。然后队列。
感觉思路和搜索引擎站长提交sitemap差不多的道理,sitemap有api方式提交和文本提交两种,api提交偏重于实时,每次提交数量较少一般几百条,但处理较快;文本提交偏于数量较大的数据,每个文件包含大概小于5W条。
可以模仿这种方式,前端单次提交包含N万条的文本作为一个数据单元,提取文本中的数据和条数,插入表中待处理。比如有10个进程,每个进程负责处理一个数据单元,或者放进队列多个进程消费。重点是前端和后端是异步的,且既不一条一条提交(太慢)又不能单次提交过大,其他都没什么难度了。
你这个每条还要 curl 获取数据保存,这个动作注定快不了吧!大概只能多放几个服务器一起跑了。。。
上传txt文件到后端,循环读取,队列处理,内存够用的话,horizon多开点进程
一亿条保存在一个txt?好奇那个txt文件有多大
获取到这个txt文件 判断有几行 按1000个或者多少来循环 循环体内增加redis缓存 缓存该次请求的状态
提供状态api给前端 前端可以实时看到数据处理的情况 1亿数据 分为100块 每块100万数据进度 即可
go
一个敢问一个敢答
算你一行10个字节,一亿行数据就是 953 个 G,恕我我见识短没见过这么大的文件;
有哥们又来说了我分片上传呀,服务端内存够用吗?磁盘会转晕吗?……
真够魔幻的~
后端接收到文件之后,调用shell脚本执行后面的逻辑,又快占用内存又小
疑问:
参考方法:
一个比较靠谱的方案.
100000000 个 URL 的 TXT 文件,
MultiCurl
并发请求, 假如设置 3s 时间,理论 3s 内能处理好 1000 个 URL (后端并发), 然后 js 计数 count += 1000 显示下面是test.php的代码:
执行:
php -d extension=swow test.php
至于能不能使用curl扩展啥的,楼主自己测试一下。