-
SQL과 NoSQLTutorial/0.Tutorial 2022. 10. 19. 09:12
SQL : RDBMS Relational DataBase Management System
장점
- 관계망에 따라 데이터가 테이블에 분배된다. 따라서 데이터가 각 테이블에 중복저장되는 것을 줄일 수 있다.
- 또 미리 정의된 스키마에 의해 데이터가 저장되므로, 테이터 무결성 data integrity 에 장점이 있다.
데이터 무결성 data integrity
소위 무결성 제한 Integrity constraints 등의 규칙으로 데이터베이스에 의해 강제되곤 한다.
다음의 세 갈래로 나눌 수 있다.
-개체 무결성 Entity integrity
고유키 관련. 개체 무결성은 모든 테이블이 고유한 기본키를 가지고 null 을 허용하지 않는다.
-참조 무결성 Referential Integrity
외래키 관련. 모든 외래키는 두 가지 상태 중 하나에만 속해야 한다.
1)일반적으로는 참조하는 테이블의 기본키 primary key.
2)그러나 경우에 따라 외래키 값이 null일 수 있다. 이 때는 객체간 관계가 없거나 관계가 알려지지 않은(unknow) 상태로 남는다.
-범위 무결성 Domain integrity
데이터베이스의 모든 칼럼이 선언되어야 한다.단점
- 스키마가 사전에 계획되어야 하므로 상대적으로 유연성이 떨어진다. 나중에 수정하기도 힘들다.
- 데이터를 중복저장 하지 않는다고 하지만, 이로인해 필요한 데이터를 불러오기 위해 관계맺은 테이블 간의 join이 양산된다.
- 대체로 수직적 확장 scale up 만 가능하다고 하다고 한다.( 아직 뜻을 제대로 파악하지 못했다. )
NoSQL
장점
- 스키마도, join도, 관계도 없다. 그러므로 유연하다. 언제든 데이터를 조정하고 새로운 필드를 추가할 수 있다.
- 언제든 데이터를 조정한다는 것은, 애플리케이션이 필요로 하는 형식으로 유동적으로 저장할 수 있다는 것.
- 필요로 하는 형식으로 저장할 수 있다는 것은, 곧 데이터를 읽어오는 속도가 빨라진다는 것.
- 요약하면, 데이터의 정합성보다 대용량 처리를 중시한 셈이다.
- 수직적 확장 scale up, 수평적 확장 scale out 모두 가능.
수직적 확장 scale up 과 수평적확장 scale out
수직 확장 vertical scale up : 단일 노드에 자원추가 혹은 장비교체.
하드웨어의 사양관련. 램, HDD, CPU를 추가하는 등.
당연히 하드웨어 상 확장의 한계가 있을 수 있고, 하드웨어 추가에 따르는 비용이 비싸기도 하다.
게다가 마이그레이션이 어렵거나 처음부터 다시 시작해야 할 수 있다.
하지만 이는 짝패로 데이터 일관성을 얻을 수 있다는 뜻이기도 하다. (맞나?)
그러나 어플리케이션의 수정, 업데이트가 쉽다. (수정 내역을 한 서버의 한 노드에만 반영하면 되니까?)
수평확장 horizontal scale out : 서버를 추가해 처리성능을 높인다.
서버의 수를 늘리고 애플리케이션의 복제본을 실행한다. 서버에 노드만 추가해주면 된다.
이로써 서버의 부하가 분산된다.
똑같은 역할의 인스턴스를 늘리면 기존에 잘 작동되는 것을 건드릴 필요가 없어서 무중단 배포가 가능해진다.
예컨대, 특정 시간대 유저 수요가 급증하면 서버를 여러대 확보하고, 수요가 안정되면 서버를 줄일 수 있다.
같은 말을 이렇게 표현할 수도 있다.
“CPU 사용률, 상태, 네트워크 트래픽 양 등을 보면서 자동으로 Scale-Out.”
그리고 이 과정에서 서비스는 중단되지 않는다.
관련하여 다음의 키워드들을 더 찾아볼 것.
”컨테이너 기술”, “오케스트레이션”, “autosacling”, “마이크로 서비스로 모듈화”
한편, 다음의 단점도 부각된다.
“노드만 추가, 애플리케이션의 복제본 실행”이라고 했지만, 아무래도 그 일이 흔히들 말하는 것처럼 간단하지만은 않은 모양이다. 어플리케이션의 수정이 필요한 경우도 많고, 수정과 업데이트를 각각의 노드에 반영해야 하므로 작업량은 배가된다.
위의 내용을 이렇게 표현할 수도 있다.
코드의 모든 버그는 디버그하고 이해하기가 더 복잡해진다.
라이센스가 부여된 노드가 더 많아지기 때문에 라이센스 비용이 비싸진다.
필요한 공간, 냉각 및 전력 증가로 인해 데이터 센터 비용이 증가한다.단점
- 유연하다는 것은, 데이터가 중구난방으로 중복되어 있을 수 있다는 것.
- 실수로 잘못된 자료형의 데이터를 넣거나 다른 도큐멘트에 없는 필드의 데이터를 넣는 경우. 이 때문에 Mongoose 같은 ODM 이 필요할 수 있다.
- 데이터의 수정을 다수의 컬렉션에서 수행해야 할 수 있음. 지난한 업데이트 우려.
- 때문에 “유연하고 유동적”이라는 흔한 평과 달리, 데이터가 자주 변경되는 애플리케이션에는 오히려 SQL과 RDBMS가 적합할 수 있다. 여러 컬렉션에 걸쳐 중복되어 있는 데이터들을 수정해야 하는 일이 생긴다.
- 물론 스키마 타입이 명확하지 않으면 “유연하고 유동적”이라는 평에 걸맞게, NoSQL이 적합하다.
무엇이 어떤 경우 더 좋은가?
NoSQL 이 유리한 경우
- 정확한 데이터 구조를 알 수 없다. 스키마가 명확하지 않다. 변경될 수 있고 확장될 수 있다.
- 읽기를 자주 하지만 데이터 변경(생성, 수정, 삭제)는 자주 없다.
- 데이터 양이 대용량이어서 수평적으로 확장해야 한다.
- 종합하면, 대량의 분산된 데이터를 필요한 형식으로 저장하고 읽어오는 데에 특화되어 있다.
SQL이 유리한 경우
- 데이터 구조, 스키마가 명확하다.
- 그 명확한 데이터의 구조, 관계망에서 데이터 내용은 자주 변경될 수 있다.
- SQL은 관계를 맺은 테이블들에 데이터가 알맞게 배분되어 있다면, 여러 Entity에 접근해 수정을 해야한다거나 할 일이 없다. (NoSQL은 여러 컬렉션을 수정해야 할 수도 있다.)
참고
https://velog.io/@guswns3371/데이터베이스-SQL-vs-NoSQL
[데이터베이스] SQL vs NoSQL
https://siyoon210.tistory.com/130https://academind.com/tutorials/sql-vs-nosqlDatabase란컴퓨터 시스템에 전자 방식으로 저장된 구조화된 데이터 집합이다.DBMS란DataBase Manag
velog.io
'Tutorial > 0.Tutorial' 카테고리의 다른 글
웹서버와 WAS (0) 2022.10.06 RDBMS 와 NoSQL (0) 2022.10.05 웹서버와 웹프레임워크와 라이브러리와 모듈 (0) 2022.10.05 URI 와 URL (0) 2022.10.05 REST API : 그러니까 창문은 창문답게 투명하게, 보기 쉽게 만들라는 것 (1) 2022.10.01