3

거대한 mysql 테이블 (로깅 용)이 있습니다. 같은 뭔가 :mysql 파티션의 수를 결정하는 방법

로거 (SHA1) 타임 스탬프 조치가

가 너무 약 100,000 로거가있을 것으로 예상된다. 각 로깅은 평균 100 줄을 말합니다. 이렇게하면 약 1 억 개의 행을 테이블에 가져올 수 있습니다.

많은 로거가 한 번에 항목을 작성하므로 꽤 빨리 삽입 (삽입)해야합니다.

일반적으로 검색어는 'logger의 모든 로그에'날짜별로 정렬 된 'x'을 입력합니다. http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

내 질문, 어떻게 파티션 번호, 파티션 크기 사이의 균형을 찾을 수있다 :

그래서 나는 MySQL의 파티션을 사용하는 거라고?

로거는 UUID이고 sha1 번호이므로, mysql이 각 sha1 값에 대해 하나의 파티션을 만들도록 생각했기 때문에 기본적으로 각 로거는 고유 한 DB 테이블 파일을 갖게됩니다.

다른 제안을 지정된 수들로 무언가를 분할

+0

따라서 파티션의 최대 수는 1024입니다. 이제 sha1 값을 1024 개의 다른 파티션으로 균등하게 분할하는 알고리즘이 필요합니다. 또는 왜 1024 개의 파티션이 좋지 않은지에 대한 조언. – matiu

+0

그래서 해시로 파티션을 생각하고 있습니다 : http://dev.mysql.com/doc/refman/5.1/en/partitioning-hash.html -하지만 파티션의 수를 결정하는 방법은 여전히 ​​남아 있습니다. – matiu

답변

1

하는 쉬운 방법을 평가 계수 기능을 사용하는 것입니다.

그래서, 아마 당신은 다음과 같이 모드 1024의 SHA1 해시의 첫 번째 4 개 진수 문자를했다 (수율 65025까지) 정수로 사람들을 변환하고, 경우 :

aa00 % 1024 = 512 

진수

43520 % 1024 = 512 

512를 반환하는 모든 숫자는 같은 파티션으로 갈 수 있습니다. 계산 결과는 0에서 1023까지입니다.

+0

+1 나는 그것을 생각하지 않았기 때문에 +1하지만 내 sha1 값에 대해서는별로 좋지 않습니다. 단지 작은 정수가 아니기 때문입니다. 나는 '해시에 의한 partion'이 나를 올바르게 설정해야한다고 생각하지만, 파티션의 이상적인 수를 결정하는 방법. – matiu

+1

@matiu, SHA1과 같은 암호 학적으로 안전한 해시가 고르게 분포되어 있기 때문에 전체 해시를 계산을위한 정수 내가 제안한대로 처음 몇 바이트 만 사용하면된다. 이것은 결정 론적 (비 랜덤) 결과로 양호한 분배를 산출해야합니다. –