NoSQL
정의 :
NoSQL 데이터베이스는 전통적인 관계형 데이터베이스 보다 덜 제한적인 일관성(일관성이 약한) 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다.
이러한 NoSQL을 사용하는 이유는 디자인의 단순화, 수평적 확장성, 세세한 통제를 포함한다.
NoSQL 데이터베이스는 단순 검색 및 추가 작업을 위한 매우 최적화된 키 값 저장 공간으로, 레이턴시와 스루풋과 관련하여 상당한 성능 이익을 내는 것이 목적이다.
NoSQL 데이터베이스는 빅데이터와 실시간 웹 애플리케이션과 같은 상업적 이용에 널리 쓰인다.
추가적으로 NoSQL 시스템은 SQL 계열 쿼리 언어를 사용할 수 있다는 측면도 있다.
SQL뿐만아니라 여러 특성을 지원한다는 의미로 "Not only SQL"로 불리기도 한다.
NoSQL 사용 이유:
1) 설계의 단순성.
2) 머신들의 클러스터에 대한 더 단순한 수평 확장(관계형 데이터베이스의 문제).
3) 이용성에 대한 더 세밀한 통제.
NoSQL 데이터베이스에 의해 사용되는 자료 구조(예: 키-값, 와이드 컬럼, 그래프, 도큐먼트)들은 관계형 데이터베이스에서 사용되는 것들과 다르며, 일부 작업은 NoSQL의 속도가 더 빠른 편이다.
주어진 NoSQL 데이터베이스의 적합 여부는 해결해야 하는 문제에 따라 다르다. NoSQL 데이터베이스에 쓰이는 자료 구조는 관계형 데이터베이스의 테이블보다 더 "유연한" 것으로 간주되기도 한다.
수많은 NoSQL 스토어들은 가용성, 분할 내구성, 속도를 선호함으로 (CAP 정리 측면에서) 일관성과 타협하게 된다. (> 일관성보다는 가용성이나 분할 내성과같은것을 더 중요시 여기기 때문에, 일관성이 약해진다.)
cf. CAP 정리 또는 브루어의 정리(Brewer -)는, 다음과 같은 세 가지 조건을 모두 만족하는 분산 컴퓨터 시스템이 존재하지 않음을 증명한 정리이다.
일관성(Consistency): 모든 노드가 같은 순간에 같은 데이터를 볼 수 있다.
가용성(Availability): 모든 요청이 성공 또는 실패 결과를 반환할 수 있다.
분할내성(Partition tolerance): 메시지 전달이 실패하거나 시스템 일부가 망가져도 시스템이 계속 동작할 수 있다.
위의 세 가지 조건의 첫 글자를 따서 CAP 정리라고 부른다.
NoSQL 스토어를 채용하는 데 생기는 장해물 :
1) 저급의 쿼리 언어의 사용
(SQL 사용 대신. 예: 테이블을 경유하여 애드혹 조인-join을 수행하는 기능이 부족)
2) 표준화된 인터페이스의 부족
3) 기존 관계형 데이터베이스의 상당한 개선
대부분의 NoSQL 스토어는 진정한 ACID 트랜잭션이 결여되어 있으나(ACID 특성을 제공하지 않는다.)
마크로직, 에어로스파이크, 페어컴(FairCom) c-treeACE, 구글 스패너(기술적으로 NewSQL 데이터베이스이긴 하지만), Symas LMDB, OrientDB 등의 일부 데이터베이스들은 이를 염두에 두고 설계하였다.
그 대신, 대부분의 NoSQL 데이터베이스들은 "궁극적인 일관성" 개념을 제공(일관성이 약하나 결과적으로 일관성을 제공한다)함으로써 데이터베이스의 변경사항이 모든 노드에 "궁극적으로"(일반적으로 밀리초 내) 전파되므로 데이터에 대한 모든 쿼리들이 즉각 업데이트된 데이터를 반환하지 않을 수 있고 정확하지 않은 데이터를 읽는 결과가 발생할 수 있는데 이 문제를 스테일 리드(stale read)라고 부른다.
게다가 일부 NoSQL 시스템들은 손실된 쓰기(write)와 기타 형태의 데이터 손실을 보이는 경우도 있다. 일부 NoSQL 시스템들은 로그 선행 기입과 같은 개념들을 제공하여 데이터 손실을 막는다.
여러 데이터베이스를 거치는 분산 트랜잭션 처리의 경우 데이터 일관성은 NoSQL과 관계형 데이터베이스에게 훨씬 더 큰 도전이 된다. 현행의 관계형 데이터베이스들 조차도 데이터베이스 스팬을 위한 참조 무결성 제약(referential integrity constraint)을 허용하지 않는다.
분산 트랜잭션 처리를 위해 ACID 트랜잭션과 X/Open XA 표준을 모두 준수하는 시스템들도 일부 있다.
NoSQL 데이터구조에 따른 종류 :
- Key Value DB
Key와 Value의 쌍으로 데이터가 저장되는 가장 단순한 형태의 솔루션으로 Amazon의 Dynamo Paper에서 유래되었습니다. Riak, Vodemort, Tokyo 등의 제품이 많이 알려져 있습니다.
- Wide Columnar Store
Big Table DB라고도 하며, Google의 BigTable Paper에서 유래되었습니다. Key Value 에서 발전된 형태의 Column Family 데이터 모델을 사용하고 있고, HBase, Cassandra, ScyllaDB 등이 이에 해당합니다.
- Document DB
Lotus Notes에서 유래되었으며, JSON, XML과 같은 Collection 데이터 모델 구조를 채택하고 있습니다. MongoDB, CoughDB가 이 종류에 해당합니다.
- Graph DB
Euler & Graph Theory에서 유래한 DB입니다. Nodes, Relationship, Key-Value 데이터 모델을 채용하고 있습니다. Neo4J, OreientDB 등의 제품이 있습니다.
NoSQL DB별 성능 분석
데이터 모델 |
성능 |
확장성 |
유연성 |
복잡성 |
기능 |
키-값 스토어 |
높음 |
높음 |
높음 |
없음 |
가변적 |
커럼 지향 스토어 |
높음 |
높음 |
준수 |
낮음 |
최소 |
도큐먼트 지향 스토어 |
높음 |
가변적 (높음) |
높음 |
낮음 |
가변적 (낮음) |
그래프 데이터 베이스 |
가변적 |
가변적 |
높음 |
높음 |
그래프 이론 |
관계형 데이터 베이스 |
가변적 |
가변적 |
낮음 |
준수 |
관계대수 |
Key-Value 제품을 포함하여 전체 NoSQL제품들 중 현재 시장에서 가장 많이 인기가 있는 제품: MongoDB(Document), HBase(Wide Columnar Store), Cassandra(Wide Columnar Store)
HBase는 하둡 분산 파일 시스템(HDFS)에서 동작하는 Key-Value 구조 분산 데이터 베이스로, Google의 Bigtable을 참고해서 JAVA로 개발 되었습니다.
Cassandra는 Amazon의 Dynamo의 특징인 Hash 알고리즘을 이용한 “masterless” 아키텍처로 모든 노드가 coordinator 노드와 replica 노드가 될 수 있습니다.
현재 가장 인기가 많은 NoSQL인 MongoDB는 10gen(현,MongoDB inc)이 개발한 document-oriented database로 JSON의 2진 버전인 BSON을 사용하여, C++로 개발되었습니다.
출처:
위키피디아
삼성SDS, https://www.samsungsds.com/global/ko/support/insights/1195843_2284.html