批量入库

因为maccms自带的采集采集起来很慢,而且很多资源站的采集接口不能对内容排序,导致最旧的数据最后入库。用java写个采集程序,采集完入库的时候发现不能一次性入库多个数据,导致入库也很慢,所以就在入库控制器写了个方法批量入库。

Receive.php

  1. public function foo()
  2. {
  3. $info = $this->_param;
  4. if (!array_key_exists("vods", $info) || empty($info["vods"]))
  5. {
  6. echo json_encode(['code'=>2002,'msg'=>"vods is required"],JSON_UNESCAPED_UNICODE);
  7. exit;
  8. }
  9. $vods = json_decode($info["vods"], true);
  10. if (null == $vods)
  11. {
  12. echo json_encode(['code'=>2002,'msg'=>"the format of vods is incorrect"],JSON_UNESCAPED_UNICODE);
  13. exit;
  14. }
  15. $inter = mac_interface_type();
  16. $res = [];
  17. foreach ($vods as $vod)
  18. {
  19. if(empty($vod['type_id'])) {
  20. $vod['type_id'] = $inter['vodtype'][$vod['type_name']];
  21. }
  22. $data['data'][] = $vod;
  23. }
  24. $res[] = model('Collect')->vod_data([],$data,1);
  25. echo json_encode($res,JSON_UNESCAPED_UNICODE);
  26. }

资源打包

有时候需要给其他程序全量下载视频数据,有个接口会很方便

Provide.php

  1. // format: json返回json格式数据;无或line或其他返回的数据,是一行一条数据,且每一行都是合法的json格式
  2. public function bar()
  3. {
  4. $token = $this->_param['token'];
  5. $format = $this->_param['format'] == "json" ? "json" : "line";
  6. $suffix = $format == "json" ? ".json" : ".txt";
  7. // category暂时无用
  8. $category = $this->_param['category'];
  9. if (empty($category)) {
  10. $category = "";
  11. }
  12. else {
  13. $temp = explode(",", $category);
  14. $category = "";
  15. foreach ($temp as $k=>$v) {
  16. if (is_numeric($v)) {
  17. $category .= (($k==0 ? "" : ",") . $v);
  18. }
  19. }
  20. }
  21. $path = ROOT_PATH . "data".$suffix;
  22. $url = request()->domain() . "/" . "data".$suffix;
  23. if (is_file($path)) {
  24. clearstatcache(true, $path);
  25. $mtime = (int)date("Ymd", filemtime($path));
  26. $today = (int)date("Ymd", time());
  27. if (filesize($path) > 0 && $mtime - $today == 0)
  28. {
  29. echo json_encode(["time" => $mtime, "url" => $url]);
  30. exit;
  31. }
  32. }
  33. $fp = new \SplFileObject($path, "a+b");
  34. if ($fp->flock(LOCK_EX)) {
  35. if ($fp->getSize() > 0) {
  36. $fp->ftruncate(0);
  37. $fp->fflush();
  38. }
  39. $count = Db::name('Vod')->count();
  40. $i = 0;
  41. $size = 2000;
  42. $temp = $format == "json" ? array() : "";
  43. while ($i<$count) {
  44. $size = ($count-$i>=$size) ? $size : $count-$i;
  45. $limit = $i . "," . $size;
  46. // vod_class as class,
  47. $list = Db::name('Vod')->field("vod_id as id,type_id as type,vod_name as name,vod_pic as pic,vod_play_url as playurl")->limit($limit)->select();
  48. if ($format == "json") {
  49. $temp = array_merge($temp,$list);
  50. } else {
  51. $temp = "";
  52. foreach ($list as $k=>$v) {
  53. if ($i >0 || ($i==0 && $k>0)) {
  54. $temp .= "\r\n";
  55. }
  56. // JSON_UNESCAPED_UNICODE
  57. $temp .= json_encode($v);
  58. }
  59. $fp->fwrite($temp);
  60. $fp->fflush();
  61. }
  62. $i+=$size;
  63. }
  64. if ($format == "json")
  65. {
  66. // JSON_UNESCAPED_UNICODE
  67. $fp->fwrite(json_encode($temp));
  68. $count = count($temp);
  69. $fp->fflush();
  70. } else {
  71. $fp->seek(PHP_INT_MAX);
  72. $count = $fp->key() + 1;
  73. }
  74. $fp->flock(LOCK_UN);
  75. $fp = null;
  76. echo json_encode(["time" => $mtime, "url" => $url, "count" => $count]);
  77. }
  78. }

