maccms10二开批量入库和资源打包
批量入库
因为maccms自带的采集采集起来很慢,而且很多资源站的采集接口不能对内容排序,导致最旧的数据最后入库。用java写个采集程序,采集完入库的时候发现不能一次性入库多个数据,导致入库也很慢,所以就在入库控制器写了个方法批量入库。
Receive.php
public function foo()
{
$info = $this->_param;
if (!array_key_exists("vods", $info) || empty($info["vods"]))
{
echo json_encode(['code'=>2002,'msg'=>"vods is required"],JSON_UNESCAPED_UNICODE);
exit;
}
$vods = json_decode($info["vods"], true);
if (null == $vods)
{
echo json_encode(['code'=>2002,'msg'=>"the format of vods is incorrect"],JSON_UNESCAPED_UNICODE);
exit;
}
$inter = mac_interface_type();
$res = [];
foreach ($vods as $vod)
{
if(empty($vod['type_id'])) {
$vod['type_id'] = $inter['vodtype'][$vod['type_name']];
}
$data['data'][] = $vod;
}
$res[] = model('Collect')->vod_data([],$data,1);
echo json_encode($res,JSON_UNESCAPED_UNICODE);
}
资源打包
有时候需要给其他程序全量下载视频数据,有个接口会很方便
Provide.php
// format: json返回json格式数据;无或line或其他返回的数据,是一行一条数据,且每一行都是合法的json格式
public function bar()
{
$token = $this->_param['token'];
$format = $this->_param['format'] == "json" ? "json" : "line";
$suffix = $format == "json" ? ".json" : ".txt";
// category暂时无用
$category = $this->_param['category'];
if (empty($category)) {
$category = "";
}
else {
$temp = explode(",", $category);
$category = "";
foreach ($temp as $k=>$v) {
if (is_numeric($v)) {
$category .= (($k==0 ? "" : ",") . $v);
}
}
}
$path = ROOT_PATH . "data".$suffix;
$url = request()->domain() . "/" . "data".$suffix;
if (is_file($path)) {
clearstatcache(true, $path);
$mtime = (int)date("Ymd", filemtime($path));
$today = (int)date("Ymd", time());
if (filesize($path) > 0 && $mtime - $today == 0)
{
echo json_encode(["time" => $mtime, "url" => $url]);
exit;
}
}
$fp = new \SplFileObject($path, "a+b");
if ($fp->flock(LOCK_EX)) {
if ($fp->getSize() > 0) {
$fp->ftruncate(0);
$fp->fflush();
}
$count = Db::name('Vod')->count();
$i = 0;
$size = 2000;
$temp = $format == "json" ? array() : "";
while ($i<$count) {
$size = ($count-$i>=$size) ? $size : $count-$i;
$limit = $i . "," . $size;
// vod_class as class,
$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();
if ($format == "json") {
$temp = array_merge($temp,$list);
} else {
$temp = "";
foreach ($list as $k=>$v) {
if ($i >0 || ($i==0 && $k>0)) {
$temp .= "\r\n";
}
// JSON_UNESCAPED_UNICODE
$temp .= json_encode($v);
}
$fp->fwrite($temp);
$fp->fflush();
}
$i+=$size;
}
if ($format == "json")
{
// JSON_UNESCAPED_UNICODE
$fp->fwrite(json_encode($temp));
$count = count($temp);
$fp->fflush();
} else {
$fp->seek(PHP_INT_MAX);
$count = $fp->key() + 1;
}
$fp->flock(LOCK_UN);
$fp = null;
echo json_encode(["time" => $mtime, "url" => $url, "count" => $count]);
}
}
maccms10二开批量入库和资源打包的更多相关文章
- 高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)
问题分析 问题一:要求日志最好入库:但是,直接入库mysql确实扛不住,批量入库没有问题,done.[批量入库和直接入库性能差异] 问题二:批量入库就需要有高并发的消息队列,决定采用redis lis ...
- 转载:【高并发简单解决方案 | 靠谱崔小拽 】redis队列缓存 + mysql 批量入库 + php离线整合
需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...
- redis 队列缓存 + mysql 批量入库 + php 离线整合
问题分析 思考:应用网站架构的衍化过程中,应用最新的框架和工具技术固然是最优选择:但是,如果能在现有的框架的基础上提出简单可依赖的解决方案,未尝不是一种提升自我的尝试. 解决: 问题一:要求日志最好入 ...
- 【高并发简单解决方案】redis队列缓存 + mysql 批量入库 + php离线整合
需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...
- 【高并发简单解决方案】redis缓存队列+mysql 批量入库+php离线整合
原文出处: 崔小拽 需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化 ...
- AssetBundle系列——游戏资源打包(二)
本篇接着上一篇.上篇中说到的4步的代码分别如下所示: (1)将资源打包成assetbundle,并放到自定目录下 using UnityEditor; using UnityEngine; using ...
- Unity资源打包学习笔记(二)、如何实现高效的unity AssetBundle热更新
转载请标明出处:http://www.cnblogs.com/zblade/ 0x01 目的 在实际的游戏开发中,对于游戏都需要进行打补丁的操作,毕竟,测试是有限的,而bug是无法预估的.那么在手游中 ...
- (转)AssetBundle系列——游戏资源打包(二)
转自:http://www.cnblogs.com/sifenkesi/p/3557290.html 本篇接着上一篇.上篇中说到的4步的代码分别如下所示: (1)将资源打包成assetbundle,并 ...
- 将SWF文件用作资源打包
使用Flash开发网页游戏少不了与各种美术资源打交道.对于静态资源的那就是各种图片,对于会动的资源可以考虑直接做成swf.制作成swf的美术资源又可以分为两种:一种是直接将关键帧罗列在主时间轴上,那么 ...
随机推荐
- 使用Servlet编写增删改查
第一步创建一个表 1 create database liyongzhendb default character set utf8 collate utf8_bin; 2 3 CREATE TABL ...
- c源文件中为什么要包含自己对应的头文件
另一篇:.c文件和.h文件的关系 引言: 我们经常在c工程中发现,源文件中要包含自己的头文件.一直以来,都不知道为什么这样做.现在,我知道了. 以前的认知: 我认为,.c文件没有必要包含自己的.h文件 ...
- CSS入门指南-4:页面布局
这是<CSS设计指南>的读书笔记,用于加深学习效果. display 属性 display是 CSS 中最重要的用于控制布局的属性.每个元素都有一个默认的 display 值.对于大多数元 ...
- 使用css完成引导用户按照流程完成任务的进度导航条
首先先看设计稿 图中的12345便是主角进度条. 分析需求如下:线的长度不固定,适应移动端和pc端点平均地分布在一条线上点的个数不固定,可能会改变激活的点之间线的颜色是绿色的 两种种方式 百分比宽度切 ...
- 活字格发布新版本,插件公开,引领Web开发新潮流
日前,活字格Web 应用生成平台发布V4.0版本,首次公开插件机制,强大的扩展性和系统集成能力,引起业内瞩目. 活字格是由西安葡萄城自主研发的 Web 应用生成平台,提供易用的类Excel可视化设计器 ...
- vs技巧 - 调试asp.net core源码
学习asp.net core的方式除了看官方文档,看源码是也是一种很好的方式.本文介绍一种方法,简单配置vs,无需第三方插件就可以将asp.net core的源码链接自己的项目,随时穿梭于core的源 ...
- thymeleaf的具体语法
thymeleaf模板引擎是什么?请点击我查看 文章目录 thymeleaf模板引擎是什么?请点击我查看 代码 该实例代码延续[thymeleaf模板引擎](https://blog.csdn.net ...
- 用来创建用户docker registry认证的Secret
集群环境:1.k8s用的是二进制方式安装2.操作系统是linux (centos)3.操作系统版本为 7.4/7.94.k8s的应用管理.node管理.pod管理等用rancher.k8s令牌以及ma ...
- MySQL 的发展历史和版本分支
时间和里程碑 想查看之前的版本可以从这里找到mysql4,5,8等版本http://mirrors.sohu.com/mysql/下面简单回顾下相关的一些版本信息1996 年 MySQL 1.0 发布 ...
- drf路由组件(4星)
路由组件(4星) 路由Routers 对于视图集ViewSet, 我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息. REST f ...