登陸用戶可以隨時查看某個時段的新增合約數
华东区总经理
|--- 华东1区经理
| |---销售主管11
| | |---销售员111
| | |---销售员112
| |---销售主管12
| |---销售员121
| |---销售员122
|
|
|--- 华东2区经理
|---销售主管21
| |---销售员211
| |---销售员212
|---销售主管22
| |---销售员221
| |---销售员222
|---销售主管23
| |---销售员231
| |---销售员232
华北区总经理
|--- 华北1区经理
| |---销售主管31
| | |---销售员311
| | |---销售员312
| |---销售主管32
| |---销售员321
| |---销售员322
|
|
|--- 华北2区经理
|---销售主管41
| |---销售员411
| |---销售员412
|---销售主管42
| |---销售员421
| |---销售员422
|---销售主管43
| |---销售员431
| |---销售员432
id 合同id
name 合同名称
created_at 创建时间
created_by 创建人
updated_at 修改时间
updated_by 修改人
【新增合同数】 = 【所有下级的新增合同数】+【本人新增合同数】
資料庫是mysql,因為上級合約數,是所有下級的合約數之和,所以,我們遞歸得到了用戶所有下級的用戶id
然後再用count(*) from 表where (created_at時間段條件) and created_by in (所有的下級使用者id,包含目前登入使用者id)
問題:數據是準確的,但是效率低下,對伺服器效能也有影響
單獨使用一個表格來記錄每個使用者每天的新增合約數,還是先得到所有下級使用者的id,然後再用
select sum(inum) from user_count where (created_at時間段條件)
and created_by in (所有的下級使用者id,包含目前登入使用者id)
問題:每次 增加,刪除,批量刪除,都要修改這個字段,如果用戶量增大,計數錯誤的可能性非常大,雖然統計方便了,但是數據不准確
我們網站要統計今日新增,昨日新增,本週新增,本月新增,本季度新增,本年新增,用戶還可以自己輸入時間段查詢
請問大家有沒有什麼好的方案,可以讓數據既準確,統計起來效率又高的?
考慮一下把新增的合約放一份到redis,每日清零一次就好了。
方案一是優選方案,唯一的問題是遞迴取得所有下級人員比較慢。那我們就解決這個問題!
假設人員表大概結構如下,一個典型的樹狀資料儲存。
ID,Name, ParentId
給它加一個字段Path,其值為到達該人員的訪問路徑,例如
-12-45-765-
,其中765是當前用戶Id,45是765的上級,12是45的上級。有了這個字段後,根據某個領導的id篩選出他所有的下級以及他自己就易如反掌。
select id from employee where path like '%-45-%'
以後在更新人員從屬關係時,記得要更新這個欄位就好了。
你這個如果資料量大,每次查看的時候都去現查詢計算,這個壓力非常非常大啊,不管是用哪種方案。
對於這種的,你不如直接做流式計算統計了。來一條資料計算一次,使用的時候直接查詢一次即可。
為了不影響正常流程的效能,流式計算統計可以非同步操作
我們系統就做過類似的統計,看每天統計可以看最近90天,看每月可以看最近3年,3年之前的就只能按年查看,感覺和你的需求差不多
我是自己寫了一個小流式計算統計的小代碼,花不了一周時間。
github.com/panjjo/flysnow 當然程式碼寫的還是比較爛的。
這種是在資料庫領域中常見的OLAP的需求,可以考慮物化視圖。
供參考。
Love MongoDB! Have fun!
寫一個定時任不就解決了啊,說這麼多! ! !