NoSQL의 출현 배경
현재의 시대는 통신 및 모바일, 센서 기술등의 발달로 인해서 데이터가 쌓이는 속도가 매우 빠르고, 종류의 다양성, 그리고 양의 방대함이 함께하는 시대이다. 이러한 특징은 점점 가속화 되고 있다. 그래서 이러한 빅데이터에서 의미있는 정보를 얻고자 데이터들을 수집/저장/처리/분석을 위한 기술들이 극적으로 발전하고 있다. 데이터와 트래픽이 증가하면 더 많은 컴퓨팅 자원이 필요해진다. 이러한 증가를 처리하기 위해서는 컴퓨팅 자원의 확장이 필요하다. 이 확장의 방법에는 수직적 방법과 수평적 방법이 있다. 수직적 방법은 더 큰 장비에 더 많은 프로세서와 디스크, 메모리를 장착하는 방법이고 이것은 일정 수준이 넘어가면 비용이 많이 든다. 수평적 방법은 비용이 적게 드는 작은 장비들을 모아 클러스터를 구성하는 것이다. 빅데이터가 등장하면서 이러한 데이터들의 병렬적 처리를 위해 수평적 방법이 많이 채택이 되었다. 그리고 많은 서비스가 클러스터로 이동함에 따라 기존의 관계형 데이터베이스와는 다른 새로운 접근이 필요하게 되었고 이러한 문제들을 해결하고자 NoSQL의 출현하게 되었다.집합적 데이터 모델(Aggregate Orientation )
관계형 데이터베이스에서는 다루고자 하는 정보를 적절하게 분류하여 테이블에 저장한다. 이 테이블들은 행(Row)으로 나눈다. 그리고 이 행은 스키마에 기반한 열(Column)로 이루어져 있다. 정보들간의 관계는 이러한 테이블들의 참조를 통해서 이루어진다. 이러한 구조로 인해서 생기는 단점도 있는데 대표적인 단점은 아래와 같은 것들이다.- 객체와 관계의 불일치
애플리케이션에서 OOP을 이용하여 필요한 객체들을 요구사항에 맞게 모델링을 하게 된다. 하지만 이런한 객체들간의 관계가 관계형 데이터베이스에서는 테이블간의 관계와 일치하지는 않으며, 이러한 것들의 연결을 위해서 많은 노력을 기울여야 한다. - 스키마의 유연성
한번 만들어진 테이블 구조나 테이블간의 관계를 변경하기는 쉽지 않다. 하지만 사용자들이 애플리케이션을 사용함에 따라 새로운 욕구들이 만들어지고, 애플리케이션은 이 욕구들을 반영하여 삶을 지속해 나간다. 빅데이터가 등장하면서 분석을 위한 새로운 욕구들이 많이 만들어지고 있고, 고정적인 스키마에서는 이것을 만족시키기에는 비용이 많이 든다.
NoSQL에서는 이러한 관계형 데이터 모델을 사용하지 않고, 집합적 데이터 모델을 채택하고 있다. 집합적 데이터 모델에서는 사람들이 행(Row)들의 집합보다 좀 더 다양하고 복잡한 구조(리스트나 중첩된 행, 객체에서 담고 있는 다양한 구조의 정보)를 데이터의 단위로 다루고 싶다는 것을 인정한다.
예를들어, 서점 온라인 애플리케이션이 있다고 생각해보자. 그리고 그 애플리케이션에서 사용되는 데이터 모델은중에 "사용자"와 "고객이 구입한 상품" 을 동시에 다루는 모델이 있다고 가정해보자. 관계형 모델에서는 애플리케이션 데이터 모델에 대해서 신경쓰지 않는다. 고객에 대한 정보가 있고, 그 고객이 구입한 상품에 대한 정보들은 서로 다른 테이블에 적절하게 정규화가 되어 저장이 될 것이고 이것들간의 관계는 외래키 참조로서 표현된다. 집합적 데이터 모델에서는 이것을 하나의 집합으로 만들고 데이터 처리의 단위가 되게 만들 수 있다. 이것은 집합의 경계를 그리는 방법에 따라 달려있다. 다른 모델링과 마찬가지로 집합의 경계를 어떻게 그리는 것이 옳을지에 대한 일반적인 해답은 없다. 집합의 경계는 데이터를 조작하는 방식에 따라 완전히 달라진다.
NoSQL 솔루션은 각각 다른 집합적 모델을 사용한다. 여기에는 크게 네 가지 분류가 있다.
- 키-값
- 문서
- 컬럼 패밀리
- 그래프
클러스터 또는 분산
참조
- 빅데이터 세상으로 떠나는 간결한 안내서(프라모드 사달게이, 마틸 파울러 지음)
- NoSQL 프로그래밍(샤신크 티와리)
댓글 없음:
댓글 쓰기