2016-09-08 2 views

답변

0

"디스크 탐색 속도가 훨씬 빠름"이 잘못되었습니다. 실제 문제는 "열 기반 데이터베이스가 데이터를 디스크에 저장하는 방법"이며, 일반적으로 "순차 쓰기만으로"(일반적으로 데이터를 제자리에서 업데이트하지 않음) 디스크 검색이 적어 전체적으로 속도 이득.

0

큰 차이점은 데이터가 디스크에 저장되는 방식에 있습니다.

은의가 (이상) 간단한 예를 살펴 보자 :

한다고 가정 우리가 50 열이있는 테이블이, 일부는 번호 (저장 바이너리)이고 다른 사람은 폭 텍스트를 고정 - 1024 바이트의 총 레코드 크기로. 행 수는 약 1 천만 개이며 총 크기는 약 10GB입니다. 우리는 4GB RAM의 PC로 작업하고 있습니다. (이러한 테이블은 대개 디스크의 개별 블록에 저장되지만 단순화를 위해 데이터는 하나의 큰 블록에 저장된다고 가정합니다).

이제 특정 열의 모든 값 (레코드에서 4 바이트로 저장된 정수)을 합산한다고 가정합니다. 이를 위해 1024 바이트 (레코드 크기)마다 정수를 읽어야합니다.

디스크에서 읽을 수있는 최소 데이터 양은 섹터이며 대개 4KB입니다. 따라서 모든 섹터를 읽을 때마다 4 개의 값만 있습니다. 이것은 또한 전체 열을 합산하기 위해 전체 10GB 파일을 읽어야 함을 의미합니다.

반면에 열 저장소에서는 데이터가 별도의 열에 저장됩니다. 이것은 우리 정수 컬럼의 경우 4 대신 4096 바이트 섹터에 1024 개의 값을 가짐을 의미합니다! (때로는 그 값을 더 압축 할 수 있습니다) - 우리가 지금 읽어야하는 총 데이터는 10GB 대신 약 40MB이며, 향후 사용을 위해 디스크 캐시에도 남아 있습니다.

CPU 캐시 (데이터가 디스크에서 이미 캐시되었다고 가정)가 더 좋을 경우 : 1024 바이트마다 하나의 정수가 CPU (L1) 캐시에 최적이 아닙니다. 반면 한 블록의 1024 정수는 속도가 빠릅니다 계산을 극적으로 향상시킬 수 있습니다 (L1 캐시는 일반 메모리 액세스보다 약 50 배 더 빠름).

관련 문제