2010-03-10 5 views
0

프로젝트 용 mysql 데이터베이스 디자인을 구현하려고합니다. 문제는 최상의 해결책으로 떠오르고 있습니다. 기본적으로 내 응용 프로그램에서는 약 10-30 행을 사용자 당 삽입해야합니다. 기본 키는 임의의 CHAR (16) 문자열입니다. 또한 datetime 인덱스와 "data"라는 추가 행 (인덱스 포함)이 있습니다.데이터베이스 디자인

매일 매일 테이블에 많은 양의 삽입 및 찾아보기가 있습니다. 검색은 항상 기본 키를 기반으로 결합되므로 (사용자 당 10-30 행을 합치는 경우)

때때로 특정 몇 개월 (또는 1 년 내내)을보고 "데이터"색인에서 mysql GROUP BY 기능을 사용할 수 있어야합니다.

현재 볼륨 및 예상치에서 테이블이 9.3m 행/월 증가 할 것으로 예상됩니다. 나는 이것이 증가 할 것을 기대한다.

제 질문은 이것입니다 : mysql 파티션, 프로그램 테이블 분리 또는 다른 솔루션? 월 또는 연도별로 가장 잘 구분되는 것들입니까? 우리는 RHEL에서 실행 중이므로, mysql 5.1을 사용하는 것은 약간의 작업 일지 모르지만 더 나은 솔루션이라면 그만한 가치가있을 것이다.

innoDB는 이미이 프로젝트에 선택되었습니다. 날마다 성과가 가장 큰 관심사입니다.

답변

0

날짜별로 데이터를 분할하십시오 (또한 사용자마다 데이터가 많고 사용자가 많을 수도 있습니다).

그리고 SUM, COUNT, AVG 등 원하는 월별 표와 적절한 그룹을 작성하십시오. 해당 테이블도 파티션 할 수 있습니다 (날짜는 의미있는 파티션이 아닐 것입니다).

그런 다음 월별 테이블과 같은 연간 테이블을 만듭니다.

월 및 연도 표를 REPLACE INTO ... SELECT ... 문으로 채 웁니다.

2

이 답변으로 문제가 해결되지 않지만 언급 할 필요가 ...

는 기본 키는 임의의 CHAR (16) 문자열입니다.

이것은 잘못된 생각입니다. AUTO_INCREMENT와 함께 UNSIGNED BIGINT 열을 사용하십시오. 바퀴를 재발 명할 필요가 없습니다. 키 관리 나 충돌에 대해 걱정할 필요가 없습니다.

+1

어떻게 든 키를 자동 증가시킬 수 없다면 Hi-Lo 키 생성 알고리즘을 사용할 수 있습니다. –

+0

자동 증가를 알고 있지만 순차적 ID가있는 테이블을 병합하는 것은 어려울 것입니다. – jwzk

+1

"무작위"ID를 가진 테이블을 병합하는 것은 특히 중복이있을 때 큰 어려움이 될 것입니다! –