개요
SQL(Structured Query Language)이란?
- 데이터베이스를 관리하고
- 데이터베이스에 저장된 데이터에 접근하고 저장하고 관리하기 위한 언어이다.
- SQL은 사람이 RDBMS와 소통하기 위해 사용한다.
관계형 데이터베이스
- 같은 데이터베이스 내부에 있는 여러 다른 데이터들간에 관계를 설정하고 이를 관리한다.
- 이러한 데이터를 관리하기 위해 관계형DB관리시스템을(RDBMS)을 사용한다.
NoSQL(non-SQL 또는 Not Only SQL)
- NoSQL은 SQL 뿐만 아니라 다른 기술이나 프로그래밍 언어를 사용해 정형, 비정형, 반정형 데이터를 저장한다.
- SQL을 사용하지 않는다는 것은 아니다.
- NoSQL을 RDBMS가 아니라는 것으로 해석 하는 편이 바람직하다.
- SQL과 NoSQL을 비교하는 것은 관계형 DB와 비관계형 DB를 비교하는 것으로 볼 수 있다.
차이점
- 관계형 데이터베이스는 데이터간 관계가 주가 되며, 엄격한 스키마를 가지고, 테이블 형식으로 데이터를 저장한다.
- 비관계형 데이터베이스는 주로 관계를 취급하지 않으며, 유연한 스키마를 가지고, 다양한 형식으로 데이터를 저장한다.
구분 | SQL Databases | NoSQL Databases |
---|---|---|
저장형태 | 열과 행이 고정된 테이블 | Document: JSON 문서, Key-value: 키-값 형식, Wide-column: 열과 행이 동적인 테이블 Graph: 노드와 엣지 |
배경 | 1970년대에 데이터 중복을 줄이기 위해 고안되었다. | 2000년대에 애자일과 데브옵스가 트렌드가 되면서 빠르게 변화하는 어플리케이션 환경에 맞추기 위해 고안되었다. |
제품 | Oracle, MySQL, Microsoft SQL Server, and PostgreSQL | Document: MongoDB와 CouchDB, Key-value: Redis와 DynamoDB, Wide-column: Cassandra와 HBase, Graph: Neo4j와 Amazon Neptune |
용도 | 일반적인 용도로 사용 | Document: 일반적인 용도 Key-value: 간단한 쿼리로 대용량 데이터 조회 Wide-column: sql과 비슷한 쿼리로 대용량 데이터 조회 Graph: 연결된 데이터 간 관계 분석, 처리 |
스키마 | 철저하게 관리 | 유동적 |
스케일링 | 수직적 (scale-up, 더 큰 서버로 확장) | 수평적 (sacale-out, 여러 서버로 확장) |
다중레코드 ACID 트랜잭션 지원 여부 | 지원 | 대부분 지원하지 않음. MongoDB와 같이 지원하는 경우 존재 |
Joins | 빈번하게 발생 | 발생하지 않음 |
Data to Object Mapping | 객체-관계 매핑(ORM) 필요 | 필요하지 않음. 몽고디비는 대중화된 대부분의 프로그래밍 언어에 매핑된다. |
SQL 사용이 유리한 경우
- 앱의 여러 부분에서 관련 데이터가 비교적 자주 변경되는 경우 (NoSQL이라면 항상 여러 컬렉션을 수정해야 함)
- 명확한 스키마가 중요하며, 데이터구조가 극적으로 변경되지 않을 때
NoSQL 사용이 유리한 경우
- 정확한 데이터 요구사항을 알 수 없는 경우
- 읽기(read)처리를 자주하지만, 데이터를 자주 변경하지 않는 경우 (즉, 한번의 변경으로 수십 개의 문서를 수정 할 필요가 없는 경우)
- 데이터베이스를 수평으로 확장해야 하는 경우 ( 즉, 막대한 양의 데이터를 다뤄야 하는 경우, 읽기/쓰기 처리량이 큰 경우)
NoSQL 추가 설명
NoSQL의 장점
- 유연성
- 스키마가 유동적이기 때문에 DB를 변경하기 쉽다.
- 수평적 스케일
- 저비용 확장 가능
- 빠른 쿼리 속도
- SQL DB는 객체나 앤티티를 가져오기 위해 여러 테이블을 조인을 해야한다.
- 테이블 크기를 키우면 조인 비용이 증가한다.
- NoSQL DB는 쿼리에 최적화 되어 저장된다.
- NoSQL은 "같이 접근해야하는 데이터는 같이 저장하자"를 지향한다.
- 조인이 필요 없어 속도가 보장된다.
- 개발하기 쉬움
- SQL을 학습하지 않아도 http api 요청이나 프로그래밍 언어별로 제공되는 쿼리맵핑 함수로 개발할 수 있다.
NoSQL의 단점
- ACID(원자성, 일관성, 고립성, 지속성) 확보를 위한 트랜잭션을 지원하지 않는다.→ 한 레코드에 여러명이 접근해 수정할 수 있다.
- 데이터 중복을 크게 신경쓰지 않기 때문에 SQL DB보다 용량을 더 많이 차지한다.
- 최근에는 데이터 용량이 많이 싸져 크게 신경쓰지 않는 경우도 있다.
- 몇몇 NoSQL DB는 데이터 압축 기능도 제공한다.
- DB 타입 (Document, key-value, wide-column, graph) 별로 기능에 제한이 있다.
- graph는 데이터 관계 분석에 특화되었기 때문에 단순 쿼리 검색을 하는데 제한이 있다.
Document Store
- 데이터를 JSON, XML, BSON 형식으로 저장한다.
- document는 형식에 구애받지 않지만 더 빠른 속도를 위해 자주 사용하는 필드를 인덱싱 할 수도 있다.
Documents DB의 예
- MongoDB – Free, open-source
- Couchbase – Free, open-source
활용 예
- SEGA 는 천만개의 인게임 계정을 몽고디비(MongoDB)로 관리한다.
- 시스코(Cisco)는 확장성을 확보하기 위해 VSRM(video session and research manager) 이라는 플랫폼을 Couchbase로 이전했다.
Key-Value Data Store
- key-value 쌍은 딕셔너리 형식과 같이 유일하게 저장된다.
- 이는 빠른 속도를 가능케 한다.
- 쿼리 언어가 필요 없이 get, put, delete와 같은 명령어로 관리가 가능하다.
Key-value db 예
- Redis – Free, open-source
- Memcached – Free, open-source
활용 예
- 유저 프로필, 블로그 댓글, 제품 소개 등의 데이터를 관리하는데 유용하다.
- 트위터는 타임라인에 Redis를 사용한다.
- 핀터레스트는 유저, 팔로워, 언팔, 게시판 등의 목록을 관리하는데 레디스를 사용한다.
- 코인베이스는 비트코인 트랜잭션을 관리하는데 레디스를 사용한다.
Wide-column
Column DB의 예
- Cassandra – Free, open-source
- HBase – Free, open-source
활용 예
- 고성능과 높은 확장성을 가지기 때문에 빅데이터, IoT 그리고 사용자 추천, 개인화 앤진 등에 사용된다.
- 스포티파이(Spotify)는 사용자 프로필과 가수, 노래 등의 정보를 관리하는데 그리고 개인화 하는데 카산드라(Cassandra)를 사용한다.
- 페이스북(Facebook)은 메시지앱을 HBase 기반으로 만들었다. 가까운 친구나 검색 인댁싱에도 사용한다.
Graph Store
Graph DB 예
- Neo4j – Free, open-source
- JanusGraph – Free, open-source
활용 예
- 큰 데이터간의 관계를 설정해야할 때 유용하다. 데이터 규모가 커질 수록 관계형 디비와 비교했을 때 차원이 다른 속도를 제공한다.
- 월마트(Walmart)는 고객 개인화, 유사 제품 추천, 광고 등에 Neo4j를 사용한다.
- 시스코(Cisco)는 버그를 찾아내기 위해 고객 지원에 Neo4j 를 사용한다.
참고 :
https://venturebeat.com/2021/02/08/what-is-a-graph-database/
https://www.imaginarycloud.com/blog/sql-vs-nosql/
https://www.mongodb.com/ko-kr/nosql-explained/nosql-vs-sql
https://www.youtube.com/watch?v=Q_9cFgzZr8Q
https://studio3t.com/knowledge-base/articles/nosql-database-types/#wide-column-store