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

news/2024/9/23 4:27:59/
http://www.w3.org/2000/svg" style="display: none;">

文章目录

  • 一、 需求分析
  • 二、 概念结构设计
  • 三、逻辑结构设计
    • 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. 功能模块划分
    https://i-blog.csdnimg.cn/direct/e4b94dbaed344892979e1e69d30adfc5.png" alt="在这里插入图片描述" />

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

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

二、 概念结构设计

https://i-blog.csdnimg.cn/direct/e0cd088fe80849e49ba7ce002dce6e11.png" alt="在这里插入图片描述" />

三、逻辑结构设计

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. 程序运行前 读取数据库信息到内存

https://i-blog.csdnimg.cn/direct/612adc060cb7439c886968df0ff8f2ea.png" alt="在这里插入图片描述" />

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

https://i-blog.csdnimg.cn/direct/51fdf7653ca0420080562584776209dd.png" alt="在这里插入图片描述" />
https://i-blog.csdnimg.cn/direct/6cc5b9408312463f8b5d8320bd6a2388.png" alt="在这里插入图片描述" />

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

https://i-blog.csdnimg.cn/direct/beb7b71947e3426ab9912c462f761a86.png" alt="在这里插入图片描述" />

通过控制用户输入数据的合法性来保证向数据库插入合法的数据。
https://i-blog.csdnimg.cn/direct/937d6c641bed47c18fe9945e3536ac4e.png" alt="在这里插入图片描述" />

注册成功后添加新记录。
https://i-blog.csdnimg.cn/direct/6b3f6f13c99843ef94b92a3219629bd4.png" alt="在这里插入图片描述" />

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

https://i-blog.csdnimg.cn/direct/ae7d11ed48684696bc984cead38f9654.png" alt="在这里插入图片描述" />
https://i-blog.csdnimg.cn/direct/c55f07125bc94f01bfd8f8ff05504b05.png" alt="在这里插入图片描述" />

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

https://i-blog.csdnimg.cn/direct/203c15ed99d64010810696da073ca2d2.png" alt="在这里插入图片描述" />

  1. 监视指定文件夹

当有新文件新增,客户端调试信息:
https://i-blog.csdnimg.cn/direct/b37eb78e101b41ec86f32bfb510857ca.png" alt="在这里插入图片描述" />

服务端调试信息:30s后该文件未被用户下载则压缩存储
https://i-blog.csdnimg.cn/direct/3136c0768d0b4d058234e3f837667e62.png" alt="在这里插入图片描述" />

客户端文件列表显示:

https://i-blog.csdnimg.cn/direct/0515486c3d4e42c6aff0937a901b3f06.png" alt="在这里插入图片描述" />

前端页面文件新增:

https://i-blog.csdnimg.cn/direct/2a15377189484c9ea6cbc6111236b66a.png" alt="在这里插入图片描述" />

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

https://i-blog.csdnimg.cn/direct/1cccd5e9ac4a428bbb33624aa29b7d4b.png" alt="在这里插入图片描述" />

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

https://i-blog.csdnimg.cn/direct/5b7a508d2a2d4ffcb95f5fea64de2527.png" alt="在这里插入图片描述" />

https://i-blog.csdnimg.cn/direct/f0b24385c3814fc087e7a83af4c82980.png" alt="在这里插入图片描述" />

客户端已上传文件表

https://i-blog.csdnimg.cn/direct/c1354aa27c0241a69c757573668dbb22.png" alt="在这里插入图片描述" />

服务端备份文件表

https://i-blog.csdnimg.cn/direct/f8fbfc0f7b994a6da143a064a318143a.png" alt="在这里插入图片描述" />

备份记录表

https://i-blog.csdnimg.cn/direct/ee01b271d6c5405f9ad9f9426ef8d3f6.png" alt="在这里插入图片描述" />

  1. 对“修改后的文件”是否需要上传做的处理:文件被修改后且3s内未被再次修改被认定为需要上传,避免持续修改的文件多次频繁上传消耗资源。
    https://i-blog.csdnimg.cn/direct/db1a68419d734b0aa61e8f0691c86819.png" alt="在这里插入图片描述" />

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

https://i-blog.csdnimg.cn/direct/bbd1847bf1b940ef976727b0cec40e33.png" alt="在这里插入图片描述" />

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

  1. 配置文件单例类
    https://i-blog.csdnimg.cn/direct/529286cb29794c32bf61442d9efe8b1e.png" alt="在这里插入图片描述" />

读取JSON格式数据
https://i-blog.csdnimg.cn/direct/936bcc2fec064ca3a50346e84e94f049.png" alt="在这里插入图片描述" />
https://i-blog.csdnimg.cn/direct/75071547ed2a49898f6672f0fc295597.png" alt="在这里插入图片描述" />

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

https://i-blog.csdnimg.cn/direct/74dec3c1387e43b0b41bae88e881984a.png" alt="在这里插入图片描述" />

  1. 程序运行前将数据库数据读至内存
    https://i-blog.csdnimg.cn/direct/65b4fb67acee4c7188e2a7d1f060435a.png" alt="在这里插入图片描述" />
    https://i-blog.csdnimg.cn/direct/b00888ff62274af287e0ca4b2351656a.png" alt="在这里插入图片描述" />

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

