当前位置: 首页 > news >正文

【云备份】热点管理模块

目录

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.xdnf.cn/news/266743.html

相关文章:

  • 给文件内容加行号
  • 大型语言模型个性化助手实现
  • LeetCode - 1137.第N个泰波那契数
  • python入门(3)循环
  • 腾讯混元-DiT 文生图
  • Vue 3 Element Plus 浏览器使用例子
  • dstack 是 Kubernetes 和 Slurm 的开源替代方案,旨在简化 ML 团队跨顶级云、本地集群和加速器的 GPU 分配和 AI 工作负载编排
  • 大数据引领行业革命:深度解析与未来趋势
  • 接口测试——HTTP状态码
  • bellard.org‌ : QuickJS 如何使用 qjs 执行 js 脚本
  • 施磊老师rpc(三)
  • Docker安装Ollama及使用Ollama部署大模型
  • 二极管反向恢复的定义和原理
  • SQL语句--postgis语句(矢量数据的定义与操作)
  • REINFORCE蒙特卡罗策略梯度算法详解:python从零实现
  • STM32 DMA直接存储器存取
  • 解码响应式 Web 设计:原理、技术与优劣势全解析
  • C++代码随想录刷题知识分享-----142.环形链表II
  • 希洛激活器策略思路
  • n8n工作流自动化平台的实操:Cannot find module ‘iconv-lite‘
  • 生成式 AI 与 AI 的区别
  • DeepSeek实战--LLM微调
  • LeetCode算法题 (设计链表)Day16!!!C/C++
  • 「Mac畅玩AIGC与多模态16」开发篇12 - 多节点串联与输出合并的工作流示例
  • ipvsadm,是一个什么工具?
  • 中国 AIGC 确权革命:“AI 创意・中国” 平台上线,存证成本降至 0.1 元 / 件
  • CAN网桥中继隔离抗干扰集线器重映射一进一出CAN扩展CAN Bridge
  • 在Java项目中实现本地语音识别与热点检测,并集成阿里云智能语音服务
  • Dubbo(92)如何在微服务架构中应用Dubbo?
  • 深入理解C++类型转换:从基础到高级应用