NoSQL을 알아보자(5) - NoSQL의 대표 유형 4가지

 

1. Key-Value Database

특정 내용의 키를 전달하면 해당 키와 연결된 데이터를 획득할 수 있다. 예를 들어 볼펜을 판다고 가정했을 때 price라는 키값을 가져와 가격을 획득할 수 있다.

하지만 키는 항상 고유 값이기 때문에 다른 곳에서 같은 값의 키를 사용하면 안 된다. 만약 볼펜이 2개라면? price를 키값으로 바로 사용할 수 없다. 이미 첫 번째 볼펜이 price를 쓰고 있기 때문에 두 번째 볼펜에 price를 요청하면 첫 번째 볼펜의 가격을 전달받게 될 것이다.

이런 경우는 엔터티의 유형과 일련 번호를 포함하여 키 값을 정의하면 해결할 수 있다. 예를 들어 볼펜 두 개와 샤프 두 개를 판다 가정했을 때 각각의 가격 키 값은 아래처럼 될 것이다.

    ballpoint1.price
    ballpoint2.price
    sharp1.price
    sharp2.price

키의 고유성은 네임 스페이스에 국한되어 있다. 즉 네임 스페이스가 서로 다른 경우는 똑같은 키를 사용하여도 문제없다.

대부분의 Key-Value 데이터베이스는 값의 데이터 타입을 엄격히 제한하지 않기 때문에 개발할 때 데이터 타입을 확인하는데 유의할 필요가 있다.

2. Document Database

Document 데이터베이스는 데이터 저장에 키와 값을 사용한다는 점에서 Key-Value 데이터베이스와 비슷하다. Key-Value 데이터베이스는 Value에 특정 값을 반환하지만, Document 데이터베이스는 Value 부분에 JSON, XML 등처럼 구조적인 문자 형태의 데이터 반환한다.

Document 데이터베이스의 가장 큰 특징은 고정된 구조를 정의할 필요가 없다는 것이다. 이 같은 특징 덕분에 데이터 구조의 유연성을 가질 수 있다.

같은 볼펜이여도 가지고 있는 데이터의 종류는 서로 다를 수도 있다. 아래 예시를 살펴보자.

    {
        name: “코나미”,  
        price: 500,  
        color: “Black”  
    }

코나미 볼펜은 이름, 가격, 색상 3가지 정보를 가지고 있다.

    {  
        name: “재팬테크”,  
        price: 1000,  
        color: “Blue”,  
        brand: “J-Tech”  
    }

반면 재팬테크 볼펜은 이름, 가격, 색상, 브랜드 4가지 정보를 가지고 있다. 문서의 정보는 차이가 있지만 데이터베이스 자체에서 문제는 없다.

Document 데이터베이스는 이처럼 유연성을 확보할 수 있지만, 새롭게 추가되거나 삭제된 속성들이 있다는 것을 유의하여 개발하여야 한다. 위 사례의 경우는 브랜드가 있을 수도 있고, 없을 수도 있다는 가정으로 개발을 해야된다.

Document 데이터베이스는 아래와 같은 방식으로 데이터를 질의하여 획득할 수 있다.

    Database.pen.find({color:”Black”})

위의 명령어를 통한 결과는 펜 문서에서 색상이 Black인 펜을 모두 조회할 수 있다. 질의할 때 관계형 데이터베이스처럼 AND, OR, >, < 등의 연산자를 사용할 수 있다. 단 Document 데이터베이스는 값으로 리스트나 다른 문서를 포함할 수 있기 때문에 관계형 데이터베이스에서 조인을 사용하듯 문서를 조인할 필요는 없다.

Document 데이터베이스는 유연성을 가지면서 관계형 데이터베이스처럼 여러 속성을 가진 개체 질의도 지원하기 때문에 NoSQL 유형 중 가장 인기있는 데이터베이스 유형이다.

3. 컬럼 패밀리 데이터베이스

컬럼 패밀리 데이터베이스 각각의 컬럼들이 모여 하나의 로우를 구성하는 형태의 데이터베이스다. 형태만 보면 컬럼들이 모여 하나의 행을 가진다는 것에서 관계형 데이터베이스와 유사하다.

다만 하나의 테이블에 컬럼 종류가 정해진 관계형 데이터베이스와 달리 컬럼 패밀리 데이터베이스는 로우를 구성하는 컬럼의 종류가 유동적으로 변경 가능하다.

즉 관계형 데이터베이스는 한 테이블 안에 모든 로우가 같은 형태의 컬럼을 가지지만, 컬럼 패밀리 데이터베이스는 로우들끼리 서로 다른 형태의 컬럼을 가질 수도 있다.

Atomicity Example1

또 다른 특징은 관계형 데이터베이스는 한 객체의 데이터베이스를 여러 개의 테이블에 나눠 저장하고 조인하여 데이터를 사용하지만, 컬럼 패밀리 데이터베이스는 하나의 로우에 관련있는 데이터를 최대한 길게 나열하여 저장한다는 특징이 있다.

컬럼 패밀리 데이터베이스는 SQL 처럼 SELECT, INSERT, UPDATE, DELETE와 같은 SQL 용어를 지원하면서 CREATE, COLUMNFAMILY와 같은 컬럼 패밀리 고유의 명령어를 제공한다.

4. 그래프 데이터베이스

컬럼과 로우로 데이터를 모델링하는 방식이 아니라 버텍스(Vertex)와 엣지(Edge)를 이용하여 데이터의 관계를 표현하는 형식의 데이터베이스다. 그래프 데이터베이스는 그래프 이론이라는 수학 이론에서 유래했으며 객체를 나타내는 버텍스와 객체 간 관계를 나타내는 엣지로 구성된다.

그래프 데이터베이스의 버텍스들은 관련 있는 다른 버텍스를 가리키는 포인터가 존재한다. 따라서 주변 데이터를 순차적으로 따라가는 작업에 효율적이다. 소셜 네트워크의 친구 관계 표현 등의 경우에 그래프 데이터베이스는 효율적일 수 있다.