더북(TheBook)

키-값 데이터베이스는 보통 한 데이터 블록에 리스트 전체를 함께 저장하므로 키 여러 개에 해시 함수를 사용해 데이터 블록 여러 개를 가져올 필요가 없다. 이 규칙에 대한 한 가지 예외 상황이 있는데 데이터값이 디스크의 데이터 블록 크기보다 클 경우다. 예를 들어 매우 큰 이미지나 객체를 저장할 때 예외가 발생할 수 있다.

주소보다 고객 이름이 필요한 경우가 더 많다면 고객 이름을 별도로 저장해 놓고 싶을 것이다. 이렇게 하면 키-값 데이터베이스에 고객 이름이 중복되어 저장되겠지만 큰 문제는 되지 않는다.

Note 일반적으로 관계형 데이터베이스를 설계할 때는 데이터의 중복을 피해야겠지만, NoSQL 데이터베이스에서 데이터 중복은 흔히 일어나는 일이다.

중복된 데이터를 저장해 놓는 것은 관계형 데이터베이스 질의의 성능을 향상시키려고 흔히 쓰는 방법이다. 이를 비정규화라고 하는데, 중복 데이터는 질의를 수행할 때 필요한 조인의 수를 줄여 애플리케이션의 성능을 상당히 개선할 수 있다.

NoSQL 데이터베이스에서도 같은 패턴이 적용된다. 고객 이름만 조회하는 경우에는 이름으로만 구성된 키를 사용할 수 있고, 주소까지 필요하면 이름과 주소로 구성된 키를 사용할 수 있다.

값을 구조체 형식으로 저장하는 것은 나름 장점이 있지만, 이 장점에 따른 제약도 있다. 다음 내용에서 보게 될텐데 값 하나에 너무 많은 데이터를 저장하는 것은 애플리케이션의 성능에 역효과를 낼 수 있다.

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