일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- BigO notation
- 주니어개발자
- 리트허브 커밋
- 비지니스 레이어
- 프로그래머스
- 알고리즘
- leftJoin
- 특정문자 제거하기
- 가위바위보 풀이
- 파이썬 특정 문자 제거하기
- 스프링 시스템 구조
- 춥고더운우리집
- collection python
- 춥고 더운 우리 집
- 파이썬 컬렉션
- 개발자 취준
- 프로그래머스 가위바위보
- 슈츠 자막
- 공선옥
- 배열의 유사도 파이썬
- 프레젠테이션 레이어
- 프로그래머스 배열 회전시키기
- 2-layered architecture
- Programmers 배열의 유사도
- 리트허브 사용법
- 리트허브 오류
- 프로그래머스 특정 문자 제거하기
- 프로그래머스 가위바위보 풀이
- 프로그래머스 배열의 유사도 파이썬
- programmers 배열 회전
- Today
- Total
기억보다 기록을
[Database] RDBMS와 NoSQL, trigger 사용 본문
RDBMS와 NoSQL의 차이를 정리해보려 한다.
mongoDB에서 다음과 같이 둘의 차이를 정의해두었다.
tldr summary:
SQL databases are known as relational databases, and have a table-based data structure, with a strict, predefined schema required. NoSQL databases, or non-relational databases, can be document based, graph databases, key-value pairs, or wide-column stores. NoSQL databases don’t require any predefined schema, allowing you to work more freely with “unstructured data.” Relational databases are vertically scalable, but usually more expensive, whereas the horizontal scaling nature of NoSQL databases is more cost-efficient.
(출처: https://www.mongodb.com/scale/nosql-vs-relational-databases)
이 글에서 table-based data structure, predefined schema, unstructured data, cost-efficient 정도 단어가 눈에 띄었는데, RDBMS가 우리가 흔히 아는 테이블 기반의 DB 스키마라면 NoSQL는 형식에 있어서
document based, graph databases, key-value pairs, or wide-column stores가 가능하다.
여기서 key-value를 보면 알 수 있듯이 JSON형태로 데이터를 저장할 수 있다.
RDBMS가 FK를 이용하여 다른 테이블을 참조하고 연결되어 있기에 A테이블 칼럼의 데이터가 바뀌어도 연결된 B 테이블의 값들에 영향이 가진 않는다면 NoSQL은 JSON의 형태이고, KEY가 바뀐다면 다른 KEY값들도 저절로 바뀌는 것이 아니기에 trigger를 걸어 정합성을 유지하는 등의 작업이 필요하다.
(트리거에 비즈니스 로직을 추가하는 것은 추천하지 않고
히스토리성 테이블 구성에 사용하는 것을 추천하는 의견이 있다. 관련내용은 이 영상에서 확인 가능하다.
https://www.youtube.com/watch?v=9hbNs5fByuI&t=185s)
예시를 들자. user/board 테이블이 있을 때 user 테이블의 id, board의 userId 칼럼으로 board가 user을 참조한다고 가정하자. 이 때 user테이블의 password 칼럼의 속성값이 달라져도 board 테이블에는 영향이 가지 않는다. RDBMS는 속성으로 객체를 가질 수 없어서 외래키를 사용하는 것에 비해 NoSQL은 JSON object의 형식으로 값을 가진다.
RDBMS가 중복을 허용하지 않고 속성값 변경이 자유로운 장점이 있다면 NoSQL은 중복을 허용한다. user 테이블의 어트리뷰트 값으로 '홍길동'을 갖는다고 하면 board에도 user 칼럼이 있고 '홍길동'이 있을 수 있다는 말이다. 이렇게 JSON 형태로 값을 저장하게 되면 select 할 때 다른 테이블을 조인하여 데이터를 불러오지 않아도 되므로 비용이 덜 든다.
RDBMS가 값을 가져올 때 다른 테이블을 조인해서 가져오느라 cost가 드는 반면에 NoSQL은 이미 자기가 가진 값을 select 하면 되므로 데이터를 찾을 때 성능이 좋다고 생각하면 되겠다.
그렇다고 RDBMS는 비동기로 사용이 불가능하냐고 묻는다면, 아니다. mySQL과 mariaDB에 있는 R2DBC를 이용하여 비동기 사용이 가능하다.
'Development' 카테고리의 다른 글
[JPA] N+1 문제 간단하게 정리 (1) | 2023.10.09 |
---|---|
[vscode] git 연동 후 푸시하기 Push to github from vscode. (0) | 2022.03.18 |
[vscode] code로 열기가 뜨지 않을 때 해결방법 (0) | 2022.03.17 |