더북(TheBook)

마찬가지로 읽기 작업도 데이터가 메모리에 저장되어 있다면 빨라질 수 있다. 이전에 설명했듯이 이런 이유로 캐시를 사용하는 것이다. 하지만 데이터의 크기가 램의 크기를 초과할 수 있으므로 키-값 저장 구조는 메모리에서 데이터를 관리하는 방법을 찾아야만 한다.

Tip 효율적으로 메모리에 데이터를 저장하는 한 가지 방법은 데이터를 압축하는 것이다. 하지만 압축을 하더라도 용량이 큰 키-값 데이터베이스를 램에 보관할 정도로 충분히 큰 메모리는 없을 것이다.

키-값 데이터베이스가 할당된 가용 메모리를 모두 사용한 경우 데이터베이스는 추가 데이터의 복사본을 저장하기 전에 메모리에 사용 가능한 여분 공간을 마련해야 한다. 이를 위한 알고리즘이 여러 개 있는데, 흔히 사용되는 것은 LRULeast Recently Used 알고리즘이다. LRU 알고리즘은 일정 기간 사용되지 않은 데이터가 있으면 이 데이터는 좀 더 최근에 읽거나 쓴 데이터보다 사용 빈도가 낮을 것으로 판단한다. 이는 키-값 데이터베이스를 사용하는 많은 애플리케이션에 적합하다(그림 3-6).

▲ 그림 3-6 LRU 알고리즘은 다른 데이터와 비교해 최근에 읽거나 쓴 적이 없는 데이터를 삭제한다


고객의 장바구니에 있는 상품 목록을 저장하는 키-값 데이터베이스가 있다고 해보자. 일단, 고객이 상품 하나를 장바구니에 추가하면 결제하거나 백그라운드 프로세스가 제거하기 전까지 장바구니에 남아 있을 것이다. 몇 시간 전에 쇼핑을 끝낸 고객의 데이터도 여전히 메모리에 남아 있을 것이다. 십중팔구 이런 고객은 장바구니를 비우고 쇼핑을 중단할 가능성이 크다. 반면에 5분 전에 장바구니에 마지막 상품을 담은 고객이 있다고 해보자. 이 고객은 계속 쇼핑하면서 또 다른 상품을 장바구니에 담거나 즉시 결제를 진행할 가능성이 크다.

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