存貨庫存模型升級始末
1、背景
公司存在多種物料種類、不同類型的庫存和價值管理不一,存貨系統(tǒng)目前主要接入包裝耗材、商品數(shù)據(jù)。目的是為了:
- 管理出入庫價格、數(shù)量、庫齡等業(yè)務(wù)數(shù)據(jù),便于管理部門追溯及財務(wù)管控,協(xié)助倉庫提升存貨和物料的管理能力。
- 管理倉庫物料及商品的費用價值,提升核算及業(yè)務(wù)的效率,實現(xiàn)業(yè)務(wù)信息一體化及憑證自動化。
- 輔助計劃或采購部門查看庫存,為采購計劃提供數(shù)據(jù)支撐。
存貨系統(tǒng)先接入了包耗材數(shù)據(jù),這類數(shù)據(jù)的特性是行數(shù)據(jù)不多,但每行數(shù)量很大。后接入了商品的庫存,由于行數(shù)據(jù)量增長N倍以上,并且隨著業(yè)務(wù)不斷增長數(shù)據(jù)量越來越大,考慮到原有底層設(shè)計不能很好的支撐這么大的數(shù)據(jù)量,故有了這次系統(tǒng)的模型升級。
2、面對的問題
2.1 數(shù)據(jù)承接點問題
原業(yè)務(wù)流程在數(shù)據(jù)承接上跨越了核心P0鏈路后才把數(shù)據(jù)落地到庫存應(yīng)用(造成了一定的技術(shù)風(fēng)險,歷史上也確實發(fā)生過一次技術(shù)故障 ,消費上游消息代碼有bug,導(dǎo)致P0清結(jié)算鏈路數(shù)據(jù)下發(fā)出現(xiàn)阻塞,影響了部分結(jié)算單據(jù)的處理時效):
(1)數(shù)據(jù)落庫在單據(jù)系統(tǒng)
(2)關(guān)聯(lián)訂單數(shù)據(jù)
(3)查詢出未稅單價
(4)組裝后下發(fā)庫存
2.1 數(shù)據(jù)存儲設(shè)計問題(數(shù)據(jù)每日倍化膨脹)
重構(gòu)前的設(shè)計,成本表存儲邏輯:不管每天成本價有沒有變化,都會維護一條記錄;臺賬表存儲邏輯:每天如果有出入庫數(shù)據(jù)按照業(yè)務(wù)類型匯總+2條期初期末數(shù)據(jù),如果沒有出入庫數(shù)據(jù),只保存2條期初期末數(shù)據(jù)。從存儲邏輯不難看出存儲了很多冗余數(shù)據(jù),且臺賬表期初期末數(shù)據(jù)以行的形式存儲也是不合理的。
如下是例子數(shù)據(jù)
2.2.1 明細(xì)表(record)
每天出入庫、調(diào)價單的數(shù)據(jù)
3/18 | 3/19 | 3/20 | 3/21 | 3/22 | 3/23 | |
明細(xì)數(shù)(出入庫、調(diào)價單) | 15000 | 15000 | 15000 | 15000 | 15000 | 15000 |
總數(shù)量(出入庫、調(diào)價單) | 15000 | 30000 | 45000 | 60000 | 75000 | 90000 |
2.2.2 成本表(cost_price)
所有物料每天都需要計算一個成本價
3/18 | 3/19 | 3/20 | 3/21 | 3/22 | 3/23 | |
總數(shù)量 | 15000 | 45000 | 90000 | 150000 | 225000 | 315000 |
2.2.3 臺賬表(ledger)
日臺賬:匯總當(dāng)天明細(xì)數(shù)據(jù)、以及期初、期末價格和數(shù)量 月臺賬:匯總當(dāng)月明細(xì)數(shù)據(jù)、以及期初、期末價格和數(shù)量
3/18 | 3/19 | 3/20 | 3/21 | 3/22 | 3/23 | |
總數(shù)量 | 45000 | 135000 | 270000 | 450000 | 675000 | 945000 |
2.3 頁面數(shù)據(jù)查詢性能瓶頸
2.3.1 大盤&臺賬表分析:
通過大盤和臺賬表分析,在接入倉庫商品數(shù)據(jù)后,頁面查詢接口耗時很高,接口性能存在問題
2.3.2 日/月進銷存也面臨同樣的問題
3、解決方案
3.1 數(shù)據(jù)承接優(yōu)化
3.1.1 庫存應(yīng)用直接承接單據(jù)池落地信息表
3.1.2 具體實現(xiàn)過程
3.2 數(shù)據(jù)存儲設(shè)計問題優(yōu)化
3.2.1 簡單示例
比如一個物料,3月1日的成本價為100元,后在3月30日又進一件成本價200元的相同物料,則我們庫里的記錄信息如下, 2條數(shù)據(jù)即可 , 【無須每日更新數(shù)據(jù),只有當(dāng)前物料當(dāng)日有出入庫、調(diào)價數(shù)據(jù)時,才需要插入當(dāng)日最新數(shù)據(jù)】,
實際場景,當(dāng)業(yè)務(wù)代碼查詢3月10日的成本價時,往前查詢到03.01的數(shù)據(jù)即可
3.2.2 期望的數(shù)據(jù)存儲樣式
日期 | 物料編碼 | 成本價 |
03.01 | BZCL | 100 |
03.30 | BZCL | (100+200)/2 =150 |
而不是30條數(shù)據(jù) ( 03.02 至 03.29,這28條數(shù)據(jù)都是冗余的數(shù)據(jù))
日期 | 物料編碼 | 成本價 |
03.01 | BZCL | 100 |
03.02 | BZCL | 100 |
03.03 | BZCL | 100 |
。。。。 | 。。。 | 。。。 |
03.29 | BZCL | 100 |
03.30 | BZCL | 150 |
3.2.3 頁面數(shù)據(jù)查詢性能瓶頸解決方案
由于數(shù)據(jù)存儲邏輯變更,只會存儲有變動的數(shù)據(jù),而進銷存報表是每天都需要產(chǎn)出的不管數(shù)據(jù)有沒有變化。結(jié)合當(dāng)前業(yè)務(wù)邏輯以及數(shù)據(jù)量最后決定把數(shù)據(jù)同步到數(shù)倉,在數(shù)倉進行數(shù)據(jù)補全后,通過報表平臺拉取報表信息。
棄用當(dāng)前后管平臺查詢報表 轉(zhuǎn)為使用報表平臺拉取庫存報表信息
數(shù)據(jù)同步流程如下:
報表平臺具備生成類似于Excel的數(shù)據(jù)展示,以及任意維度查詢信息的能力,同時也具備Excel導(dǎo)出的功能
4、重構(gòu)后的價值
4.1 量化業(yè)務(wù)價值:
每月節(jié)省核算以及審核時間約30小時,占核算組總月結(jié)時間比例為30%。
4.2 不可量化業(yè)務(wù)價值
- 將倉庫業(yè)務(wù)納入存貨系統(tǒng),龐大數(shù)據(jù)量通過系統(tǒng)自動核算,輸出表格,節(jié)約手工核算的時間,以及提升核算數(shù)據(jù)的準(zhǔn)確性,解決無法通過表格實現(xiàn)的困境;
- 提升核算質(zhì)量的同時,可以完成更多庫存、銷售數(shù)據(jù)分析,如周轉(zhuǎn)率分析,出入庫渠道分析,減值計提等等。分析結(jié)果提升公司退貨商品的管理以及庫存管理。
- 功能重構(gòu)從基礎(chǔ)數(shù)據(jù)、入庫模型、調(diào)價單、成本計算、出庫模型、重算、報表都做了升級,在數(shù)據(jù)接收、成本計算等過程中增加了校驗邏輯和修復(fù)數(shù)據(jù)的功能。
4.3 技術(shù)價值
(1)技術(shù)價值:首次嘗試了在線TIDB切換流程(包括數(shù)據(jù)復(fù)制、數(shù)據(jù)同步、數(shù)據(jù)比對、數(shù)據(jù)切流),積累了TIDB切換經(jīng)驗,給后續(xù)的TIDB遷移專項提供了經(jīng)驗沉淀。
(2)技術(shù)價值:把P0級的清結(jié)算應(yīng)用里的部分功能遷移到庫存應(yīng)用中,解決了大流量的倉庫數(shù)據(jù)下傳至清結(jié)算應(yīng)用的風(fēng)險,實現(xiàn)了交易和非交易在應(yīng)用級別的解耦和隔離。
(3) 團隊價值:以賽代練,通過該項目培養(yǎng)了組內(nèi)成員對于數(shù)倉平臺和報表平臺的實踐和使用,拓寬了團隊整體的技術(shù)棧,并積累了數(shù)據(jù)開發(fā)的對應(yīng)經(jīng)驗,也落地了數(shù)倉平臺和報表平臺的操作使用文檔(節(jié)省了后續(xù)團隊成員的數(shù)據(jù)開發(fā)熟悉接入的成本)。