"노에스큐엘"의 두 판 사이의 차이
잔글 (→같이 보기) |
|||
(사용자 3명의 중간 판 51개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''노에스큐엘'''(NoSQL)은 전통적인 관계형 데이터베이스 보다 덜 제한적인 일관성 | + | '''노에스큐엘'''(NoSQL)은 전통적인 [[관계형 데이터베이스]] 보다 덜 제한적인 [[일관성 모델]]을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다. 이러한 접근에 대한 동기에는 디자인의 단순화, [[수평적 확장성]], 세세한 통제를 포함한다. NoSQL 데이터베이스는 단순 검색 및 추가 작업을 위한 매우 최적화된 키 값 저장 공간으로, [[레이턴시]]와 [[스루풋]]과 관련하여 상당한 성능 이익을 내는 것이 목적이다. [[NoSQL 데이터베이스]]는 빅데이터와 실시간 [[웹 애플리케이션]]의 상업적 이용에 널리 쓰인다. 또, [[NoSQL 시스템]]은 [[SQL]] 계열 [[쿼리]] 언어를 사용할 수 있다는 사실을 강조한다는 면에서 '''"Not only SQL"'''로 불리기도 한다. .<ref name="백">,〈[https://ko.wikipedia.org/wiki/NoSQL 노에스큐엘]〉,《위키백과》</ref> |
==개요== | ==개요== | ||
+ | NoSQL이 무엇의 약자인지는 사람에 따라 NoSQL, Not Only SQL, Non-Relational Operational Database SQL로 엇갈리는 의견들이 있지만, 현재 Not Only SQL로 풀어 설명하는 것이 다수를 차지하고 있다고 한다. 이 말의 의미를 풀어보면, 기존의 [[관계형 DBMS]]가 갖고있는 특성 뿐만 아니라 다른 특성들을 부가적으로 지원한다는 것을 의미한다. 이 용어가 처음으로 등장한 것은 1998년 카를로 스트로찌[[(Carlo Strozzi)]]라는 엔지니어가 공개한 표준 [[SQL인터페이스]]를 채용하지 않은 자신의 경량 Open Source [[관계형 데이터베이스 관리 시스템]]를 NoSQL이라고 명명한 데서 유래했다고 한다. 이후 2009년에는 [[요한 오스칼손]](Johan Oskarsson)이라는 엔지니어가 Open Source기반의 [[분산데이터베이스]] 관련 행사를 준비하며 NoSQL이라는 용어를 사용했다. 이때부터 기존의 관계형 데이터베이스 시스템의 주요 특성을 보장하는 [[ACID]](Atomic, Consistency, Integrity, Duarabity)특성을 제공하지 않는, 그렇지만 뛰어난 확장성이나 성능 등의 특성을 갖는 수많은 비관계형, 분산 데이터 베이스들이 등장했고, 이때부터 NoSQL이라는 용어가 보편적으로 사용되었다. 이러한 접근의 동기는 다음을 포함한다. 설계의 단순성, 머신들의 [[클러스터]]에 대한 더 단순한 수평 확장(관계형 데이터베이스의 문제), 이용성에 대한 더 세밀한 통제. NoSQL 데이터베이스에 의해 사용되는 자료 구조(예: 키-값, [[와이드 컬럼]], 그래프, [[도큐먼트]])들은 관계형 데이터베이스에서 기본적으로 사용되는 것들과는 다르며 일부 작업들은 NoSQL에서 속도가 더 빠른 편이다. 주어진 NoSQL 데이터베이스의 특정한 적합 여부는 해결해야 하는 문제에 따라 다르다. NoSQL 데이터베이스에 쓰이는 자료 구조들은 관계형 데이터베이스 테이블보다 "더 유연한" 것으로 간주되기도 한다. 수많은 NoSQL 스토어들은 이용성, [[파티션]] 내구성, 속도의 선호로 ([[CAP]] 정리 측면에서) 일관성을 타협한다. NoSQL 스토어를 채용하는 데 생기는 장벽에는 저급의 [[쿼리 언어]]의 사용(SQL 사용 대신. 예: 테이블을 경유하여 애드혹 조인-join을 수행하는 기능이 부족), 표준화된 [[인터페이스]]의 부족, 기존 관계형 데이터베이스의 상당한 개선이 포함된다. 대부분의 NoSQL 스토어는 진정한 [[ACID]] 트랜잭션이 결여되어 있으나 [[마크로직]], [[에어로스파이크]], [[페어컴]](FairCom) c-treeACE, [[구글 스패너]](기술적으로 NewSQL 데이터베이스이긴 하지만), [[Symas LMDB]], [[OrientDB]] 등의 일부 데이터베이스들은 이를 염두에 두고 설계하였다. 그 대신, 대부분의 NoSQL 데이터베이스들은 "궁극적인 일관성" 개념을 제공함으로써 데이터베이스의 변경사항이 모든 노드에 "궁극적으로"(일반적으로 밀리초 내) 전파되므로 데이터에 대한 모든 쿼리들이 즉각 업데이트된 데이터를 반환하지 않을 수 있고 정확하지 않은 데이터를 읽는 결과가 발생할 수 있는데 이 문제를 [[스테일 리드]](stale read)라고 부른다. 게다가 일부 NoSQL 시스템들은 손실된 쓰기([[write]])와 기타 형태의 데이터 손실을 보이는 경우도 있다. 일부 NoSQL 시스템들은 로그 선행 기입과 같은 개념들을 제공하여 데이터 손실을 막는다. 여러 데이터베이스를 거치는 분산 트랜잭션 처리의 경우 데이터 일관성은 NoSQL과 관계형 데이터베이스에게 훨씬 더 큰 도전이 된다. 현행의 관계형 데이터베이스들 조차도 데이터베이스 스팬을 위한 [[참조 무결성 제약]](referential integrity constraint)을 허용하지 않는다. 분산 [[트랜잭션]] 처리를 위해 [[ACID 트랜잭션]]과 [[X/Open XA]] 표준을 모두 준수하는 시스템들도 일부 있다.<ref name="티">티,〈[https://jwprogramming.tistory.com/70 개발자를 꿈꾸는 프로그래머]〉,《티스토리 블로그》, 2016-04-24</ref> | ||
+ | ==역사== | ||
+ | * 1998년 : 표준 SQL 인터페이스를 채용하지 않은 자신의 경량 오픈 소스 관계형 데이터베이스를 NoSQL이라고 명명했다.스트로찌는 현재의 NoSQL 운동이 “전반적인 관계형 모델에서 점차 멀어지고 있으므로” [[NoREL]]로 부르는 것이 더 적절하다고 언급했다. | ||
+ | * 2009년 : 2009년 초에 라스트 FM의 요한 오스칼손(Johan Oskarsson)이 오픈 소스 분산 데이터베이스를 논하기 위한 [[미트업 행사]]를 조직하면서, 이와 같은 데이터베이스를 NoSQL이라고 불렀다. 고전적인 관계형 데이터베이스 시스템의 주요 특성을 보장하는 [[ACID]] 제공을 주로 시도하지 않은 수많은 비관계형, 분산 데이터 자료 공간의 등장에 따라 이 이름이 사용되었다. | ||
+ | |||
+ | ==특징== | ||
+ | NoSQL 데이터베이스는 기존의 관계형 데이터베이스보다 더 융통성있는 데이터 모델을 사용하고 데이터의 저장 및 검색을 위한 특화된 메커니즘을 제공한다. 이를 통해 NoSQL 데이터베이스는 단순 검색 및 추가작업에 있어서 매우 최적화된 키 값 저장 기법을 사용하여 응답속도나 처리효율 등에 있어서 매우 뛰어난 성능을 나타낸다. | ||
+ | |||
+ | * 관계형 모델을 사용하지 않으며 테이블 간 연결해서 조회할 수 있는 조인 기능이 없음 | ||
+ | * 데이터 조회를 위해 직접 프로그래밍하는 등의 비 [[SQL]] 인터페이스를 통한 데이터 접근 | ||
+ | * 대부분 여러 데이터베이스 서버를 묶어서[[(클러스터링)]] 하나의 데이터베이스를 구성 | ||
+ | * 관계형 데이터베이스에서는 지원하는 데이터 처리 완결성[[(Transaction]], [[ACID 지원]])이 보장되지 않음 | ||
+ | * 데이터의 [[스키마]]와 속성들을 다양하게 수용하고 동적으로 정의[[(Schemaless)]] | ||
+ | * 데이터베이스의 중단없는 서비스와 자동 복구 기능 지원 | ||
+ | * 대다수의 제품이 [[Open Source]]로 제공 | ||
+ | * 대다수의 제품이 고 확장성, 고 가용성, 고 성능 특징을 가짐 | ||
+ | |||
+ | 정리하면, NoSQL은 초고용량 데이터 처리 등 성능에 특화된 목적을 위해 비 관계형 데이터 저장소에 비 구조적인 데이터를 저장하기 위한 분산저장 시스템이라고 볼 수 있다. 최근 각광받는 빅데이터에 대한 처리에 특화되었다고 보면 될 듯 하다.<ref name="티"></ref> | ||
+ | |||
+ | ==활용== | ||
+ | [[파일:노에스큐엘 이니셔티브의 최초의 시각적 표현.jpg|썸네일|200픽셀|'''[[노에스큐엘]]''' 이니셔티브의 최초의 시각적 표현]] | ||
+ | ===데이터베이스의 예=== | ||
+ | NoSQL 데이터베이스를 분류하는 접근 방식은 분류와 하위 분류와 함께 다양하다. 다양한 접근 방식으로 인해 비관계형 데이터베이스를 포괄적으로 파악하는 데에는 어려움이 있다. 그럼에도 동의할만한 수준의 기본적인 분류는 데이터 모델에 기반을 둔다. 이 가운데 몇 가지와 이들이 가진 프로토타입은 다음과 같다. | ||
+ | |||
+ | * 컬럼: [[H베이스]], [[아큐물로]] | ||
+ | * 도큐먼트: [[몽고DB]], [[카우치베이스]] | ||
+ | * 키 값: [[다이나모]], [[리악]], [[레디스]], [[캐시]], [[프로젝트 볼드모트]] | ||
+ | * 그래프: [[Neo4J]], [[AgensGraph]], [[알레그로그래프]], [[버투오소]] | ||
+ | [[스티븐 옌]]은 자신의 블로그의 글 "[[NoSQL is a Horseless Carriage]]"에서 NoSQL 데이터베이스들을 다음과 같이 분류했다.<ref name="백"></ref> | ||
+ | |||
+ | :{|class=wikitable width=1100 style="background-color:#ffffee" | ||
+ | !align=center style="background-color:#ffeecc"|용어 | ||
+ | !align=center style="background-color:#ffeecc"|연관 데이터베이스 | ||
+ | |- | ||
+ | |align=center|KV Store | ||
+ | |align=center|Keyspace, Flare, SchemaFree, RAMCloud, Oracle NoSQL Database (OnDB) | ||
+ | |- | ||
+ | |align=center|KV Store - Eventually consistent | ||
+ | |align=center|Dynamo, Voldmort, Dynomite, SubRecord, Mo8onDb, DovetailDB | ||
+ | |- | ||
+ | |align=center|KV Store - Hierarchical | ||
+ | |align=center|GT.m, Csche | ||
+ | |- | ||
+ | |align=center|KV Store - Ordered | ||
+ | |align=center|TokyoTyrant, Lightcloud, NMDB, Luxio, MemcacheDB, Actord | ||
+ | |- | ||
+ | |align=center|KV Cache | ||
+ | |align=center|Memcached, Repcached, Coherence, Hazelcast, Infinispan, EXtremeScale, JBossCache, Velocity, Terracotta | ||
+ | |- | ||
+ | |align=center|Tuple Store | ||
+ | |align=center|Gigaspaces, Coord, Apache River | ||
+ | |- | ||
+ | |align=center|Object Database | ||
+ | |align=center|ZopeDB, DB40, Shoal | ||
+ | |- | ||
+ | |align=center|Document store | ||
+ | |align=center|CouchDB, Cloudant, Couchbase, MongoDB, Jackrabbit, XML-Databass, ThruDB, Cloukit, Prsevere, Riak-Basho,Scalaris | ||
+ | |- | ||
+ | |align=center|Wide Columnar Store | ||
+ | |align=center|BigTable, HBase, Apache Cassandra, Hypertable, KAI, OpenNeptune, Qbase, KDI | ||
+ | |} | ||
+ | |||
+ | ===성능=== | ||
+ | 벤 스코필드는 여러 유형의 NoSQL 데이터베이스의 등급을 다음과 같이 평가했다. | ||
+ | :{|class=wikitable width=1100 style="background-color:#ffffee" | ||
+ | !align=center style="background-color:#ffeecc"|데이터 모델 | ||
+ | !align=center style="background-color:#ffeecc"|성능 | ||
+ | !align=center style="background-color:#ffeecc"|확장성 | ||
+ | !align=center style="background-color:#ffeecc"|유연성 | ||
+ | !align=center style="background-color:#ffeecc"|복잡성 | ||
+ | !align=center style="background-color:#ffeecc"|기능 | ||
+ | |- | ||
+ | |align=center|키-값 스토어 | ||
+ | |align=center|높음 | ||
+ | |align=center|높음 | ||
+ | |align=center|높음 | ||
+ | |align=center|없음 | ||
+ | |align=center|가변적 (없음) | ||
+ | |- | ||
+ | |align=center|컬럼 지향 스토어 | ||
+ | |align=center|높음 | ||
+ | |align=center|높음 | ||
+ | |align=center|준수 | ||
+ | |align=center|낮음 | ||
+ | |align=center|최소 | ||
+ | |- | ||
+ | |align=center|도큐먼트 지향 스토어 | ||
+ | |align=center|높음 | ||
+ | |align=center|가변적 (높음) | ||
+ | |align=center|높음 | ||
+ | |align=center|낮음 | ||
+ | |align=center|가변적 (낮음) | ||
+ | |- | ||
+ | |align=center|그래프 데이터베이스 | ||
+ | |align=center|가변적 | ||
+ | |align=center|가변적 | ||
+ | |align=center|높음 | ||
+ | |align=center|높음 | ||
+ | |align=center|그래프 이론 | ||
+ | |- | ||
+ | |align=center|관계형 데이터베이스 | ||
+ | |align=center|가변적 | ||
+ | |align=center|가변적 | ||
+ | |align=center|낮음 | ||
+ | |align=center|준수 | ||
+ | |align=center|관계대스 | ||
+ | |} | ||
+ | |||
+ | 성능과 확장성 비교는 종종 [[YCSB]] 벤치마크를 통해 이루어진다.<ref name="백"></ref> | ||
+ | |||
+ | ==종류== | ||
+ | * Key-Value DB(널리 쓰임): Key와 Value의 쌍으로 데이터가 저장되는 유형으로써 Amazon의 Dynamo Paper에서 유래되었다. Riak, Vodemort, Tokyo등의 제품이 알려져 있다.* | ||
+ | * Wide Columnar DB : Big Table DB라고도 하며, Google의 BigTable Paper에서 유래되었다. Column Family 데이터 모델을 사용하고 있고, HBase, Cassandra, Hypertable이 이에 해당된다. | ||
+ | * Document DB : Lotus Notes에서 유래되었으며, JSON, XML과 같은 Collection 데이터 모델 구조를 채택하고 있다. Mongo DB, Cough DB가 이 종류에 해당된다. | ||
+ | *8Graph DB : Euler & Graph Theory에서 유래한 DB 이다. Nodes, Relationship, Key-Value 데이터 모델을 채용하고 있다. Neo4J 등의 제품이 있다. | ||
+ | |||
+ | 일반적으로 웹과 관련하여 [[JSON]], [[XML]] 데이터를 많이 접하게 되고, 또한 자료가 많이 나와있는 [[Mongo DB]]로 시작하는 분들이 많은 것 같아서 NoSQL을 처음 다루시는 분이라면 Mongo DB로 차근차근 시작해보는 것이 나을 것 같다.<ref name="티"></ref> | ||
+ | |||
+ | ==평가와 전망== | ||
+ | ===평가=== | ||
+ | NoSQL은 관계형DB만으론 어려웠던 [[비정형데이터]] 저장을 보완하는 [[빅데이터플랫폼]]의 구성요소로 주목됐다. 불과 3년전만 해도 오픈소스 관계형DB의 맹주 '마이SQL([[MySQL]])'의 미래를 좌우할 중대변수가운데 하나로 꼽혔고, 최근 1~2년간 신제품 등장과 업그레이드도 경쟁적으로 이뤄졌다. 하지만 정작 시장 반응은 '뜨뜻미지근'했다. 일단 구글이 지난 2011년 8월 [['레벨DB']]라는 오픈소스 [[NoSQL DB]]를 공개했다. 이어 지난해 1월 [[아마존웹서비스(AWS)]]가 [['다이나모DB']]를 출시했다. 그리고 6월 [[마이크로소프트]](MS)가 아파치 [['카우치DB']]를 [[애저 클라우드]] 서비스형플랫폼[[(PaaS)]]에서 돌리는 [['빅카우치']]를 출시했다. 7월 레드햇이 인메모리 기반의 NoSQL 기술 [['제이보스데이터그리드6']]을 내놨다. 이처럼 최근까지 NoSQL 제품은 경쟁적으로 개발됐고, 유명 인터넷서비스 업체들은 이를 적극 활용중이라고 알린다. 하지만 일반적인 오픈소스나 [[상용SW]]처럼 외부에서 개발된 제품을 가져와 사업용 애플리케이션에 적용하는 사례는 잘 알려지지 않았다.그나마 [[네이버]] 메신저서비스 [['라인']]이 가장 유명한 [[하둡]]용 NoSQL [['H베이스(HBase)']] 기반이다. [[카디날정보기술]]이 H베이스만큼 수요가 있는 [['몽고DB']] 관리툴을 내놓은 것 외엔 상용화된 서드파티 솔루션도 찾아보기 어렵다. 권영길 그루터 대표는 이처럼 NoSQL이 시장에서 폭넓은 관심을 받지 못하는 이유를 빅데이터에서 실제 중요한 실현 가치는 '분석'이고 여기서 처리할 데이터를 저장하는 기술은 뭐든 가능할 것이라 보는 인식 이라 진단한다. 그에 따르면 NoSQL은 기술 특성상 서비스수준관리[[(SLA)]] 측면에서 불확실성과 위험부담이 있다. 앞서 소개했듯 너무나 다양한 기술이 필요에 따라 제각각 만들어진 탓에 그 설계특성을 파악하지 못한 채 섣부른 도입에 따른 시행착오를 유발하는 등, 간편한 해법을 찾는 기업들에게 피로감을 안겼다. 권 대표는 빅데이터 기술들은 그 자체로 솔루션이 아니라 플랫폼 이라며 기성 제품이든 오픈소스든, 실제 환경에 알맞은 특성과 기능을 파악하고 적용해야 한다 고 말했다. | ||
+ | |||
+ | ===시장의 확대=== | ||
+ | 국내 NoSQL 시장에 대한 기대감은 물론 계속 확대 추세다. 다만 도입을 고려중인 기업들 스스로가 기술적 특성에 좀더 면밀한 관심을 기울일 필요가 있다는 지적이다. 일례로 몽고DB는 속도가 빨라 인기가 높다는 식으로 알려졌지만, 그건 조회를 위한 [['인덱스']]가 모두 메모리 안에서 처리되기 때문이고 그 한계를 넘을 경우 속도가 급감해 문제를 일으킨다. 글로벌 상용SW 및 오픈소스 업체들이 NoSQL 시장을 겨냥한 제품은 이미 여럿 나왔다. 국내서도 유명한 기술은 더러 소개됐다. 일례로 지난 17일 [[오라클]]은 [[버클리DB]]에 기반한 [['NoSQL DB 2.0']] 출시를 국내에 알렸다. 지난 2011년 하반기 무료 공개한 첫버전을 개선한 것이다. 그 무렵 [[IBM]]도 NoSQL 기능을 품겠다고 선언했고 DB2와 연결되는 [['그래프스토어']]를 선보였다. 이는 지난해 상반기 국내 출시한 DB2 10버전에 탑재됐다. 지난해말 오픈소스 기술업체 [['카우치베이스']]도 국내 총판업체 [[N2M]]과 손잡고, 그 카우치베이스2.0 버전의 저변확대에 나섰다. 새해 빅데이터 활용이 가시화될 전망에 따라 비정형데이터 저장기술 도입 시장도 열릴 것이란 기대도 불렀다. 밥 위더홀드 카우치베이스 최고경영자(CEO)가 다음달 한국을 찾는다.<ref>임민철 기자, 〈[https://www.zdnet.co.kr/view/?no=20130118120333 노에스큐엘, NoSQL, 도입사례 고픈 빅데이터 유망주]〉, 《지디넷 코리아》, 2013-01-21</ref> | ||
+ | |||
+ | {{각주}} | ||
+ | |||
+ | ==참고자료== | ||
+ | * 개발자를 꿈꾸는 프로그래머 ,〈[https://jwprogramming.tistory.com/70 개발자를 꿈꾸는 프로그래머]〉,《티스토리 블로그》, 2016-04-24 | ||
+ | * 〈[https://ko.wikipedia.org/wiki/NoSQL 노에스큐엘]〉, 《위키백과》 | ||
+ | * 임민철 기자, 〈[https://www.zdnet.co.kr/view/?no=20130118120333 노에스큐엘, NoSQL, 도입사례 고픈 빅데이터 유망주]〉, 《지디넷 코리아》, 2013-01-21 | ||
== 같이 보기 == | == 같이 보기 == | ||
* [[데이터베이스 관리 시스템]](DBMS) | * [[데이터베이스 관리 시스템]](DBMS) | ||
* [[관계형 데이터베이스 관리 시스템]](RDBMS) | * [[관계형 데이터베이스 관리 시스템]](RDBMS) | ||
+ | * [[몽고디비]] | ||
+ | * [[하둡]] | ||
+ | * [[H베이스]] | ||
+ | * [[카우치베이스]] | ||
+ | * [[빅카우치 몽고DB]] | ||
+ | * [[다이나모DB]] | ||
+ | * [[버크리DB]] | ||
+ | * [[그래프스토어]] | ||
− | {{데이터베이스 관리 시스템| | + | {{데이터베이스 관리 시스템|검토 필요}} |
2019년 7월 26일 (금) 01:07 기준 최신판
노에스큐엘(NoSQL)은 전통적인 관계형 데이터베이스 보다 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다. 이러한 접근에 대한 동기에는 디자인의 단순화, 수평적 확장성, 세세한 통제를 포함한다. NoSQL 데이터베이스는 단순 검색 및 추가 작업을 위한 매우 최적화된 키 값 저장 공간으로, 레이턴시와 스루풋과 관련하여 상당한 성능 이익을 내는 것이 목적이다. NoSQL 데이터베이스는 빅데이터와 실시간 웹 애플리케이션의 상업적 이용에 널리 쓰인다. 또, NoSQL 시스템은 SQL 계열 쿼리 언어를 사용할 수 있다는 사실을 강조한다는 면에서 "Not only SQL"로 불리기도 한다. .[1]
개요[편집]
NoSQL이 무엇의 약자인지는 사람에 따라 NoSQL, Not Only SQL, Non-Relational Operational Database SQL로 엇갈리는 의견들이 있지만, 현재 Not Only SQL로 풀어 설명하는 것이 다수를 차지하고 있다고 한다. 이 말의 의미를 풀어보면, 기존의 관계형 DBMS가 갖고있는 특성 뿐만 아니라 다른 특성들을 부가적으로 지원한다는 것을 의미한다. 이 용어가 처음으로 등장한 것은 1998년 카를로 스트로찌(Carlo Strozzi)라는 엔지니어가 공개한 표준 SQL인터페이스를 채용하지 않은 자신의 경량 Open Source 관계형 데이터베이스 관리 시스템를 NoSQL이라고 명명한 데서 유래했다고 한다. 이후 2009년에는 요한 오스칼손(Johan Oskarsson)이라는 엔지니어가 Open Source기반의 분산데이터베이스 관련 행사를 준비하며 NoSQL이라는 용어를 사용했다. 이때부터 기존의 관계형 데이터베이스 시스템의 주요 특성을 보장하는 ACID(Atomic, Consistency, Integrity, Duarabity)특성을 제공하지 않는, 그렇지만 뛰어난 확장성이나 성능 등의 특성을 갖는 수많은 비관계형, 분산 데이터 베이스들이 등장했고, 이때부터 NoSQL이라는 용어가 보편적으로 사용되었다. 이러한 접근의 동기는 다음을 포함한다. 설계의 단순성, 머신들의 클러스터에 대한 더 단순한 수평 확장(관계형 데이터베이스의 문제), 이용성에 대한 더 세밀한 통제. NoSQL 데이터베이스에 의해 사용되는 자료 구조(예: 키-값, 와이드 컬럼, 그래프, 도큐먼트)들은 관계형 데이터베이스에서 기본적으로 사용되는 것들과는 다르며 일부 작업들은 NoSQL에서 속도가 더 빠른 편이다. 주어진 NoSQL 데이터베이스의 특정한 적합 여부는 해결해야 하는 문제에 따라 다르다. NoSQL 데이터베이스에 쓰이는 자료 구조들은 관계형 데이터베이스 테이블보다 "더 유연한" 것으로 간주되기도 한다. 수많은 NoSQL 스토어들은 이용성, 파티션 내구성, 속도의 선호로 (CAP 정리 측면에서) 일관성을 타협한다. NoSQL 스토어를 채용하는 데 생기는 장벽에는 저급의 쿼리 언어의 사용(SQL 사용 대신. 예: 테이블을 경유하여 애드혹 조인-join을 수행하는 기능이 부족), 표준화된 인터페이스의 부족, 기존 관계형 데이터베이스의 상당한 개선이 포함된다. 대부분의 NoSQL 스토어는 진정한 ACID 트랜잭션이 결여되어 있으나 마크로직, 에어로스파이크, 페어컴(FairCom) c-treeACE, 구글 스패너(기술적으로 NewSQL 데이터베이스이긴 하지만), Symas LMDB, OrientDB 등의 일부 데이터베이스들은 이를 염두에 두고 설계하였다. 그 대신, 대부분의 NoSQL 데이터베이스들은 "궁극적인 일관성" 개념을 제공함으로써 데이터베이스의 변경사항이 모든 노드에 "궁극적으로"(일반적으로 밀리초 내) 전파되므로 데이터에 대한 모든 쿼리들이 즉각 업데이트된 데이터를 반환하지 않을 수 있고 정확하지 않은 데이터를 읽는 결과가 발생할 수 있는데 이 문제를 스테일 리드(stale read)라고 부른다. 게다가 일부 NoSQL 시스템들은 손실된 쓰기(write)와 기타 형태의 데이터 손실을 보이는 경우도 있다. 일부 NoSQL 시스템들은 로그 선행 기입과 같은 개념들을 제공하여 데이터 손실을 막는다. 여러 데이터베이스를 거치는 분산 트랜잭션 처리의 경우 데이터 일관성은 NoSQL과 관계형 데이터베이스에게 훨씬 더 큰 도전이 된다. 현행의 관계형 데이터베이스들 조차도 데이터베이스 스팬을 위한 참조 무결성 제약(referential integrity constraint)을 허용하지 않는다. 분산 트랜잭션 처리를 위해 ACID 트랜잭션과 X/Open XA 표준을 모두 준수하는 시스템들도 일부 있다.[2]
역사[편집]
- 1998년 : 표준 SQL 인터페이스를 채용하지 않은 자신의 경량 오픈 소스 관계형 데이터베이스를 NoSQL이라고 명명했다.스트로찌는 현재의 NoSQL 운동이 “전반적인 관계형 모델에서 점차 멀어지고 있으므로” NoREL로 부르는 것이 더 적절하다고 언급했다.
- 2009년 : 2009년 초에 라스트 FM의 요한 오스칼손(Johan Oskarsson)이 오픈 소스 분산 데이터베이스를 논하기 위한 미트업 행사를 조직하면서, 이와 같은 데이터베이스를 NoSQL이라고 불렀다. 고전적인 관계형 데이터베이스 시스템의 주요 특성을 보장하는 ACID 제공을 주로 시도하지 않은 수많은 비관계형, 분산 데이터 자료 공간의 등장에 따라 이 이름이 사용되었다.
특징[편집]
NoSQL 데이터베이스는 기존의 관계형 데이터베이스보다 더 융통성있는 데이터 모델을 사용하고 데이터의 저장 및 검색을 위한 특화된 메커니즘을 제공한다. 이를 통해 NoSQL 데이터베이스는 단순 검색 및 추가작업에 있어서 매우 최적화된 키 값 저장 기법을 사용하여 응답속도나 처리효율 등에 있어서 매우 뛰어난 성능을 나타낸다.
- 관계형 모델을 사용하지 않으며 테이블 간 연결해서 조회할 수 있는 조인 기능이 없음
- 데이터 조회를 위해 직접 프로그래밍하는 등의 비 SQL 인터페이스를 통한 데이터 접근
- 대부분 여러 데이터베이스 서버를 묶어서(클러스터링) 하나의 데이터베이스를 구성
- 관계형 데이터베이스에서는 지원하는 데이터 처리 완결성(Transaction, ACID 지원)이 보장되지 않음
- 데이터의 스키마와 속성들을 다양하게 수용하고 동적으로 정의(Schemaless)
- 데이터베이스의 중단없는 서비스와 자동 복구 기능 지원
- 대다수의 제품이 Open Source로 제공
- 대다수의 제품이 고 확장성, 고 가용성, 고 성능 특징을 가짐
정리하면, NoSQL은 초고용량 데이터 처리 등 성능에 특화된 목적을 위해 비 관계형 데이터 저장소에 비 구조적인 데이터를 저장하기 위한 분산저장 시스템이라고 볼 수 있다. 최근 각광받는 빅데이터에 대한 처리에 특화되었다고 보면 될 듯 하다.[2]
활용[편집]
데이터베이스의 예[편집]
NoSQL 데이터베이스를 분류하는 접근 방식은 분류와 하위 분류와 함께 다양하다. 다양한 접근 방식으로 인해 비관계형 데이터베이스를 포괄적으로 파악하는 데에는 어려움이 있다. 그럼에도 동의할만한 수준의 기본적인 분류는 데이터 모델에 기반을 둔다. 이 가운데 몇 가지와 이들이 가진 프로토타입은 다음과 같다.
- 컬럼: H베이스, 아큐물로
- 도큐먼트: 몽고DB, 카우치베이스
- 키 값: 다이나모, 리악, 레디스, 캐시, 프로젝트 볼드모트
- 그래프: Neo4J, AgensGraph, 알레그로그래프, 버투오소
스티븐 옌은 자신의 블로그의 글 "NoSQL is a Horseless Carriage"에서 NoSQL 데이터베이스들을 다음과 같이 분류했다.[1]
용어 연관 데이터베이스 KV Store Keyspace, Flare, SchemaFree, RAMCloud, Oracle NoSQL Database (OnDB) KV Store - Eventually consistent Dynamo, Voldmort, Dynomite, SubRecord, Mo8onDb, DovetailDB KV Store - Hierarchical GT.m, Csche KV Store - Ordered TokyoTyrant, Lightcloud, NMDB, Luxio, MemcacheDB, Actord KV Cache Memcached, Repcached, Coherence, Hazelcast, Infinispan, EXtremeScale, JBossCache, Velocity, Terracotta Tuple Store Gigaspaces, Coord, Apache River Object Database ZopeDB, DB40, Shoal Document store CouchDB, Cloudant, Couchbase, MongoDB, Jackrabbit, XML-Databass, ThruDB, Cloukit, Prsevere, Riak-Basho,Scalaris Wide Columnar Store BigTable, HBase, Apache Cassandra, Hypertable, KAI, OpenNeptune, Qbase, KDI
성능[편집]
벤 스코필드는 여러 유형의 NoSQL 데이터베이스의 등급을 다음과 같이 평가했다.
데이터 모델 성능 확장성 유연성 복잡성 기능 키-값 스토어 높음 높음 높음 없음 가변적 (없음) 컬럼 지향 스토어 높음 높음 준수 낮음 최소 도큐먼트 지향 스토어 높음 가변적 (높음) 높음 낮음 가변적 (낮음) 그래프 데이터베이스 가변적 가변적 높음 높음 그래프 이론 관계형 데이터베이스 가변적 가변적 낮음 준수 관계대스
성능과 확장성 비교는 종종 YCSB 벤치마크를 통해 이루어진다.[1]
종류[편집]
- Key-Value DB(널리 쓰임): Key와 Value의 쌍으로 데이터가 저장되는 유형으로써 Amazon의 Dynamo Paper에서 유래되었다. Riak, Vodemort, Tokyo등의 제품이 알려져 있다.*
- Wide Columnar DB : Big Table DB라고도 하며, Google의 BigTable Paper에서 유래되었다. Column Family 데이터 모델을 사용하고 있고, HBase, Cassandra, Hypertable이 이에 해당된다.
- Document DB : Lotus Notes에서 유래되었으며, JSON, XML과 같은 Collection 데이터 모델 구조를 채택하고 있다. Mongo DB, Cough DB가 이 종류에 해당된다.
- 8Graph DB : Euler & Graph Theory에서 유래한 DB 이다. Nodes, Relationship, Key-Value 데이터 모델을 채용하고 있다. Neo4J 등의 제품이 있다.
일반적으로 웹과 관련하여 JSON, XML 데이터를 많이 접하게 되고, 또한 자료가 많이 나와있는 Mongo DB로 시작하는 분들이 많은 것 같아서 NoSQL을 처음 다루시는 분이라면 Mongo DB로 차근차근 시작해보는 것이 나을 것 같다.[2]
평가와 전망[편집]
평가[편집]
NoSQL은 관계형DB만으론 어려웠던 비정형데이터 저장을 보완하는 빅데이터플랫폼의 구성요소로 주목됐다. 불과 3년전만 해도 오픈소스 관계형DB의 맹주 '마이SQL(MySQL)'의 미래를 좌우할 중대변수가운데 하나로 꼽혔고, 최근 1~2년간 신제품 등장과 업그레이드도 경쟁적으로 이뤄졌다. 하지만 정작 시장 반응은 '뜨뜻미지근'했다. 일단 구글이 지난 2011년 8월 '레벨DB'라는 오픈소스 NoSQL DB를 공개했다. 이어 지난해 1월 아마존웹서비스(AWS)가 '다이나모DB'를 출시했다. 그리고 6월 마이크로소프트(MS)가 아파치 '카우치DB'를 애저 클라우드 서비스형플랫폼(PaaS)에서 돌리는 '빅카우치'를 출시했다. 7월 레드햇이 인메모리 기반의 NoSQL 기술 '제이보스데이터그리드6'을 내놨다. 이처럼 최근까지 NoSQL 제품은 경쟁적으로 개발됐고, 유명 인터넷서비스 업체들은 이를 적극 활용중이라고 알린다. 하지만 일반적인 오픈소스나 상용SW처럼 외부에서 개발된 제품을 가져와 사업용 애플리케이션에 적용하는 사례는 잘 알려지지 않았다.그나마 네이버 메신저서비스 '라인'이 가장 유명한 하둡용 NoSQL 'H베이스(HBase)' 기반이다. 카디날정보기술이 H베이스만큼 수요가 있는 '몽고DB' 관리툴을 내놓은 것 외엔 상용화된 서드파티 솔루션도 찾아보기 어렵다. 권영길 그루터 대표는 이처럼 NoSQL이 시장에서 폭넓은 관심을 받지 못하는 이유를 빅데이터에서 실제 중요한 실현 가치는 '분석'이고 여기서 처리할 데이터를 저장하는 기술은 뭐든 가능할 것이라 보는 인식 이라 진단한다. 그에 따르면 NoSQL은 기술 특성상 서비스수준관리(SLA) 측면에서 불확실성과 위험부담이 있다. 앞서 소개했듯 너무나 다양한 기술이 필요에 따라 제각각 만들어진 탓에 그 설계특성을 파악하지 못한 채 섣부른 도입에 따른 시행착오를 유발하는 등, 간편한 해법을 찾는 기업들에게 피로감을 안겼다. 권 대표는 빅데이터 기술들은 그 자체로 솔루션이 아니라 플랫폼 이라며 기성 제품이든 오픈소스든, 실제 환경에 알맞은 특성과 기능을 파악하고 적용해야 한다 고 말했다.
시장의 확대[편집]
국내 NoSQL 시장에 대한 기대감은 물론 계속 확대 추세다. 다만 도입을 고려중인 기업들 스스로가 기술적 특성에 좀더 면밀한 관심을 기울일 필요가 있다는 지적이다. 일례로 몽고DB는 속도가 빨라 인기가 높다는 식으로 알려졌지만, 그건 조회를 위한 '인덱스'가 모두 메모리 안에서 처리되기 때문이고 그 한계를 넘을 경우 속도가 급감해 문제를 일으킨다. 글로벌 상용SW 및 오픈소스 업체들이 NoSQL 시장을 겨냥한 제품은 이미 여럿 나왔다. 국내서도 유명한 기술은 더러 소개됐다. 일례로 지난 17일 오라클은 버클리DB에 기반한 'NoSQL DB 2.0' 출시를 국내에 알렸다. 지난 2011년 하반기 무료 공개한 첫버전을 개선한 것이다. 그 무렵 IBM도 NoSQL 기능을 품겠다고 선언했고 DB2와 연결되는 '그래프스토어'를 선보였다. 이는 지난해 상반기 국내 출시한 DB2 10버전에 탑재됐다. 지난해말 오픈소스 기술업체 '카우치베이스'도 국내 총판업체 N2M과 손잡고, 그 카우치베이스2.0 버전의 저변확대에 나섰다. 새해 빅데이터 활용이 가시화될 전망에 따라 비정형데이터 저장기술 도입 시장도 열릴 것이란 기대도 불렀다. 밥 위더홀드 카우치베이스 최고경영자(CEO)가 다음달 한국을 찾는다.[3]
각주[편집]
- ↑ 1.0 1.1 1.2 ,〈노에스큐엘〉,《위키백과》
- ↑ 2.0 2.1 2.2 티,〈개발자를 꿈꾸는 프로그래머〉,《티스토리 블로그》, 2016-04-24
- ↑ 임민철 기자, 〈노에스큐엘, NoSQL, 도입사례 고픈 빅데이터 유망주〉, 《지디넷 코리아》, 2013-01-21
참고자료[편집]
- 개발자를 꿈꾸는 프로그래머 ,〈개발자를 꿈꾸는 프로그래머〉,《티스토리 블로그》, 2016-04-24
- 〈노에스큐엘〉, 《위키백과》
- 임민철 기자, 〈노에스큐엘, NoSQL, 도입사례 고픈 빅데이터 유망주〉, 《지디넷 코리아》, 2013-01-21
같이 보기[편집]
- 데이터베이스 관리 시스템(DBMS)
- 관계형 데이터베이스 관리 시스템(RDBMS)
- 몽고디비
- 하둡
- H베이스
- 카우치베이스
- 빅카우치 몽고DB
- 다이나모DB
- 버크리DB
- 그래프스토어