[关闭]
@hobby 2015-02-27T03:23:22.000000Z 字数 6236 阅读 2729

基于标签(Tag)的分类系统

@(醋溜醋溜-广告系统)[分类|标签|电商]

日期 时间 修改内容 修改人
20150209 16:45 初版内容 尹志伟
20150210 11:20 更新weight相关信息 尹志伟
20150211 11:30 更新方案介绍4.2 API模块, 更新进度0. 分工和进度计划 尹志伟
20150211 13:45 更新设计4. 设计方案介绍 尹志伟/严伟森
20150211 19:58 新加章节4.3 API模块与微店模块的接口 尹志伟
20150226 14:45 新加章节2.6 上线版本的需求说明 尹志伟
20150227 11:00 更新工作内容0. 分工和进度计划 尹志伟
20150227 11:20 开发人员同步状态后, 更新工作内容0. 分工和进度计划 尹志伟

0. 分工和进度计划

此分工是初步计划, 表格中单位为小时

第一阶段工作(春节后上线版本)

名称 描述 负责人 预计工作 完成时间 状态 附注
表设计和压测指标 SQL表格设计,压测指标反馈给产品 伟森/凤坡 1 02/09 完成
设计方案初步完成和评审 本文档初步评审 尹志伟 2 02/10 完成

编码和自测工作
微店提供给API的接口 基于标签的 伟森 2 02/10 完成
客户端接口 API访问参数和模板等内容 尹志伟 2 02/11 完成
API缓存 主动缓存的实现和自测 伟森/志伟 30 02/11 完成
API与微店联调 -- 凤坡/伟森/志伟 8 02/13 完成
API模块的XB后台 新版分类对应的页面简单编辑,测试 志伟 2 ?? 02/12 完成

联调, 准备提交
===
小编验货库商品批量导入标签库 使用脚本或程序批量操作, 在上线之前将正式库的验货产品批量导入(导入时, default_sort用小编验货时间) 凤坡 02/28
标签库内默认排序字段 default_sort字段需要有效值,第一版本来自ctime的归一化处理. 凤坡 27日上午
标签权重调整后default_sort变更 允许小编通过调整权重干预排序 凤坡 02/27
API模块进行压力测试 查看文件缓存和redis缓存的性能指标 志伟 02/27
小编后台试用和反馈 配置分类相关内容,有问题联系志伟 王玮 02/27
小二后台使用和反馈 配置标签表等内容,推广,有问题联系凤坡 王玮 02/27
入库时,标签库内商品的排序字段数值关联 商品的销量价格等信息, 入标签库的时候要带上. 凤坡 02/28
低优先级, 第二个小版本 ===
low pri 宝贝入标签库 基于某个商品的标签添加/调整(覆盖产品第2,3条需求) 凤坡 6 02/11
low pir 标签管理 标签的添加,删除,修改,CID关联到标签(覆盖产品第1条需求) 志伟/伟森 6 02/12
low pri 周期同步,标签库内商品的排序字段数值关联 商品的销量价格等信息, 入标签库的时候要带上. 凤坡

提测
XB后台测试 todo
功能测试 todo

提测

第二阶段工作

名称 描述 负责人 预计工作 完成时间 状态 附注
分类结果的排序-客户端 对于不同的排序类型(如综合排序,销量)设置相应的post参数 ??
分类结果的排序-服务端 对于不同的排序类型(如综合排序,销量), 进行相应的处理. 涉及API模块和微店模块 志伟/伟森

0.0 未解决问题

0.1 风险

  1. 当前方案不能支持严格实时的随机化处理: 效果是, 在主动缓存周期之内, 某类用户看到的内容是一模一样的(细节参数参照4.1 API模块设计). 主要原因是: 分类数据的获取刷新, 不得不选择主动缓存的策略.
  2. 当前方案不能支持严格实时 和 个性化的随机化处理: 效果是, 在主动缓存周期之内, 某类用户看到的内容是一模一样的(细节参数参照4.1 API模块设计). 主要原因是: 分类数据的获取刷新, 不得不选择主动缓存的策略.
  3. TBA

1. 背景

  1. 分类 是客户端展示的一个重要入口, 当前版本是第三栏.
  2. 分类中的主要展现元素包括: 顶部banner, 一级分类, 二级分类, 展示商品. 详细描述见产品需求文档 [1]
  3. 当前分类的实现方案, 具有潜在的性能问题, 并且在软件健壮性和灵活性的方面需要改进.

