【云备份】热点管理模块

目录

1.热点管理文件的基本思路 

2.热点管理类的设计

3.热点管理类的实现


 

1.热点管理文件的基本思路 

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

而热点文件的判断在于上传的文件的最后一次访问时间是否在热点判断时间之内。

实现思路也就是遍历所有文件,检测文件最后一次访问时间,与当前时间进行相减得到差值,这个差值如果大于我们设置好的非热点判断时间,则可以认为是非热点文件,此时需要进行压缩存放到压缩路径中,删除源文件

事实上,我们这里有两种选择:

  1. 从数据管理模块中遍历所有备份文件信息
  2. 遍历备份文件夹,获取所有文件的属性,然后进行判断。

我们选择第2种,每一次都是获取文件的最新数据然后进行判断,并且还可以解决数据信息缺漏的问题,

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

基于这个思想,我们需要将上传的文件存储位置与压缩后压缩文件的存储位置分开。

这样在遍历上传文件夹的时候不至于将压缩过的文件又进行非热点处理了。

总结之后,我们得出几个关键点与步骤:

  1. 上传文件有自己的上传存储位置,非热点文件的压缩存储有自己的存储位置;
  2. 遍历备份目录,获取所有文件路径名称;
  3. 逐个获取每个文件最后一次访问时间,进而完成是否热点文件的判断;
  4. 对非热点文件进行压缩存储,删除原来的未压缩文件修改数据管理模块对应的信息——压缩标志位设置为true

2.热点管理类的设计

热点管理类中,只要包含两个成员函数:

  • HotJudge:用于判断文件是否为非热点文件;
  • RunModule:主要的运行函数,完成上述热点管理的全部步骤。
class HotManager
{
public:HotManager();bool RunModule(); // 主逻辑函数
private:bool HotJudge(const std::string &filename); // 判断是否为非热点文件
};

3.热点管理类的实现

hot.hpp

