【多线程】多线程接口并行对数据字典的查询优化,多线程异步任务编排CompletableFuture详情

我们将对接口的调用提出优化方案,让大家学会如何提升请求访问效率。
如何学会高并发接口设计?
如何掌握线程与线程池?
如何学会CompletableFuture异步编排?
如何学会线程有序与并行?
如何学会线程任务、多任务组组合?

1-2 企业审核 - 查询企业列表

运营端查询企业,由于并发量不会像前端那么大,所以直接查数据库就行。
controller

service:

自定义mapper:

<select id="queryCompanyList"
        resultType="com.imooc.pojo.vo.CompanyInfoVO"
        parameterType="Map">

    SELECT
        c.id AS companyId,
        c.company_name AS companyName,
        c.short_name AS shortName,
        c.logo AS logo,
        c.address AS address,
        c.nature AS nature,
        c.people_size AS peopleSize,
        c.industry AS industry,
        c.financ_stage AS financStage,
        c.review_status AS reviewStatus,
        c.commit_date AS commitDate,
        u.real_name AS commitUser
    FROM
        company c
    LEFT JOIN
        users u
    ON
        c.commit_user_id = u.id
    WHERE
        1 = 1
        <if test="paramMap.companyName != null and paramMap.companyName != ''">
            AND c.company_name LIKE '%${paramMap.companyName}%'
        </if>
        <if test="paramMap.commitUser != null and paramMap.commitUser != ''">
            AND u.real_name LIKE '%${paramMap.commitUser}%'
        </if>
        <if test="paramMap.reviewStatus != null and paramMap.reviewStatus >= 0">
            AND c.review_status = #{paramMap.reviewStatus}
        </if>
        <if test="paramMap.commitDateStart != null">
            AND c.commit_date &gt;= #{paramMap.commitDateStart}
        </if>
        <if test="paramMap.commitDateEnd != null">
            AND c.commit_date &lt;= #{paramMap.commitDateEnd}
        </if>
    ORDER BY c.commit_date DESC

</select>

1-3 企业审核 - 获得企业详情

controller:service:自定义mapper:

<select id="getCompanyInfo"
            resultType="com.imooc.pojo.vo.CompanyInfoVO"
            parameterType="Map">

    SELECT
        c.id AS companyId,
        c.company_name AS companyName,
        c.short_name AS shortName,
        c.logo AS logo,
        c.province AS province,
        c.city AS city,
        c.district AS district,
        c.address AS address,

        c.nature AS nature,
        c.people_size AS peopleSize,
        c.industry AS industry,
        c.financ_stage AS financStage,

        c.work_time AS workTime,
        c.introduction AS introduction,
        c.advantage AS advantage,
        c.benefits AS benefits,
        c.bonus AS bonus,
        c.subsidy AS subsidy,

        c.review_status AS reviewStatus,
        c.review_replay AS reviewReplay,

        c.commit_date AS commitDate,
        c.commit_user_id AS commitUserId,
        u.real_name AS commitUser,
        c.commit_user_mobile AS commitMobile,

        c.legal_representative AS legalRepresentative,
        c.regist_capital AS registCapital,
        c.regist_place AS registPlace,
        c.build_date AS buildDate,

        c.auth_letter AS authLetter,
        c.biz_license AS bizLicense
    FROM
      company c
    LEFT JOIN
      users u
    ON
      c.commit_user_id = u.id
    WHERE
      c.id = #{paramMap.companyId}

</select>

1-4 企业审核 - 执行审核

更新企业状态

controller:service:

修改用户角色

controller:service:

feign:

1-5 审核流程的优化思考

拓展:针对审核流程的思考以及优化?

目前审核,其实我们是把审核的状态和审核的驳回信息放在了企业表:

其实这么做也不太好,因为用户第一次入驻的时候审核没问题,但是一旦企业审核通过,如果有人需要再次入驻,申请成为这家企业的HR,那么这个时候企业的状态又会重新变更为审核状态。

考虑一下怎么优化:

  • 新增审核表,审核企业的时候需要做三表关联查询,也就是用户表+企业表+审核表。这样做可以看到更多信息,也可以有每次的审核记录,现有的做法是无法看到历史审核记录的。而且客服审核的时候只需要关注用户就行,用户的信息以及授权书没问题就审核通过了。
  • 当然这么做,也会有缺点,缺点是,三表关联查询很多企业是不可以使用的,甚至有的公司禁止三表,只允许到两表关联,一般来说基本上3表是上限,超过3表查询一定要拆分组装。因为高并发下一定会有性能影响。
    所以关于这个拓展大家可以课后去实现一些,作为第二种的审核记录的模式。

那么目前,我们这里做的是针对单表企业表查询并且审核:
优点是单表查询更快更便捷,而且从业务上来说,如果企业的营业执照发生变更,我们也可以重新进行审核。缺点是没有HR提交的审核记录。但是可以一定程度上对企业进行重新审查,因为审核字段是在企业表里的,所以在进行新HR入驻的时候,可以再次对企业信息做一个核查,这其实也可以。

所以说,各自有各自的优缺点,业务规范和流程要按照自身情况去决定,不要为了技术而技术,当你能够考虑的更多的时候,你就成长了,毕竟我们未来是要向架构师成长的嘛。

如果说,在这个地方,一定要满足性能的情况之下,也要有审核记录呢?那么可以使用mongodb,审核记录插入到mongo,因为这是非重要数据,从业务上来说,允许丢失,而且mongo的并发能力比数据库高。所以可以使用。但是mongodb也不支持多表关联或者说多表查询不太好,所以可以做数据的冗余,把审核相关字段,提交者的相关信息,企业信息,全部写到一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值