더북(TheBook)

비정규화

정규화는 데이터 이상현상을 피할 수 있게 해주지만 성능에 문제가 생길 수 있다. 특히, 둘 이상의 대용량 테이블에 있는 데이터를 조회할 때 성능이 나빠질 수 있다. 둘 이상의 테이블에서 데이터를 조회하는 것을 조인Join이라고 하며, 조인은 관계형 데이터베이스의 기본 연산 작업이다. 많은 사람이 데이터를 조인하는 효과적인 방법을 찾는 데 엄청나게 많은 노력을 기울였다. 데이터베이스 관리자와 데이터 모델러들은 상당한 시간을 들여 조인 작업의 성능을 개선시키려 했다. 하지만 항상 좋은 결과를 얻지는 못했다.

데이터베이스를 설계하는 일은 이율배반적 상황을 초래한다. 중복 데이터를 없애려고 고도로 정규화된 데이터베이스를 설계하면 성능이 나빠진다. 성능이 나빠지면 많은 설계자가 비정규화로 돌아서 버린다.

이름에서 유추할 수 있듯이 비정규화란 정규화의 반대 개념으로, 중복 데이터를 허용하는 것이다. 왜 중복 데이터를 허용하는지 궁금할 것이다. 중복 데이터는 표 7-1에 있는 것처럼 데이터 이상현상을 발생시킬 수 있다. 중복 데이터를 유지하려면 더 많은 스토리지가 필요하다. 이렇게 데이터 이상현상을 유발하고 추가 스토리지를 사용하는 위험을 감수하는 이유는 비정규화가 성능을 상당히 개선시킬 수 있기 때문이다.

데이터가 비정규화되면 테이블을 여러 개씩 읽을 필요도 없고 여러 컬렉션에 있는 데이터에 조인을 수행할 필요도 없다. 대신 단일 컬렉션이나 문서에서 데이터를 읽으면 된다. 이렇게 하면, 특히 인덱스를 사용할 수 있을 때 컬렉션 여러 개에서 데이터를 추출하는 것보다 훨씬 속도가 빠르다.

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