IT의 중심에서

기술은 사람을 행복하게 할 때 가장 가치가 크다.

NoSQL이 MySQL보다 더 합리적일 때

트위터 “Hadoop News”에 나와 있는 글이며, 업무에 도움이 될까 하여 스크랩해서, 번역했습니다.

NoSQL은 Hadoop과 같은 분산형 스토리지 기반의 DB를 말합니다. 단순히, get, put 명령을 이용하여, 데이터를 쓰고, 읽습니다. 장점은 클라우드 기반에 아주 적합합니다. MySQL은 Oracle과 같은 RDB를 대표합니다.

아래 기사는 NoSQL이 훌륭하지만, 잘 알아서 써야 한다는 내용입니다.

시사점은, “데이터 관리 레이어”를 “데이터 저장 레이어”와 분리를 해야만, NoSQL 기반의 클라우드 DB를 사용해서 수많은 트래픽을 처리하기 위한 시스템이 만들어진다는 점입니다. 복잡한 join 질의를 처리하지 못하기 때문에, Data Handling을 DB에 맡기지 않고 어플리케이션에서 구현을 해야 합니다.

지도서비스의 경우, 복잡한 공간분석을 요구하는 질의에는 NoSQL이 적합하지 않습니다. 하지만, 단순 반복적인 질의기능이 주로 사용되는 서비스에 대해서는 고려해볼만한 기능입니다. 데이터 모델링을 분산형스토리지 기반으로 새로 하면 됩니다. (비정규화를 하고, 어플리케이션에 맞추어서 데이터 모델을 단순화합니다.)


Figures-Aslett_web[10]

※원문 : When NoSQL makes better sense than MySQL
※발행일: March 1, 2011 by TInniam V Ganesh

성능과 확장성이 중요한 대용량 웹 어플리케이션에서 NoSQL과 같은 비관계형 데이터베이스가 mySQL, Oracle과 같은 전통적인 DB보다 더 낫다. 전통적인 DB는 데이터의 ACID(atomic, consistent, isolated and durable)를 보존하도록 구현되었기 때문에, 이런 DB들은 작고small 빈번한frequent 읽고쓰기에 적합하다.

그러나, 수백만 트랜잭션을 처리해야 하도록 어플리케이션을 확장시키기 위해서는 NoSQL 모델이 더 적합하다. 이런 DB들은 대량의 대중화된 서버들에 의존하며, 데이터에 대한 접근은 get(key), set(key,value) 타입의 API 들에 의존한다.

DB는 여러 개의 대중화commodity된 서버들에 걸쳐 배포되어진다. 데이터에 대한 접근은 예를 들면 분산형 Hash Table 방법(DHT)과 같은 사례에 의해 연속형 해쉬 구조에 기반하여 이루어진다.  이 방법에서, key값은 원주 부근에 놓여져 보여지는 서버들 중의 하나에 효율적으로 해쉬되어진다. 일단 대상서버가 식별되기만 하면, 그 서버는 키값을 찾기 위해 그 서버의 데이터를 뒤진다. DHT의 잇점은 Hot Standby형식의 한덩어리 DB를 보유하는 것보다 여러개의 서버에 데이터를 분산시켜 관리할 수 있다는 것이다.

여러 개의 서버 중 하나에 데이터를 배포하고, 질의를 던질 수 있다는 것이 확장성의 중요한 잇점이다.
분명히, 수많은 트랜잭션을 처리하는 하나의 DB를 갖는 것은 트래픽 증가에 따른 성능 저하를 초래한다. 그러나, 여러개의 서버 상의 분산형 데이터 모델은 자체적 도전을 가지고 있을 뿐 아니라, 질의를 분산해서 던지기 위한 적절한 기능을 가지고 있어야 하기도 한다.

예를 들면, NoSQL DB는 시스템에 합류하는 새로운 서버에 대한 요건들을 처리할 수 있어야 한다.
유사하게, NoSQL DB는 일반적인 목적의 대중화된 서버에 기반하고 있기 때문에, DHT 알고리즘은 서버장애를 처리할 수 있어야만 한다. 분산형 시스템에 있어서, 이것은 통상적으로 다음과 같이 행해진다.
시스템 내부의 서버는 DB상의 살아있는 서버들의 리스트를 유지하고 업데이트하기 위해 정기적으로 서로서로에게 메시지를 나른다. 이것은 “가십 프로토콜gossip protocol”로 알려진 방법을 통해 수행되어진다.

NoSQL, HBase등의 DB가 ACID 속성을 가지지 못하므로, CAP 방법을 따른다. CAP (Consistency, Availability and Partition Tolerance) 이론은 3개의 속성을 동시에 달성하기 힘들다고 말한다. 성능여유를 확보하기 위해 NoSQL 형식의 DB들은 전통적으로 장애대응을 하기 위한 서버간 복제를 수행한다. 데이터가 서버간에 복제되어 지기 때문에, 서버간 연속성을 유지하기 위한 이슈가 존재한다.

아마존의 Dynamo 시스템은 몇 초 후에 데이터가 복제되도록 하는 “eventual consistency”라고 불리는 컨셉에 기반한다. 즉, 몇 초 동안은 (데이터)일관성consistency 없이 운용된다.

NoSQL은 관계형이 아니기 때문에 SQL 전체 기능을 제공하지는 못한다. NoSQL은 관계형 모델이 아니기 때문에, join이 필요한 질의는 어플리케이션의 반복로직에 의해 수행되어져야만 한다. 그러므로, 비관계형 DB의 잇점을 수용할 필요가 있는 모든 어플리케이션의 디자인은 Data Storage Layer와 Data Mgmt Layer를 분리되어야만 한다. 데이터가 저장되어지는 방식과 Data Mgmt Layer를 분리함으로써, 우리는 NoSQL과 같은 DB의 잇점을 누적시킬 수 있습니다.

고성능, 확장성이 중요한 요구사항인 NoSQL 종류의 DB가 관계형 DB를 뛰어넘은 훌륭한 잇점을 가지고 있는 동안에는, 어플리케이션이 비관계형 DB와 분산형 DB의 장점을 최대한 누릴 수 있도록, 최적화되어져야만 한다.

▲ 페이스북 페이지를 만들었습니다. 좀 더 작고 짧은 이야기들을 많이 올리려고 합니다. 많은 관심 부탁드립니다. : https://www.facebook.com/daddy4house/

Advertisements

NoSQL이 MySQL보다 더 합리적일 때”에 대한 2개의 댓글

  1. Tael Kim
    2013년 7월 1일

    내용 감사합니다.
    “즉, 몇 초 동안은 지속성이 없이 운용된다.” => 지속성을 (데이터)일관성 으로 번역하는 측면이 이해가 쉬울 것 같습니다 :)

    • subokim
      2013년 7월 1일

      감사합니다.
      본문 내용도 수정했습니다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

정보

이 엔트리는 2011년 5월 20일에 님이 API와 기술, 번역글에 게시하였으며 , 태그가 지정되었습니다.

내비게이션

누적 조회수

  • 956,079 Visits

페이스북 페이지

%d 블로거가 이것을 좋아합니다: