专栏首页宣言(Siam)博客php计算两个日期之间的间隔,避免导出大量数据

php计算两个日期之间的间隔,避免导出大量数据

写在前面

在做系统业务功能的时候,有的时候业务人员会进行超大范围地导出excel表格,导致内存、CPU占用飙升

这对于系统的平滑运行不太友好,应该进行导出任务排队、限制范围等操作来控制频率、资源使用率。

探索

导出任务排队

这里讲讲实现思路:

  • 前端请求服务端接口,告诉它要导出的日期范围、内容
  • 服务端记录,插入队列
  • 服务端监控脚本(可以用easyswoole等常驻型应用来完成),生成队列里的excel文件,把任务标注成已经成功、对应的文件名
  • 前端请求任务之后,间隔轮询后端,是否服务端导出完成,是的话则根据返回文件名下载文件

限制数据范围

这是比较重要的点,因为如果是不限制数据筛选范围,使用了排队导出的架构之后,也可能导致机器资源占用过高(而且有被攻击的风险!)

我们可以根据筛选的日期范围,比如不能间隔超过50天,来限制,那么就要判断两个日期差距的日期了。

这里附带一小段代码

$start = "2019-9-17 15:11:38";
$end   = "2019-9-01 15:11:45";

$diff = strtotime($start) - strtotime($end);

$diffHour = bcdiv($diff, 60 * 60, 2); // 差距的小时
$diffDay  = bcdiv($diffHour,24,2); // 差距的天数
if ($diffDay > 50){
    echo "范围过大,不可间隔50天";die;
}
echo "....";

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • php对象字段声明,easyswoole ORM 快速生成注释

    在PHPSTORM IDE中,我们可以通过注释给类写明可调用字段名,这样子才有语法提示。

    宣言言言
  • JS的字符串插值,变量长文本换行

    作为一个PHPer,经常需要在html中写js jq来解析数据,形成列表、选项等等。

    宣言言言
  • layui2.0数据表格导出复杂表头EXCEL解决方案,table2excel

    layui是一套面向所有层次的前后端开发者,零门槛开箱即用的前端UI解决方案。很多的后端开发在开发后台系统时候都会选择它。

    宣言言言
  • Flutter版本玩Android客户端(7)——状态管理

    在上一篇文章Flutter版本玩Android客户端(6)——登录注册模块以及文章收藏与取消中完成了登录模块,但遗留的问题是未进行状态同步,导致left dra...

    用户1108631
  • Spring Security 工作原理概览

    本文由读者 muggle 投稿,muggle 是一位具备极客精神的90后单身老实猿,对 Spring Security 有丰富的使用经验,muggle 个人博客...

    江南一点雨
  • K最近邻与线性分类器(上)

    图像分类的基本任务就是将图片分类,那如何进行图片分类呢?图片是不可能直接当作输入传递给我们的机器学习任务的,一个通用的做法就是将图片转换成一张巨大的数字表单。这...

    听城
  • Spring Security 工作原理概览

    SpringSecurity 采用的是责任链的设计模式,它有一条很长的过滤器链。现在对这条过滤器链的各个进行说明:

    南风
  • Python网络爬虫实战案例之:7000本电子书下载(1)

    本文是《Python开发实战案例之网络爬虫》的第一部分:7000本电子书下载网络爬虫完整案例演示。配套视频课程详见网易云课堂

    数据饕餮
  • IOS 使用Core Data读写数据库

    //项目创建成功后,在项目文件夹中将自动生成一个拥 有.xcdatamodelId扩展名的文件,该文件可以使用图形化的方式编辑数据 模型,在该文件中包含了E...

    用户5760343
  • Android最佳性能实践(三)——高性能编码优化

    在前两篇文章当中,我们主要学习了Android内存方面的相关知识,包括如何合理地使用内存,以及当发生内存泄露时如何定位出问题的原因。那么关于内存的知识就讨论到这...

    用户1158055

扫码关注云+社区

领取腾讯云代金券