2014-02-19 2 views
1

사용자 관련 통계 정보를 저장할 수있는 통계 모듈을 구축해야하는 상황에 앉아 있습니다.맞춤 통계 우수 사례

기본적으로 저장된 모든 것은 이벤트 식별자, datetime 개체 및이 이벤트가 발생한 횟수 및 상호 작용할 개체의 ID입니다.

필자는 전에도 비슷한 시스템을 만들었지 만 정보량을이 시스템에 저장해야하는 것은 없었습니다.

내 제안은 데이터베이스의 간단한 표가 될 것입니다. 등 "통계"다음 행

  • ID

    (차, 자동 증가)
  • 양 (정수)
  • 이벤트 (열거 포함 - (목록, 클릭,보기, 연락처)를
  • 일반적으로,이 방법은 주어진 timef에서 개체에 대한 통계를 저장하는 저를있게 잘 작동

날짜 (날짜)

  • OBJECT_ID (정수) RAME가 (매 시간 15 분 새 날짜를 삽입, 그래서 통계는 모든 15분 업데이트됩니다) 이제

    을, 내 질문은 :

    • 는 프로그래머 더 나은 방법이나 건물을 달성 더 최적화 방법입니다 커스텀 통계 모듈.
    • 이 새로운 사이트는 엄청난 트래픽을 받기 때문에 개체 ID의 색인이 업데이트 응답 시간이 느려질 것이라는 역설에 대해 어떻게 생각합니까?
    • 어떻게 분석과 같은 실시간 통계를 얻을 수 있습니까? 전적으로 서버 크기와 처리 능력에 관한 것입니까? 또는 모범 사례가 있습니다.

    내 질문이 이해되기를 바랍니다. 나는이 주제에 대해 더 알고 싶습니다. 최고 감사드립니다. Jonas

  • 답변

    1

    저는 여러분이 다루는 문제 중 하나가 트랜잭션과 분석이라는 두 가지 세계를 원한다고 생각합니다. 작은 경우에는 괜찮지 만, 특히 500M + 레코드의 영역으로 확장하기 시작하면 좋습니다.

    두 가지를 분리하는 것이 좋습니다. 이벤트를 생성하고 이벤트 자체 만 추적하십시오. 그런 다음 분석 쿼리를 실행하여 개체 상호 작용 당 이벤트 수와 같은 항목을 가져옵니다. 이 수 또는 다른 메트릭 계산을 보고서 테이블에 주기적으로 집계 할 수 있습니다.

    이벤트 추적에 관해서는 이벤트 발생 표에 해당 이벤트를 유지하거나이 추적을 수행하는 데이터베이스 앞에 무언가를 가지고 데이터베이스에 정기적 인 집계를 제공 할 수 있습니다. 수집 에이전트를 사용하여 수집 영역으로 이동하는 이벤트를 생성하는 모니터링 시스템의 세계를 생각해보십시오 (예 : CollectDS to StatsD/Graphite to Whisper)

    면책 조항, 나는 architect for InfiniDB 어떤 종류의 데이터 소스를 사용하고 있는지 알 수 없지만 커지면서 역사의 양을 결정할 때 ...대부분의 사람들이 이벤트 데이터를 수집하거나 데이터를 수집 할 때 일반적으로하는 것처럼 크기 조정 문제가 발생할 수 있습니다. MySQL/MariaDB/PostegreSQL에 있다면 InfiniDB (분석을위한 오픈 소스 칼럼 형 MPP 데이터베이스)를 확인해보십시오. 그것은 완전 오픈 소스 (GPLv2)이며 이러한 분석적 질문에 응답하기 위해 수십억 개의 데이터 및 TB에 대한 쿼리를 수행하는 데 필요한 성능을 제공합니다.

    +0

    추가하는 것을 잊어 버렸습니다. 여러 번 볼 수있는 것은 준비 및 보고서 표입니다. 스테이징 테이블에서 발생하는 무증각 이벤트를 추적 한 다음 15 분마다 또는 원하는 모든 기간을 집계 방식 (예 : 타임 스탬프 당 카운트)으로 해당 스테이징 테이블을 Reports 테이블로 플러시 할 수 있습니다. 보고서 테이블에서 기록 쿼리를 실행하고 준비에서 벗어난 쿼리를 실시간으로 실행할 수 있습니다 (지난 15 분 동안을보고 싶다면). 스테이징 테이블에 모든 것을 보관하고 항상 쿼리를 실행하여 규모에 따라 달라질 수 있습니다. – mhoglan

    +0

    괜찮습니다. 훌륭한 답변을 보내 주셔서 감사합니다! 감사합니다. 더 많은 지식인이 기여할 것인지 기다린 다음 대답을 수락합니다! –