【云备份】热点管理模块

文章目录

  • 整体思路概括
  • 热点管理实现
    • 构造函数
    • Hotjudge ——热点判断
    • RunModule ——运行模块
  • 代码实现
    • hot.hpp

整体思路概括

整体概括:
对服务器上备份的文件进行检测,那些文件长时间没有被访问,则认为是非热点文件 进行压缩存储,节省磁盘空间

实现思路:
遍历所有的文件,检测文件的最后一次访问时间,与当前时间进行相减得到差值
若差值大于设定好的非热点判断时间,则认为是非热点文件 进行压缩 存放到压缩路径中 删除源文件

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

遍历文件夹 每次获取文件的最新数据进行判断 还可以解决数据信息缺漏的问题

流程:
1. 遍历备份目录 获取所有文件路径名称
2. 逐个文件获取最后一次访问时间与当前系统时间进行比较判断
3. 对非热点文件进行压缩处理 删除源文件
4. 修改数据管理模块 对应的文件信息(压缩标志-> true 表示这个文件以及被压缩处理了)


热点管理实现

_back_dir 备份文件路径
_pack_dir 压缩文件路径
_pack_suffix 压缩包后缀名
_hot_time 热点时间


在hot.hpp中 使用 extern 修饰 在cloud命名空间中的DataManger类中的 全局变量 _data 就可以在其他.c 或者.cpp中使用


构造函数

通过Config类中的 GetInstance 函数 创建一个对象
再调用 Config类中的 GetBackDir 函数 获取 备份文件路径
调用 GetPackDir函数 获取 压缩文件路径
调用 GetPackFileSuffix 函数 获取 压缩包后缀名
调用 GetHotTime 函数 获取 热点时间


Hotjudge ——热点判断

非热点文件返回true 热点文件返回false
通过filename实例化一个对象fu
再调用FileUtil类中的LastATime函数 获取 文件的最后一次访问时间
将 当前系统时间 cur_time 与 文件最后一次访问时间 last_atime 做差值比较
若大于_hot_time 则认为 是非热点文件 返回 true
若小于_hot_time 则认为是热点文件 返回 false


RunModule ——运行模块

通过_back_dir 备份文件路径 实例化一个对象 fu
创建一个string类型的 数组 arry
调用 FileUtil类中的 ScanDirectory 函数 浏览所有文件数据 并将其数据分别插入到arry数组中



使用范围for进行遍历 而变量a作为路径文件名
若为热点文件则直接跳过


通过cloud命名空间中的 BackupInfo类 实例化一个对象 bi
调用 cloud命名空间中的DataManger类的 GetOneByRealPath函数 获取 路径文件 a中的备份信息
若获取备份信息失败,则 调用 cloud命名空间中的 BackupInfo类的 NewBackupInfo函数
设置一个新的备份信息出来


通过 文件名称a 实例化一个 FileUtil类的对象
再通过FileUtil类的 compress 函数 进行压缩

调用 FileUtil类的 Remove 函数 删除文件
将BackupInfo类中的 pack_flag 变量 压缩标志设为true 表示压缩成功
bi中包含文件备份信息
所以调用 BackupInfo类中的 update 函数 将bi更新到 _table哈希表中


代码实现

hot.hpp

#ifndef _MY_HOT_
#define _MY_HOT_
#include<unistd.h>
#include"data.hpp"


extern cloud::DataManger *_data;
namespace cloud
{
   class HotManger
    {
        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:
         HotManger() //构造函数
         {
             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)
            {
             //遍历备份目录 获取所有文件名
             FileUtil fu(_back_dir);
             std::vector<std::string>arry;
             fu.ScanDirectory(&arry);

             //遍历判断文件是否是非热点文件
              for(auto &a :arry)
              {
                  if(Hotjudge(a)==false)//说明为热点文件
                  {
                    //热点文件不需要处理 所以直接跳过
                      continue;
                  }
                
                //获取文件备份信息
                 cloud::BackupInfo bi;
                 //GetOneByRealPat 通过realpath获取单个数据
                 if(_data->GetOneByRealPath(a,&bi)==false)
                 {
                   //有文件存在 但是没有备份信息
                   bi.NewBackupInfo(a);
                 }
                  
                //对非热点文件进行压缩处理
                FileUtil tmp(a);
                tmp.compress(bi.pack_path);//压缩

                //删除源文件 修改备份信息
                tmp.Remove(); 
                bi.pack_flag=true;//表示压缩成功
                _data->update(bi);//将bi更新到_table哈希表中
              }
              usleep(1000);
            }
             return true;
         }
    };
     
}

