需求
从ERP获取汽配属性到站内
属性结构
每条兼容属性都挂在一个类目下
ERP 中的属性关联结构如下
1 | graph LR |
- 站内需要的结构如下
1 | graph LR |
实现方案探究
使用ERP结构进行存储
建立5张表对应每个关联结构 记录条数与ERP中条数相同缺点:
- 每次查询都要带上父级类目进行管理查询
- 结构复杂
- ERP结构变更
优点:
- 存储量小
使用站内结构
建立一张表 一条记录对应一个链式关系,如果ERP 中的条数为4n, 则站内对应条数n^4缺点:
数据量大
优点:
- 结构简单
- 查询方便
实现方案
使用一条记录对应一个链式关系的方式存
- 结构如下
| 表字段名 | 字段 |
|---|---|
| catetory | varchar(30) |
| year | smallint |
| make | varchar(30) |
| model | varchar(30) |
| egine | varchar(30) |
| trim | varchar(30) |
实现
遍历获取ERP兼容属性,完成一个完成的关系链,插入数据库
优化
由于是 n^4 的记录条数,数据达到了恐怖的亿级
在结构上根据year水平分表,分成10个表,每个表只记录一个 year 位数的数据,插入 数据是 批量插入,采用如下形式,每千条插入一次
1
insert into table(year,make...) values (value1,value2...),(value1,value2...)
在查询上 建立关联索引 year->make->model->engine->trim
- year层 union 查询 生产缓存
- make 层 是用索引后 搜索的条数仍然达到了千万级别,仍使用缓存
- model,engine,trim 搜索的条数就在百万级以下 查询速度感人,没有继续优化
成果