系统设计-电商排名

销售排名:大型电子商务公司但愿列出最畅销的产品,总体和类别。例如,一款产品多是总体销量排名第1056位的产品,但在“运动器材”一栏中排名第13位,在“安全:·”一栏中排名第24位。描述你将如何设计这个系统。数据库

1.分析步骤安全

  • 步骤1: 肯定问题的范围
    • 首先,咱们须要定义咱们正在构建什么
      • 咱们假设只要求咱们设计与此问题相关的组件,而不是整个电子商务系统。
      • 咱们还应该定义销售排名的含义。
        • 它是全部时间的总销售额吗?
        • 上个月的销售额是多少?
        • ...
  • 步骤2:作出合理的假设
    • 咱们假设统计数据不须要是100%最新的。
    • 对于最受欢迎的项目,精度是很重要的,可是对于不太受欢迎的项目,有必定程度的偏差也是能够的。
    • 咱们假设数据应该每小时更新一次(对于最流行的项目),可是数据的时间范围不须要精确到最后七天(168小时)。若是有时超过150个小时,也不要紧。
    • ...
  • 步骤3:绘制主要组件


  • 步骤4: 肯定关键问题
    • 若是查询和写很是昂贵,咱们能够考虑彻底放弃数据库,只使用日志文件。这将容许咱们利用MapReduce之类的东西。设计

      • 咱们将运行频繁的做业,根据产品ID和时间范围将文件合并在一块儿,以便最终将给定一天(或可能一个小时)内的全部购买组合在一块儿
    • 要得到每一个类别中最畅销的产品,只需对每一个目录进行排序
    • 咱们将运行频繁的做业,根据产品ID和时间范围将文件合并在一块儿,以便最终将给定一天(或可能一个小时)内的全部购买组合在一块儿
      • 咱们如何获得总体排名?有两种很好的方法:
        • 咱们能够将通常类别视为另外一个目录,并将每次购买写入该目录。
        • 或者,由于咱们已经按照每一个类别的销售量顺序对产品进行了排序,因此咱们还能够进行N-way merge来得到总排名

2.问题延伸日志

  • 你认为你会在哪里遇到下一个瓶颈?你会怎么作?
  • 若是还有子类别呢?因此项目能够列在“体育”和“体育器材”下面(甚至“运动”>“运动器材”>“网球”>“球拍”)?
  • 若是须要更准确的数据怎么办?若是全部产品都须要在30分钟内准确无误,该怎么办?
相关文章
相关标签/搜索