mysql - 새로운 계약 수를 계산하는 솔루션을 찾고 있습니다.
巴扎黑
巴扎黑 2017-05-02 09:26:05
0
5
782

장면

로그인한 사용자는 언제든지 특정 기간의 신규 계약 건수를 확인할 수 있습니다

부서관계

으아아아

계약서

으아아아

계산 규칙

으아아아

옵션 1

데이터베이스는 mysql인데, 상위 계약 수는 모든 하위 계약 수의 합이므로 해당 사용자의 모든 하위 사용자 ID를 재귀적으로 얻어
다음에서 count(*)를 사용합니다. 테이블 where (created_at 기간 조건) 및created_by in(현재 로그인된 사용자 ID를 포함한 모든 하위 사용자 ID)

문제: 데이터는 정확하지만 비효율적이며 서버 성능에 영향을 미칩니다

옵션 2

별도의 테이블을 사용하여 매일 각 사용자의 신규 계약 수를 기록하거나 먼저 모든 하위 사용자의 ID를 가져온 다음
select sum (inum) from user_count where (created_at time period 조건)을 사용합니다.
andcreated_byin(현재 로그인된 사용자 ID를 포함한 모든 하위 사용자 ID)

문제: 이 필드는 추가, 삭제, 일괄 삭제를 할 때마다 수정해야 합니다. 사용자 수가 늘어나면 통계가 편리하지만 데이터가 부정확할 가능성이 매우 높습니다.

도움말

우리 웹사이트에서는 오늘의 새로운 추가 사항, 어제의 추가 사항, 이번 주 추가 사항, 이번 달의 추가 사항, 이번 분기의 추가 사항, 올해의 추가 사항을 계산합니다. 사용자는 원하는 기간을 입력하여 쿼리할 수도 있습니다.
제안 사항이 있습니까? ? 데이터를 정확하고 통계적으로 효율적으로 만들 수 있는 솔루션은 무엇입니까?

巴扎黑
巴扎黑

모든 응답(5)
Ty80

새롭게 추가된 계약의 사본을 Redis에 넣고 하루에 한 번씩 삭제하는 것을 고려해 보세요.

PHPzhong

옵션 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를 사랑해주세요! 재미있게 보내세요!

大家讲道理

타이머를 작성하면 문제가 해결됩니다. 그게 전부입니다! ! !

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