#endif

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华清远见嵌入式学习——C++——作业2

作业要求&#xff1a; 代码&#xff1a; #include <iostream>using namespace std;class Rect { private:int width;int height;public:void init(int w,int h);void set_w(int w);void set_h(int h);void show(); };void Rect::init(int w,int h) {width w;height h;…

BUUCTF sqltest 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 网站遭受到攻击了&#xff0c;还好我们获取到了全部网络流量。 链接: https://pan.baidu.com/s/1AdQXVGKb6rkzqMLkSnGGBQ 提取码: 34uu 注意&#xff1a;得到的 flag 请包上 flag{} 提交 密文&#xff1a; 下载附件…

GDPU 数据结构 天码行空12

文章目录 数据结构实验十二 图的遍历及应用一、【实验目的】二、【实验内容】三、实验源代码&#x1f37b; CPP&#x1f37b; C 数据结构实验十二 图的遍历及应用 一、【实验目的】 1、 理解图的存储结构与基本操作&#xff1b; 2、熟悉图的深度度优先遍历和广度优先遍历算法…

RabbitMQ的Web管理页面

访问页面 http://IP:15672/账号密码默认都是&#xff1a;guest 主页概览 Overview 显示当前RabbitMQ Broker的运行信息、连接信息、集群信息以及配置信息等。 连接 Connections 无论生产者还是消费者&#xff0c;都需要与RabbitMQ建立连接后才可以完成消息的生产和消费&#…

PHP:js中怎么使用PHP变量,php变量为数组时的处理

方法一&#xff1a;使用内嵌 PHP 脚本标记 1、简单的拼接 使用内嵌的 PHP 脚本标记 <?php ?> 将 PHP 变量 $phpVariable 的值嵌入到 JavaScript 代码中。 <?php $phpVariable "Hello, World!"; ?><script> // 将 PHP 变量的值传递给 JavaS…

mac安装homebrew/brew遇到443

文章目录 问题描述解决方法方法一方法二 参考文献 问题描述 brew 全称Homebrew 是Mac OSX上的软件包管理工具 想在mac终端安装&#xff0c;运行网上提供的指令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)&quo…

【Springboot系列】SpringBoot整合Jpa

文章目录 前言&#xff1a;什么是JPA&#xff1f;JPA优缺点优点1.简化开发&#xff1a;2.高度抽象&#xff1a;3.跨数据库支持&#xff1a;4.自动化的事务管理&#xff1a; 缺点1.学习成本较高&#xff1a;2.性能问题&#xff1a;3.灵活性受限&#xff1a; 示例版本依赖代码Use…

Ubuntu安装nfs服务步骤

Ubuntu安装nfs服务步骤 一、NFS&#xff1f; NFS&#xff1a;网络文件系统&#xff08;Network File system File&#xff09;缩写&#xff0c;可通过网络让不同的机器&#xff0c;不同操作系统之间可以彼此共享文件和目录。 二、安装 1.安装nfs服务器命令&#xff1a;sudo…

原神:夏洛蒂是否值得培养?全队瞬抬治疗量不输五星,但缺点也很明显

作为四星冰系治疗角色&#xff0c;夏洛蒂的实战表现可以说相当让人惊喜。不仅有相当有意思的普攻动作以及技能特效&#xff0c;而且她还有治疗和挂冰等功能性。下面就来详细聊聊夏洛蒂是否值得培养。 【治疗量让人惊喜&#xff0c;但也有缺点】 说实话&#xff0c;在使用夏洛蒂…

智能手表上的音频(四):语音通话

上篇讲了智能手表上音频文件播放。本篇开始讲语音通话。同音频播放一样有两种case&#xff1a;内置codec和BT。先看这两种case下audio data path&#xff0c;分别如下图&#xff1a; 内置codec下的语音通话audio data path 蓝牙下的语音通话audio data path 从上面两张图可以看…

