项目中的需求:
在自动更新从youtube获取的频道的时候,同时进行频道节目的自动更新功能。
由于在其中涉及到很多的关于使用php的curl处理方案。
数据量很大,我的解决思路我给出了四条解决方案:
1.分步进行处理
中间可能涉及到的知识点:redis的订阅发布功能,
思路:第一步完成->发布给:第二步->第二步完成->第三部,依次类推。。。
要让php的程序代码一直在内存中进行,只要第一步完成,就会触发php+redis的发布消息事件,
由于写的接口的功能,一直常驻内存,那么有一个要求是,在第二次,第三次。。。处理的时候,内存的变化,只能是执行前的内存要大于或者等于执行后的内存
不然,最后的结果是:php分配的内存被消耗完毕,最终导致php的内存溢出。
使用CI框架处理这种情况,发现在进行批量插入和过滤去重的时候,内存的占用比较高【当然中间是经过一系列的排查的】
查找关于ci的相关的文档:
很多程序员在使用codeigniter CLI下执行一个大批量数据导入的问题时,会一直出现内存过高的情况,下面对此分析器原因及解决办法。 CI db会将所有的查询sql和和sql执行时间保存下来,对于类似百万级大数据量的导入问题来说,其执行的sql记录都会被保存在内容中,这就占用了大量的内容直至脚本结束。 解决办法: 当你执行大数量的db操作时,记得设置: 复制代码 代码如下: $this->db->save_queries = FALSE;
至此,第一种思路就是如此的解决。
至于其他的思路,由于对于前段后和后端的改动都比较大,这里就暂不做叙述了。