【云备份|| 日志 day5】文件热点管理模块

news2024/11/28 21:47:14

在这里插入图片描述

云备份day5

  • 热点管理模块

热点管理模块

服务器端的热点文件管理是对上传的非热点文件进行压缩存储,节省磁盘空间。

而热点文件的判断在于上传的文件的最后一次访问时间是否在热点判断时间之内,比如如果一个文件一天都没有被访问过我们就认为这是一个非热点文件,其实就是当前系统时间,与文件最后一次访问时间之间的时间差是否在一天之内的判断。

而我们需要对上传的文件每隔一段时间进行热点检测,相当于遍历上传文件的存储文件夹,找出所有的文件,然后通过对逐个文件进行时间差的判断,来逐个进行热点处理。

基于这个思想,我们需要将上传的文件存储位置与压缩后压缩文件的存储位置分开。这样在遍历上传文件夹的时候不至于将压缩过的文件又进行非热点处理了。

关键点:

  1. 上传文件有自己的上传存储位置,非热点文件的压缩存储有自己的存储位置
  2. 遍历上传存储位置文件夹,获取所有文件信息。
  3. 获取每个文件最后一次访问时间,进而完成是否热点文件的判断。
  4. 对非热点文件进行压缩存储,删除原来的未压缩文件

服务端热点管理模块实现-热点管理类的设计

//因为数据管理是要在多个模块中访问的,因此将其作为全局数据定义,在此处声明使用即可
extern DataManager *_data;
class HotManager{
private:
	std::string _back_dir;
	std::string _pack_dir;
	std::string _arc_suffix;
	std::string _url_prefix;
	time_t _hot_time;
public:
HotManager();
	bool HotJudge(const std::string &file);
	bool RunModule();
};

代码:

class HotManager{
		private:
			std::string _back_dir;
			std::string _pack_dir;
			std::string _pack_suffix;
			int _hot_time;
		private:
			//非热点文件-返回真;热点文件-返回假
			bool HotJudge(const std::string &filename){
				FileUtil fu(filename);
				time_t last_atime = fu.LastATime();
				time_t cur_time = time(NULL);
				if (cur_time - last_atime > _hot_time){
					return true;
				}
				return false;
			}
		public:
			HotManager() {
				Config *config = Config::GetInstance();
				_back_dir = config->GetBackDir();
				_pack_dir = config->GetPackDir();
				_pack_suffix = config->GetPackFileSuffix();
				_hot_time = config->GetHotTime();
				FileUtil tmp1(_back_dir);
				FileUtil tmp2(_pack_dir);
				tmp1.CreateDirectory();
				tmp2.CreateDirectory();
			}
			bool RunModule() {
				while(1){
					//1. 遍历备份目录,获取所有文件名
					FileUtil fu(_back_dir);
					std::vector<std::string> arry;
					fu.ScanDirectory(&arry);
					//2. 遍历判断文件是否是非热点文件
					for (auto &a : arry) {
						if (HotJudge(a) == false){
							continue;//热点文件则不需要特别处理
						}
						//3. 获取文件的备份信息
						BackupInfo bi;
						if (_data->GetOneByRealPath(a, &bi) == false){
							//现在有一个文件存在,但是没有备份信息
							bi.NewBackupInfo(a);//设置一个新的备份信息出来
						}
						//3. 对非热点文件进行压缩处理
						FileUtil tmp(a);
						tmp.Compress(bi.pack_path);
						//4. 删除源文件,修改备份信息
						tmp.Remove();
						bi.pack_flag = true;
						_data->Update(bi);
					}
					usleep(1000);//避免空目录循环遍历,消耗cpu资源过高
				}
				return true;
			}
	};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1187847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++ 信奥编程 1129:统计数字字符个数

#include<bits/stdc.h> using namespace std; int main() {string arr; //定义变量 arr getline(cin, arr); //通过函数输入并存储到变量中 int a 0; // 定义变量a&#xff0c;并赋初值0for(int i 0; i < arr.length(); i){ if(arr[i] < 57 && arr[i] &…

2023年【北京市安全员-A证】最新解析及北京市安全员-A证复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年北京市安全员-A证最新解析为正在备考北京市安全员-A证操作证的学员准备的理论考试专题&#xff0c;每个月更新的北京市安全员-A证复审模拟考试祝您顺利通过北京市安全员-A证考试。 1、【多选题】《中华人民共和…

【C语法学习】20 - 文件访问顺序

文章目录 0 前言1 文件位置指示符2 rewind()2.1 函数原型2.2 参数2.3 返回值2.4 使用说明 3 ftell()函数3.1 函数原型3.2 参数3.3 返回值 4 fseek()4.1 函数原型4.2 参数4.3 返回值 5 示例5.1 示例15.2 示例2 0 前言 C语言文件访问分为顺序文件访问和随机文件访问。 1 文件位…

「Verilog学习笔记」使用子模块实现三输入数的大小比较

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 分析 题目要求编写子模块实现两个输入数的大小比较并输出较小值&#xff0c;可以使用if-else语句实现。同时要求在主模块中实现三个输入数值的大小比较&#xff0c;假设三个…

cortex-A7核 中断实验(按键中断实验)

1.选择按键触发方式 下降沿 2.解决消抖的方法 1&#xff09;ARM中&#xff1a;延时消抖 2&#xff09;linux驱动开发&#xff1a;定时器函数 3.框图 内部流程框图&#xff1a; 需要RCC GPIO EXTI GIC章节 中断触发流程&#xff1a; 4.RCC 章节 1&#xff09;使能GPIOF组 …

