1. 程式人生 > 其它 >銷量最優解

銷量最優解

目錄

微信公眾號:molashaonian

業務背景

商品列表等場景需要展示商品銷量,銷量自然就跟訂單關聯,那麼統計銷量就需要統計商品訂單銷售的sku 數量

痛點:目前銷量計算以 spu(商品) 維度,通過JOB定時查詢訂單商品表進行統計,以及更新銷量快取,對資料庫表的全量查詢消耗過大

優化方案初版(優化大多不能一步到位,請看到最後)

  • 從計算入手。目前問題也知道了,全量查詢計算消耗大,那就從計算銷量入手。
  • spu首次全量計算銷量,並記錄該spu最後計算銷量得到的訂單ID
  • 存在spu最後計算的訂單ID,根據該訂單ID進行銷量的增量計算
  • 新增全量計算開關控制,用以銷量校準

該優化方案解決了多次的全量查詢消耗過大問題,只會有初始的一次全量計算,之後便是增量,同時為了校準銷量,也保留了全量計算的功能,通過開關控制。

  • 不足。雖然避免了全量計算,不過每次的Job都會對全部的 spu 進行銷量計算,儘管有些 spu 在這期間並沒有產生銷售訂單

優化方案升級版

為了解決初版無法避免對全部 spu 進行銷量計算,在這一步決定把它幹掉

  • 找出銷量有變動的 spu。訂單支付成功則記為有效銷量,所以在支付回撥處入手
  • 支付回撥:對銷量快取進行更新,並對有銷量新增的 spu 快取起來
  • 保留初版優化的全量計算銷量Job處理方案,用以銷量校準 (該Job預設不開啟)
  • 新增銷量增量同步Job:從快取中取銷量資料(就是支付回撥時存下的快取資料)對資料庫表,ES 同步
  • 結合實現邏輯圖理解
支付回撥 Redis銷量快取 Redis銷量增量快取 同步JOB MySQL/ES 校準JOB 更新 更新 獲取並刪除增量快取 增量快取銷量更新至MySQL、ES 統計訂單商品表進行銷量校準 預設不開打 支付回撥 Redis銷量快取 Redis銷量增量快取 同步JOB MySQL/ES 校準JOB
  • 對於銷量解決方案歡迎留意評論

微信公眾號:molashaonian