3

현재 나는 PHP/MySQL의 대시 보드에서 다음과 같은 몇 가지 통계/사실을 포함하고 있습니다. 판매 된 항목의 수, 매출, 성별 (남성/여성) 비율 사용자 등 (지난 주/월/년 모두 필터링 가능). 데이터의 양은 (현재) 그리 많지 않습니다 : 사용자 행 20.000 개, 하루 1.000 개, 500 개 품목이지만 향후 성장할 것으로 예상됩니다. 기하 급수적으로 증가 할 것으로 예상됩니다.통계 (그래프)에 대한 성능 데이터를 저장하는 최적의 방법

전략 변경이 사용자, 매출, 성별 비율 등에 영향을 미치는지 확인하기 위해 실적을 표시하는 그래프가 여러 개 있어야합니다.이를 위해 하루에 숫자가 필요합니다. 현재 대시 보드는 'NOW() - 1 주/1 개월/1 년'만 표시 할 수 있지만 성장을 요약하는 그래프를 표시 할 때이 수치는 매일 저장해야합니다.

내 질문은 :이 경우 어떤 옵션이 있습니까? 이 숫자를 저장하고 방문객, 판매, 성별 비율 등을 해당 날짜의 날짜와 연결된 행에 저장하는 별도의 '실적'또는 '기록'테이블에 cronjob을 설정할 수 있습니다. 이는 성능에는 좋지만 특정 데이터는 손실됩니다. 또 다른 옵션은 이러한 숫자를 복잡한 쿼리 (일별 그룹) 등으로 계산하는 것입니다.하지만 쿼리는 프로덕션 데이터베이스에서 수행되므로 집중적 인 것으로 보입니다. 특히 데이터베이스 구조가 조금 복잡하기 때문에 특히 그렇습니다. 프로덕션 데이터베이스에서이 작업을 수행하는 것을 피하면서 ETL로 데이터웨어 하우스를 설정하는 것이 프로덕션 데이터베이스에 과부하가 걸리는 것을 방지하는 더 좋은 옵션입니까? 이 경우 데이터가 실시간으로 표시되지 않습니다.

솔직히이 경우 가장 좋은 옵션이 무엇인지 모릅니다. 나는 그 대답에 대해 매우 궁금해! 많은 감사합니다.

+0

계산이 너무 느리면 표준 쿼리를 사용하여 하루에 한 번 (예 : 자정) 복잡한 쿼리를 실행하여 기본 데이터에서 필요한 통계를 생성 할 수 있습니다. 이전 날짜의 데이터가 변경되지 않거나 모든 데이터를 다시 작성하는 경우 새로운 날의 데이터 추가). 현재 날짜는 통계에서 유효하지 않으므로 "라이브"일 필요는 없습니다.사전 계산은 나중에 표시/필터링 할 항목에 따라 다르지만 모든 필수 통계를 만족하는 구조를 찾을 수없는 경우 여러 테이블을 만드는 것이 전적으로 유효합니다. – Solarflare

+0

테이블에 대한 더 많은 정보를 제공하면 도움이 될 것입니다. 각 테이블에는 무엇이 들어 있으며, 대략 지금은 지금부터 1 년 후의 많은 행이 예상됩니다. –

+0

[_Summary Tables_] (http://mysql.rjweb.org/doc.php/summarytables)는 훌륭한 아이디어처럼 들립니다. –

답변

0

프로덕션 데이터베이스 (특히 볼륨 및 복잡성이 커지고있는 데이터베이스)에서 실행중인 쿼리는 매우 빠르게 손실됩니다. 가능한 많은 대안이 있습니다. 기본적으로 비즈니스 인텔리전스의 전체 분야는이 문제의 해결책으로 성장합니다.

프로덕션 데이터베이스를 쿼리하지 않으려는 소규모 시스템의 경우 전체 데이터웨어 하우스의 개발이 지나치게 어려울 수 있습니다. (/ 결과의 정도 복잡성의 증가 순서대로) 더 모르게 합리적인 대답을하는 것은 불가능하지만 다음 중 하나에 갈 것 :

  1. 대신 직접의 쿼리의 결과를 보여, 저장 이 테이블에 테이블을
  2. 복제 생산 데이터베이스를 조회 한 후 관련 데이터를 저장하는 구조의 복제를 프로덕션 데이터베이스에서
  3. 추출 관련 데이터를 조회하고 역사를 보존 (구글 데이터 볼트) 생산을 통해
  4. 직접 DB 또는 솔루션 2 또는 3을 통해 차원 모델을 구축합니다 (Google Kimball Dimensional Model). 좋은 일을하기 위해 어떤 종류의 쿼리를 수행해야하는지 고려해야한다는 것에주의를 기울이십시오. 당신은 다른 요구 사항에 대한 서로 다른 디자인으로 끝날 수 있습니다.

또한 어떤 기술을 사용하고 있으며 사용 가능한 아키텍처에서 사용할 수있는 옵션과 관련이 있습니다. 손에 가지고있는 것에 따라 복잡한 솔루션이라도 간단한 솔루션을 제공 할 수 있습니다. 조사 좀 해봐.