Skip to main content

Command Palette

Search for a command to run...

디스크와 메모리 - 디스크는 왜 느릴까

Updated
View as Markdown
디스크와 메모리 - 디스크는 왜 느릴까
K

backend developer interested in technical problem

select count(*) from relword;

해당 쿼리에서 몇억개 이상의 레코드가 존재한다면 어떻게 될까?
이러한 규모의 데이터베이스에서 인덱스를 태우지 않고 특정한 레코드를 조회한다면 200초가 경과해도 검색결과가 나오지 않는다.
왜냐하면 메모리 내에서 계산 할 수 없어서 디스크를 읽고 있기 때문이다.
디스크에서 데이터를 조회하면 메모리에 비해 엄청난 시간이 걸린다.
대규모 데이터를 처리할 때 나타나는 어려운점은 메모리 내에서 계산할 수 없다는 점이다.

대규모 데이터 처리의 어려운점

  • 메모리 내에서 계산할 수 없기 때문에 디스크에 있는 데이터를 검색할 필요가 있다

  • 하지만 디스크는 느리므로 I/O에 시간이 걸린다. (메모리는 디스크보다 10만~100만배 이상 빠르다)

디스크는 왜 느릴까

디스크와 메모리의 차이

메모리는 전기적인 부품이므로 물리적 구조는 탐색속도와 그다지 관계가 없다. 포인터를 이동시킬때에도 마이크로초 단위로 걸리기 때문에 속도가 매우 빠르다.

하지만 디스크는 동축 상에 원반이 쌓여있다. 이 원반이 회전하고 있고 여기서 데이터를 읽어난다.

즉, 메모리와는 달리 회전 등의 물리적인 동작을 수반하고 있다. 이 물리적인 구조가 탐색 속도에 영향을 준다. 원반의 데이터를 읽는 헤드가 있는데 원하는 데이터를 읽으려면 데이터가 놓은 원반을 헤드로 옮기는 작업이 필요하다.

따라서 메모리는 1회 탐색할 때 마이크로초면 되지만, 디스크는 수 밀리초가 걸린다.

OS레벨에서 디스크 최적화

디스크는 느리지만 OS는 이를 커버하는 작업을 한다. OS는 연속된 데이터를 같은 위치에 쌓는다. 그리고 나서 데이터를 읽을 때 1바이트 씩 읽는 것이 아니라 4KB정도를 한꺼번에 읽도록 되어있다.

이렇게 해서 비슷한 데이터를 비슷한 곳에 두어 1번의 디스크 회전으로 최대한 많은 데이터를 읽는다. 그 결과로 디스크 회전횟수를 최소하 한다. 그렇지만 결국 1회전당 밀리초 단위의 시간이 걸리므로 메모리와의 속도차를 피할 수 있는 것은 아니다.

전송속도, 버스의 속도차

탐색속도 측면에서 메모리가 디스크에 비해 빠르다는 이야기를 해왔다. 이번에는 전송속도 차이를 살펴보자. 메모리나 디스크 모두 CPU와 버스로 연결되어 있다. 메모리와 CPU는 상당히 빠른 버스로 연결되어 있어서 초당 약 7GB의 데이터를 전송하지만, 디스크는 초당 50MB 의 전송속도에 그친다. 따라서 데이터가 많으면 많을 수록 디스크와 메모리의 속도 차이도 두드러지게 된다.

그렇다면 SSD는?

훨씬 빠른 디스크인 SSD도 예외는 아니다. SSD는 물리적인 회전이 아니므로 탐색은 빠르지만 버스 속도가 병목이 되거나 그 밖에 구조에 기인하는 면이 있어서 역시나 메모리 만큼의 속도가 나오지 않는다.

5 views

More from this blog

rfc 959 읽어보면서 ftp이해하기

들어가며 프로젝트에서 FTP를 통해 파일을 전송하는 클라이언트를 개발했을 때 이야기입니다. 프로토콜에 대한 이해 없이 개발을 진행하다 보니 불필요하게 시간을 소모한 경험이 있어서 RFC 원문을 읽어보게 되었습니다. 읽게 된 계기 당시 FTP 프로토콜에 대한 이해가 부족한 상태로 개발을 시작했습니다. '제어를 위한 포트와 데이터 전송을 위한 포트가 분리되어 있다' 정도만 알고 있었고 Active 모드와 Passive 모드의 차이를 제대로 이해...

Dec 5, 20256
rfc 959 읽어보면서 ftp이해하기

mapstruct 로 보일러플레이트 코드 줄이기

배경 사내에서 교통 모니터링용 레이더 디바이스를 관리하는 API를 개발했을때 이야기입니다. 반복되는 코드에서 느꼈던 피로를 개선하고자 mapstruct를 적용해봤습니다. 실황 우선 일부 필드만 추출한 Device에 대해 간단히 이야기해야할 것 같습니다. 교통 모니터링용 레이더 디바이스로 신호등이나 가로등에 설치하며 설치된 좌표를 기록하는 위도, 경도와 레이더가 바라보는 방향을 의미하는 heading_angle필드 등이 있습니다. public...

Nov 13, 20259
mapstruct 로 보일러플레이트 코드 줄이기
T

takoyakisoba

38 posts