더북(TheBook)

압축

키-값 데이터베이스는 메모리를 집중적으로 사용한다. 큰 값이 많으면 상당한 양의 메모리를 빠르게 소비해버린다. 운영체제에서는 가상 메모리를 관리하여 이 문제를 해결할 수 있지만, 이는 반드시 디스크나 플래시 스토리지에 데이터를 쓰는 작업을 수반해야 한다.

디스크에서 데이터를 읽고 쓰는 작업은 램에서 읽고 쓰는 것보다 훨씬 느리며 가급적 피해야 한다. 한 가지 해결책은 서버에 메모리를 추가하는 것이다. 이 방법은 기술과 비용 문제를 수반한다. LevelDB 라이브러리(code.google.com/p/leveldb/) 같은 디스크 기반 키-값 저장 구조는 스토리지를 최적화해야 한다. 왜냐하면 데이터를 읽고 쓰는 데 필요한 시간이 데이터의 크기에 따라 달라지기 때문이다.

메모리와 스토리지를 최적화하는 한 가지 방법은 압축 기술을 사용하는 것이다. 키-값 저장 구조를 위한 압축 알고리즘은 가능한 한 빠르게 압축과 압축 해제를 수행해야 한다. 압축 알고리즘은 종종 압축/압축 해제 속도와 압축된 데이터 크기 문제가 서로 부딪히기도 한다.

그림 4-10에 나와 있듯이 빠른 압축 알고리즘은 느린 압축 알고리즘보다 압축된 데이터의 크기가 더 커질 수 있다. 예를 들어 Snappy 압축 알고리즘은 Core i7, 64비트 프로세서에서 초당 250MB를 압축하고 500MB를 압축 해제한다. 하지만 다른 알고리즘으로 같은 데이터를 압축한 것보다 20%~100% 크게 데이터를 압축한다.

▲ 그림 4-10 압축 알고리즘은 속도나 데이터 크기를 최적화하도록 설계되었다

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.