select count(*) from relword;
해당 쿼리에서 몇억개 이상의 레코드가 존재한다면 어떻게 될까?
이러한 규모의 데이터베이스에서 인덱스를 태우지 않고 특정한 레코드를 조회한다면 200초가 경과해도 검색결과가 나오지 않는다.
왜냐하면 메모리 내에서 계산 할 수 없어서 디스크를 읽고 있기 때문이다.
디스크에서 데이터를 조회하면 메모리에 비해 엄청난 시간이 걸린다.
대규모 데이터를 처리할 때 나타나는 어려운점은 메모리 내에서 계산할 수 없다는 점이다.
대규모 데이터 처리의 어려운점
메모리 내에서 계산할 수 없기 때문에 디스크에 있는 데이터를 검색할 필요가 있다
하지만 디스크는 느리므로 I/O에 시간이 걸린다. (메모리는 디스크보다 10만~100만배 이상 빠르다)
디스크는 왜 느릴까
디스크와 메모리의 차이
메모리는 전기적인 부품이므로 물리적 구조는 탐색속도와 그다지 관계가 없다. 포인터를 이동시킬때에도 마이크로초 단위로 걸리기 때문에 속도가 매우 빠르다.
하지만 디스크는 동축 상에 원반이 쌓여있다. 이 원반이 회전하고 있고 여기서 데이터를 읽어난다.
즉, 메모리와는 달리 회전 등의 물리적인 동작을 수반하고 있다. 이 물리적인 구조가 탐색 속도에 영향을 준다. 원반의 데이터를 읽는 헤드가 있는데 원하는 데이터를 읽으려면 데이터가 놓은 원반을 헤드로 옮기는 작업이 필요하다.
따라서 메모리는 1회 탐색할 때 마이크로초면 되지만, 디스크는 수 밀리초가 걸린다.
OS레벨에서 디스크 최적화
디스크는 느리지만 OS는 이를 커버하는 작업을 한다. OS는 연속된 데이터를 같은 위치에 쌓는다. 그리고 나서 데이터를 읽을 때 1바이트 씩 읽는 것이 아니라 4KB정도를 한꺼번에 읽도록 되어있다.
이렇게 해서 비슷한 데이터를 비슷한 곳에 두어 1번의 디스크 회전으로 최대한 많은 데이터를 읽는다. 그 결과로 디스크 회전횟수를 최소하 한다. 그렇지만 결국 1회전당 밀리초 단위의 시간이 걸리므로 메모리와의 속도차를 피할 수 있는 것은 아니다.
전송속도, 버스의 속도차
탐색속도 측면에서 메모리가 디스크에 비해 빠르다는 이야기를 해왔다. 이번에는 전송속도 차이를 살펴보자. 메모리나 디스크 모두 CPU와 버스로 연결되어 있다. 메모리와 CPU는 상당히 빠른 버스로 연결되어 있어서 초당 약 7GB의 데이터를 전송하지만, 디스크는 초당 50MB 의 전송속도에 그친다. 따라서 데이터가 많으면 많을 수록 디스크와 메모리의 속도 차이도 두드러지게 된다.
그렇다면 SSD는?
훨씬 빠른 디스크인 SSD도 예외는 아니다. SSD는 물리적인 회전이 아니므로 탐색
은 빠르지만 버스 속도가 병목이 되거나 그 밖에 구조에 기인하는 면이 있어서 역시나 메모리 만큼의 속도가 나오지 않는다.