汽配兼容属性总表更新

需求

从ERP获取汽配属性到站内

属性结构

  • 每条兼容属性都挂在一个类目下

  • ERP 中的属性关联结构如下

1
2
3
4
5
graph LR
Model-->Make
Make-->Year
Make-->Engine
Make-->Trim
  • 站内需要的结构如下
1
2
3
4
5
graph LR
Year-->Make
Make-->Model
Model-->Engine
Engine-->Trim

实现方案探究

  • 使用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 搜索的条数就在百万级以下 查询速度感人,没有继续优化
  • 成果

    • innodb 下使用了将近50G的服务硬盘
    • 更新一个类目耗时4,5个小时

      结束语

      到此完成了数据从ERP到站内的需求,总体来说,是用空间来换数据结构。
      虽然解决了对总表的更新,但感觉还有许多不足,期望日后能加以完善。