C++项目——云备份-⑥-服务端热点管理模块的设计与实现

news2024/9/24 1:28:19

文章目录

  • 专栏导读
  • 1.热点管理类设计
  • 2.热点管理类的实现与整理

专栏导读

🌸作者简介:花想云 ,在读本科生一枚,C/C++领域新星创作者,新星计划导师,阿里云专家博主,CSDN内容合伙人…致力于 C/C++、Linux 学习。

🌸专栏简介:本文收录于 C++项目——云备份

🌸相关专栏推荐:C语言初阶系列C语言进阶系列C++系列数据结构与算法Linux
🌸项目Gitee链接:https://gitee.com/li-yuanjiu/cloud-backup

在这里插入图片描述

1.热点管理类设计

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

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

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

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

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

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

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

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

2.热点管理类的实现与整理

将热点管理类的实现置于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)
                {
                    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);
            }
            return true;
        }
    private:
        bool HotJudge(const std::string &filename)
        {
            Config* config = Config::GetInstance(); // 获取配置文件读取类的单例
            FileUtil fu(filename);
            time_t last_atime = fu.LastATime();
            time_t cur_time = time(NULL);
            if(cur_time - last_atime > config->GetHotTime())
            {
                return true;
            }
            return false;
        }
    };
}
#endif

在这里插入图片描述

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

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

相关文章

解放工程师双手帮助网工做运维

✍ SNMP为什么被誉为“网管神器”&#xff1f; ✍ SNMP不同版本有何区别&#xff1f; ✍ SNMP有哪些问题及Telemetry有何优势&#xff1f; telnet, ssh远程登录到设备&#xff1a; 简单网络管理协议&#xff1a;SNMP 集中式管理&#xff1a; 华为&#xff1a;e-sight 华三…

计算机毕设 基于CNN实现谣言检测 - python 深度学习 机器学习

文章目录 1 前言1.1 背景 2 数据集3 实现过程4 CNN网络实现5 模型训练部分6 模型评估7 预测结果8 最后 1 前言 Hi&#xff0c;大家好&#xff0c;这里是丹成学长&#xff0c;今天向大家介绍 一个深度学习项目 基于CNN实现谣言检测 1.1 背景 社交媒体的发展在加速信息传播的…

使用NATAPP内网穿透详细步骤

在开发过程中&#xff0c;避免不了前端和后端不在一个局域网下&#xff0c;这时候&#xff0c;前后端联调的时候&#xff0c;前端访问不到后端的服务器&#xff0c;使用穿透就可以解决这个问题。 1、打开网址https://natapp.cn/2、进行注册&#xff0c;然后登录 3、击购买渠道…

大数据-Storm流式框架(五)---DRPC

DRPC 概念 分布式RPC&#xff08;DRPC&#xff09;背后的想法是使用Storm在运行中并行计算真正强大的函数。 Storm拓扑接收函数参数流作为输入&#xff0c;并为每个函数调用发送结果的输出流。 DRPC并不是Storm的一个特征&#xff0c;因为它基于Storm的spouts&#xff0c;bo…

推荐一个高效测试用例工具:XMind2TestCase..

一、背景 软件测试的核心是什么&#xff1f;毫无疑问是测试分析和测试用例设计&#xff0c;也是日常测试投入最多时间的工作内容之一。 然而&#xff0c;传统的测试用例设计过程有很多痛点&#xff1a; 1、使用Excel表格进行测试用例设计&#xff0c;虽然成本低&#xff0c;但…

FL Studio音乐编曲软件好不好用?要不要购买

音乐编曲软件的出现使得音乐创作者能够克服时间和空间的限制&#xff0c;随时随地进行创作。随着信息时代的发展&#xff0c;使用编曲软件已成为音乐创作领域的主流。那么编曲软件哪个好用呢&#xff1f;我推荐这三款。 在业内&#xff0c;常用的音乐编曲软件包括Cubase、Logi…

增强常见问题解答搜索引擎:在 Elasticsearch 中利用 KNN 的力量

在快速准确的信息检索至关重要的时代&#xff0c;开发强大的搜索引擎至关重要。 随着大型语言模型和信息检索架构&#xff08;如 RAG&#xff09;的出现&#xff0c;在现代软件系统中利用文本表示&#xff08;向量/嵌入&#xff09;和向量数据库已变得越来越流行。 在本文中&am…

scratch接钻石 2023年9月中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析

目录 scratch接钻石 一、题目要求 1、准备工作 2、功能实现 二、案例分析

postgis ST_ClipByBox2D用法

官方文档 概述 geometry ST_ClipByBox2D(geometry geom, box2d box); 描述 以快速且宽松但可能无效的方式通过 2D 框剪切几何体。 拓扑上无效的输入几何图形不会导致抛出异常。 不保证输出几何图形有效&#xff08;特别是&#xff0c;可能会引入多边形的自相交&#xff09;…

