php接口数据总数,php接口-PHP数据接口设计

5268f80b9b1e01f982625ef6fac83ca1.png

服务A提供数据一天100W的日志数据, B需要写一个接口去抓取服务A的数据,(假定A的100W可以模拟成从数据库取出来) , 现在需要设计一个接口,保证接口可以比较快速的获取100W的数据,获取数据突然中断可以断点继续获取,同时还要保证接口安全

回复内容:

服务A提供数据一天100W的日志数据, B需要写一个接口去抓取服务A的数据,(假定A的100W可以模拟成从数据库取出来) , 现在需要设计一个接口,保证接口可以比较快速的获取100W的数据,获取数据突然中断可以断点继续获取,同时还要保证接口安全

我做过同样的一个数据统计的服务,

A服务,是一台服务器(A服务器)

B服务,在另外一台服务器上面(B服务器)

最终解决方案是A服务器的数据最终通过文件存储下来,

然后在A服务器上面通过计划任务用 脚本(php的curl)或者简单点 直接rsync命令同步到B服务器,

然后B服务器扫文件内容,然后将数据归档,去重,入库等。。

100W的数据量还是很少的。我第一眼看的时候,还以为100M呢。

解决方法比较赞同@sunwenzheng的提议。采用Redis的队列来解决。

解决方法如下:

1.在B服务器搭建队列服务(不搭建在A上,是因为你的A服务器可能是主服务器,减少其压力)

2.A服务器,生成日志之后立即Push到B服务器Redis的队列中。

3.B服务器轮询队列,收集数据插入到数据库。

这样做的好处是,保证了日志记录的时序以及可以控制日志获取的时效。而且针对100W数据绰绰有余。

这么大的数据量,还要求断点续传,幸好是日志数据,实时性应该要求不高。

可以考虑让服务A定时导出到一个文件,然后服务B通过ftp/sftp之类的直接下载,ftp的速度已经够快的了,如果还要更快,可以搭个NFS共享文件。(都是支持断点续传的哦)

对方提供的接口有没有时间参数什么的?如果有就可以进行分批请求,每次记录最后的时间,下次请求使用这个时间做条件就好

你也可以将收到的数据写入redis的队列中,同时另一个进程从redis队列中读取数据批量写入数据库里

楼上的说法,如果可以使用文本的话, 也可以考虑使用 rsync 进行同步

这么大的数据,使用API传输效率太低了点吧。

* 将每日的数据库直接导出成文件(数据量如果太大,可以每小时的数据导出一个文件,或者10W条一个文件)

* 然后服务器B通过Http获取(Http断点续传很容易实现)

* 获取到以后反向解包数据,导入数据库

这样做的好处是实现起来比较简单,不易出错。

可以考虑用分页处理方法。比如100W条,我一次处理1W条,处理完后,在处理下一页的数据。至于这个如何处理,可以先获取总数,然后生成队列任务。在依靠服务器去执行获取数据

1428d0e076c3959ab11d28a39bc84fab.png

5268f80b9b1e01f982625ef6fac83ca1.png

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值