项目体系架构设计——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(四)

系列文章目录

  1. 初识推荐系统——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一)
  2. 利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二)
  3. 项目主要效果展示——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(三)
  4. 项目体系架构设计——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(四)
  5. 基础环境搭建——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(五)
  6. 创建项目并初始化业务数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(六)
  7. 离线推荐服务建设——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(七)
  8. 实时推荐服务建设——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(八)
  9. 综合业务服务与用户可视化建设——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(九)
  10. 程序部署与运行——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(十)

项目资源下载

  1. 电影推荐系统网站项目源码Github地址(可Fork可Clone)
  2. 电影推荐系统网站项目源码Gitee地址(可Fork可Clone)
  3. 电影推荐系统网站项目源码压缩包下载(直接使用)
  4. 电影推荐系统网站项目源码所需全部工具合集打包下载(spark、kafka、flume、tomcat、azkaban、elasticsearch、zookeeper)
  5. 电影推荐系统网站项目源数据(可直接使用)
  6. 电影推荐系统网站项目个人原创论文
  7. 电影推荐系统网站项目前端代码
  8. 电影推荐系统网站项目前端css代码


前言

  今天给大家带来的是项目体系架构设计,包括项目系统架构、项目数据流程、数据模型等。以及整个系统各个功能模块是怎么串联起来的,还有各个软件是怎么相互配合的,最重要的是数据库模型的设计,如果数据库设计不好,会直接影响后面整个系统的运行,下面就开始今天的学习吧!


一、系统架构

  项目以推荐系统建设领域知名的经过修改过的 M o v i e L e n s MovieLens MovieLens数据集作为依托,构建了整个电影推荐系统,包含了离线推荐与实时推荐体系,综合利用了协同过滤算法以及基于内容的推荐方法来提供混合推荐。提供了从前端应用、后台服务构建、算法设计实现、平台部署等多方位的闭环的业务实现
在这里插入图片描述

1.1 后台服务部分

  1. 用户可视化:主要负责实现和用户的交互以及业务数据的展示,主体采用 A n g u l a r J S 2 AngularJS2 AngularJS2进行实现,部署在 A p a c h e Apache Apache服务上
  2. 综合业务服务:主要实现 J a v a E E JavaEE JavaEE层面整体的业务逻辑,通过 S p r i n g Spring Spring进行构建,对接业务需求。部署在 T o m c a t Tomcat Tomcat

1.2 数据存储部分

  1. 业务数据库:项目采用广泛应用的文档数据库 M o n g D B MongDB MongDB作为主数据库,主要负责平台业务逻辑数据的存储
  2. 搜索服务器:项目采用 E l a s t i c S e a r c h ElasticSearch ElasticSearch作为模糊检索服务器,通过利用 E S ES ES强大的匹配查询能力实现基于内容的推荐服务
  3. 缓存数据库:项目采用 R e d i s Redis Redis作为缓存服务器,主要用来支撑实时推荐系统部分对于数据的高速获取需求

1.3 离线推荐部分

  1. 离线统计服务:批处理统计性业务采用 S p a r k C o r e + S p a r k S q l Spark \quad Core \quad + \quad Spark \quad Sql SparkCore+SparkSql进行实现,实现对指标类数据的统计任务。
  2. 离线推荐服务:离线推荐业务采用 S p a r k C o r e + S p a r k M L l i b Spark \quad Core + Spark \quad MLlib SparkCore+SparkMLlib进行实现,采用ALS算法进行实现。
  3. 工作调度服务:对于离线推荐部分需要以一定的时间频率对算法进行调度,采用 A z k a b a n Azkaban Azkaban进行任务的调度

1.4 实时推荐部分

  1. 日志采集服务:通过利用 F l u m e − n g Flume-ng Flumeng对业务平台中用户对电影的一次评分行为进行采集,实时发送到 K a f k a Kafka Kafka集群
  2. 消息缓冲服务:项目采用 K a f k a Kafka Kafka作为流式数据的缓存组件,接收来自 F l u m e Flume Flume的数据采集请求。并将数据推送到项目的实时推荐系统部分
  3. 实时推荐服务:项目采用 S p a r k S t r e a m i n g Spark \quad Streaming SparkStreaming作为实时推荐服务,通过接收 K a f k a Kafka Kafka中缓存的数据,通过设计的推荐算法实现对实时推荐的数据处理,并将结构合并更新到 M o n g o D B MongoDB MongoDB数据库

二、数据流程

在这里插入图片描述

2.1 系统初始化部分

  1. 通过 S p a r k S Q L Spark \quad SQL SparkSQL将系统初始化数据加载到 M o n g o D B MongoDB MongoDB E l a s t i c S e a r c h ElasticSearch ElasticSearch

2.2 离线推荐部分

  1. 通过 A z k a b a n Azkaban Azkaban实现对于离线统计服务以离线推荐服务的调度。通过设定的运行时间完成对任务的触发执行
  2. 离线统计服务从 M o n g o D B MongoDB MongoDB中加载数据,将电影平均评分统计、电影评分个数统计、最近电影评分个数统计三个统计算法进行运行实现,并将计算结果回写到 M o n g o D B MongoDB MongoDB中,离线推荐服务从 M o n g o D B MongoDB MongoDB中加载数据,通过 A L S ALS ALS算法分别将用户推荐结果矩阵、影片相似度矩阵回写到 M o n g o D B MongoDB MongoDB

