最终确定要做5种类型的推荐,每种推荐类型及需要的数据简要叙述如下:
1、根据商品id获得所属类别的销售排行榜
* 商品id
* product_category表(商品与类别的关系表)
* order_items表(订单明细表。位于Order库)
2、根据商品id获得浏览了该商品的用户最终购买的商品
* 商品id
* user_visited_prd表:能获得浏览了该商品的所有用户
* product_category表(商品与类别的关系表):从此表中能够获得类别
* orders表
* order_items表(订单明细表)
3、根据商品id获得其关联商品
* 商品id
* r_pid_related_pid表:人为在此表中设置商品与商品之间的关联。此表用于在OA中做细调。
4、根据商品id获得购买了该商品的用户还购买的商品
* 商品id
* orders表
* order_items表
* product_category表:从此表中获得类别。
5、根据商品id获得浏览了该商品的用户还浏览了的商品
* 商品id
* user_visited_prd表
* product_category表
我认为的作法是:
数据就放在mysql数据库中,每天凌晨3点跑一个定时任务,分析这些数据,得出最终的今天这一天的推荐结果数据放入数据库表中,然后前端页面调用接口查询这个最终结果数据就行了。
原因:
1、数据放在数据库中,查询、统计方便。
2、数据库表中已经有这些数据,直接用就行了,这样保证了:
(1)、数据源只有一个
(2)、数据的最新性
避免了:
(1)、同步数据所带来的数据大量重复、不即时性、复杂性
增加了:
(1)、维护量
而我们经理的想法是:
将所有需要的数据,放入hdfs中,然后用hadoop进行分析,得出来最终的结果数据,再放入mysql数据库表中。前端接口再查询访问这些最终的结果数据。
我认为这样做的好处是(按重要度排列):
1、所有的数据放入了hdfs中,而不放入线上mysql数据库中,这样在统计分析数据时,就不会影响正在下单、操作数据库的用户。
2、利用了hadoop的“分布”式“计算”框架的优势,可以像多核cpu一起共同计算一样,这样分析速度会快。
3、减少了线上mysql数据库的负担。
4、所有需要的数据,都放在hdfs中,这样让相关人员的思路也会觉得清晰。
我认为这样做的缺点:
1、数据不放在数据库中,查询、统计不如写sql语句那样方便。得写map-reduce程序,与写sql语句相比复杂得多。
2、现在数据库表中已经有这些数据,还需要再复制一份到hdfs中,这就使:
(1)、数据源有了2个,那就必然涉及到同步问题,也就要解决同步的那些问题:
* 数据的最新性
* 数据的大量重复
* 维护量
请老师指点,应该选取哪种方案呢?为什么?急!谢谢您师兄!