2012-08-19 2 views
2

내 응용 프로그램은 일종의 POS 시스템입니다. 문제는 보고서에 있습니다. 제품 별, 테이블 별, 직원 별, 카테고리 별 매출. 1 년 날짜 범위 보고서를 가지고 있기 때문에 그들은 행 등을 많이 합쳐야하므로 매우 느립니다. 그래서 SQL 데이터베이스가 도움이 될지 궁금해합니다. 하루 또는 일일 요약하는 것 같습니다.하지만 어쩌면 쉽지 않을 수 있습니다. * items * categories * staff 등의 각 항목에 대해. 그래서 내가 뭘 할 수 있니?통계/보고서 데이터에 사용할 데이터베이스는 무엇입니까?

+0

특히 [map-reduce] (https://hadoop.apache.org/mapreduce/)에서 [apache hadoop stack] (https://hadoop.apache.org/)을 확인하십시오. – oleksii

답변

5

관계형 데이터베이스에 익숙하다면, 자주 사용하는 보고서에 일일 집계 테이블을 사용하는 것이 좋습니다.

예를 들어, 제품 번호별로 그룹화 된 판매 보고서를 원할 경우, 원하는 통계 (예 : 수량)를 파악하고 원시 데이터를 제품 번호별로 일별 "버킷"으로 집계하십시오. 매일의 끝에 일 크기의 버킷을 할 경우

+-----------+------------+------------+-------+-------+ 
| salesdate | productNum | totalSales | stat2 | stat3 | 
+-----------+------------+------------+-------+-------+ 

만 보고서 매월 30 양동이, 또는 연간 365 버킷을해야합니다. 요약하는 것이 훨씬 빠릅니다. 대시 보드 (시간 단위 버킷)를 만들 때 네트워크 성능 메트릭을 사용하여이 작업을 수행했으며 쿼리 시간을 크게 줄였습니다. 필요한 경우 원시 데이터를 파고들 수 있지만, 한눈에 무언가를보고 싶어하는 일반 사용자의 경우 집합 된 버킷으로 충분합니다.

요약 테이블을 별도의 데이터베이스에 저장하는 것도 좋습니다.

통계에 평균이있는 경우 평균 일련의 평균이 전체 범위의 평균이 아니라는 점을 명심하십시오.

+1

이것은 정확하게 사용자를 위해 우리가하는 일 - 출력을 계산할 필요가없는 각 사용자의 오버 헤드를 피하는 일일 구체화 된보기. –

+0

이 솔루션을 생각했지만 쿼리가 더 복잡합니다. 예를 들어 productNum에 대해 판매자 X가 ID X 인 사람이 얼마나 많은지 알 수 있습니까? 하루에? 각 판매자/직원에 대한 열이 필요합니다. 그리고 각 제품 번호가 취소 될 수 있으며 하루에 취소 이유가 필요합니다. – GorillaApe

+1

판매자, productNum 및 salesDate별로 그룹화 된 테이블 일 수 있습니다. 아마도 취소를 모으는 다른 테이블 일 수 있습니다. 이 시스템에 여러 판매자가있는 경우 "판매자"및 "salesDate"가 모든 집계 테이블의 일부일 수 있습니다. 집계 테이블에 적합한 열을 선택하는 것이 균형 잡힌 방법입니다. 일반적인 보고서, 보고서를 작성하는 데 사용하는 필터 및 표시되는 통계를 나열하십시오. 이러한 필터와 통계는 집계 테이블을 작성하는 방법에 대한 단서가됩니다. – dangowans

관련 문제