2.3 实时推荐部分

  1. F l u m e Flume Flume从综合业务服务的运行日志中读取日志更新,并将更新的日志实时推送到 K a f k a Kafka Kafka中, K a f k a Kafka Kafka在收到这些日志后,通过 K a f k a S t r e a m KafkaStream KafkaStream程序对获取的日志信息进行过滤处理,获取用户评分数据流: U I D ∣ M I D ∣ S C O R E ∣ T I M E S T A M P UID|MID|SCORE|TIMESTAMP UIDMIDSCORETIMESTAMP,并发送到另一个 K a f k a Kafka Kafka队列, S p a r k S t r e a m i n g Spark \quad Streaming SparkStreaming监听 K a f k a Kafka Kafka队列,实时获取 K a f k a Kafka Kafka过滤的出来的用户评分数据流,融合存储在 R e d i s Redis Redis中的用户最近评分队列数据,提交给实时推荐算法,完成对用户新的推荐结果计算,计算完成后,将新的推荐结果和 M o n g o D B MongoDB MongoDB数据库中的推荐结果进行合并

2.4 业务系统部分

  1. 推荐结果展示部分从 M o n g o D B MongoDB MongoDB E l a s t i c S e a r c h ElasticSearch ElasticSearch中将离线推荐结果、实时推荐结果、内容推荐结果进行混合,综合给出相对应的数据
  2. 电影信息查询服务通过对接 M o n g o D B MongoDB MongoDB实现对电影信息的查询操作
  3. 电影评分部分通过获取用户通过 U I UI UI给出的评分动作,后台服务进行数据库记录后,一方面将数据推送到 R e d i s Redis Redis中,另一方面,通过预设的日志框架输出到 T o m c a t Tomcat Tomcat中的日志中
  4. 项目通过 E l a s t i c S e a r c h ElasticSearch ElasticSearch实现对电影的模糊检索
  5. 电影标签部分,项目提供用户对电影打标签服务

三、数据模型

3.1 电影数据表

  • M o v i e Movie Movie
字段名字段类型字段描述字段备注
midInt电影的ID
nameString电影的名称
descriString电影的描述
timelongString电影的时长
shootString电影拍摄时间
issueString电影发布时间
languageString电影语言
genresString电影所属类别
directorString电影的导演
actorsString电影的演员

3.2 用户评分表

  • R a t i n g Rating Rating
字段名字段类型字段描述字段备注
uidInt用户的ID
midInt电影的ID
scoreDouble电影的分值
timestampLong评分的时间

3.3 电影标签表

  • T a g Tag Tag
字段名字段类型字段描述字段备注
uidInt用户的ID
midInt电影的ID
tagString电影的标签
timestampLong评分的时间

3.4 用户表

  • U s e r User User
字段名字段类型字段描述字段备注
uidInt用户的ID
usernameString用户名
passwordString用户密码
firstBoolean用于是否第一次登录
genresList用户偏爱的电影类型
timestampLong用户创建的时间

3.5 最近电影评分个数统计表

  • R a t e M o r e M o v i e s R e c e n t l y RateMoreMoviesRecently RateMoreMoviesRecently
字段名字段类型字段描述字段备注
midInt电影的ID
countInt电影的评分数
yearmonthString评分的时段201507

3.6 电影评分个数统计表

  • R a t e M o r e M o v i e s RateMoreMovies RateMoreMovies
字段名字段类型字段描述字段备注
midInt电影的ID
countInt电影的评分数

3.7 电影平均评分表

  • A v e r a g e M o v i e s S c o r e AverageMoviesScore AverageMoviesScore
字段名字段类型字段描述字段备注
midInt电影的ID
avgDouble电影的平均评分

3.8 电影相似性矩阵表

  • M o v i e R e c s MovieRecs MovieRecs
字段名字段类型字段描述字段备注
midInt电影的ID
recsArray[(mid:Int,score:Double)]该电影最相似的电影集合

3.9 用户电影推荐矩阵表

  • U s e r R e c s UserRecs UserRecs
字段名字段类型字段描述字段备注
uidInt用户的ID
recsArray[(mid:Int,score:Double)]推荐给该用户的电影集合

3.10 用户实时电影推荐矩阵表

  • S t r e a m R e c s StreamRecs StreamRecs
字段名字段类型字段描述字段备注
uidInt用户的ID
recsArray[(mid:Int,score:Double)]实时推荐给该用户的电影集合

3.11 电影类别 T o p 10 Top10 Top10

  • G e n r e s T o p M o v i e s GenresTopMovies GenresTopMovies
字段名字段类型字段描述字段备注
genresString电影类型
recsArray[(mid:Int,score:Double)]TOP10电影

总结

  这篇博文也终于结束了,这篇文章主要介绍的是整个系统的架构设计以及整个系统的数据流程和数据模型,只有设计好这些,整个系统的搭建才能比较顺利,后面就要真刀真枪的做整个系统了,下一篇文章会给大家带来项目的基础环境搭建!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IronmanJay

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

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

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

打赏作者

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

抵扣说明:

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

余额充值