maccms10二开批量入库和资源打包的更多相关文章

  1. 高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)

    问题分析 问题一:要求日志最好入库:但是,直接入库mysql确实扛不住,批量入库没有问题,done.[批量入库和直接入库性能差异] 问题二:批量入库就需要有高并发的消息队列,决定采用redis lis ...

  2. 转载:【高并发简单解决方案 | 靠谱崔小拽 】redis队列缓存 + mysql 批量入库 + php离线整合

    需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...

  3. redis 队列缓存 + mysql 批量入库 + php 离线整合

    问题分析 思考:应用网站架构的衍化过程中,应用最新的框架和工具技术固然是最优选择:但是,如果能在现有的框架的基础上提出简单可依赖的解决方案,未尝不是一种提升自我的尝试. 解决: 问题一:要求日志最好入 ...

  4. 【高并发简单解决方案】redis队列缓存 + mysql 批量入库 + php离线整合

    需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...

  5. 【高并发简单解决方案】redis缓存队列+mysql 批量入库+php离线整合

    原文出处: 崔小拽 需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化 ...

  6. AssetBundle系列——游戏资源打包(二)

    本篇接着上一篇.上篇中说到的4步的代码分别如下所示: (1)将资源打包成assetbundle,并放到自定目录下 using UnityEditor; using UnityEngine; using ...

  7. Unity资源打包学习笔记(二)、如何实现高效的unity AssetBundle热更新

    转载请标明出处:http://www.cnblogs.com/zblade/ 0x01 目的 在实际的游戏开发中,对于游戏都需要进行打补丁的操作,毕竟,测试是有限的,而bug是无法预估的.那么在手游中 ...

  8. (转)AssetBundle系列——游戏资源打包(二)

    转自:http://www.cnblogs.com/sifenkesi/p/3557290.html 本篇接着上一篇.上篇中说到的4步的代码分别如下所示: (1)将资源打包成assetbundle,并 ...

  9. 将SWF文件用作资源打包

    使用Flash开发网页游戏少不了与各种美术资源打交道.对于静态资源的那就是各种图片,对于会动的资源可以考虑直接做成swf.制作成swf的美术资源又可以分为两种:一种是直接将关键帧罗列在主时间轴上,那么 ...

随机推荐

  1. 简述 Mybatis 的插件运行原理,以及如何编写一个插件。

    Mybatis 仅可以编写针对 ParameterHandler.ResultSetHandler. StatementHandler.Executor 这 4 种接口的插件,Mybatis 使用 J ...

  2. 什么是 spring bean?

    它们是构成用户应用程序主干的对象. Bean 由 Spring IoC 容器管理. 它们由 Spring IoC 容器实例化,配置,装配和管理. Bean 是基于用户提供给容器的配置元数据创建.

  3. 在网页中预览excel表格文件

    项目需求在前端页面中实现预览excel表格的功能,上网了解之后大致总结为一下几种方法. 1.office文档转换为pdf,再转swf,然后通过网页加载flash进行预览 2.通过 xlsx.js,js ...

  4. [FireshellCTF2020]ScreenShooter 1

    此题关键在于理清逻辑,本地将url发送给服务器,服务器请求sereenshooter以后将结果返回 所以应该在服务器查看日志. 发现了PhantomJS 引擎一下 <!DOCTYPE html& ...

  5. 【Android开发】【布局】几个常用布局构成的简单demo

    图image1.jpg,就是常用的 底部菜单栏 + Fragment联动 使用 RadioGroup + Fragment 图image2.jpg ,就是 TabLayout + ViewPager ...

  6. Node自动重启工具 nodemon

    为什么要使用 在编写调试Node.js项目,修改代码后,需要频繁的手动close掉,然后再重新启动,非常繁琐.现在,我们可以使用nodemon这个工具,它的作用是监听代码文件的变动,当代码改变之后,自 ...

  7. 【SpringBoot实战】数据访问

    前言 在开发中我们通常会对数据库的数据进行操作,SpringBoot对关系性和非关系型数据库的访问操作都提供了非常好的整合支持.SpringData是spring提供的一个用于简化数据库访问.支持云服 ...

  8. 控制反转 IOC 理论推导

    控制反转 IOC 理论推导 按照我们传统的开发,我们会先去 dao 层创建一个接口,在接口中定义方法. public interface UserDao { void getUser(); } 然后再 ...

  9. 使用 Jenkins 进行持续集成与发布流程图-图解

  10. mybatis在if标签里判断字符串相等

    https://www.cnblogs.com/westward/p/6910856.html