登陆用户可以随时查看某个时间段的新增合同数
华东区总经理
|--- 华东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에 넣고 하루에 한 번씩 삭제하는 것을 고려해 보세요.
옵션 1이 선호되는 옵션입니다. 유일한 문제는 모든 부하 직원을 재귀적으로 확보하는 것이 느리다는 것입니다. 그럼 이 문제를 해결해 볼까요!
인사 테이블의 대략적인 구조는 전형적인 트리 형태의 데이터 저장소로 다음과 같다고 가정합니다.
아이디, 이름, 부모ID
값이 개인에 대한 액세스 경로인 경로 필드를 추가합니다. 예를 들어
-12-45-765-
에서 765는 현재 사용자 ID이고, 45는 765의 상위, 12는 45의 상위입니다.이 필드를 사용하면 리더의 ID를 기준으로 리더의 부하 직원과 자신을 모두 쉽게 필터링할 수 있습니다.
select id from employee where path like '%-45-%'
향후 직원 소속을 업데이트할 때 이 필드를 업데이트하는 것을 잊지 마세요.
데이터의 양이 많으면 확인할 때마다 쿼리하고 계산해야 하는데 이는 어떤 솔루션을 사용해도 매우 스트레스가 많습니다.
이런 경우 스트리밍 계산 통계를 직접 수행하는 것이 좋습니다. 데이터를 한 번 계산하고, 사용할 때 직접 쿼리해 보세요.
정상적인 프로세스의 성능에 영향을 주지 않기 위해 스트리밍 컴퓨팅 통계는 비동기식으로 운영될 수 있습니다
저희 시스템도 비슷한 통계를 일간 통계로 보면 지난 90일, 최근 3년간의 통계를 볼 수 있습니다. 이전에는 연도별로만 볼 수 있었는데, 원하는 것과 비슷한 것 같습니다.
스트림 계산 통계를 위한 작은 코드를 작성했는데, 일주일도 채 걸리지 않았습니다.
github.com/panjjo/flysnow 물론 코드 작성이 상당히 형편없습니다.
이것은 데이터베이스 분야의 일반적인 OLAP 요구 사항이며 구체화된 뷰를 고려할 수 있습니다.
참고로.
MongoDB를 사랑해주세요! 재미있게 보내세요!
타이머를 작성하면 문제가 해결됩니다. 그게 전부입니다! ! !