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

一、 需求分析

  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序列与反序列,压缩文件,热点管理,断点续传,线程
  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿猿收手吧!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值