2. 需求

本设计文档中, 我们使用标签(Tag)来管理和支持系统内的商品分类.

2.1 关键需求 - 打标签

  1. 打标签的时机
  2. CID与标签的映射关系, 标签空间的划分

2.2 关键需求 - 标签管理

  1. 标签由运营负责管理(标签的添加/销毁)
  2. 小编查询和使用标签
  3. 小编能够看到所有可用的标签, 每个标签下现在对应的商品, 排序权重等信息

2.3 关键需求 - 基于标签的搜索展示

  1. 首页展示的一级分类, 二级分类
  2. 一级分类下的产品展示 (标签)
  3. 二级分类下的产品展示 (基于标签)
  4. 产品展示排序需要考虑的因素: 销量, 排序权重, 随机因子... todo 根据文档更新
  5. 同一用户(特征), 访问时支持一定的随机/乱序 (短时间内, 用户点到分类页面, 显示的内容有微小差异)

2.4 Q&A

  1. 基于标签的搜索, 传入标签允许有多个吗, 还是只有一个?
    传入标签总是一个, (首页展示商品 打 默认/全部 标签)

  2. CID与标签(TAG)的数目对应关系?
    目前需求是(双方向)一对一.
    从扩展性和灵活性考虑, 软件设计应考虑将来可能会n:1(多个CID对应同一个标签)

  3. 排序功能要做到什么样?

    • 在第一个大版本中(春节后上线的版本), 需要排序功能(入库时间)
    • 我们当前的版本中, 需要在数据库设计时把相应的键值考虑进去, 排序逻辑可以稍后做. 包括: 价格, 销量, 入库时间, 默认排序.
  4. 权重是什么?
    用于人为干预/控制商品展示的先后顺序. 商品的每个标签对应一个权重值, 小编可以手动配置 (per tag configuration).

  5. TBA

2.5 关键需求 - 规格

TODO 产品的同事帮忙确认规格需求

主要参数的规格

名称 描述 当前规格 最大规格 附注
标签 系统中标签的个数 300-500
商品 需要支持分类的商品总数 20K-100K
每个商品的标签数 N/A 5-10
一级分类数量
二级分类数量
...
======= 设计规格
缓存页面数 单一分类缓存商品的最大页数 20?

2.6 上线版本的需求说明

20150226 与王玮沟通的结果

2.6.1 第一版上线需要的功能-必须

2.6.2 第一版上线需要的功能-最好能有,不必须

2.6.3 后续版本需要加入的功能

3. 原型和验证数据

3.1 原型中实现的功能 (按优先级先后排序)

3.2 验证数据

TODO 参照 关键需求 - 规格

4. 设计方案介绍

4.1 设计考虑因素

4.1.1 性能:缓存

  1. 缓存的位置是rediz还是文件? 键值的数量可能比较多, rediz的可能故障.
  2. 缓存的页面数量(写固定值还是根据相应的表动态变化)
  3. 缓存的刷新时间
  4. 数据库的处理, 商品的上下架, 标签库与商品库的同步

4.2 API模块设计

总体思路
与客户端的接口(query参数和template), 在分类V2.0版本的基础上复用和扩展.
缓存的设计, 需要考虑 高并发 和 功能模块的位置选择.

4.2.1 与客户端的业务接口

  1. 业务接口的具体参数参见5.1 业务接口设计细节, 确定后需要更新到 楚楚街APP新版API 文档中.
  2. 业务接口在已有接口的基础上进行修改, 小编后台有对应的编码和调试工作, 总体方式还是在现有基础上修改(新分类TAB管理 V2.0)

4.2.2 缓存的处理方法

字段 描述 格式 数值范围-当前 数值范围-未来 来源 附注
ad_key 模块名

(各级)分类总数
search-new-<tagId> 60 = 6x10? 300? query: module
query: function
query: tagId
zone 列表名

目前唯一
productList 1 1? N/A
Gender 性别

枚举值
gender=[female, male, all] 3 3 N/A
Page 当前获取的页码

整型: 1---n(十/百??)
page={int} 100? 1000? page
======== 需要考虑和特殊处理
第一大版本可以不做如下内容
=======
NewUser 是否新用户
用户登入系统距今时间(天数)

数值范围: 1..n(百/千量级)
NewUser=[0, 1]
区分是否 今日首次登陆的用户
2 <10 ?? client->loginDays
package_name 客户端包名

