etc2011. 6. 27. 13:41
  • SQL(관계형 데이터베이스)과 NoSQL을 비교하시나요?
    : 클라우드, 분산환경, 기존 RDB 의 제약사항 및 대용량 데이터처리
  • NoSQL 등장배경
    출발점은, 페이스북과 트위터.
    쇼셜미디어가 활성화 되고 하루에도 수천만건의 무수히 많은 데이터가 읽기 및 쓰기가 된다는 점.
    주목할것은 쓰기(update)가 많고, 데이터간의 관계성은 적은 데이터 구조의 특성상 기존 RDB 로는 미흡하다는 것이다.
    그래서 페이스북/트위터(카산드라), 구글(빅테이블), 아마존(다이나모)등의 분산 데이터 스토어가 각광받고 있습니다.
  • NoSQL은 기존 RDB 와는 달리 경량화 DB, 검색과 인덱싱이 빠른 파일시스템 기반 DB
    또한 수평적으로 확장이 용이하다는 장점이 있다고 합니다.
  • NoSQL CAP 이론
    - Consistency: 각각의 사용자가 항상 동일한 데이터를 조회한다.
    - Availabilty: 모든 사용자가 항상 읽고 쓸수 있다.
    - Partition tolerance: 물리적 네트워크 분산환경에서 시스템이 잘 동작한다.
    SNS 의 특성상 Consistency(일관성)과 Availability(가용성)을 어느정도 포기하고 분산환경에서
    보다 빠르게 저장하고 검색하는 특징을 반영하는게 결국 NoSQL 의 사용목적이 된다.

참조: http://cafe.naver.com/hermeneus.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=32&


  • 구글의 BigTable paper에 보면 구글의 BigTable이 대체 무엇인지에 대해 간단하고 명료하게 기술하고 있다.
  • A Bigtable is a sparse, distributed, persistent multidimensional sorted map.

    이 간단한 문장에 noSQL기반 기술의 거의 모든 기본이 들어있다고 보면 된다. 자 이제 하나 하나 파들어가볼까?

    Map이다

    이게 정말 핵심중의 핵심이다. 이것만 이해해도 상당히 많은 기본개념을 이해한거라 나는 생각한다. 바쁘면 이제 이 글의 나머지를 안 읽어도 된다(^^). 거의 모든 noSQL은 Map이다. 즉, 유일한 키와 그것에 관련된 하나의 값을 가진 자료형이 noSQL이 데이타를 저장하는 기본적인 방식이다. JSON방식으로 예를 들면 다음과 같은 형태로 noSQL은 자료를 저장한다.

    {
     "zzzzz" : "woot",
     "xyz" : "hello",
     "aaaab" : "world",
     "1" : "x",
     "aaaaa" : "y"
    }

    영구적이다 (Persistence)
    noSQL은 기본적으로 데이타베이스의 역할을 수행한다. 당연히 데이타는 어느 정도 이상은 영구적이어야한다. 다만 메모리기반의 noSQL의 경우 이 영구적인 특성이 조금 떨어진다고 볼수도 있겠다.

    분산기반이다 (Distribute)

    noSQL이 나온 배경중의 하나는 기존의 RDB가 데이터 확장에 따른 확장성에 제약이 심했기 때문이다. 따라서 대부분의 noSQL은 데이터 저장 및 복제에 대해 설계 초기부터 분산시스템을 기반에 두게 되었다. 구글의 BigTable의 경우 Google File System(GFS)을 기반으로 하고, HBase를 비롯한 많은 noSQL은 하둡(Hadoop)의 분산 파일 시스템(HDFS)을 사용한다.
    데이타 복제와 분산처리를 어떻게 하는지 자체에 대한 것은 사실 noSQL 기본 개념과는 큰 상관이 없는 주제이므로, 그리고 나도 사실 그쪽에는 내공이 딸리므로 넘어가자.

    정렬기능이 있다 (Sorted)

    모든 noSQL이 이 기능을 가지고 있다는 게 아니라 HBase, BigTable같은 일부가 가지고 있는 기능이다. 키와 값이 알파벳순으로 정렬이 되는 기능을 가진다. 실로 어마어마한 데이타를 처리하기 위한 용도로 만들어진게 noSQL이다보니 이런 정렬기능은, 혹은 이런 정렬기능의 성능은 너무나도 중요한 요소이다.

    다차원적이다 (Multidimentional)

    noSQL의 개념이 기존 데이타베이스에 익숙한 사람들에게 전달되기 위해 많은 noSQL기술들이 기존의 개념을 많이 차용한다. 테이블이나 칼럼 혹은 Row같은 RDB의 개념이 그대로 noSQL에서도 쓰이는 경우가 있고 이로 인해 noSQL의 이해를 어렵게 하는 경우가 있다. 새술은 새푸대에 담았으면 싶다. 그래서 다차원적인 Map을 지원하는게 noSQL의 특징이라고 강조하고 싶다. 다차원적이라는 말이 어렵다면 Map의 Map을 지원한다라고 할까? 즉,
    {
     "1" : {
     "A" : "x",
     "B" : "z"  },
     "aaaaa" : {
      "A" : "y",
      "B" : "w" 
    }
    ,
     "aaaab" : {
      "A" : "world",
      "B" : "ocean" 
    },
     "xyz" : {
       "A" : "hello",
      "B" : "there" 
    },
     "zzzzz" : {
       "A" : "woot",
       "B" : "1337" 
    }
    }

참조: http://calmglow.egloos.com/4580668

Posted by 깜장눈썹