#ifndef __MY_HOT__
#define __MY_HOT__
#include <unistd.h>
#include "data.hpp"extern cloud::DataManager* _data; // 全局数据管理类对象
namespace cloud
{class HotManager{public:HotManager(){Config* config = Config::GetInstance(); // 获取配置文件读取类的单例//我们要保证遍历的目录是存在的,不存在就创建一个FileUtil fu1(config->GetBackDir());FileUtil fu2(config->GetPackDir());fu1.CreateDirectory();fu2.CreateDirectory();}bool RunModule(){Config* config = Config::GetInstance(); // 获取配置文件读取类的单例while(1){// 1.遍历备份目录,获取所有文件名FileUtil fu(config->GetBackDir());std::vector<std::string> array;fu.ScanDirectory(&array);//遍历目录,注意目录不存在的情况,首先需要先创建目录,这个构造函数为我们解决了// 2.遍历判断文件是否是非热点文件for(auto &a : array)//a就是每个文件的路径名称{if(HotJudge(a) == false)//是热点文件,不用压缩continue; //是非热点文件,需要进行压缩// 3.获取文件备份信息BackupInfo info;if(_data->GetOneByRealpath(a, &info) == false){// 现在存在一个文件,但是没有备份信息info.NewBackupInfo(a);//设计所有信息}// 4.对非热点文件进行压缩处理  FileUtil tmp(a);tmp.Compress(info.pack_path);// 5.删除源文件,修改备份信息tmp.Remove();info.pack_flag = true;_data->Updata(info);//更新}usleep(1000);//避免空目录循环遍历,消耗CPU功率过高}return true;}private:bool HotJudge(const std::string &filename){Config* config = Config::GetInstance(); // 获取配置文件读取类的单例,获取hottimeFileUtil fu(filename);//获取当前文件的LastAcctimetime_t last_atime = fu.LastAcctime();time_t cur_time = time(NULL);if(cur_time - last_atime > config->GetHotTime())//判断非热点文件的核心{return true;//是非热点文件}return false;//是热点文件}};
}
#endif

cloud.cc

#include "util.hpp"
#include "conf.hpp"
#include "data.hpp"
#include"hot.hpp"cloud::DataManager * _data;
void HotTest()
{_data=new cloud::DataManager();cloud::HotManager hot;hot.RunModule();}
int main(int argc, char *argv[])
{HotTest();return 0;
}

这个时候我们换另外一个机器来看

 

我们发现创建好了backdir和packdir 

我们把bundle.h拷贝到这个backdir里面去,静静等待30秒(我们配置文件里面设置的非热点判断时间)

也是成功了。很好了

我们去cloud.dat里面看到压缩记录了。

 

 


我们git一下

 

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

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

相关文章

LeetCode 560. 和为 K 的子数组 | 前缀和与哈希表的巧妙应用

文章目录 方法思路&#xff1a;前缀和 哈希表核心思想关键步骤 代码实现复杂度分析示例解析总结 题目描述 给定一个整数数组 nums 和一个整数 k&#xff0c;请统计并返回该数组中和为 k 的子数组的数量。 子数组是数组中连续的非空元素序列。 示例 输入&#xff1a;nums …

Windows配置grpc

Windows配置grpc 方法一1. 使用git下载grph下载速度慢可以使用国内镜像1.1 更新子模块 2. 使用Cmake进行编译2.1 GUI编译2.2 命令行直接编译 3. 使用Visual Studio 生成解决方法 方法二1. 安装 vcpkg3.配置vckg的环境变量2. 使用 vcpkg 安装 gRPC3. 安装 Protobuf4. 配置 CMake…

【算法基础】快速排序算法 - JAVA

一、算法基础 1.1 什么是快速排序 快速排序&#xff08;Quick Sort&#xff09;是一种高效的分治排序算法&#xff0c;由英国计算机科学家Tony Hoare于1960年提出。它的核心思想是&#xff1a; 选择一个基准元素&#xff08;pivot&#xff09;将数组分成两部分&#xff1a;小…

Linux用户管理命令和用户组管理命令

一、用户管理命令 1.1、adduser 添加新用户 1、基本语法 adduser 用户名 &#xff08;功能描述&#xff1a;添加新用户&#xff09; 应用场景1&#xff1a;企业开发&#xff0c;多人协同&#xff08;也会有多人使用相同的一个低权限用户&#xff09;。 应用场景2&#x…

记录两个免费开源又好用的后台模版vue3

一.element-plus-admin 一套基于vue3、element-plus、typesScript、vite的后台集成方案 1.简介 vue-element-plus-admin 是一个基于 element-plus 免费开源的中后台模版。使用了最新的 Vue3&#xff0c;Vite&#xff0c;Typescript等主流技术开发&#xff0c;开箱即用的中后…

Flip PDF Plus Corp7.7.22电子书制作软件

flip pdf plus corporate7.7.22中文版由FlipBuilder官方出品的一款企业级的翻页电子书制作软件&#xff0c;拥有丰富的模板&#xff0c;主题和动画场景&#xff0c;每本书最大页数1000页&#xff0c;每本书的最大大小1GB&#xff0c;即可以帮助企业用户制作好丰富的电子书籍。 …

C语言蓝桥杯真题代码

以下是不同届蓝桥杯C语言真题代码示例&#xff0c;供参考&#xff1a; 第十三届蓝桥杯省赛 C语言大学B组 真题&#xff1a;卡片 题目&#xff1a;小蓝有很多数字卡片&#xff0c;每张卡片上都是数字1-9。他想拼出1到n的数列&#xff0c;每张卡片只能用一次&#xff0c;求最大的…

[Windows] Kazumi番剧采集v1.6.9:支持自定义规则+在线观看+弹幕,跨平台下载

[Windows] Kazumi番剧采集 链接&#xff1a;https://pan.xunlei.com/s/VOPLMhEQD7qixvAnoy73NUK9A1?pwdtu6i# Kazumi是一款基于框架; 开发的轻量级番剧采集工具&#xff0c;专为ACG爱好者设计。通过;自定义XPath规则; 实现精准内容抓取&#xff0c;支持多平台&#xff08;An…

探秘数据结构:构建高效算法的灵魂密码

摘要 数据结构作为计算机科学的基石&#xff0c;其设计与优化直接影响算法效率、资源利用和系统可靠性。本文系统阐述数据结构的基础理论、分类及其核心操作&#xff0c;涵盖数组、链表、栈、队列、树、图、哈希表与堆等经典类型。深入探讨各结构的应用场景与性能对比&#xf…

机器人--架构及设备

机器人的四大组成部分 控制系统 驱控系统 执行系统 电机属于执行系统的设备。 传感系统 传感系统分为内部传感系统和外部传感系统。 内部传感系统(内部传感器)&#xff1a; 用于获取机器人内部信息&#xff0c;比如IMU&#xff0c;力传感器等。 外部传感系统(外部传感器):…

人工智能:如何快速筛选出excel中某列存在跳号的单元格位置?

前提&#xff1a; 电脑上必须提前安装好了【office AI】软件工具 方法如下&#xff1a; 1、打开要操作的excel表格&#xff0c;点击上方的【officeAI】&#xff0c;再点击左边的【右侧面板】按钮&#xff0c;就会出现如下右侧的【OfficeAI助手】 2、在OfficeAI助手的聊天框…

Spring MVC入门

介绍了Spring MVC框架的概念、特征及核心功能&#xff0c;通过案例详细介绍了Spring MVC开发所需要的开发环境以及基本的开发步骤。 一、Spring MVC框架概述 Spring MVC是Spring框架的一个模块&#xff0c;是一个基于Java的实现了MVC设计模式的轻量级Web框架。它通过一套注解和…

贪心算法求解边界最大数

贪心算法求解边界最大数&#xff08;拼多多2504、排列问题&#xff09; 多多有两个仅由正整数构成的数列 s1 和 s2&#xff0c;多多可以对 s1 进行任意次操作&#xff0c;每次操作可以置换 s1 中任意两个数字的位置。多多想让数列 s1 构成的数字尽可能大&#xff0c;但是不能比…

Ubuntu ZLMediakit的标准配置文件(rtsp->rtmp->hls)

最近在工作中遇到不生成hls资源的问题,后面发现是配置文件有误,特此记录正确的config.ini配置文件,方便查阅。 最终解决方案,通过下面这种格式可以访问到flv视频,具体为什么不太清楚,rtmp格式:rtmp://39.113.48.113:8089/live/1744168516937396175 记录最终解决方案:ht…

# LeetCode 1007 行相等的最少多米诺旋转

LeetCode 1007 行相等的最少多米诺旋转 原题英文&#xff1a;Minimum Domino Rotations For Equal Row 难度&#xff1a;中等 | 标签&#xff1a;数组、贪心 1 题目重述 给定两行长度相同的多米诺骨牌&#xff1a; tops[i] 表示第 i 张骨牌上面的数字&#xff1b;bottoms[…

大数据技术:从趋势到变革的全景探索

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 在数字化时代的浪潮下,大数据已经不再是一个陌生的概念。从日常生活中的社交媒体,到企业决策支持系统,再到公共管理的大数据应用,它正在改变着我们的工作和生活方式。随着技术的进步,传统的数据…

前端八股Day5——XHS某中厂实习前端一面

没写完&#xff0c;睡醒补 CSS盒模型 //出现频率好高&#xff0c;感觉每次写面经都遇到 W3C标准盒模型(content-box)&#xff1a;盒子宽高width/heightpaddingbordermargin IE怪异盒模型(border-box)&#xff1a;盒子宽高width/heigth(包括padding和border)margin 默认标准切换…

INP指标

什么是INP&#xff08;Interaction to Next Paint&#xff09; 参考网站&#xff1a;webVital-INP文档 定义与核心目标 INP 是一项稳定的 Core Web Vitals 指标&#xff0c;通过统计用户访问期间所有符合条件的互动约定时间&#xff0c;评估网页对用户操作的总体响应能力。最…

剖析扩散模型(Denoising Diffusion Probabilistic Models)

文章目录 1. 前言2. 前向扩散过程(Forward Diffusion)3. 反向生成过程&#xff08;Reverse Process&#xff09;4. 训练和推理过程中的伪代码5. 训练过程代码实现&#xff08;Training&#xff09;5.1 时间嵌入模块——TimeEmbedding5.2 前向扩散过程——GaussianDiffusionTrai…

基于 Spring Boot 瑞吉外卖系统开发(九)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;九&#xff09; 保存菜品 菜品管理页面提供了一个“新增菜品”按钮&#xff0c;单击该按钮时&#xff0c;会打开新增菜品页面。 请求路径/dish&#xff0c;请求方法POST&#xff0c;参数使用DishDto类接收。 DishDto 添加f…