SCNU-CS-2018-DatabaseProject
最近打算整理一下上学期的项目作业到 Github 上,同时 post 到博客上以作记录与归档。这一次分享的是数据库课程项目,为了能够快速实现需求,我选用了微后端框架 Flask+web 的形式进行开发。
在与同学的合作下,两个子项目的开发与撰写文档分别花了将近一周的时间,完成了课程的基本和额外要求,具体的内容请参见 GitHub。
课程一共有两阶段的任务,要求分别选取一款传统型数据库和 NoSQL 数据库,在 Linux 环境下部署服务端,以 C/S 架构实现数据库的各项基本功能和部分特色操作。
本项目选用的是 MySQL 和 Redis ,由于课程不对性能作要求,因此为了能够快速实现要求的功能,项目选用了 Flask 作为服务端,并以 web 的方式开发客户端,具体的项目框架请参照下图。
开发环境与依赖
CentOS Linux release 8.3.2011
(项目使用阿里云服务器,可兼容其他类型云服务器或虚拟机,尚未在其它系统实现,因此不保证兼容性)
python 3.6
MySQL 8.0.21
Redis 5.0.3
其余依赖均包含在项目对应的虚拟环境文件夹 (DatabaseVenv)
部署流程
clone 本仓库
1
2git clone https://github.com/charfole/SCNU-CS-2018-DatabaseProject.git
cd SCNU-CS-2018-DatabaseProject在 Linux 环境下安装相关依赖
安装Python、MySQL和Redis,安装教程可参照菜鸟教程(Python, MySQL, Redis)
部署 MySQL 项目
创建数据表
1
2
3
4
5
6
7cd MySQL/data
在连接mysql数据库后执行
source cardTable.sql
source geoTable.sql
source userTable.sql
PS:除此之外,也可以通过Navicat等DBMS修改并执行三个sql文件修改数据库连接信息
1
2
3# 打开 MySQL/backend/app.py
# 根据个人情况修改user、password和db三个参数,确保连接到希望操纵的数据库
conn = pymysql.connect(host='127.0.0.1', user='root', password='', db='charfoleTable', charset='utf8') # connect to the database部署后端代码
1
2
3
4source ../DatabaseVenv/bin/activate
cd MySQL/backend
gunicorn -b :5000 app:app # debug模式运行
gunicorn -c config.py app:app # config模式运行
修改 MySQL 客户端对应的 IP 地址
1
2
3
4
5
6// 打开 MySQL/web/page.html
// 根据个人情况,将所有出现yourIPAddress语句中的yourIPAddress替换为你部署flask的ip(服务器ip或者是虚拟机的ip)
url: "http://yourIPAddress:5000/charfoleTransaction"
// 修改完后,打开page.html并刷新即可成功运行项目部署 Redis 项目
创建数据
1
2
3
4cd Redis/data
将 Redis/data/charfole.csv 中的数据写入redis的第0号数据库
python3 readData.py部署后端代码
1
2
3
4source ../DatabaseVenv/bin/activate
cd MySQL/backend
gunicorn -b :5000 app:app # debug模式运行
gunicorn -c config.py app:app # config模式运行
修改 Redis 客户端对应的 IP 地址
1 | // 打开 Redis/web/page.html |
实现的功能
- MySQL项目
- 执行基本的 SQL 语句,包括但不限于增删查改、索引、跨表操作
- 事务支持(execute、commit、rollback)
- 用户性能查询(仅在后端实现、需提前创建对应的用户并修改后端代码)
- Redis项目
- Redis 的基本功能,对数据库中所包含的键值对进行增删查改
- 基数查询(Hyperloglog)功能
由于篇幅所限,更多的功能说明请参照项目文档。
项目截图
MySQL
Redis
写在后面
为了快速兑现课程要求的相关功能,因此项目在性能、鲁棒性方面有所欠缺。如发现有错误或不足,十分欢迎 issue 或 pr。希望能帮助到学习该门课程的同学。