枚举值,随时间累加(个/十)
majorPackage=[0,1]
区分是否为 主要版本
2 < 10 ?? client_>package_name
channel 客户端发布渠道

枚举值,(十/百)
majorChannel=[0,1]
区分是否为 主要渠道
2 <10 >> client->channel

- TBA

4.3 微店模块设计

4.3.1 数据库,表格设计

标签表

字段 描述 类型 附注
product_id 产品id int
tag_id 标签id int
weight 标签权重(数字范围0-10,支持1位小数如"1.5",默认为1) int 20150210与郭超确认需求
price
sale_count
record_date
default_sort
...

todo: 伟森/凤坡更新一下上表, 排序

标签名称表

字段 描述 类型 附注
id 标签id int
name 标签名称, 小编后台展示的名称 String

CID到标签映射表

字段 描述 类型 附注
cid 商品分类(可能是一级/二级或其他级别) int
tag_id 标签id int

**4.2.4 标签空间表**

4.3.2 SQL查询设计

TODO: 伟森

与API模块的接口包括如下参数
输入:
tagId, page, per_page

返回:
productList, info (total_num, per_page, total_page, page)

SQL查询
按如下步骤进行
1. 查询标签表, 根据传入的 tagId 或者 productId 的列表
2. 根据 productId 的列表, 依次访问各个库取出以下字段:
chuchuId, title, oldPrice, newPrice, shopId, imgUrl, saleCount

4.2.3 数据库处理

TODO: 凤坡/伟森
标签库 与 商品库的同步, 比如以下场景: 商品修改/删除, 商品上下架, 其他??

4.3 API模块与微店模块的接口

4.3.1 基本功能

请求方法
dev-category-tag.wx-dev.chuchujie.com/api.php?s=Product/getRareCategoryDataTest

http://dev-category-tag.wx-dev.chuchujie.com/api.php?s=Product/getRareCategoryDataTest&cid=1&pageSize=20

TODO: 表格格式的参数列表

返回结构

  1. 'chuchuId' => $values['chuchuId'],
  2. 'title' => $values['title'],
  3. 'oldPrice' => $values['oldPrice'],
  4. 'newPrice' => $values['newPrice'],
  5. 'shopId' => $values['shop_id'],
  6. /* addtime */
  7. 'imgUrl' => $values['img'],
  8. 'saleCount' => $values['saleCount'],
  9. /* shopUrl */

4.3.2 排序控制

5. 附录

5.1 业务接口设计细节

以下内容摘自文档楚楚街APP新版API

2.10. 搜索-新版分类展示

2015-01-29 支持需求 新版分类 TAB 需求 v1.2, 此接口在 2.6 搜索-关键词搜索|分类搜索基础上扩展形成.
2015-02-11 支持需求 基于标签的新版分类, 接口调整变更

涉及需求版本:V1.0.1?? TODO: 更新版本
涉及需求:4?? TODO: 更新

以下页面复用此业务接口, 通过Query细节参数(category, secCategory, tagId)进行区分
- 分类首页
- 分类详情页
- 关键词结果页

2.10.1. 请求参数

Query参数

Name Type Value Desc Note
module String search 搜索模块
function String new 功能-新版分类TAB
category String default 指定显示首页详情页.
-显示首页, 其他值-显示对应的详情页
tagId Int - 标签id 20150211: 加入
secCategory String - 处理关键词 List 页的请求参数 20150130更新:废除不用
shopCids String - 微店分类列表, 作为查询宝贝列表的key值 20150130更新: 加入.
20150211: 废弃不用

参数构造细节说明 (客户端无须关注此细节, 服务端 Query 传回约定)

Page category tagId Descriptoin
分类首页 服务端填充default
分类详情页 有效 有效
关键词结果页 有效

POST参数

Name Type Value Desc 附注
page int 展示商品的页数 页数

2.10.2. 返回结构

Name Type Desc 附注
categoryList Array of Banner 用于需求4.3、4.5中的一级分类
bannerList Array of Banner 用于需求4.6中的分类List的顶部Banner
keywordList Array of Banner 用于需求4.6中的关键词列表
productList Array of Product 用于需求x.x (TODO)分类TAB中的商品列表
page int 当前页数-productList
hasNext int 是否有下一页,0-没有、1-有
title String 关键词结果页, 页首显示文案

附注


[1] 最新的分类需求参照文档: ???
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注