当前位置: 首页 > 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一下

 

相关文章:

  • 终端与环境变量
  • [一文解决大模型微调+部署+RAG] LLamaFactory微调模型后使用Ollama + RAGFlow在Windows本地部署
  • Linux用户管理命令和用户组管理命令
  • 【文献阅读】全球干旱地区植被突变的普遍性和驱动因素
  • PowerBI企业运营分析——多维度日期指标分析
  • MCP协议的使用分享
  • 数据赋能(212)——质量管理——统一性原则
  • 第7章 【Python数据类型大爆炸】Python 基础语法和数据类型特性的实例
  • 时间交织(TIADC)的失配误差校正处理(以4片1GSPS采样率的12bitADC交织为例讲解)
  • Sentinel学习
  • 《AI大模型应知应会100篇》第46篇:大模型推理优化技术:量化、剪枝与蒸馏
  • Qwen3小模型实测:从4B到30B,到底哪个能用MCP和Obsidian顺畅对话?
  • 数据结构:顺序栈的完整实现与应用
  • shell(7)
  • More Effective C++学习笔记
  • 高中数学联赛模拟试题精选学数学系列第3套几何题
  • 影刀RPA中新增自己的自定义指令
  • 基于51单片机和LCD1602、矩阵按键的小游戏《猜数字》
  • 健康养生新主张
  • 【AI大模型学习路线】第一阶段之大模型开发基础——第三章(大模型实操与API调用)单轮对话与多轮对话调用。
  • 四人自驾游宣恩因酒店爆满无处住宿,求助文旅局后住进局长家
  • 对华小额包裹免税取消=更高价格+更慢物流,美消费者为关税政策买单
  • 范宇任上海宝山区副区长
  • 智能终端出海服务创新联合体成立
  • “光荣之城”2025上海红色文化季启动,红色主题市集亮相
  • 癌症来临前,可能伪装成这几种常见病,千万别大意