项目体系架构设计——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(四)
系列文章目录
- 初识推荐系统——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一)
- 利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二)
- 项目主要效果展示——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(三)
- 项目体系架构设计——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(四)
- 基础环境搭建——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(五)
- 创建项目并初始化业务数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(六)
- 离线推荐服务建设——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(七)
- 实时推荐服务建设——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(八)
- 综合业务服务与用户可视化建设——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(九)
- 程序部署与运行——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(十)
项目资源下载
- 电影推荐系统网站项目源码Github地址(可Fork可Clone)
- 电影推荐系统网站项目源码Gitee地址(可Fork可Clone)
- 电影推荐系统网站项目源码压缩包下载(直接使用)
- 电影推荐系统网站项目源码所需全部工具合集打包下载(spark、kafka、flume、tomcat、azkaban、elasticsearch、zookeeper)
- 电影推荐系统网站项目源数据(可直接使用)
- 电影推荐系统网站项目个人原创论文
- 电影推荐系统网站项目前端代码
- 电影推荐系统网站项目前端css代码
文章目录
- 系列文章目录
- 项目资源下载
- 前言
- 一、系统架构
- 1.1 后台服务部分
- 1.2 数据存储部分
- 1.3 离线推荐部分
- 1.4 实时推荐部分
- 二、数据流程
- 2.1 系统初始化部分
- 2.2 离线推荐部分
- 2.3 实时推荐部分
- 2.4 业务系统部分
- 三、数据模型
- 3.1 电影数据表
- 3.2 用户评分表
- 3.3 电影标签表
- 3.4 用户表
- 3.5 最近电影评分个数统计表
- 3.6 电影评分个数统计表
- 3.7 电影平均评分表
- 3.8 电影相似性矩阵表
- 3.9 用户电影推荐矩阵表
- 3.10 用户实时电影推荐矩阵表
- 3.11 电影类别Top10Top10Top10表
- 总结
前言
今天给大家带来的是项目体系架构设计,包括项目系统架构、项目数据流程、数据模型等。以及整个系统各个功能模块是怎么串联起来的,还有各个软件是怎么相互配合的,最重要的是数据库模型的设计,如果数据库设计不好,会直接影响后面整个系统的运行,下面就开始今天的学习吧!
一、系统架构
项目以推荐系统建设领域知名的经过修改过的MovieLensMovieLensMovieLens数据集作为依托,构建了整个电影推荐系统,包含了离线推荐与实时推荐体系,综合利用了协同过滤算法以及基于内容的推荐方法来提供混合推荐。提供了从前端应用、后台服务构建、算法设计实现、平台部署等多方位的闭环的业务实现
1.1 后台服务部分
- 用户可视化:主要负责实现和用户的交互以及业务数据的展示,主体采用AngularJS2AngularJS2AngularJS2进行实现,部署在ApacheApacheApache服务上
- 综合业务服务:主要实现JavaEEJavaEEJavaEE层面整体的业务逻辑,通过SpringSpringSpring进行构建,对接业务需求。部署在TomcatTomcatTomcat上
1.2 数据存储部分
- 业务数据库:项目采用广泛应用的文档数据库MongDBMongDBMongDB作为主数据库,主要负责平台业务逻辑数据的存储
- 搜索服务器:项目采用ElasticSearchElasticSearchElasticSearch作为模糊检索服务器,通过利用ESESES强大的匹配查询能力实现基于内容的推荐服务
- 缓存数据库:项目采用RedisRedisRedis作为缓存服务器,主要用来支撑实时推荐系统部分对于数据的高速获取需求
1.3 离线推荐部分
- 离线统计服务:批处理统计性业务采用SparkCore+SparkSqlSpark \quad Core \quad + \quad Spark \quad SqlSparkCore+SparkSql进行实现,实现对指标类数据的统计任务。
- 离线推荐服务:离线推荐业务采用SparkCore+SparkMLlibSpark \quad Core + Spark \quad MLlibSparkCore+SparkMLlib进行实现,采用ALS算法进行实现。
- 工作调度服务:对于离线推荐部分需要以一定的时间频率对算法进行调度,采用AzkabanAzkabanAzkaban进行任务的调度
1.4 实时推荐部分
- 日志采集服务:通过利用Flume−ngFlume-ngFlume−ng对业务平台中用户对电影的一次评分行为进行采集,实时发送到KafkaKafkaKafka集群
- 消息缓冲服务:项目采用KafkaKafkaKafka作为流式数据的缓存组件,接收来自FlumeFlumeFlume的数据采集请求。并将数据推送到项目的实时推荐系统部分
- 实时推荐服务:项目采用SparkStreamingSpark \quad StreamingSparkStreaming作为实时推荐服务,通过接收KafkaKafkaKafka中缓存的数据,通过设计的推荐算法实现对实时推荐的数据处理,并将结构合并更新到MongoDBMongoDBMongoDB数据库
二、数据流程
2.1 系统初始化部分
- 通过SparkSQLSpark \quad SQLSparkSQL将系统初始化数据加载到MongoDBMongoDBMongoDB和ElasticSearchElasticSearchElasticSearch中
2.2 离线推荐部分
- 通过AzkabanAzkabanAzkaban实现对于离线统计服务以离线推荐服务的调度。通过设定的运行时间完成对任务的触发执行
- 离线统计服务从MongoDBMongoDBMongoDB中加载数据,将电影平均评分统计、电影评分个数统计、最近电影评分个数统计三个统计算法进行运行实现,并将计算结果回写到MongoDBMongoDBMongoDB中,离线推荐服务从MongoDBMongoDBMongoDB中加载数据,通过ALSALSALS算法分别将用户推荐结果矩阵、影片相似度矩阵回写到MongoDBMongoDBMongoDB中
2.3 实时推荐部分
- FlumeFlumeFlume从综合业务服务的运行日志中读取日志更新,并将更新的日志实时推送到KafkaKafkaKafka中,KafkaKafkaKafka在收到这些日志后,通过KafkaStreamKafkaStreamKafkaStream程序对获取的日志信息进行过滤处理,获取用户评分数据流:UID∣MID∣SCORE∣TIMESTAMPUID|MID|SCORE|TIMESTAMPUID∣MID∣SCORE∣TIMESTAMP,并发送到另一个KafkaKafkaKafka队列,SparkStreamingSpark \quad StreamingSparkStreaming监听KafkaKafkaKafka队列,实时获取KafkaKafkaKafka过滤的出来的用户评分数据流,融合存储在RedisRedisRedis中的用户最近评分队列数据,提交给实时推荐算法,完成对用户新的推荐结果计算,计算完成后,将新的推荐结果和MongoDBMongoDBMongoDB数据库中的推荐结果进行合并
2.4 业务系统部分
- 推荐结果展示部分从MongoDBMongoDBMongoDB、ElasticSearchElasticSearchElasticSearch中将离线推荐结果、实时推荐结果、内容推荐结果进行混合,综合给出相对应的数据
- 电影信息查询服务通过对接MongoDBMongoDBMongoDB实现对电影信息的查询操作
- 电影评分部分通过获取用户通过UIUIUI给出的评分动作,后台服务进行数据库记录后,一方面将数据推送到RedisRedisRedis中,另一方面,通过预设的日志框架输出到TomcatTomcatTomcat中的日志中
- 项目通过ElasticSearchElasticSearchElasticSearch实现对电影的模糊检索
- 电影标签部分,项目提供用户对电影打标签服务
三、数据模型
3.1 电影数据表
- MovieMovieMovie
字段名 | 字段类型 | 字段描述 | 字段备注 |
---|---|---|---|
mid | Int | 电影的ID | |
name | String | 电影的名称 | |
descri | String | 电影的描述 | |
timelong | String | 电影的时长 | |
shoot | String | 电影拍摄时间 | |
issue | String | 电影发布时间 | |
language | String | 电影语言 | |
genres | String | 电影所属类别 | |
director | String | 电影的导演 | |
actors | String | 电影的演员 |
3.2 用户评分表
- RatingRatingRating
字段名 | 字段类型 | 字段描述 | 字段备注 |
---|---|---|---|
uid | Int | 用户的ID | |
mid | Int | 电影的ID | |
score | Double | 电影的分值 | |
timestamp | Long | 评分的时间 |
3.3 电影标签表
- TagTagTag
字段名 | 字段类型 | 字段描述 | 字段备注 |
---|---|---|---|
uid | Int | 用户的ID | |
mid | Int | 电影的ID | |
tag | String | 电影的标签 | |
timestamp | Long | 评分的时间 |
3.4 用户表
- UserUserUser
字段名 | 字段类型 | 字段描述 | 字段备注 |
---|---|---|---|
uid | Int | 用户的ID | |
username | String | 用户名 | |
password | String | 用户密码 | |
first | Boolean | 用于是否第一次登录 | |
genres | List | 用户偏爱的电影类型 | |
timestamp | Long | 用户创建的时间 |
3.5 最近电影评分个数统计表
- RateMoreMoviesRecentlyRateMoreMoviesRecentlyRateMoreMoviesRecently
字段名 | 字段类型 | 字段描述 | 字段备注 |
---|---|---|---|
mid | Int | 电影的ID | |
count | Int | 电影的评分数 | |
yearmonth | String | 评分的时段 | 201507 |
3.6 电影评分个数统计表
- RateMoreMoviesRateMoreMoviesRateMoreMovies
字段名 | 字段类型 | 字段描述 | 字段备注 |
---|---|---|---|
mid | Int | 电影的ID | |
count | Int | 电影的评分数 |
3.7 电影平均评分表
- AverageMoviesScoreAverageMoviesScoreAverageMoviesScore
字段名 | 字段类型 | 字段描述 | 字段备注 |
---|---|---|---|
mid | Int | 电影的ID | |
avg | Double | 电影的平均评分 |
3.8 电影相似性矩阵表
- MovieRecsMovieRecsMovieRecs
字段名 | 字段类型 | 字段描述 | 字段备注 |
---|---|---|---|
mid | Int | 电影的ID | |
recs | Array[(mid:Int,score:Double)] | 该电影最相似的电影集合 |
3.9 用户电影推荐矩阵表
- UserRecsUserRecsUserRecs
字段名 | 字段类型 | 字段描述 | 字段备注 |
---|---|---|---|
uid | Int | 用户的ID | |
recs | Array[(mid:Int,score:Double)] | 推荐给该用户的电影集合 |
3.10 用户实时电影推荐矩阵表
- StreamRecsStreamRecsStreamRecs
字段名 | 字段类型 | 字段描述 | 字段备注 |
---|---|---|---|
uid | Int | 用户的ID | |
recs | Array[(mid:Int,score:Double)] | 实时推荐给该用户的电影集合 |
3.11 电影类别Top10Top10Top10表
- GenresTopMoviesGenresTopMoviesGenresTopMovies
字段名 | 字段类型 | 字段描述 | 字段备注 |
---|---|---|---|
genres | String | 电影类型 | |
recs | Array[(mid:Int,score:Double)] | TOP10电影 |
总结
这篇博文也终于结束了,这篇文章主要介绍的是整个系统的架构设计以及整个系统的数据流程和数据模型,只有设计好这些,整个系统的搭建才能比较顺利,后面就要真刀真枪的做整个系统了,下一篇文章会给大家带来项目的基础环境搭建!
项目体系架构设计——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(四)相关推荐
- 利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二)
系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...
- 基础环境搭建——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(五)
系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...
- 实时推荐服务建设——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(八)
系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...
- 基于Spark平台的协同过滤实时电影推荐系统
文章目录 摘要 0 引言 1 协同过滤算法 2 实时推荐服务 3 电影推荐系统设计部署 3.1 架构设计 3.2 系统功能设计 3.3 数据库设计 4 系统运行效果 5 结语 参考文献 摘要 摘要:随 ...
- 基于Spark MLlib平台的协同过滤算法---电影推荐系统
协同过滤算法概述 基于模型的协同过滤应用---电影推荐 实时推荐架构分析 一.协同过滤算法概述 本人对算法的研究,目前还不是很深入,这里简单的介绍下其工作原理. 通常,协同过滤算法按照数据使用 ...
- spark MLlib平台的协同过滤算法---电影推荐系统
又好一阵子没有写文章了,阿弥陀佛...最近项目中要做理财推荐,所以,回过头来回顾一下协同过滤算法在推荐系统中的应用. 说到推荐系统,大家可能立马会想到协同过滤算法.本文基于Spark MLlib平台实 ...
- python基于用户画像和协同过滤实现电影推荐系统
1.概要 传统电影推荐系统大多使用协同过滤算法实现电影推荐,主要实现机理是通过用户评分及用户观影历史数据抽象为多维向量利用欧式距离或其他向量计算公式实现推荐,本文中将采用常用的机器学习算法Kmeans ...
- 1.项目体系架构设计(电商推荐系统)
文章目录 一.项目系统架构 二.项目数据流程 三.数据源解析 1.商品数据表 -- Product 2.用户评分表 -- Rating 四.数据模型(表结构) 五.统计推荐模块 1.历史热门商品统计 ...
- python协同过滤电影推荐_基于协同过滤的电影推荐系统的设计与实现
龙源期刊网 http://www.qikan.com.cn 基于协同过滤的电影推荐系统的设计与实现 作者:张玉叶
最新文章
- 64位 ubuntu android studio gradle 权限不够 缺少文件和权限导致
- Java序列化的作用和反序列化
- ADO.NET与ADO
- (非原)如何让.net开发的Winform程序快速释放内存
- 艾媒:ofo活跃用户规模为摩拜近2倍 每10辆共享单车7辆小黄车
- pyqt5快速开发与实战_用云开发快速制作客户业务需求收集小程序丨实战
- Prometheus is an open source monitoring
- Resource stopwords not found. Please use the NLTK Downloader to obtain the resource的解决
- php 程序性能分析工具,php的性能分析工具:xhprof
- webview的硬件加速
- 如何选购计算机的硬盘,教你如何选配电脑—硬盘篇
- 多元相关性分析_NAR:宏基因组网络分析工具MetagenoNets
- 详解Web安全攻防战(DoS攻击、CSRF、XSS、SQL注入)
- 不得不知的101种心理防御机制,识别并超越它们
- 《数据之美》读书笔记
- 从leetcode1. 两数之和循序渐进(双指针,BST,哈希表)
- unity制作法线贴图
- #程序员#看似很高大上,实则你也行的小技巧
- keil5 添加注释说明模板
- 3毛起租!“爱优腾”起诉多家视频平台账号出租平台 经济损失过亿?