FL Studio21.2中文版多少钱?值得下载吗

水果&#xff0c;全称Fruity Loop Studio&#xff0c;简称FL Studio。是一款全能的音乐制作软件&#xff0c;经过二十多年的演化更迭&#xff0c;其各项功能非常的先进。其开创性的Pat\song模式&#xff0c;也为初学者的学习提供了便利。那么水果音乐制作软件需要多少钱呢&…

鸡尾酒学习——沧海桑田

1、材料&#xff1a;冰块&#xff08;或者雪莲&#xff09;、蓝橙力娇酒、伏特加、橙汁、柠檬、雪碧/气泡水&#xff1b; 2、口感&#xff1a;酸甜口味&#xff0c;下层感觉是再喝橙汁&#xff0c;上层在喝有些度数的雪碧&#xff0c;可能是昨天的长岛冰茶过于惊艳&#xff0c;…

机器学习(四十九):高斯混合模型

补充一个聚类算法:高斯混合模型 假设有一组需要根据它们的相似性分组到几个部分或簇中的数据点。在机器学习中,这被称为聚类。有几种可用的聚类方法: K均值聚类分层聚类高斯混合模型在这篇文章中,我们将讨论高斯混合模型。 文章目录 正态或高斯分布期望最大化(EM)算法期…

微信 macOS 版迎来 3.8.4.20 更新,新功能一览

微信 macOS 版迎来 3.8.4.20 更新&#xff0c;增加了多个新功能&#xff0c;包括可将某个聊天在独立窗口中显示、可在聊天中搜索表情等。 附更新信息如下&#xff1a; 可将某个聊天在独立窗口中显示&#xff1b; ・可在聊天中搜索表情&#xff1b; ・新增 「看一看」&#…

Umijs创建一个antd+Ts项目环境

上文搭建Umijs环境并创建一个项目 介绍基本操作中 我们构建了一个Umijs环境的环境 但也只创建了一个页面 真正开发来讲 也不可能只创建几个界面这么简单 这里面的创建 还是非常完整的 这里 我创建一个文件夹 主要是做我们的项目目录 然后 我们在终端输入命令 然后 打开目录终…

VScode 自定义主题各参数解析

参考链接&#xff1a; vscode自定义颜色时各个参数的作用(史上最全)vscode编辑器&#xff0c;自己喜欢的颜色 由于 VScode 搜索高亮是在是太不起眼了&#xff0c;根本看不到此时选中到哪个搜索匹配了&#xff0c;所以对此进行了配置&#xff0c;具体想增加更多可配置项可参考…

第三篇:实践篇 《使用Assembler 实现图片任意切割功能》

实现原理&#xff1a; 共用一个texture、material、渲染状态等。紧通过修改vertex、uvs、indexes数据即可实现任意切割功能。 一、线段分割多边形&#xff0c;并分散多边形 线段分割多边形 已知多边形points&#xff0c;线段sp、ep。线段分割多边形得到两个多边形。 publi…

双十一期间VBA钜惠

大家好&#xff0c;本年度双11即将到来&#xff0c;为了答谢大家多年来的支持及更广泛的推广VBA的应用&#xff0c;“VBA语言専功”在此期间推出巨大优惠&#xff1a;此期间打包购买VBA技术资料实行半价优惠。 1 &#xff1a;面向对象&#xff1a;学员及非学员 2 &#xff1a…

AR眼镜安卓主板,智能眼镜光机方案定制

AR智能眼镜是一项涉及广泛技术的创新产品&#xff0c;它需要考虑到光学、显示、功耗、散热、延迟、重量以及佩戴人体工学等多个方面的因素&#xff0c;每一个项目都是技术进步所需攻克的难题。 在本文中&#xff0c;我们将重点讨论AR眼镜的主板和光学方案。 首先是AR智能眼镜的…

OpenCV学习(三)——响应鼠标事件(获取点击点坐标和颜色,利用鼠标进行绘图)

响应鼠标事件 3. 响应鼠标事件3.1 获取鼠标点击的坐标3.2 获取鼠标点击像素点的颜色3.3 在鼠标点击的位置生成圆3.4 通过拖动鼠标来绘制填充矩形3.5 通过拖动鼠标绘制未填充矩形3.6 使用鼠标选点绘制多边形3.7 按住鼠标左键进行绘图 3. 响应鼠标事件 使用OpenCV读取图像&#…

2023年第四届MathorCup大数据挑战赛(B题)|电商零售商家需求预测及库存优化问题|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2021年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 希望这些想法对大家的做题有一定的启发和借鉴意义。 让我们来…