项目体系架构设计——基于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代码

文章目录

  • 系列文章目录
  • 项目资源下载
  • 前言
  • 一、系统架构
    • 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 电影类别 T o p 10 Top10 Top10
  • 总结


前言

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


一、系统架构

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

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数据库

二、数据流程

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

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
字段名 字段类型 字段描述 字段备注
mid Int 电影的ID
name String 电影的名称
descri String 电影的描述
timelong String 电影的时长
shoot String 电影拍摄时间
issue String 电影发布时间
language String 电影语言
genres String 电影所属类别
director String 电影的导演
actors String 电影的演员

3.2 用户评分表

  • R a t i n g Rating Rating
字段名 字段类型 字段描述 字段备注
uid Int 用户的ID
mid Int 电影的ID
score Double 电影的分值
timestamp Long 评分的时间

3.3 电影标签表

  • T a g Tag Tag
字段名 字段类型 字段描述 字段备注
uid Int 用户的ID
mid Int 电影的ID
tag String 电影的标签
timestamp Long 评分的时间

3.4 用户表

  • U s e r User User
字段名 字段类型 字段描述 字段备注
uid Int 用户的ID
username String 用户名
password String 用户密码
first Boolean 用于是否第一次登录
genres List 用户偏爱的电影类型
timestamp Long 用户创建的时间

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
字段名 字段类型 字段描述 字段备注
mid Int 电影的ID
count Int 电影的评分数
yearmonth String 评分的时段 201507

3.6 电影评分个数统计表

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

3.7 电影平均评分表

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

3.8 电影相似性矩阵表

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

3.9 用户电影推荐矩阵表

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

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

  • S t r e a m R e c s StreamRecs StreamRecs
字段名 字段类型 字段描述 字段备注
uid Int 用户的ID
recs Array[(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
字段名 字段类型 字段描述 字段备注
genres String 电影类型
recs Array[(mid:Int,score:Double)] TOP10电影

总结

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

你可能感兴趣的:(大数据,推荐算法,协同过滤,spark,大数据,电影推荐系统)