可root设备复制文件到system目录或者子目录下

目标或问题&#xff1a; 在可root的设备中&#xff0c;如何将某个文件拷贝到system/xxxx/xxxx的系统目录下&#xff1f; 解决方法&#xff1a; 首先依次执行以下命令&#xff1a; adb root adb remount 出现如下图所示&#xff1a; 然后执行复制文件推送到设备的命令即可&…

代码解释【待解决】

这里写目录标题 代码解释数组转化为列表&#xff0c;方便在哪里yeildrange()函数还有一些常用的小技巧。在这里我们列举两个常用技巧&#xff0c;以供参考梯度l.sum().backward()的粗浅理解detatch文字描述在默认情况下&#xff0c;PyTorch会累积梯度&#xff0c;我们需要清除之…

Go cobra简介

当你需要为你的 Go 项目创建一个强大的命令行工具时&#xff0c;你可能会遇到许多挑战&#xff0c;比如如何定义命令、标志和参数&#xff0c;如何生成详细的帮助文档&#xff0c;如何支持子命令等等。为了解决这些问题&#xff0c;github.com/spf13/cobra 就可以派上用场。 g…

ESP32 C3 smartconfig一键配网报错

AP配网 在调试我的esp32c3的智能配网过程中&#xff0c;发现ap配网使用云智能App是可以正常配置的。 切记用户如果在menu菜单里使能AP配网&#xff0c;默认SSID名字为adh_PK值_MAC后6位。用户可以修改这个apssid的键值&#xff0c;但是要使用云智能app则这个名字的开头必须为ad…

asp.net外卖网站系统VS开发mysql数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net外卖网站系统 是一套完善的web设计管理系统&#xff0c;系统采用mvc模式&#xff08;BLLDALENTITY&#xff09;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为mysql&#xff0c;使用c#语…

不同访问修饰符的访问数据权限的区别

在Java中&#xff0c;有四种访问修饰符&#xff1a;public、private、protected和默认修饰符。它们的作用是控制类、变量和方法的可见性&#xff0c;也就是说它们控制了哪些代码可以访问某个类、变量或方法的数据成员。 public&#xff1a;可以被任何类访问&#xff0c;对外部…

【C++】手写堆

手写堆&#xff08;小顶堆&#xff09; 堆使用数组存储&#xff0c;下标从1开始&#xff08;下标从0开始也可以&#xff09;。 下标为u的节点&#xff1a; 左子节点下标为&#xff1a;2 * u&#xff08;下标从0开始&#xff0c;左子节点则为2 * i 1&#xff09;右子节点下标…

最大似然估计直观理解

目的 由于直接估计类条件概率密度函数很困难。 解决的办法&#xff0c;把估计完全未知的概率密度转化为估计参数。这里就将概率密度估计问题转化为参数估计问题&#xff0c; 极大似然估计就是一种参数估计方法。当然了&#xff0c;概率密度函数的选取很重要&#xff0c;模型正…

在代码中忽略特定的编译告警

在移植别人的代码时&#xff0c;有些告警看着不爽&#xff0c;但又不想去改动原来的代码。可以在头文件中加一句&#xff1a; #pragma diag_suppress 111 即可忽略特定的编译告警。 其中&#xff0c;111是告警代码。 #pragma diag_suppress 111 比如&#xff0c;原始代码的…

【网络】UDP协议

UDP协议 一、传输层1、再谈端口号2、两个命令 二、UDP协议1、UDP协议格式2、UDP的解包和分用3、UDP的特点4、UDP使用注意事项5、基于UDP的应用层协议 一、传输层 我们以前在学习HTTP等应用层协议时&#xff0c;为了便于理解&#xff0c;简单的认为HTTP协议是将请求和响应直接发…

AI:75-基于生成对抗网络的虚拟现实场景增强

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

如何将系统盘MBR转GPT?无损教程分享!

什么是MBR和GPT&#xff1f; MBR和GPT是磁盘的两种分区形式&#xff1a;MBR&#xff08;主引导记录&#xff09;和GPT&#xff08;GUID分区表&#xff09;。 新硬盘不能直接用来保存数据。使用前应将其初始化为MBR或GPT分区形式。但是&#xff0c;如果您在MBR时需…

微服务-网关设计

文章目录 引言I 网关部署java启动jar包II 其他服务部署细节2.1 服务端api 版本号III 网关常规设置3.1 外部请求系统服务都需要通过网关访问3.2 第三方平台回调校验文件的配置IV 微服务日志跟踪4.1 打印线程ID4.2 封装线程池任务执行器4.3 将自身MDC中的数据复制给子线程4.4 微服…

「我在淘天做技术」音视频技术及其在淘宝内容业务中的应用

作者&#xff1a;李凯 一、前言 近年来&#xff0c;内容电商似乎已经充分融入到人们的生活中&#xff1a;在闲暇时间&#xff0c;我们已经习惯于拿出手机&#xff0c;从电商平台的直播间、或者短视频链接下单自己心仪的商品。 尽管优质的货品、实惠的价格、精致的布景、有趣的…

03-React事件处理 生命周期 Diffing算法

React事件处理 背景 1.通过onXxx属性指定事件处理函数(注意大小写) React使用的是自定义(合成)事件, 而不是使用的原生DOM事件 比如原生onclick的事件在React中变成了onClick&#xff0c;这么搞是为了更好的兼容性React中的事件是通过事件委托方式处理的(委托给组件最外层的…