2011-09-05 3 views
1

MySQL 데이터베이스에 저장된 매우 큰 데이터 세트에서 심각한 데이터 마이닝을 수행해야합니다. 그러나 기본 이상의 비트를 필요로하는 쿼리는 10e6 이상의 순서로 결과를 반환하기 때문에 (특히 하나 이상의 테이블에서 JOIN이 도입 될 때) 오히려 비효율적 인 경향이 있습니다. 수십 개의 테이블을 두 개 이상 결합하면 수백만 개의 행 (데이터 필터링 후)이 있습니다. 이는 모든 쿼리에서 거의 발생합니다. 우리는 종종 이것들 (sum, avg, count 등)에 대해 집계 함수를 실행하고 싶지만, MySQL은 단순히 질식하기 때문에 불가능합니다.매우 큰 데이터 세트를위한 RDBMS - 사람들은 무엇을 사용하고 있습니까?

모든 테이블의 색인이 제대로 생성되고 쿼리가 조정되고 하드웨어가 최고 수준이며 스토리지 엔진이 구성되는 등 많은 노력을 기울여야 현재 성능을 최적화 할 수 있습니다. 그러나 각 쿼리는 여전히 매우 오래 걸립니다. "우리가 집에 돌아가고 내일 일할 때 최선을 기원하기 전에 실행하십시오." 안좋다.

이것은 해결할 수있는 문제입니다. 많은 대기업은 매우 데이터 및 계산 집약적 인 마이닝을 수행하고 잘 처리합니다 (자체 스토리지 엔진, Google 작성하지 않고). 나는 일을 끝내기 위해 시간 벌칙을 기꺼이 받아 들일 것이지만 며칠이 아닌 몇 시간 만에 받아 들일 것입니다. 제 질문은 - 사람들이 이런 문제에 대처하기 위해 무엇을 사용합니까? 나는 이런 종류의 문제 (greenplum 등)에 맞춰진 스토리지 엔진에 대해 들어 봤지만,이 문제가 일반적으로 어떻게 접근하고 있는지 듣고 싶었다. 우리의 현재 데이터 저장소는 분명히 관계형이며 아마도 그렇게 남아 있어야하지만 생각이나 제안은 환영합니다. 감사.

+0

mysql은 파티션이없는 클러스터 된 인덱스를 활용하여 최적화 된 innodb 스키마를 사용하여 매우 큰 테이블 인 1billion + rows, 복잡한 조인을 사용하여 저온 (<0.2 초 런타임 감기)에 적합합니다. 나는 당신이 mysql 스키마를 가지고 그렇게 나쁘게 수행하게 만들었던 문제가 무엇인지 궁금하다. 어쩌면 이것의 빠른 읽기 올바른 방향으로 당신을 가리킨 수도 http://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right-one-on-a/4421601#4421601 –

답변

2

필자는 PostgreSQL을 제안합니다. PostgreSQL은 몇 가지 복잡한 조인 작업이 필요한 ~ 0.5B 행이있는 테이블에서 매우 성공적으로 작업했습니다. 오라클도 이와 같이 좋은 점이 있지만 오라클 경험이별로 없습니다.

RDBMS를 전환하는 것은 마술 솔루션이 아닙니다. 이러한 크기로 확장하려는 경우 쿼리 최적화, 데이터베이스 구조 및 인덱스 최적화, 미세 조정 구체화 된 뷰를 사용하여 사용, 복제에 적합한 하드웨어를 사용하는 데이터베이스 구성 (정확히 사용되는 경우 매우 강력 함 .및 here 참조 - 포스트그레스에 고유하지만 다른 RDBMS에도 적용됨) 당신은 문제에 더 많은 돈을 던져야합니다.

편집 은 (쓸모 안드로이드 자동 올바른 ...) 몇 가지 이상한 오타를 수정하고 우리는 행과 더 수백만의 열으로 재무 데이터에 대한 분석을 실행하는 MS SQLSERVER을 사용하고보기

1

구체화에 대한 몇 가지 자료를 추가 복잡한 JOIN 및 집계를 사용합니다. 우리는 당신이 언급 한 것보다 다른 수행 한 몇 가지 사항은 다음과 같습니다

  • 우리 덩어리 대신 하위 쿼리를 사용하는 임시 테이블의 많은으로 계산. 이 테이블은 코드를 통해 적절한 키, 색인 생성 등을 적용합니다. 하위 쿼리를 사용하는 쿼리가 실패합니다.
  • 임시 테이블에서 우리는 종종 우리에게 적합한 클러스터형 인덱스를 적용합니다. 이 임시 테이블은 필터링 된 결과이므로이 임시 테이블 대신 하위 쿼리를 사용하는 것보다 빠르게 인덱스를 적용하는 것이 비용이 많이 들지 않습니다. 참고 경험에서 말하면 모든 사례에 적용되지 않을 수도 있습니다.
  • 많은 집계 함수도 수행 했으므로 그룹 열에서 많은 인덱싱을 수행했습니다.
  • SQL Query Analyzer은 우리에게 실행 계획을 보여줍니다.계획을 바탕으로, 우리는
  • 우리는 우리가 같은 알고리즘 (해시, 병합 또는 중첩 된)
취할 가입의 선택으로 실행을 도울 수있는 생각하는 SQL Server에 대한 힌트를 제공하는 인덱스를 변경, 쿼리를 수정
관련 문제