RDBMS (Relational Database Management System)
RDBMS는 데이터를 정해진 스키마로 정의된 2차원 테이블에 저장되며, 데이터는 관계를 통해 여러 테이블에 분산된다.
각 열은 하나의 속성에 대한 정보를 저장하며, 각 행은 각 열의 데이터 형식에 맞는 데이터가 저장된다.
데이터의 중복을 피하기 위해 테이블 간의 관계를 사용하며, 이러한 관계를 나타내기 위해 외래키(Foreign Key)를 사용한다.
RDBMS의 장점
- 명확하게 정의된 스키마가 존재하며, 데이터의 일관성을 보장한다.
- 관계를 이용하여 데이터의 중복을 없앨 수 있다.
RDBMS의 단점
- 덜 유연하다. 데이터 스키마를 사전에 계획하고 알려야 하며, 나중에 수정하기가 힘들다.
- 관계를 맺고 있어 조인문이 많은 복잡한 쿼리가 만들어질 수 있다.
- 대체로 수직적 확장만 가능하다.
NoSQL (Not Only SQL)
분산형 구조를 통해 데이터를 여러 대의 서버에 분산해 저장하고, 분산 시에 데이터를 상호 복제해 특정 서버에 장애가 발생했을 때도 데이터의 유실이나 서비스 중지가 없는 형태의 구조이다.
따라서, 스키마도 없고, 관계도 없다.
NoSQL에서는 레코드를 문서(documents)라고 부른다.
SQL은 정해진 스키마를 따르지 않으면 데이터 추가가 불가능했지만, NoSQL에서는 다른 구조의 데이터를 같은 컬렉션에 추가가 가능하다.
NoSQL은 여러 테이블에 조인할 필요없이 이미 필요한 모든 것을 갖춘 문서를 작성하는 것이다.
NoSQL의 장점
- 스키마가 없어서 유연하다. 언제든지 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있다.
- 데이터는 애플리케이션이 필요로 하는 형식으로 저장된다.
- 데이터를 읽어오는 속도가 빨라진다.
- 수직 및 수평 확장이 가능해서 애플리케이션이 발생시키는 모든 읽기/쓰기 요청 처리가 가능하다.
NoSQL의 단점
- 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있다.
- 데이터 중복을 계속 처리해야한다.
- 데이터가 여러 컬렉션에 중복되어 있기 때문에, 수정 시 모든 컬렉션에서 수행해야 한다.
확장
두 데이터베이스를 비교할 때, 확장(Scaling) 개념도 중요하다.
데이터베이스 서버의 확장은 수직적 확장(Scale-Up)과 수평적 확장(Scale-Out)으로 나뉜다.
Scale-Up은 단순히 데이터베이스 서버의 성능을 향상하는 것이고, Scale-Out은 데이터베이스 서버를 추가하여 트래픽을 분산하는 것이다.
RDBMS는 확장 시, Scale-Up을 주로 사용하며, Scale-Out은 NoSQL에 비해 번거롭다는 특징이 있다.
반면, NoSQL은 Scale-Out에 있어 자유롭다.
둘 중 어떤 것을 선택해야 하나?
결론은 필요에 따라 사용하면 된다.
RDBMS는 관계를 맺고 있는 데이터가 자주 변경되는 경우, 변경될 여지가 없고 명확한 스키마가 사용자와 데이터에게 중요한 경우 사용하면 된다.
반면, NoSQL은 정확한 데이터 구조를 알 수 없거나 변경 및 확장이 될 경우, 읽기는 자주 하지만 데이터 변경은 자주 없는 경우, 데이터베이스를 수평으로 확장해야 하는 경우 사용하면 된다.
'CS > 데이터베이스' 카테고리의 다른 글
데이터베이스와 캐시 (0) | 2023.06.28 |
---|---|
Redis (0) | 2023.06.28 |
트랜잭션 격리 수준 (0) | 2023.06.26 |
트랜잭션과 Lock (0) | 2023.06.26 |
트랜잭션 (0) | 2023.06.26 |