美文网首页
查询状态数量统计-小方案

查询状态数量统计-小方案

作者: 了不起的贰寳 | 来源:发表于2019-12-01 11:36 被阅读0次

    业务场景

    码头货单审核系统,系统注册了多家货运公司,每个公司的货物每天都需要审核,所以就有了这么一个货单审核系统。每个审核员账号都绑定很N个货运公司,审核员每天要审核货单,我们提供了一个货单审核页面,大致如图:


    QQ截图.png

    功能要求

    1. 该页面查询审核员绑定的货运公司近三天的所有订单。
    2. 30秒自动刷新一次页面。

    初始逻辑

    1. 新建一张审核单表(order_examine),包含审核单主要字段。
    2. 添加一个查询状态枚举字段【 0:待审核 】【1:待重审】 【2:审核通过】 【3:审核失败】。
    3. 当审核单进入待审核、待重审、审核通过、审核失败相关流程方法时,将查询字段改为相应的状态值。
    4. 当进行审核列表分页查询的时候,构建4条SQL去查询该账号绑定的货运公司各个状态的审核单数量。

    初始方案缺陷

    由于审核单表(order_examine)存放的是列表查询核心数据,承载的查询压力很大,如果每次分页查询需要执行6个SQL(查询状态数量查询:4条,订单分页数据查询:1条,订单总数查询:1条),这样设计就容易导致查询超时,数据库崩溃。

    优化方案

    1.减轻订单主表查询压力,将数量查询操作分离出来。
    2.新建一张货运公司查询状态订单计数表(company_query_status_count),通过公司ID、待审核订单数、待重审订单数、审核通过订单数、审核失败订单数、日期(yyyy-MM-dd)、订单数作为计数逻辑字段,该表只存3天数据。
    3.利用公司ID作为分布式锁机制进行状态变更计数操作,并将结果更新至DB。
    4.查询逻辑:直接通过公司ID、日期查计数表进行数量统计。
    5.设置定时任务:每天凌晨5点对3天前的数据做删除处理。

    计数逻辑细节

    (1) 因为订单查询状态有 待审核 、待重审 、 审核通过 、审核失败,所以状态变换的时候会有旧状态和新状态,订单计数只需要对旧状态-1和新状态+1计数就可以了。
    (2) 新建一个无查询状态的枚举,用于新订单进入的时候作为旧状态,无统计逻辑。
    (3) 每天第一条新单进入的时候,会初始化一条计数数据。

    相关文章

      网友评论

          本文标题:查询状态数量统计-小方案

          本文链接:https://www.haomeiwen.com/subject/jxssictx.html