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

【云备份】可视化客户端----QT开发➕QT数据库编程

文章目录

  • 一、 需求分析
  • 二、 概念结构设计
  • 三、逻辑结构设计
    • 1. 用户表 (users)
    • 2. 客户端本地文件信息表 (upload_files)
    • 3. 备份记录表 (backup_records)
    • 4. 服务端备份文件信息表 (backup_files)
  • 四、 开发工具
  • 五、具体实现
    • (一) 客户端程序运行演示

一、 需求分析

  1. 意义:
    1.1提供数据安全性:通过远程存储,减少因设备损坏、失窃或自然灾害导致的数据丢失风险。
    1.2高可用性:确保用户可以随时随地访问备份数据,提高业务连续性。
    1.3成本效益:相较于传统备份方式,云备份降低了硬件投资和维护成本。
    1.4自动化管理:简化备份过程,减少人为错误,提高操作效率。

  2. 设计任务
    2.1 用户身份验证:确保只有注册用户能够上传和访问备份数据,多用户只能查看自己的数据。
    2.2 客户端任务:支持用户选择指定文件夹,对该文件夹下文件自动备份。
    2.3 服务端任务:备份客户端上传的文件,支持用户查看,下载文件。
    2.4 多版本备份:支持多个备份版本的存储,以便在数据损坏或误删除时快速恢复。
    2.5易用性与用户界面:设计友好的用户界面,使用户能够方便地进行备份和恢复操作。

  3. 功能模块划分
    在这里插入图片描述

    3.1 支持多用户上传,查看云数据。
    3.2 客户端自动检测指定文件夹,支持将本地文件上传到云端。
    3.3 服务端接收客户端文件,对非热点文件压缩存储,支持用户查看,支持断点续传。
    3.4 提供前端页面,用户提供网页浏览/下载云端文件。
    3.5 使用数据库,存储用户信息,客户端本地文件信息,服务端已备份文件属性信息,备份记录信息。

  4. 预期目标
    多用户可以通过客户端程序选择指定文件夹,客户端程序监测该文件夹下文件,将需要上传的文件上传到云端。服务端接收并保存文件,对非热点文件进行压缩存储,提供前端页面支持用户查看云端数据。

二、 概念结构设计

在这里插入图片描述

三、逻辑结构设计

1. 用户表 (users)

属性名含义类型说明
user_id用户唯一标识符INT主键,自增
user_name用户名VARCHAR(255)唯一,不允许为空
phone_number电话号码VARCHAR(15)唯一,不允许为空
password密码VARCHAR(255)不允许为空
register_date注册日期TIMESTAMP默认当前时间
last_login最后登录时间TIMESTAMP

2. 客户端本地文件信息表 (upload_files)

属性名含义类型说明
upload_id上传文件唯一标识符INT主键,自增
user_id用户唯一标识符INT外键,引用用户表的user_id
file_path文件路径VARCHAR(255)不允许为空
file_etag文件ETag值VARCHAR(255)唯一,格式为’usrID-fName-fSize-FMtime’
复合唯一索引:ukey_user_file(user_id, file_path)

3. 备份记录表 (backup_records)

属性名含义类型说明
file_id备份记录唯一标识符INT主键,自增
user_id用户唯一标识符INT外键,引用用户表的user_id
upload_time文件上传时间TIMESTAMP默认当前时间,不允许为空
file_etag文件ETag值VARCHAR(255)唯一,格式为’usrID-fName-fSize-FMtime’
file_status文件状态ENUM取值范围:‘uploaded’, ‘modified’, ‘deleted’,默认为’uploaded’
在file_status列上建立索引

4. 服务端备份文件信息表 (backup_files)

属性名含义类型说明
backup_id服务端备份文件唯一标识符INT主键,自增
file_id备份记录唯一标识符INT外键,引用备份记录表的file_id
user_id用户唯一标识符INT外键,引用用户表的user_id
zip_path压缩文件路径VARCHAR(255)
backup_path备份文件路径VARCHAR(255)不允许为空
req_download_path请求下载文件的路径VARCHAR(255)不允许为空
file_size文件大小BIGINT不允许为空
is_zipped是否为压缩文件INT默认为0
fileAtime文件访问时间TIMESTAMP不允许为空
fileCtime文件创建时间TIMESTAMP不允许为空
fileMtime文件修改时间TIMESTAMP不允许为空
created_at创建时间TIMESTAMP默认当前时间

四、 开发工具

  1. 开发环境
软件名称类型版本号
Qt Creator开发工具4.11.1
Visual Studio Code开发工具1.93.0
Navicat数据库客户端16.3.7
  1. 运行支撑环境
环境描述版本
Linux (Ubuntu)用于部署和运行服务端20.04.6 LTS
MySQL数据存储与管理8.0.39-0ubuntu0.20.04.1
Windows部署和运行云备份客户端22631.4112

五、具体实现

(一) 客户端程序运行演示

  1. 程序运行前 读取数据库信息到内存

在这里插入图片描述

  1. 用户输入账号 判断是否存在

