2013-08-18 3 views
0

저는 MySQL에서 중형 (100,000 개 항목) 테이블을 만들고 있으며 속도를 최적화하려고합니다. 엔트리는 본질적으로 트랜잭션적인 데이터를 포함하고 있으며,이 데이터는 분명히 MySQL에 보관 될 것입니다. 나머지 데이터는 테이블 수명 동안 변경되지 않으며 테이블 형식에도 적합하지 않습니다. 즉, 일부 항목에는 다른 항목이 표시하지 않는 필드가 포함되어 많은 'null'값을 갖게됩니다. 또한이 두 번째 부분의 많은 데이터가 반복됩니다. 즉, 테이블의 항목과 쌍을 이루는 500-1000 개의 고유 한 데이터 집합 만있을 수 있습니다.대용량 데이터 반복을위한 MySQL 데이터베이스 최적화

데이터를 구성하는 세 가지 방법을 고려 중입니다. 1) MySQL의 모든 데이터를 테이블 형식으로 둡니다. 2) 비 고유 데이터를 직렬화하고 단일 MySQL 필드에 해당 데이터를 저장하십시오. 3) 비 고유 데이터를 직렬화하고 MySQL 테이블의 포인터가 참조하는 하드 디스크의 파일에 저장하십시오.

제 질문은 어떤 형식을 권하고 싶고 그 이유는 무엇입니까? 데이터베이스에서 많은 쿼리를 실행할 예정이라면 어느 것이 가장 빠를 것입니까?

+0

데이터의 예는 많은 도움이됩니다. 가장 중요한 질문은 "어떻게 사용 하시겠습니까?"입니다. –

+0

더 간단한 방법은 테이블의 각 항목이 더 큰 유형의 개체의 하위 클래스라는 것입니다. MySQL에서 하위 클래스의 인스턴스에 고유 한 모든 변수를 저장하고 있습니다. 왜냐하면 이러한 변수를 자주 검색하고 업데이트해야하기 때문입니다. 그러나 나는 또한 더 큰 클래스가 소유 한 변수에 대한 읽기 (쓰기가 아닌) 접근이 필요하다. –

+0

예를 들어, 객체 A, B 및 C가 있습니다. 항목 1, 2, 3, 4 및 5는 A, B 및 C의 인스턴스입니다. 1-> A, 2-> A, 3-> B, 4-> B 및 5-> C. A의 모든 인스턴스에 공통되는 데이터를 저장하는 가장 좋은 방법은 무엇입니까? –

답변

0

정규화 된 데이터베이스를 설명하는 것처럼 들립니다. 이것은 매우 표준입니다. ID가 큰 단일 테이블로 "더 큰"엔티티를 가질 수 있습니다.

더 많은 데이터를 얻으려면 외래 키라고하는 id에 대한 참조가 필요합니다. 이것은 관계형 데이터베이스가 설계된 구조입니다. "관계형"의 의미의 일부는 개체 간의 관계입니다.

몇 개의 열만있는 경우 일부 값이 NULL이고 다른 행의 NULL 값이 NULL이 아닌지 염려하지 않을 것입니다. 여러 유형의 엔티티가있는 경우 데이터 구조에이를 반영 할 수도 있습니다.

편집 :

정상화는 성능에 좋고 나쁜 영향을 줄 수 있습니다. 데이터 크기를 줄이는 경우 비정규 화 된 데이터보다 성능이 좋은 경우가 많습니다. 적절한 인덱스 구조를 가지고 있다면 정규화 된 데이터 구조는 보통 잘 작동합니다.

+0

예, 저의 첫 번째 본능은 그런 데이터를 표준화하는 것이 었 습니다만, 이것이 내 쿼리 수가 두 배가된다는 것입니다 (한 번 서브 클래스를 얻고 마스터 클래스를 얻으려면 한 번). 그러면 성능이 심각하게 저하 될 것입니다. –

0

Sphinx과 같은 인덱싱 엔진 중 하나를 사용하면 휠을 다시 발명하지 마십시오. 스핑크스는 검색/쿼리 옵션에 따라 데이터를 구성하며 실제로 빠르며 많은 양의 데이터를 처리 할 수 ​​있습니다. 데이터베이스가 자주 변경되지 않으면 Sphinx Indexer를 한 번만 실행해야합니다. 이 솔루션의 단점 중 하나는 사실, 스핑크스 색인 파일이 상당히 큽니다.

0

당신을 도울 this을 읽으십시오.

this도 사용할 수 있으며 답변을 찾을 수 있습니다.

관련 문제