【Lustre相关】应用部署-03-Lustre集群部署实践(软raid方案)

文章目录 一、前言1、硬件配置2、组网拓扑3、总体方案 二、软件安装三、集群部署1、配置多路径2、配置高可用集群3、配置zpool4、部署lustre5、配置Lustre角色高可用6、配置Lustre状态监控6.1、Lustre网络状态监控6.2、Lustre集群状态监控6.3、配置优化6.3.1、设置故障恢复不回…

springboot整合easy-es实现数据的增删改查

背景 目前公司的一个老项目&#xff0c;查询贼慢&#xff0c;需要想办法提升一下速度&#xff0c;于是就想到了ES&#xff0c;现在尝试一下将ES整合到项目中来提升检索效率。 ES是基于倒排索引实现的&#xff0c;倒排索引中一个表相当于一个索引&#xff0c;表中的每条记录都…

飞翔的小鸟——Java

一、创建文件、包、类、插入图片文件 二、app包 1、Gameapp类&#xff08;运行游戏&#xff09; package app;import main.GameFrame;public class Gameapp {public static void main(String[] args) {//游戏的入口new GameFrame();} } 三、main包 1、Barrier&#xff08…

Django大回顾 -3 之响应对象、cbv和fbv、关于类中self是谁的问题、上传文件、模版

【1】isinstance方法 判断一个对象是否是一个已知的类型。 isinstance语法&#xff1a; isinstance(object&#xff0c;classinfo) object --------- 实例化对象 cassinfo ------- 可以是字节或间接类名、基本类型&#xff0c;或者由他们组成的元组 相同返回True&#xff0c;不…

【Excel】WPS快速按行筛选过滤

用的筛选都是进行列数据过滤&#xff0c;那么遇到一个情况需要行数据过滤查看数据 行过滤 选中行&#xff0c;然后右键菜单&#xff0c;行筛选。 列过滤

iOS NSDate的常用API

目录 一、创建日期 1.获取当前时间 2.当前时间指定秒数之后/前的时间 3.指定日期之后/后的时间 4.2001年之后/前指定秒数的时间 5.1970年之后/后指定秒数的时间 二、初始化日期 1.init 2.时间间指定秒数的时间 3.指定时间指定秒数之前/后的时间 4.2001年指定秒数之后…

【ZEDSLAM】Ubuntu18.04系统ZED 2i双目相机SDK安装、联合标定、SLAM测试

0.设备、环境和说明 笔记本电脑i5-8300H、GTX 1060、32GRAM 因为后面要测试Vins-Fusion和ORB-SLAM3&#xff0c;所以推荐安装Ubuntu 18.04&#xff08;或者Ubuntu 20.04&#xff09; ROS 1&#xff08;不建议用比Ubuntu18更低的版本&#xff09; ROS一键安装命令&#xff1a;…

【图论】重庆大学图论与应用课程期末复习资料(私人复习资料)

考试章节范围 第一章&#xff1a;1.1、1.2、1.3 填空 顶点集和边集都有限的图&#xff0c;称为有限图只有一个顶点的图&#xff0c;称为平凡图边集为空的图&#xff0c;称为空图顶点数为n的图&#xff0c;称为n阶图连接两个相同顶点的边的条数称为边的重数&#xff1b;重数大…

Jenkins 如何查看已经记录登录服务器的凭证密码

文章目录 一、背景描述二、解决方案一&#xff08;查看所有账号密码&#xff09;三、解决方案二&#xff08;查询指定账号密码&#xff09; 一、背景描述 在日常的开发过程中&#xff0c;有时候会出现忘记开发、测试服务器的登录密码的情况。此时恰巧 Jenkins 上记录了登录该主…

Java多线程核心技术一-多线程基础其他内容

接上篇&#xff1a; Java多线程核心技术一-基础篇synchronzied同步方法 Java多线程核心技术一-基础篇synchronzied同步语句块 1 String常量池特性与同步问题 JVM具有String常量池的功能&#xff0c;如下示例&#xff1a; public class Test01 {public static void main(Str…