在这里插入图片描述
在这里插入图片描述

  1. 新用户需要注册,注册后添加新记录。

在这里插入图片描述

通过控制用户输入数据的合法性来保证向数据库插入合法的数据。
在这里插入图片描述

注册成功后添加新记录。
在这里插入图片描述

  1. 用户登录,登录后更新登录时间。

在这里插入图片描述
在这里插入图片描述

  1. 进入主界面后 选择备份文件夹

在这里插入图片描述

  1. 监视指定文件夹

当有新文件新增,客户端调试信息:
在这里插入图片描述

服务端调试信息:30s后该文件未被用户下载则压缩存储
在这里插入图片描述

客户端文件列表显示:

在这里插入图片描述

前端页面文件新增:

在这里插入图片描述

当检测到文件更新,更新数据库记录:

在这里插入图片描述

文件被修改后的数据库操作:

在这里插入图片描述

在这里插入图片描述

客户端已上传文件表

在这里插入图片描述

服务端备份文件表

在这里插入图片描述

备份记录表

在这里插入图片描述

  1. 对“修改后的文件”是否需要上传做的处理:文件被修改后且3s内未被再次修改被认定为需要上传,避免持续修改的文件多次频繁上传消耗资源。
    在这里插入图片描述

  2. 客户端搭建http客户端上传文件

在这里插入图片描述

(二) 服务端程序运行演示

  1. 配置文件单例类
    在这里插入图片描述

读取JSON格式数据
在这里插入图片描述
在这里插入图片描述

  1. 数据库单例类 统一向外提供数据库接口

在这里插入图片描述

  1. 程序运行前将数据库数据读至内存
    在这里插入图片描述
    在这里插入图片描述

  2. 调用业务处理模块 处理客户端的上传/查看/下载http请求

在这里插入图片描述
在这里插入图片描述

  1. 将客户端发来的文件保存在本地 并将文件属性信息插入备份文件表
    在这里插入图片描述
    在这里插入图片描述

  2. 处理客户端的查看云端文件请求

根据用户名和密码为该客户显示指定的文件,即每个用户只能看到自己上传的文件。
在这里插入图片描述

  1. 对非热点文件的管理

当一个文件3s内未被下载,则被认定为非热点文件,需要进行压缩存储。
在这里插入图片描述
在这里插入图片描述

同时,更新数据库中压缩标志位
在这里插入图片描述

六、 总结与思考

待优化的问题:

  1. 当新增文件过大,服务端压缩存储耗时较多,改为多线程压缩非热点文件更好。
  2. 用户密码在数据库中使用明文存储,应该加密后存储,使得不能直接从数据库中看到用户密码,保护用户隐私。
  3. 客户端使用QT的信号槽机制监测文件状态变化,使用多线程多连接访问数据库。

优点:

  1. 此项目实现了类似“云盘”的备份系统,提供可视化客户端使得普通用户即可使用。
  2. 提供前端页面供用户查看云端文件,且只有用户名和密码匹配才可查看,使得该用户只能查看自己的文件。
  3. 用户信息,文件备份信息等在数据库中持久化存储,在内存中使用哈希表管理,访问速度快。
  4. 使用较多的知识点:HTTP协议,JSON序列与反序列,压缩文件,热点管理,断点续传,线程

http://www.kler.cn/a/300088.html

相关文章:

  • 解决leetcode第3418题机器人可以获得的最大金币数
  • 【深度学习】2.视觉问题与得分函数
  • Android系统开发(六):从Linux到Android:模块化开发,GKI内核的硬核科普
  • 港口危货储存单位生产管理人员题库附答案
  • 迷宫1.2
  • 二叉树--堆排序
  • 《OpenCV计算机视觉》—— 模板匹配
  • ‌语音控制小夜灯的实现方案介绍
  • excel提示宏病毒处理
  • Jon Myers:颠覆性的技术与市场开发
  • 有用的批量合并视频重命名以及有用的提取音频。遍历指定文件夹下所有视频文件,先合并归一化再生成包含包含说话人的srt格式的文件
  • 导师最看重什么?撰写任务书时需注意的关键要素!
  • OpenCV结构分析与形状描述符(16)判断两个凸多边形是否相交的函数intersectConvexConvex()的使用
  • Python中实现类的继承和多态
  • 【Unity踩坑】为什么有Rigidbody的物体运行时位置会变化
  • fastadmin 清除插件缓存报错
  • swift:qwen2 VL 多模态图文模型lora微调swift
  • Spring boot启动过程详解
  • 本地部署大语言模型详细讲解
  • 信号保存和处理
  • pdf.js如何支持base64的查看
  • DMDRS学习
  • 数组与贪心算法——179、56、57、228(2简2中)
  • 使用QT界面运行roslaunch,roslaunch,roscore等
  • 贝锐蒲公英远程视频监控方案:4G入网无需公网IP,跨品牌统一管理
  • 实现从 Milvus 中获取数据,并基于嵌入向量重新排序的功能