프로젝트 데이터베이스를 설계하는데 sql vs nosql에 대해 정확히 파악하고 결정해야겠다는 생각이 들어서 이번에 제대로 공부해보았다. 회원 정보가 있는 웹사이트는 table대로 관리를 해야하니까 대부분 sql을 사용한다고 생각했는데 꼭 그런 것만은 아니었다. 페이스북이나 인스타그램같은 소셜 미디어에서는 사용자 이용수가 대폭 증가할 확률이 높고, 간단한 데이터들이 저장되기에 nosql을 사용한다. sql을 사용하는 경우는 유저, 트랜젝션 등을 민감하게 관리해야 할 때이다. 자세히 알아보자.
SQL vs NoSQL
2010-03: 빅데이터에 대한 관심이 쏟아지면서 rds로 해결할 수 없는 문제들이 나오기 시작함.
수평적 확장성(Horizontal Scalability)vs 수직적 확장성(Vertical Scalability)
SQL: hw를 계속 업그레이드. 유지보수 비용이 비싸다
NoSQL: 서버 대수를 늘리면 스케일이 계속 늘어남. 그럼에도 불구하고 Hashing(O(1))을 사용하기 때문에 응답 속도는 보장된다.
쿼리 언어 여부
- JOIN같은 쿼리 언어를 많이 사용하는 경우는 추세에 상관없이 SQL을 사용.
- 유저 데이터, 상품 데이터, 유저 트랜젝션 등을 관리할 때 → SQL
- facebook, instagram 등과 같이 유저가 폭발하면서 간단한 데이터를 저장할 때 → NoSQL
강한 스키마(strice Schema) vs 자유로운 스키마(Schema-free)
- SQL: 강한 스키마
- 테이블을 정의하고 나서 테이블에 부합하지 않으면 Insert, update ❌
- integer - string 간의 관계도 명확해야함
- 명시적으로 데이터베이스에 정의
- 강한 스키마는 Index를 많이 걸게 됨. → 검색 시간 빠르다. O(log N)
- 자유로운 스키마
- 위와 반대
- Index 없이 key를 기준으로 쿼리 작성.
SQL 데이터베이스를 사용하기 위해서는 데이터 스키마가 사전에 정의되어야한다.
💡 데이터 스키마
데이터베이스에서 데이터의 구조와 제약조건을 정의하는 것(실제 데이터 포함x)
✔️ 이 데이터 스키마 프로세스를 설계하는 것을 데이터모델링(ERD설계)라고 한다.
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
gender VARCHAR(10)
);
sql에서는 내가 설계한 스키마를 일관되게 유지하는 것이 중요하고, nosql에서는 데이터가 컬렉션 형태로 저장되어 필요한 경우 스키마를 변경할 수 있다.
Database 철학
- SQL: lcd
- 순서대로 정확하게, 트랜젝션 단위로 깔끔하게 저장된다.
- NoSQL: base
- insertion 타임에 자유롭게 데이터를 넣을 수 있다. 단, 탐색은 느리다.
- 하나의 document에 상하관계가 있는 데이터들을 저장할 수 있다. (A 안에 B, B안에 C 이런식으로..)
sql과 nosql의 차이점을 공부해보니 우리가 진행할 프로젝트는 이용자 수가 대폭 증가하는 서버가 아니라 단순 프로젝트용 서버이기 때문에 nosql의 강한 장점인 확장성을 이용할 수 없다ㅠ.ㅠ 또한 추천 시스템 알고리즘을 구현하기 위해 사용자 선호도를 저장하고, 이를 반영하기 위해서는 sql을 써야하는 게 맞다는 판단을 내렸다.
Reference
2) NoSQL vs SQL
'DB' 카테고리의 다른 글
[DB] H2 DB 설치와 초기세팅 (0) | 2023.08.14 |
---|---|
[DB] RDMBS | ERD설계 시 주의할 점 (2) | 2023.04.16 |
[DB/MySQL] 기본 명령어 4 | HAVING, ROLLUP, JOIN,.. etc. (0) | 2023.02.24 |
[DB/MySQL] 기본 명령어3 | ORDER BY, GROUP BY, DISTINCT, LIMIT (2) | 2023.02.24 |
[DB/MySQL] 기본 명령어2 | BEETWEEN, IN, LIKE, ALY, ALL (1) | 2023.02.23 |