어떤 데이터베이스를 이용해야 할 지에 대해 생각해보며 찾아보다가 좋은 포스팅을 발견하여 기록..
SQL
SQL은 Structed Query Language의 약자, 데이터베이스 그 자체를 나타내는 것이 아니라 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.
(RDBMS : Relational DataBase Management System)
SQL을 사용하면, RDBMS에서 데이터를 수정, 삭제, 검색 가능!
○ 데이터는 정해진 데이터 스키마를 따라 데이터베이스 테이블에 저장된다!
○ 데이터는 관계를 통해서 연결된 여러 개의 테이블에 분산된다!
1. 스키마
스키마란 DB에 데이터들이 어떠한 구조와 제약 조건으로 저장되어야 하는지 정의한 것이다.
데이터는 테이블에 레코드(record)로 저장되며, 각 테이블에는 명확하게 정의된 구조(structure)가 있다.
구조는 필드(field)의 이름과 데이터 유형으로 정의된다.
따라서, 관계형 데이터베이스에는 스키마에 맞지 않는 형식의 데이터는 저장될 수 없다.
2. 관계
여러 개의 테이블에 나누어서 데이터들을 저장할 때, 각각의 테이블들은 다른 테이블에 저장되지 않은 데이터들만을 가지고 있다. 따라서, 중복된 데이터가 없다.!
NOSQL
SQL과 반대되는 접근 방식을 따르므로,
○ 스키마와 관계가 없다.
○ 비관계형 데이터베이스!
NOSQL에서는 레코드를 문서(documents)라고 부른다.
정해진 스키마를 따르지 않으므로, 다른 구조의 데이터들을 추가할 수 있다.
SQL처럼 여러 테이블에 나누어 담지 않는다. 따라서, 여러 테이블을 JOIN할 필요없이 필요한 것들을 모두 갖춘 문서를 작성하게 된다. (조인이라는 개념이 존재하지 않는다.)
데이터가 중복되기 때문에 불안정한 부분이 있으나, 복잡하고 오래걸리기도 하는 조인을 사용하지 않는다.
확장(Scaling)
1. 수직적(vertical) 확장
데이터베이스 서버의 성능 향상(ex. cpu 업그레이드)
2. 수평적(horizontal) 확장
서버 추가, 데이터베이스 전체적으로 분산됨(하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동)
SQL은 일반적으로 수직적 확장만을 지원한다. 따라서 수평적 확장은 NOSQL에서만 가능.
장점 단점 Check!
SQL
► 명확하게 정의된 스키마 사용, 데이터 무결성 보장
► 관계는 각 데이터를 중복없이 저장되도록 한다.
BUT,
► NOSQL에 상대적으로 덜 유연하다. 데이터 스키마는 사전에 정의가 되어있어야 한다.
(수정의 번거로움이 발생할 수 있다.)
► 관계를 맺고 있기 때문에, join문이 많은 쿼리가 만들어질 수 있다.
► 수평적 확장이 어렵고, 대부분 수직적 확장만 가능하기 때문에 성장 한계에 직면하게 된다.
NOSQL
► 스키마가 없으므로 훨씬 유연하다. 언제든 데이터를 조정하고 새로운 필드 추가 가능
► 데이터를 읽어오는 속도가 빠르다.
► 수직 및 수평적 확장이 가능하리 때문에 애플맄이션에서 발생시키는 모든 읽기 / 쓰기 요청을 처리할 수 있다.
BUT,
► 유연성으로 인해, 데이터 구조를 결정하지 못하게 될 수 있다.
► 데이터가 여러 컬렉션에 중복되어 있기 때문에, 수정(update)를 해야 하는 경우, 모든 컬렉션에서 수행해야 한다.
(SQL에서는 하나의 테이블에 하나의 레코드. 단 한번의 수정만 수행하면 된다.)
관계를 맺고 있는 데이터가 자주 수정되는 애플리케이션일 경우 ► SQL
변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우 ► SQL
정확한 데이터 구조를 알 수 없거나 변경 / 확장 될 수 있는 경우 ► NOSQL
읽기(read) 처리를 자주하지만, 데이터를 자주 변경(update)하지 않는 경우 ► NOSQL
데이터베이스를 수평으로 확장해야 하는 경우 ( 많은 양의 데이터를 다뤄야 하는 경우 ) ► NOSQL
그렇지만 어떤 데이터베이스를 이용하든 각 단점들을 완화시킬 수 있다. SQL로 복잡한 JOIN문이 만들어지지 않도록 설계할 수 있으며, NOSQL도 중복된 데이터를 줄일 수 있도록 설계가 가능하다.
출처)
https://academind.com/tutorials/sql-vs-nosql/
https://siyoon210.tistory.com/130