NoSQL 이란
SQL vs NoSQL
데이터베이스는 크게 relational database 와 non-relational database 로 양분된다.
Relational DB 는 SQL 로 데이터를 다룬다.
Non-relational DB 는 NoSQL 로 데이터를 다룬다.
Non-Structured Query Language
데이터가 고정되어 있지 않은 데이터베이스의 형태를 가리킨다.
NoSQL 기반의 non-relational DB 는 보통 다음과 같은 타입으로 구성된다.
데이터를 Key-Value pair 배열 형태로 저장한다.
Redis, Dynamo
데이터를 테이블이 아닌 문서처럼 저장한다.
MondgoDB
DB 의 column 관리에 집중하는 DB 이다.
각 column 에는 key-value 형식으로 데이터가 저장되고, column family 라고 하는 column 의 집합체 단위로 데이터를 처리할 수 있다.
하나의 행에 많은 column 을 포함할 수 있어 유연성이 높다. 이 점에서 규모가 큰 데이터 분석에 주로 자주 사용된다.
Cassandra, HBase
Graph 와 비슷한 형식으로 데이터 간의 관계를 구성하는 DB 이다.
Neo4J, InifiniteGraph
분류 | SQL | NoSQL |
---|---|---|
Storage | 테이블에 미리 작성된 schema 를 기반으로 정해진 형식에 맞게 데이터를 저장 | key-value, document, graph, wide-column 형식등의 방식으로 데이터를 저장 |
Schema | - 고정된 schema 가 필요. - Schema 를 변경하려면 DB 를 수정하거나 오프라인(down-time) 으로 전환 | - 동적인 형태의 schema - 모든 column 을 반드시 채우지 않아도 됨. |
Querying | 테이블의 형식과 테이블간의 관계에 맞춰서 데이터를 요청 | 데이터 그룹 자체를 조회하는것에 초점을 둠. |
Scalability | - 수직적 확장 (높은 메모리, CPU를 사용하는 확장) - 고비용 - 복수의 서버에 만들 시 복잡하고 시간이 많이 소모됨 | - 수평적 확장 (값싼 서버 증설, 클라우드 서비스를 이용하는 확장) - 많은 트래픽 처리를 위한 서버 추가 구축이 쉬움 - 비용 효율성 높음 |
상황에 맞게 선택한다.
1) DB 의 ACID 특성을 준수해야 하는 경우
2) 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우
1) 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우
2) 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
3) 빠르게 서비스를 구축하고 데이터 구조를 자주 업데이트 하는 경우