2012-10-21 4 views
2

저는 쿼리가 너무 커서 (500m + 행) 매우 큰 MySQL 테이블이 있습니다. 내가 한 것은 "최근"이라는 다른 테이블에서 필요한 결과를 캐시하는 것입니다. 은 "최근"테이블에서고유 인덱스를 사용하여 MySQL의 열 당 행의 수를 제한합니다.

스키마는 난 단지 원하는대로 내가 USER_ID와 DISPLAY_ORDER에 고유 인덱스를 넣었습니다

DISPLAY_ORDER이

USER_ID

PAGE_ID처럼 보인다 이 테이블에는 사용자 당 최대 64 개의 레코드를 저장할 수 있습니다. 따라서 DISPLAY_ORDER는 64까지 올라가는 int입니다. 행은 REPLACE INTO를 사용하여 업데이트됩니다.

좋은 접근 방법입니까? 아니면 사용자가 64 행을 초과하면 테이블에서 데이터를 정기적으로 삭제해야합니다. 나는 성과를 고려할 필요가있다. 다음 5 개월 동안 5 억에 달하는 마스터 테이블은 사용자 당 64 줄로 늘어나 "최근"테이블도 상당히 커질 것입니다.

감사합니다.

+4

[partitioning] (http://dev.mysql.com/doc/en/partitioning.html) 기본 테이블을 고려해 볼 수 있습니다. – eggyal

답변

0

내가 당신이라면 Big Data NoSQL 데이터베이스로 옮길 것을 진지하게 고려할 것입니다. 카산드라 (Cassandra) 나 HBase (HBase)와 같은 것이 있습니다. 5 ~ 10 개의 클러스터 노드가 하나의 거대한 모 놀리 식 서버가 아니라 많은 맵을 스캔하여 탐색하려고하는 대신 MapReduce를 사용하여 작업을 수행하게하십시오.

0

나는 eggyal과 Todd Nakamura와 모두 동의합니다.

eggyal은 : 큰 당신이 정말로 당신이 모든 것을 구절 데이터의 부분 집합에 쿼리를 실행할 수있는 기회를 가질 수 있도록 데이터를 분할해야 할 데이터 세트를 처리 할 때 데이터
를 분할.

토드 나카무라 : 다른 데이터베이스 기술을 조사하십시오.
이 문제는 NoSQL 데이터 저장소처럼 좋은 해결책이 될 것 같습니다. 매우 큰 데이터 세트와 Map/Reduce (Hadoop)을 사용하여 쿼리를 병렬화 할 수 있습니다.

관련 문제