본문 바로가기
개발

NoSQL

by just다해 2024. 8. 25.

NoSQL 이란?

Not Only SQL의 단어 뜻으로 SQL만을 사용하지 않는 데이터베이스 관리 시스템을 지칭하는 말입니다.

대부분 cluster에서 실행할 목적으로 만들어졌기 때문에 관계형 모델을 사용하지 않습니다. 그러나 모든 NoSQL 데이터베이스가 cluster에서 실행되도록 맞춰진 것은 아닙니다. NoSQL 모델 중 하나인 그래프 데이터베이스는 관계형 데이터베이스와 비슷한 분산 모델을 사용합니다.

NoSQL은 오픈소스이며, 스키마 없이 동작하고, 구조에 대한 정의를 변경할 필요 없이 데이터베이스 레코드에 자유롭게 필드를 추가할 수 있습니다.

기존에는 트랜잭션을 통한 안정적인 데이터 관리가 가장 중요한 이슈였기 때문에 RDBMS를 사용했지만, 데이터와 트래픽 양이 기하급수적으로 증가함에 따라 데이터를 처리하는 데 필요한 비용이 증가하는 이슈가 발생했고, NoSQL은 데이터의 일관성을 약간 포기한 대신 여러 대의 컴퓨터에 데이터를 분산하여 저장하는 것을 목표로 등장했습니다.

종류

Aggregate-Oriented 모델

집합이란 연산의 한 단위로 취급되는 연관된 객체들의 집합을 말합니다. Aggregate-Oriented Database는 여러 대의 클러스터로 이루어진 시스템에서 사용하기 적합한 모델로 수평적 확장이 용이합니다.

RDBMS와는 달리 연관된 데이터들이 함께 움직이기 때문입니다. 또한 메모리 내의 자료구조와 집합 간 데이터가 잘 일치하므로, RDBMS처럼 객체-관계 매핑 프레임워크가 필요하지 않으며, 데이터의 검색도 key나 id를 사용하면 쉽게 찾을 수 있습니다.

Aggregate-Oriented 데이터베이스는 조인 연산이 불가능하며, 이를 보완하기 위해 MongoDB나 Cassandra 등의 데이터베이스에서는 Map Reduce 기능을 제공함으로써 조인과 유사한 연산을 가능하도록 설계했습니다.

key-value

 

Key-Value 저장소는 가장 단순한 형태의 NoSQL으로, 수평적 확장이 용이합니다. Key-Value 쌍으로 저장되며, key는 value에 접근하기 위한 용도로 사용하며, value는 어떠한 형태의 데이터라도 담을 수 있습니다. 아주 간단한 기능만을 제공하기 때문에 질의의 속도가 굉장히 빠른 편입니다.

Key-Value 저장소 종류로는 Memcached, Riak, Redis, Amazone Dynamo DB, LevelDB 등이 있습니다.

 

Document

 

Key-Value 모델에서 한층 진화한 모델로 생각할 수 있습니다. 데이터는 Key와 Document의 형태로 저장됩니다. 객체 지향의 객체와 유사하며, 이들은 하나의 단위로 취급되어 저장해, 하나의 객체를 여러 개의 테이블에 나눠 저장할 필요가 없어졌습니다.

Document 모델은 객체를 Document 형태로 바로 저장할 수 있기 때문에, 객체-관계 연결이 필요하지 않습니다. 또한, 검색에 최적화 되어있으며, JSON이나 xml 형태로 결과로 출력이 됩니다.

종류로는 MongoDB, CouchDB, MarkLogic 등이 있습니다.

 

Column-Family

 

앞선 두 개의 모델은 값을 이용해 필드를 결정했다면, Column 모델은 키에서 필드를 결정합니다.

키는 Row(키값)와 Column-Family, Column-Name을 가지며, 연관된 데이터들은 같은 column-family 안에 속해있으며, 각자의 column-name을 가지는 형태입니다.

이러한 특징 때문에 column-family 모델은 클러스터링이 쉽게 이뤄지며, timestamp가 존재해 값이 수정된 이력을 알 수 있습니다. 또한 값들은 일련의 바이너리 데이터로 존재하기 때문에 어떠한 형태의 데이터라도 저장할 수 있습니다. 위의 두 모델과는 다르게 bolb 단위의 질의가 불가능하며, schema-less이긴 하지만 새로운 필드를 만드는 데 드는 비용이 크기 때문에 사실상 결정된 스키마를 변경하기가 어렵습니다. 또한 Keyspace나 table을 과도하게 생성할 경우 memory overflow가 발생할 수 있기 때문에 주의가 필요합니다.

column-family 종류로는 Cassandra, HBase, Hypertable 등이 있습니다.

 

관계형 모델(RDBMS) 와 비교해 보면, 관계형 모델에서는 새로운 컬럼이 추가될 때마다 테이블 구조를 변경해야 하고, 특수한 경우에는 데이터도 새로 적재해야 합니다. Column-Family 모델은 신규 데이터를 위의 이미지처럼 입력하기만 하면 되기 때문에, 구조를 변경할 필요가 없으며, 기존 데이터를 수정할 필요도 없습니다. Column-Family 가 사용하기에 더 유연하지만, 단점은 타 테이블과의 조인이 안 된다는 점입니다. 관계형 데이터베이스의 최대 장점인 SQL 문으로 타 테이블과 조인하여 다양한 정보를 추출할 수 있지만, NoSQL DB는 이 처리가 불가능합니다. 이러한 단점을 NoSQL 데이터베이스에서는 조인이 필요한 데이터는 하나의 테이블에 중복으로 관리해 처리 속도를 향상 합니다. 동일한 데이터들이 여러 테이블에 존재하게 되는데 이것을 관리하는 것이 NoSQL 데이터베이스에서는 가장 어려운 점이고 가장 중요한 특징입니다.

Graph 모델

그래프 모델은 집합 지향 모델보다는 관계형 모델에 가깝습니다. 실제 세계의 데이터를 관계와 함께 표현하기 위해 디자인된 모델로써, 데이터는 연속적인 노드, 관계, 특성의 형태로 저장됩니다. 데이터 간의 관계가 탐색의 키일 경우에 적합합니다. 예를 들어, 페이스북이나 트위터 같은 소셜네트워크나 연관된 데이터를 추천해 주는 추천 엔진이나 패턴 인식 등의 데이터베이스로도 적합합니다. 또한 Aggregate-Oriented 모델과는 다르게 객체의 ACID 트랜잭션을 지원합니다. 다만, 그래프 모델은 클러스터링에 적합하지 않으며, 질의어도 특화되어 어 있습니다. 

종류로는 Neo4j, Blazegraph, OrientDB 가 있습니다.

'개발' 카테고리의 다른 글

GIT (1)  (0) 2024.09.09
JedisExhaustedPoolException 이슈  (4) 2024.09.08
Kafka 설정 값  (1) 2024.09.08
Transaction  (1) 2024.09.08
추천 시스템  (0) 2024.08.25