- 데이터베이스는 관계형 데이터베이스인것과 아닌것으로 구분할 수 있으며, 각각 SQL과 NoSQL로 데이터베이스를 사용할 수 있다.
관계형 데이터베이스
- 관계형 데이터베이스는 행과 열로 이루어진 테이블에 데이터를 저장한다. (열에 대한 데이터를 미리 정해둬야 한다.)
🥔 이 행과 열은 미리 구조화 되어 있다. (즉, 테이블의 구조와 데이터의 타입은 정해져 있다.)
🧁 이를 기반으로, 정해진 형식에 따라서 데이터를 삽입해야 한다.
- 관계형 데이터베이스에서는 스키마가 뚜렷하고 테이블간의 관계를 직관적으로 파악할 수 있다.
- 스키마는 나중에 변경할 수 있기는 하지만, 데이터베이스 전체를 수정하거나 서버를 오프라인 상태로 한 뒤에 수정해야 한다.
- 일반적으로 수직적으로 확장한다. 확장하는데 높은 메모리, CPU를 사용하게 된다.
- 데이터베이스가 하드웨어의 성능을 많이 이용하여 비용이 많이 든다.
- 여러 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만, 복잡하고 시간이 많이 든다.
🍮 대표적인 관계형 데이터베이스 : MySQL, Oracle, SQLite, PostgresSQL, MariaDB
ACID 성질을 준수해야 하거나 금융서비스 개발, 데이터 구조가 일관적인 경우 관계형 데이터베이스를 사용한다.
NoSQL
- 데이터베이스의 구조가 정해지지 않은 데이터베이스를 의미한다.
- 스키마가 반드시 없는 것이 아니라, 데이터를 읽어올 때 스키마에 따라 데이터를 읽어온다.
🍅 schema on read
- 데이터를 입력하는 방식이 데이터를 읽어오는데 영향을 끼친다.
- 동적으로 스키마의 형태를 관리할 수 있기에 행을 추가할 때 즉시 새로운 열을 추가할 수 있다.
- 개별 속성에 대하여 모든 열에 대한 데이터를 반드시 입력하지 않아도 된다.
- NoSQL의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점을 둔다.
- 때문에, 구조화되어 있지 않는 쿼리 언어로 데이터 요청이 가능하다.
🍄 UnQL(UnStructured Query Language)
- 수평적으로 확장하여 보다 싸게 증설할 수 있고 클라우드 서비스를 이용하여 확장할 수 있다.
- NoSQL로 데이터베이스를 확장하면 많은 트래픽을 보다 편하게 처리할 수 있다.
- 저렴한 범용 하드웨어나 클라우드 기반 인스턴스에 NoSQL 데이터베이스를 호스팅할 수 있어서 수직적 확장보다 비용이 적게 든다.
🥭 대표적인 NoSQL 데이터베이스 : MongoDB, Casandra
NoSQL의 종류
Key-Value 타입
- Key-Value 타입의 형태로 배열에 데이터를 저장한다.
- Key는 속성의 이름, Value는 해당 속성의 값을 의미한다.
🍃 Redis, Dynamo 등
문서형(Document) 데이터베이스
- 데이터를 문서의 형태로 저장한다.
- 예를 들면, JSON과 유사한 형태로 저장한다.
- 각각의 문서는 하나의 속성에 대한 데이터를 가지며, 컬렉션이라는 그룹으로 묶여 관리된다.
🍃 MongoDB 등
Wide-Column 데이터베이스
- 데이터베이스의 열, colum에 대한 데이터를 집중적으로 관리하는 데이터베이스이다.
- key-value 형식으로 데이터가 저장된다.
- 컬럼 패밀리(column families)라고 하는 열(colum)의 집합체 단위로 데이터를 처리할 수 있다.
- 하나의 행(row)에 많은 열(colum)을 저장할 수 있어서 유연하게 사용할 수 있다.
- 데이터 처리에 필요한 열(colum)을 유연하게 선택할 수 있어서 대규모의 데이터 분석에 유용하다.
🍃 Cassandra, HBase 등
그래프(Graph) 데이터베이스
- 자료구조와 비슷한 형식으로 데이터의 관계를 구성하는 데이터베이스이다.
- 노드(nodes)에 속성(entities)별로 데이터를 저장한다.
- 각 노드간의 관계는 edges(간선)로 표현된다.
🍃 Neo4J, InfiniteGraph 등
데이터 구조가 거의 없는 대규모의 데이터나 클라우딩 컴퓨터나 저장공간을 최대한 활용해야 하는 경우 NoSQL을 사용한다. 또한, 빠르게 서비스를 구축하는 과정에서 데이터 구조가 자주 변하는 경우에도 선택한다.
🍫 관계형, 비관계형 데이터베이스를 적절히 함께 사용하여 사용자의 요구를 충족할 수 있다. 🍫
참고 자료 출처 : 코드 스테이츠