본문 바로가기

데이터베이스(DA, AA, TA)/NoSQL

[NoSQL] NoSQL 구조 및 특징

NoSQL 구조 및 특징


관계형 데이터베이스에서는, 계층형 데이터베이스에서는 불가능했던 조인이라는 대표적인 특징을 갖고 있었고 SQL이라는 강력한 데이터베이스 데이터를 처리하는 언어가 존재했습니다. NoSQL은 계층형 데이터베이스나 관계형 데이터베이스와는 또 다른 특징을 갖고 있습니다. NoSQL에서는 관계형 데이터베이스에서 금기시했던 정규화 관련 제약사항들이 거의 허용됩니다. 그런 만큼 NoSQL에서는 데이터 모델 구조 설계의 폭이 더 넓어졌습니다. NoSQL에서는 시스템의 품질이 설계 구조에 따라 결정될 것입니다.



1. Static Column Family와 Dynamic Column Family


이미 설명했듯이 NoSQL에는 컬럼 정의가 데이터 저장시 이루어집니다. Cassandra DB인 경우에는 테이블 정의시 column을 정의할 수 있습니다. 이렇게 미리 컬럼이 정의되는 것을 Static Column Family라고 하고 미정의 되었다가 데이터 생성 시 정의되는 것을 Dynamic Column Family라고 합니다.


(1) 고정 컬럼 패밀리(Static Column Family)

관계형 데이터베이스와 같이 테이블 정의 시 정의되는 방법입니다. 관계형 데이터베이스와 같이 컬럼이 미리 정의되어 테이블 생성 시 같이 생성되는 방법입니다.


(2) 유동 컬럼 패밀리(Dynamic Column Family)

Dynamic column Family는 테이블 생성 시 컬럼을 미리 정의하지 않는 것입니다. 컬럼은 데이터 저장 시 컬럼명을 그때 그때 부여받습니다. 관계형 데이터베이스와의 가장 큰차이점입니다.


(3) Static Column Family와 Dynamic Column Family 예제


* 관계형 모델

관계형 데이터베이스에서는 년월+도서명이 PK가 됩니다.


* NoSQL 모델

Static Column Family 설계방법입니다. 아래와 같이 년월 + 도서명이 row key로 정의되어 테이블 생성 시 정의됩니다.


첫번째 방법

: Static Column Family 설계방법입니다. 아래와 같이 년월+도서명이 row key로 정의되어 테이블 생성 시 정의됩니다.



두번째 방법

: row key는 년월이 되고 컬럼이 구매도서1, 구매도서2가 아니고 안나 까레리나, 어린 왕자 등이 컬럼으로 될수도 있습니다. 관계형 데이터베이스에서는 지원하지 않는 기능입니다. NoSQL에서의 특수한 기능입니다.



쉽게 설명하기 위해 데이터를 다시 정리해보겠습니다. 아래를 보면 도서명이 컬럼으로 들어가 있습니다. NoSQL에서는 컬럼명이 데이터로 들어가기 때문에 이 모델도 가능합니다. 컬럼은 계속해서 무한대로 확장 가능하고 컬럼명도 계속 변합니다.



저장된 데이터를 보면 더 확실히 알 수 있습니다.


아래 그림은 실 저장된 데이터를 보여줍니다. 도서명이 컬럼으로 들어가 있습니다. 해당 도서명은 계속해서 새로운 도서명으로 변하며 데이터가 입력됩니다. 이러한 방법을 Dynamic Column Family라고 합니다.



이를 NoSQL 모델 노테이션으로 나타낸다면 컬럼이 무한 반복되는 형식입니다. 구매도서는 미정의 컬럼(Undefined)으로 정의하여 데이터 발생 시점에 생성됩니다. nested 테이블에서 "도서명"이 컬럼명이 아니고 도서명인 "어린 왕자"가 컬럼명이 됩니다.



2. Nested Table

NoSQL에는 관계형 데이터베이스와는 다른 nested 테이블이 가능합니다. 즉 테이블 안에 테이블을 정의할 수 있습니다. 관계형 모델에서 nested 모델은 제1정규형 위반이 됩니다.


(1) 단일 nested 모델

관계형 모델에서는 없는 설계 기법입니다. 관계형 모델에서 부모 자식 관계로 표현됩니다. 관계형 데이터베이스에서 nested 모델은 추천하지 않는 구조이고 이 구조를 구현하기 위해서는 별개의 테이블을 생성해야 합니다.


*