참고
데이터베이스
NOTE
관계형 DB와 비관계형 DB의 차이점에 대해서 알아보자!
DB유형에 따른 종류와 사용경우
관계형 데이터베이스(SQL)
NOTE
관계형 데이터베이스 요약!
•
관계형 데이터베이스는 고정된 행(row)와 열(column)로 구성된 테이블에 데이터를 저장한다.
•
각 열은 하나의 속성에 대한 정보를 저장하고, 행에는 각 열의 데이터 형식에 맞는 데이터가 저장된다.
•
테이블의 구조와 데이터 타입등을 사전에 정의하며, 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있다.
•
특정한 형식을 지키기 때문에, 데이터를 정확히 입력했다면 사용할 때 수월하다.
대표적인 솔루션
•
MySQL
•
SQLite
•
MariaDB
•
PostgresSQL
사용하는 경우
•
데이터베이스의 ACID 성질을 준수해야 하는 경우
◦
ACID는 트랜잭션에 의한 상태안전을 보장하기 위한 성질이다.
◦
SQL을 사용하면 데이터베이스간 상호작용 방식을 명확하게 규정할 수 있기에, 데이터의 무결성을 보호할 수 있따.
◦
금융권에서는 매우 중요한 개념
•
소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우
◦
규모가 많은 서버를 필요로 하지 않고 일관된 데이터를 사용하는 경우, 관계형 데이터베이스를 사용하는 경우가 많다.
◦
다양한 데이터 유형과 높은 트래픽을 지원하도록 설계된 NoSQL 데이터베이스를 사용해야만 하는 이유가 없기 때문.
비관계형 데이터베이스
NOTE
관계형 DB를 제외한 나머지를 전부 말한다.
•
NoSQL 데이터베이스는 표 형식이 아니라, 다른 방식으로 데이터를 저장한다.
◦
주요 유형으로는 문서, 키, 값, 와이드 컬럼, 그래프가 있다.
•
주로 데이터가 고정되어 있지 않은 데이터베이스를 가리킨다.
•
유연한 스키마를 제공하며, 대량의 데이터와 높은 사용자 부하에서도 쉽게 확장이 가능하다.
•
데이터를 입력하는 방식에 따라 읽어올 때 영향을 미친다.
•
복사된 데이터가 변경되면 여러 콜렉션과 문서를 수정해야한다.
NoSQL DB 유형
•
Key-Value 데이터베이스
◦
Key(속성), Value(값)을 의미한다.
◦
Redis, Dynamo등이 대표적인 Key-Value 형식의 데이터베이스 이다.
•
문서형(Document) 데이터베이스
◦
테이블이 아닌 문서처럼 저장하는 데이터베이스 유형
◦
많은 문서형 데이터베이스에서 JSON과 유사한 형식의 데이터를 문서화하고 저장한다.
◦
MongoDB가 대표적인 문서형 데이터베이스다.
•
Wide-Column Store 데이터베이스
◦
데이터베이스의 열(column)에 대한 데이터를 집중적으로 관리
◦
하나의 행에 많은 열을 포함할 수 있어 유연성이 높다.
◦
Cassandra, HBase가 대표적인 Wide-Column Store 데이터베이스다.
•
그래프(Graph) 데이터베이스
◦
자료구조의 그래프와 비슷한 관계를 구성하는 데이터베이스다.
◦
각 노드에 속성별로 데이터를 저장하고, 관계는 선으로 표현한다.
◦
Neo4J, InfiniteGraph가 대표적인 그래프 데이터베이스
사용하는 경우
•
데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터
◦
대부분의 NoSQL은 저장하는 데이터의 유형에 제한이 없고 언제든 새 유형을 추가할 수 있다.
◦
정형화되지 않은 데이터가 필요한 경우 사용한다.
•
클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
◦
클라우드 기반으로 DB를 구축하면, 저렴한 비용의 솔루션을 제공받을 수 있다.
◦
소프트웨어 에 데이터베이스의 확장성이 중요하다면, 별다른 번거로움 없이 확장할 수 있는 NoSQL를 사용하자
•
빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트하는 경우
◦
스키마를 미리 준비할 필요가 없기 떄문에 빠르게 개발하는 과정에 유리하다.
◦
데이터 구조를 자주 업데이트 해야하는 경우, 스키마를 매번 수정하는 SQL보다 NoSQL이 더 적합하다.
SQL vs NoSQL
NOTE
SQL | NoSQL | |
데이터 저장 | SQL을 이용해서 데이터를 테이블에 저장 | key-value, document 등의 방식으로 데이터를 저장한다. |
스키마 | 고정된 형식의 스키마가 필요하다.
스키마를 수정할 수 있지만, DB 전체를 수정해야하고 오프라인으로 전환할 필요가 있다. | 동적으로 스키마의 형태를 관리할 수 있다.
행을 추가할 떄 즉시 새로운 열을 추가할 수 있고, 개별 속성에 대해서 반드시 입력하지 않아도 된다. |
쿼리 | 테이블의 형식과 테이블 관계에 맞추어서 요청해야 한다. | 데이터 그룹 자체를 조회하는 것에 초엄을 맞추고 있다.
구조화 되지 않은 쿼리 언어로도 데이터 요청이 가능하다. |
확장성 | 수직적으로 확장한다.
여러 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만 시간이 많이 든다. | 수평적으로 확장한다.
서버를 추가하기만 하면, 많은 트래픽을 보다 편리하게 처리할 수 있다.
저렴한 범용 하드웨어, 클라우드 기반 인스턴스에 호스팅이 가능해 수직적보다 비용이 저렴하다. |
장점 | 데이터 중복 배제로 데이터 이상 발생 및 용량 증가를 최소화한다. | 쿼리 프로세싱이 단순화되어 대용량 데이터 처리 성능이 향상된다. |
단점 | 조인이 복잡한 경우 쿼리 프로세싱도 복잡해셔 성능이 저하된다. | 데이터 중복에 의해 데이터 일관성이 저학되고 용량이 증가한다. |