-
组长
- 王硕
-
副组长
- 胡云卿
-
组员
-
刘昱彤
-
李沅城
-
王钲源
-
潘淑红
-
徐红莉
-
开发一个基于WEB的数据库应用,这个应用是查询一个关于电影数据库的数据,数据部分信息经过了脱密处理,数据及相关数据文档由教师指定。开发的功能如下:
-
搜索任务
-
A根据用户ID,搜索用户所看的电影名字和评分,按时间从新到旧排序,给出电影的前三个标签及关联度评分 -
B根据输入的关键词,查询电影名字里有关键词的电影 -
C(选做)查询某一风格最受欢迎的20部电影
-
-
界面规范
-
界面上应该有录入用户ID, 检索关键词、风格等的文本框和不同任务的提交按钮
-
搜索结果要在网页上展示,超过一页的要有滚动条
-
【5月20日 以前 】
- 选择数据库:
MongoDB
【5月20日 12周周一】
- 数据库功能演示
【5月29日 13周周三】
- 分析给定的数据,根据功能需求,设计数据逻辑结构
- 将给定的数据存入数据库
- 编写前端页面
- 实现事务处理接口
【6月1-6日 13周-14周】
- 数据查询功能
【6月6-9日 14周周日】
- 前后端接口连接调试
- 功能测试
【6月10日 15周周一】
- 汇报演示
(初步分工)
-
搭建环境+功能C
- 王硕、刘昱彤
-
功能A
- 胡云卿、王钲源、李沅城
-
前端开发
- 胡云卿、李沅城
-
数据模型设计
- 王钲源
-
功能B+导入数据
- 徐红莉、潘淑红
(最终分工)
-
王硕
- 配置MongoDB环境,建立本地数据库
- 整理数据结构、画collection图和E-R图、方便参考
- 实现数据库的查询功能 A、B、C
- 优化数据库查询(给MongoDB的每个collection创建索引)
- 前后端连接
- 遇到问题:
- 查询的大小写匹配问题,以及tags.csv和genome-tags.csv中的tag存在大小写不一致的情况。 解决:在查询语句时使用正则表达式查询,加上参数 "$options":"i"
- 查询A和查询C的查询时间过于长 解决:给每个collection建立索引
- 查询A在前后端连接的时候一直失败,测试了很久,最终找到原因:前端传递过来的参数的字符类型不一致,导致数据没有传递到search.py中去
- 查询3中查出的评分都是 5.0,4.5 这样的数字,不符合常理(应该为4.37这样),发现这种情况一般是因为此电影只有一条评分,为了评分的准确性,我们设定评分条数 <=10 的不参与排名。
-
胡云卿
- 中期数据库功能展示
- 前端查询子页面设计实现
- 前端局部刷新功能实现
- 前后端接口设计
- 参与查询A功能设计
- 遇到问题
- 描述:局部刷新功能实现时,每次点击查询进行局部刷新之后页面又自动全局刷新,把查询结果覆盖了。
- 解决:一开始使用console.log输出中间结果进行排错,但是全局刷新会把console.log输出刷新看不到调试信息。遂通过chrome开发者工具进行单步调试,发现ajax部分代码实现没有问题,问题出现在通信请求上,每次点击提交按钮会产生两次POST请求,并通过监控django后台日志证实了确实产生了多余通信请求。最后发现是由于前端form表单使用了bootstrap框架,当把button的type属性设置为submit时会自动提交表单数据,而我们的局部刷新是通过监控鼠标点击事件实现的,所以每次点击产生了两次请求。把button的type属性修改为button就解决了。
- 收获:当使用第三方框架时,需要注意细节
-
刘昱彤
- 建立数据库对象(database.py)以及视图函数框架
- 前后端传参框架:在每次数据库查询后利用查询函数中的return函数参数返回查询结果至模板以显示用户查询结果。
- 遇到问题:
- 在已建立远程数据库连接的条件下,直接调用数据表的类对象方法无效。原因:我们虽然在search.py中导入了数据库连接方法,但由于连接代码在类外直接import无法执行, 和小组成员讨论后解决办法:封装数据库连接函数,在每一个数据库对象中的构造函数调用数据库函数,如此,直接导入即可调用构造函数实现数据库连接并查询)。
-
李沅城
- 服务器Mongodb运行环境搭建(使用Docker快速搭建)
- 数据集分析
- 框架搭建(前端:html+css+js 后端:Django 服务器:Mongodb)
- 前端页面设计
- 前端搭建
- 前后端接口设计
- 参与查询A功能设计
- 后端目录结构设计
- 后端数据库连接封装
- 遇到的问题
- Django对Mongodb没有直接的支持,所以使用了pymongo去对Mongodb数据库连接进行了封装,以便支持后期的后端开发
- 原本我们以为用户所看的电影,我们只用在rating里面检索就可以。但后期经过数据分析发现,部分用户对某部电影有评分但没有评tag,另一部分用户对某部电影评了tag但没有评分。于是我们后来改为先查了rating再查tags,最后去重,这样保证了我们能找到用户所看过的所有电影
- 我们之前是想设计一个主页面和三个任务页面的前端设计,但考虑到用户使用体验和提升数据库查询的速度,我们最后改为了使用一个页面,并使用局部渲染的方式保证用户能正常查询。这样做的好处是用户在使用的过程中,只有在一开始的时候加载一个页面,不必把时间浪费在不同页面的跳转和新页面的渲染上面
- 因为只使用一个页面的原因,所以我们需要使用局部渲染的方法。一开始我们直接使用html和Django直接交互的方式,这样的话会导致每次局部渲染后全局渲染也会被触发,让页面的查询结果直接消失。后来改用ajax的方式,这样的话就能保证只进行局部渲染而不会进行全局渲染
-
王钲源
-
前期工作准备:笔记整理
-
配置本地mongo环境:ubuntu安装mongo,使用mongo shell连接数据库默认端口
-
中期数据库功能展示部分pymongo代码:
- 基本操作:增(创建数据库/新建集合/插入文档/插入文档列表
insert_many/指定ob_id的插入文档),删(删除数据库/文档/集合),改(集合重命名),查(匹配单条文档/匹配多条文档/指定字段的查询/指定条件查询/指定集合查询/指定ob_id查询)
- 基本操作:增(创建数据库/新建集合/插入文档/插入文档列表
-
中期报告文档整合
-
问题/解决:在Windows及Mac上安装时可以有GUI版本的安装包,但是在linux上apt下载时,会遇到自动更新的问题,如果不关闭自动更新无法固定版本下载安装,连接数据库会有错误,在服务启动前:
echo "mongodb-org hold" | sudo dpkg --set-selections echo "mongodb-org-server hold" | sudo dpkg --set-selections echo "mongodb-org-shell hold" | sudo dpkg --set-selections echo "mongodb-org-mongos hold" | sudo dpkg --set-selections echo "mongodb-org-tools hold" | sudo dpkg --set-selections
-
-
徐红莉
- 参与查询任务A,编写任务A test.py文件,寻找更高性能的优化方式
- 数据导入
- 任务A的前后端传参
-
潘淑红
- 配置MongoDB环境,建立本地数据库
- 数据导入
- 简单分析数据
- 中期和后期文档的编写和整理
- 参与功能A功能设计
-
开发框架选择
- 未定
-
数据模型设置
- 未定
-
各功能实现的流程
- 未定
-
界面设计
- 未定
-
开发环境选择
-
前端:未定
-
后端:Django
-
数据库:MongoDB
-