电影推荐系统设计⽅案
⼀、项⽬简介
推荐系统是信息过载所采⽤的措施,⾯对海量的数据信息,从中快速推荐出符合⽤户特点的物品。本项⽬主要根据⽤户的历史特征和⾏为为⽤户推荐更适合他们⼝味的电影。整个系统可以分为统计推荐模块、离线推荐模块和实时推荐模块三个部分。
接下来将依次展⽰项⽬的分解视图、依赖视图、执⾏视图、实现视图、部署视图、⼯作分配视图、数据库设计和核⼼⼯作机制。
⼆、分解视图
分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,⼀般分解视图呈现为较为明晰的分解结构(breakdown structure)特点。本⽂以UML包图来展现系统的分解视图。
三、依赖视图
依赖视图在项⽬计划中有⽐较典型的应⽤。⽐如它能帮助我们到没有依赖关系的软件模块或⼦系统,以便独⽴开发和测试,同时进⼀步根据依赖关系确定开发和测试软件模块的先后次序。
四、执⾏视图
执⾏视图展⽰了系统运⾏时的时序结构特点,⽐如流程图、时序图等。执⾏视图中的每⼀个执⾏实体,⼀般称为组件(Component),都是不同于其他组件的执⾏实体。如
果有相同或相似的执⾏实体那么就把它们合并成⼀个。
五、实现视图
实现视图有助于码农在海量源代码⽂件中到具体的某个软件单元的实现。实现视图与软件架构的静态结构之间映射关系越是对应的⼀致性⾼,越有利于软件的维护,因此实现视图是⼀种⾮常关键的架构视图
六、部署视图
部署视图是将执⾏实体和计算机资源建⽴映射关系。这⾥的执⾏实体的粒度要与所部署的计算机资源相匹配,⽐如以进程作为执⾏实体那么对应的计算机资源就是主机,这时应该描述进程对应主机所组成的⽹络拓扑结构,这样可以清晰地呈现进程间的⽹络通信和部署环境的⽹络结构特点。
七、⼯作分配视图
⼯作分配视图将系统分解成可独⽴完成的⼯作任务,以便分配给各项⽬团队和成员。⼯作分配视图有利于跟踪不同项⽬团队和成员的⼯作任务的进度,也有利于在个项⽬团队和成员之间合理地分配和调整项⽬资源,甚⾄在项⽬计划阶段⼯作分配视图对于进度规划、项⽬评估和经费预算都能起到有益的作⽤。
⼋、数据库设计
1. Movie【电影数据表】
2. Rating【⽤户评分表】
电影宣传类网页界面设计3. Tag【电影标签表】
4. User【⽤户表】
5. RateMoreMoviesRecently【最近电影评分个数统计表】
6. RateMoreMovies【电影评分个数统计表】
7. AverageMoviesScore【电影平均评分表】
8. MovieRecs【电影相似性矩阵】
9. UserRecs【⽤户电影推荐矩阵】
10. StreamRecs【⽤户实时电影推荐矩阵】
11. GenresTopMovies【电影类别 TOP10】
九、核⼼⼯作机制
【综合业务部分】
⽤户可视化:主要负责实现和⽤户的交互以及业务数据的展⽰,主体采⽤AngularJS2 进⾏实现,部署在 Apache 服务上。
综合业务服务:主要实现 JavaEE 层⾯整体的业务逻辑,通过 Spring 进⾏构建,对接业务需求。部署在 Tomcat 上。
【数据存储部分】
业务数据库:项⽬采⽤⼴泛应⽤的⽂档数据库 MongDB 作为主数据库,主要负责平台业务逻辑数据的存储。
搜索服务器:项⽬爱⽤ ElasticSearch 作为模糊检索服务器,通过利⽤ ES 强⼤的匹配查询能⼒实现基于内容的推荐服务。
缓存数据库:项⽬采⽤ Redis 作为缓存数据库,主要⽤来⽀撑实时推荐系统部分对于数据的⾼速获取需求。
【离线推荐部分】
离线统计服务:批处理统计性业务采⽤ Spark Core + Spark SQL 进⾏实现,实现对指标类数据的统计任务。
离线推荐服务:离线推荐业务采⽤ Spark Core + Spark MLlib 进⾏实现,采⽤ALS 算法进⾏实现。
⼯作调度服务:对于离线推荐部分需要以⼀定的时间频率对算法进⾏调度,采⽤ Azkaban 进⾏任务的调度。
【实时推荐部分】
⽇志采集服务:通过利⽤ Flume-ng 对业务平台中⽤户对于电影的⼀次评分⾏为进⾏采集,实时发送到 Kafka 集。
消息缓冲服务:项⽬采⽤ Kafka 作为流式数据的缓存组件,接受来⾃ Flume 的数据采集请求。并将数据推送到项⽬的实时推荐系统部分。
实时推荐服务:项⽬采⽤ Spark Streaming 作为实时推荐系统,通过接收 Kafka中缓存的数据,通过设计的推荐算法实现对实时推荐的数据处理,并将结构合并更新到MongoDB 数据库。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论