NoSQL은 비관계형 데이터베이스 입니다. NoSQL에 대해 No + SQL혹은 Not only SQL 등 의견이 분분하지만 현재는 'Not only SQL'의 약자라는 의견이 우세하다고 합니다. 하지만 어떤 의견이든 NoSQL이 관계형 데이터베이스가 아닌 비관계형 데이터베이스로 보는 시각은 동일합니다.
2000년대 까지만 해도 Oracl, MySQL, MS-SQL등과 같은 관계형 데이터베이스를 대부분 사용했었으나 2000년대 후반 인터넷의 발달과 여러 소셜 미디어 매체가 등장하면서 비정형 데이터의 폭발적인 증가로 인해 비관계형 데이터베이스가 주목받기 시작했다고 합니다.
관계형 데이터베이스(Relational Database)?
수십년간 가장 대중적으로 사용되고 있는 관계형 데이터베이스의 가장 큰 특징은 SQL(Structured Query Language) 쿼리문으로 데이터를 관리한다는 것입니다. MySQL, Oracle, MariaDB 등이 관계형 데이터베이스에 속합니다. 관계형 데이터베이스는 열(column)과 행(row)로 이루어진 테이블의 집합으로 구성되며 무결성을 보장하며 ACID규정을 준수합니다.
https://www.oracle.com/kr/database/what-is-a-relational-database/
NoSQL의 특징
유연성
비관계형 데이터베이스는 보다 유연한 스키마(Schema-less라고도 하는데 스키마가 아예 없는 것은 아님)를 제공합니다. 데이터 구조를 미리 지정하지 않아도 되며 이러한 특성이 비정형 데이터를 저장하는 데 매우 큰 이점으로 작용하며 반복적이고 빠른 개발을 가능하게 합니다.
확장성
관계형 데이터베이스의 가장 큰 특징인 SQL은 하나의 공간에 데이터를 수직적으로 저장하는 반면, NoSQL은 데이터를 분산하여 저장(분산형 하드웨어 클러스터 이용)합니다. 관계형 데이터베이스처럼 수직적 확장도 확장성은 좋지만 고비용이라는 단점이 있습니다. 하지만 NoSQL은 수평적 확장을 통해 비용을 감소할 수 있으며 이러한 특징 덕분에 대용량 데이터를 저장하는데 많이 사용됩니다.
이밖에도 고기능, 고성능, 빠른 검색 및 데이터 추가 가능 등의 여러 특징이 있습니다. 특징을 한 줄로 정리하면 NoSQL은 초고용량 데이터 처리 등 성능에 특화된 목적을 위해, 비관계형 데이터 저장소에, 비구조적인 데이터를 저장하기 위한 분산 저장 시스템이라고 볼 수 있습니다(삼성 SDS | NoSQL이란 무엇인가? 대량데이터 동시처리위한 DBMS 종류와 특징 2020.05.19).
데이터 구조에 따른 NoSQL데이터베이스 유형
키(key)-값(value)형
가장 기본적이고 단순한 유형으로 키와 값으로 이루어진 한 쌍의 데이터를 저장하는 방식입니다. 키는 값에 접근하기 위한 용도이며 보통 문자열 열이나 정수, 시퀀스가 사용되며 값은 어떠한 데이터도 저장이 가능합니다.
Document-oriented(문서지향형)
도큐먼트형 역시 키와 값의 한 쌍으로 데이터를 저장하는데, 이 때 값이 바로 Document입니다. Document는 JSON, XML, YXML과 같은 인코딩 형식을 대부분 사용합니다. 키-값형과 달리 '값'에 해당하는 도큐먼트의 내용을 검색할 수 있어 보다 편리합니다.
Graph Database
그래프형은 각각의 객체와 같은 노드(node)들을 엣지(edge)라는 관계와 함께 저장하는 형식입니다.
Wide Columnar Store (Big Table DB / Column Family)
Column Oriendted(열 지향) 형식은 데이터를 행이 아닌 열 그룹에 저장합니다.
한 행(row)에 여러 개의 열(column)을 가질 수 있는 형식입니다. 관계형 데이터 베이스 형식에서는 행마다 다른 열을 추가하거나 삭제하지 못했지만 이 Wide Columnar Store형식에서는 행마다 각각 다른 열을 가질 수 있습니다. (스키마가 없기 때문)
+)참고
'STUDY > DATABASE' 카테고리의 다른 글
MySQL | Geolocation 거리 구하기 (0) | 2020.10.26 |
---|---|
MySQL | DATABASE, USER 생성 / Data Export / Data Import (0) | 2020.10.06 |
MySQL | 조건부 UPDATE ( IF / CASE ) (0) | 2020.04.10 |
MySQL | 테이블 수정(ALTER TABLE) (0) | 2019.12.31 |
MySQL | 스키마(데이터베이스) 생성 및 테이블 생성 (0) | 2019.12.31 |