2014-02-08 3 views
0
을위한 데이터베이스 설계 또는 스키마

I가 그들에 대해 통계를 생성하는 다른 모델 :분석 시스템 - 저장 통계

Model  Example stats 
-----  ------------- 
User   qty_logins... qty_toys... qty_friends 
Group  qty_users... qty_invites... 
Section  qty_visits 

그래서 데이터가이 구조로 MySQL의 통계 테이블에가는 모든 통계 :

model_id kind  name   value 
-----  ----  ----   ----- 
123   user  qty_logins  5 
123   user  qty_toys  14 
456   group  qty_invites 21 
789   section qty_visits  23 

현재 100k 개의 행이 있으며 성능이 양호합니다.

질문 1)은 통계 데이터를 저장하는 좋은 방법입니까? 또는 다른 테이블에서 분리해야합니까 (예 : 각 모델 종류마다 하나씩).

질문 2) 나는 예를 들어, 동적 결과 생성을 구현하는 qty_logins + qty_visits을 시도하고있다. 문제는 하나의 데이터가 변경 될 때마다 자동 업데이트됩니다. 동적 데이터 생성 기능이있는 데이터베이스가 있습니까? 아니면 다른 도구를 사용하여 실시간으로이 작업을 수행 할 수 있습니까?

답변

1

값이 모두 숫자 (통계 값에 대해 합리적 임)라고 가정하면 스키마가 좋습니다.

이 구조를 엔티티 값 속성 (EVA) 모델이라고합니다. 이들은 각 값을 별도의 행에 저장합니다. 일반적으로 데이터를 저장하는 가장 좋은 방법은 아닙니다. 그러나이 경우 다양한 테이블에 대해 유연한 통계를 얻을 수 있습니다. 그리고 둘 다 시간이 지남에 따라 변할 수 있습니다. 그래서, 그것은 합리적인 응용 프로그램처럼 보입니다.

적절한 인덱싱을 사용하면 쿼리 성능을 향상시킬 수 있습니다. 쿼리를 보지 않고도 올바른 접근 방식은 추측입니다.

질문 2는 다소 어렵습니다. 당신의 예제에서는 어렵지 않지만 계층 적 표현식을 지원하려면 복잡해질 것입니다 (즉, 다른 표현식에 기반한 표현식). 예를 들어 세 가지 기본 옵션이 있습니다.

  • 트리거를 사용하여 값을 업데이트 할 수 있습니다. 관계를 지정하는 추가 열이나 다른 테이블이 있어야합니다.
  • 보기를 사용하여 결과를 가져올 때 계산을 수행하여 값을 검색 할 수 있습니다.
  • 데이터의 모든 변경 내용에 대해 저장 프로 시저를 사용하고 해당 논리를 저장 프로 시저에 넣을 수 있습니다.

두 번째 옵션이 내 첫 번째 방법입니다. 세 번째는 내 취향이다.

+0

감사합니다. 이러한 옵션이 좋을 것 같습니다. – user3175226

+0

은 mysql이 수백만 개의 행을 저장하는 데 좋은 옵션입니까? mongodb 또는 hbase 어쩌면 – user3175226

+0

@ user3175226에 대해 생각하고있어. . . 모두 수백만 행의 합리적인 옵션입니다. 나는 SQL 기반 솔루션의 일부이기 때문에 MySQL을 선택할 것입니다. –