일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Image 컴포넌트
- 브라우저 동작
- 파이썬
- 부스트캠프
- 네이버 부스트캠프 멤버십
- 씨쁠쁠
- 프로그래머스
- 파이썬 웹크롤링
- 자바스크립트 컴파일
- 네이버 부캠
- react
- PubSub 패턴
- React ssr
- 자바스크립트 객체
- React.js
- 비디오 스트리밍
- Next/Image 캐싱
- 파이썬 코딩테스트
- 자바스크립트
- 웹크롤링
- 네이버 부스트캠프
- 코딩테스트
- 멘션 추천 기능
- Server Side Rendering
- 자바 프로젝트
- Next.js
- 스택
- c++
- beautifulsoup
- git checkout
Archives
- Today
- Total
코린이의 개발 일지
[Database] 데이터베이스 종류 - DBMS와 RDBMS (SQL, NoSQL) 본문
반응형
Database와 DBMS 그리고 SQL
Database란?
- 일반적으로 컴퓨터 시스템에 전자 방식으로 저장된 구조화된 정보 혹은 데이터의 체계적인 집합
DBMS (Database Management System) 란?
- 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고 데이터 베이스를 관리해주는 소프트웨어
SQL (Structured Query Language) 란?
- 관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이며 관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었다.
- 종류
- DDL (데이터 정의 언어)
- CREATE
- ALTER
- DROP
- DML (데이터 조작 언어)
- INSERT
- UPDATE
- DELETE
- SELECT
- DCL (데이터 제어 언어)
- GRANT
- BEGIN
- COMMIT
- ROLLBACK
- DDL (데이터 정의 언어)
RDBMS
- DBMS 앞에 R (Relational)이 붙었다.
- 관계형 데이터베이스 관리 시스템을 의미한다.
- 저장방식은 SQL에 의해 저장되고 있다.
- RDB를 관리하는 시스템
RDB
- 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스
- 데이터를 속성(attribute) 와 데이터 값 (attribute value) 사이에서 관계 (relation)을 찾아내고 이를 테이블 모양의 구조로 도식화
- 주요 용어
- Primary Key (기본키)
- 한 테이블의 각 row를 유일하게 식별해주는 column
- 각 테이블마다 Primary Key가 존재해야하며 NULL값을 허용하지 않음
- 각 row마다 유일한 값이어야 한다.
- Foreign Key (외래키 또는 외부키)
- Foreign Key는 한테이블의 필드 (attribute) 중 다른 테이블의 row를 식별할 수 있는 키
- Primary Key (기본키)
데이터베이스 Schema
- 데이터 베이스의 테이블 구조 및 형식, 관계 등의 정보를 형식언어로 기술한 것
- 일종의 데이터베이스 설계
설계
- 주의할 점
- 확장성
- 정규화
확장성
- primary key에 의미를 부여하지 말자
- primary key는 just index로서의 역할만할 뿐, 의미를 부여하는 순간 확장성이 무너진다.
- NULL을 허용해야 하는지 고려하자
- 반드시 속성의 값이 존재해야 하는지 꼭 고려해야한다.
- NULL은 수집되지 못한 데이터를 뜻하기도 한다.
- 수집되지 않은 데이터에 대한 처리를 위해 가능성이 있다면 반드시 NULL을 허용해야한다.
- 고정 관념으로 column을 생략하지 말자
정규화
- 속성은 반드시 하나의 값을 가져야 한다.
예시
설계하기 (방법)
개념적 설계 (요구사항 분석)
- ERD (Entity Relationshop Diagram)
- 테이블 간의 관계를 설명해준다.
NoSQL
- RDB 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미
- 테이블간의 관계를 정의하지 않는다.
- 데이터의 일관성은 포기하되 비용을 고려하여 여러대의 데이터에 분산하여 저장하는 Scale-out을 목표로 등장
- 대표적으로 MongoDB가 있다.
- 예시
- Key-value Database
- 데이터가 키와 값의 쌍으로 저장된다.
- 질의의 속도가 빠르다.
- 대표적인 NoSQL key-value 모델로는 Redis, Riak, Amazon Dynamo DB등이 있다.
- Document Database
- key와 document 형태로 저장
- key-value 모델과 다른점은 value가 계층적인 형태인 document로 저장된다는 점이다.
- 객체지향에서의 객체와 유사.
- MongoDB, CouthDB 등이 있다.
- Wide Column Database
- Column-family Model 기반의 Database이며 이전의 모델들이 Key-Value 값을 이용해 필드를 결정했다면, 특이하게도 이 모델은 키에서 필드를 결정한다.
- 키는 Row(키 값)와 Column-family, Column-name을 가진다.
- 연관된 데이터들은 같은 Column-family 안에 속해 있으며, 각자의 Column-name을 가진다.
- 관계형 모델로 설명하자면 어트리뷰트가 계층적인 구조를 가지고 있는 셈이다.
- 이렇게 저장된 데이터는 하나의 커다란 테이블로 표현이 가능하며, 질의는 Row, Column-family, Column-name을 통해 수행된다.
- 대표적인 NoSQL Column-family Model로는 HBase, Hypertable 등이 있다.
- Graph Database
- Graph Model Model에서는 데이터를 Node와 Edge, Property와 함께 그래프 구조를 사용하여 데이터를 표현하고 저장하는 Database
- 개체와 관계를 그래프 형태로 표현한 것이므로 관계형 모델이라고 할 수 있으며, 데이터 간의 관계가 탐색의 키일 경우에 적합하다.
- Key-value Database
RDBMS와 NoSQL의 장단점
RDBMS
장점
- RDBMS는 위에서 설명을 하였듯이 정해진 스키마에 따라 데이터를 저장하여야 하므로 명확한 데이터 구조를 보장.
- 또한 관계는 각 데이터를 중복없이 한 번만 저장 가능.
단점
- 테이블간테이블 간 관계를 맺고 있어 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어진다.
- 성능 향상을 위해서는 서버의 성능을 향상 시켜야하는 Scale-up만을 지원. 이로 인해 비용이 기하급수적으로 늘어날 수 있다.
- 스키마로 인해 데이터가 유연하지 못함. 나중에 스키마가 변경 될 경우 번거로워진다.
NoSQL
장점
- NoSQL에서는 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가질 수 있다. 언제든 저장된 데이터를 조정하고 새로운 필드를 추가 가능
- 데이터 분산이 용이하며 성능 향상을 위한 Saclue-up 뿐만이 아닌 Scale-out 또한 가능.
단점
- 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경 될 경우 수정을 모든 컬렉션에서 수행을 해야 함.
- 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않으며 데이터 구조 결정이 어려울 수 있다.
RDBMS, NoSQL 언제 사용해야 할까?
RDBMS
데이터 구조가 명확하고 명확한 스키마가 중요한 경우
중복된 데이터가 없기 때문에 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템에 적합
NoSQL
정확한 데이터 구조를 알 수 없고 데이터가 변경 혹은 확장이 될 수 있는 경우
Update가 많이 이루어지지 않는 시스템이 좋다 (데이터 중복이 발생할 수 있기 때문에 변경할 때마다 모든 컬렉션에서 수정해야 함)
Scale-Out를 해야 되는 시스템에 적합
출처:
반응형
Comments