PHP 数据接口设计

发布于 2022-09-01 12:40:30 字数 131 浏览 17 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

仙气飘飘 2022-09-08 12:40:30

我做过同样的一个数据统计的服务,
A服务,是一台服务器(A服务器
B服务,在另外一台服务器上面(B服务器

最终解决方案是A服务器的数据最终通过文件存储下来,
然后在A服务器上面通过计划任务用 脚本(php的curl)或者简单点 直接rsync命令同步到B服务器,

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

贱贱哒 2022-09-08 12:40:30

这么大的数据量,还要求断点续传,幸好是日志数据,实时性应该要求不高。
可以考虑让服务A定时导出到一个文件,然后服务B通过ftp/sftp之类的直接下载,ftp的速度已经够快的了,如果还要更快,可以搭个NFS共享文件。(都是支持断点续传的哦)

乖乖哒 2022-09-08 12:40:30

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

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

解决方法如下:

1.在B服务器搭建队列服务(不搭建在A上,是因为你的A服务器可能是主服务器,减少其压力)
2.A服务器,生成日志之后立即Push到B服务器Redis的队列中。
3.B服务器轮询队列,收集数据插入到数据库。

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

葬花如无物 2022-09-08 12:40:30

对方提供的接口有没有时间参数什么的?如果有就可以进行分批请求,每次记录最后的时间,下次请求使用这个时间做条件就好
你也可以将收到的数据写入redis的队列中,同时另一个进程从redis队列中读取数据批量写入数据库里
楼上的说法,如果可以使用文本的话, 也可以考虑使用 rsync 进行同步

梦里寻她 2022-09-08 12:40:30

这么大的数据,使用API传输效率太低了点吧。
* 将每日的数据库直接导出成文件(数据量如果太大,可以每小时的数据导出一个文件,或者10W条一个文件)
* 然后服务器B通过Http获取(Http断点续传很容易实现)
* 获取到以后反向解包数据,导入数据库
这样做的好处是实现起来比较简单,不易出错。

笑看君怀她人 2022-09-08 12:40:30

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文