https://i-blog.csdnimg.cn/direct/61ee49f8ef554247ac4c4262d2ade797.png" alt="在这里插入图片描述" />
https://i-blog.csdnimg.cn/direct/275fe5d2f5bb4c3796bff3c0962c0269.png" alt="在这里插入图片描述" />

  1. 将客户端发来的文件保存在本地 并将文件属性信息插入备份文件表
    https://i-blog.csdnimg.cn/direct/681851e03714405f9e7934a95280e288.png" alt="在这里插入图片描述" />
    https://i-blog.csdnimg.cn/direct/25267dc6463b4aedba7cb9b822acb446.png" alt="在这里插入图片描述" />

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

根据用户名和密码为该客户显示指定的文件,即每个用户只能看到自己上传的文件。
https://i-blog.csdnimg.cn/direct/1c5ad5a40b9b437d9cd7061c45381f33.png" alt="在这里插入图片描述" />

  1. 对非热点文件的管理

当一个文件3s内未被下载,则被认定为非热点文件,需要进行压缩存储。
https://i-blog.csdnimg.cn/direct/5f912ee01a824f41a5483f4d1a37c9b6.png" alt="在这里插入图片描述" />
https://i-blog.csdnimg.cn/direct/ae3229086dc142fb947da31e0c95391c.png" alt="在这里插入图片描述" />

同时,更新数据库中压缩标志位
https://i-blog.csdnimg.cn/direct/6f943d23e8f44a65aafbf3266884e14b.png" alt="在这里插入图片描述" />

六、 总结与思考

待优化的问题:

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

优点:

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

http://www.ppmy.cn/news/1523861.html

相关文章

后端Web之SpringBoot原理

目录 1.配置优先级 2.Bean 3.SpringBoot原理 1.配置优先级 SpringBoot中支持三种格式的配置文件: .application.properties、application.yml和application. yaml。它们的配置优先级分别降低。虽然springboot支持多种格式配置文件,但是在项目开发时,推荐统一使用…

系统性能分析工具sysstat之sar命令以及nginx中打开gzip使用配置gzip_http_version值为1.0和1.1时遇到的结果乱码问题

一、系统性能分析工具:sysstat之sar命令 服务器维护常用的管理命令有很多:top、ps,、pstree、vmstat、iostat、iotop等,但好像都不全面,这里有一个比较系统全面的性能分析工具sar(System Activity Reporter系统活动情况…

Redis 缓存淘汰算法策略详解

引言 Redis 作为一款高性能的内存数据库,在处理大量数据时,由于内存有限,需要在数据达到设定的内存上限后,使用缓存淘汰策略来决定哪些数据应该被移除,以腾出空间存储新的数据。这一过程被称为缓存淘汰,通…

【网络安全】-文件上传漏洞实战-upload-labs(0~16)

准备&#xff1a; 一句话木马&#xff1a;<? php eval($_REQUEST[cmd]); ?)> 格式&#xff1a;写入txt文本重命名后缀问.php /.php 格式&#xff0c;看具体要求上传。 Pass-01: 显示页面源代码&#xff0c;发现是js对不合法文件进行检查,上传修改为.jpg的php文件直接…

ArrayList、LinkedList和Vector的区别

ArrayList 容量默认是10&#xff0c;它和 Vector 的底层实现都是基于动态数组&#xff0c;ArrayList 的内部元素可以通过 get 和 set 方法进行访问&#xff1b;LinkedList的底层实现是基于双向链表&#xff0c;当数据量很大或者操作很频繁的情况下&#xff0c;插入和删除元素时…

版权与开源协议:一场创新与自由的边界之争

在数字时代的浪潮中&#xff0c;版权与开源协议作为知识产权领域的两大支柱&#xff0c;既相互依存又暗自较劲&#xff0c;共同绘制着科技创新的宏伟蓝图。本文将带您深入这场创新与自由的边界之争&#xff0c;探讨版权与开源协议之间的微妙关系&#xff0c;以及它们如何共同推…

frame buffer的使用

1. Frame Buffer 的基本概念 Frame buffer 是显卡存储的视频数据&#xff0c;在 Linux 系统中通常被抽象为 /dev/fbX 文件&#xff08;X 表示不同的设备编号&#xff09;。应用程序可以通过这个设备文件直接与显卡进行交互&#xff0c;读写像素数据以显示内容。 2. 使用 Fram…

机器学习中的聚类艺术:探索数据的隐秘之美

一 什么是聚类 聚类是一种经典的无监督学习方法&#xff0c;无监督学习的目标是通过对无标记训练样本的学习&#xff0c;发掘和揭示数据集本身潜在的结构与规律&#xff0c;即不依赖于训练数据集的类标记信息。聚类则是试图将数据集的样本划分为若干个互不相交的类簇&#xff…