1. About Database
1.1 DB
- Database의 약자
- 데이터를 통합하여 관리하는 데이터의 집합
1.2 DBMS
- Database Management System의 약자
- 데이터베이스를 관리하는 미들웨어 시스템을 데이터베이스 관리시스템이라고 함
1.3 RDBMS
- Relational Database Management System의 약자
- Oracle, Mysql, Postgresql, Sqlite 등이 있음
- 데이터 테이블 사이에 키값으로 관계를 가지고 있는 데이터 베이스
- 데이터 사이의 관계 설정으로 최적화된 스키마를 설계 가능
1.4 NoSQL
- Not Only Structured Query Language 의 약자 (약자는 여러가지가 있으나, 해당 의미가 가장 대중적으로 쓰임)
- Mongodb, Hbase, Cassandra 등이 있음
- 데이터 사이의 관계가 없으므로 복잡성이 줄고 많은 데이터를 빠르게 저장이 가능함
1.5 Database Ranking
- RDBMS에서는 Oracle, Mysql, MSsql이 가장 많이 사용됨
- NoSQL에서는 Mongodb가 많이 사용됨
- 2020년 기준
- 출처 : https://db-engines.com/en/ranking_trend
2. About MySQL
2.1 특성
- MySQL은 오픈소스이며, 다중 사용자와 다중 스레드를 지원한다.
- 다양한 운영체제에 다양한 프로그래밍 언어를 지원함
- 표준 SQL을 사용함
- 세계적으로 Oracle과 양대 산맥의 사용자를 가지고 있음
- 작고 강력하며 Oracle대비 가격이 저렴함
2.2 역사
- 1995년 : MySQL AB사에 의해 첫 버전이 발표됨
- 2008년 : 썬 마이크로시스템이 MySQL AB를 인수, 5.1 버전 발표
- 2009년 : 오라클이 썬 마이크로시스템 인수
- 2917년 : 최신버전인 5.7.20 발표
2.3 License
- MySQL을 포함하는 하드웨어나 소프트웨어 기타 장비를 판매하는 경우 라이센스가 필요함
- 배포시 소스를 공개하면 무료이지만, 소스공개를 원하지 않는 경우 상용 라이센스가 필요함
- 서비스에 이용하는건 무료로 가능함
3. RDBMS
3.1 특성
- 데이터 분류, 정렬, 탐색속도가 빠름
- 오래 사용된 만큼 신뢰성이 높음
- 스키마 수정이 어려운 단점이 있음
3.2 구조
- 열(column)과 행(row)로 구성된 테이블(table)의 구조를 가지고 있음
3.2.1 Table
- 열(column)과 행(row)로 이루어져 있으며, 데이터베이스를 이루는 기본단위
- Storage Engine
- MyISAM : full text index 지원, table 단위 lock, select가 빠르고 구조가 단순함
- InnoDB : transaction 지원, row 단위 lock, 자원을 많이 사용하고 구조가 복잡함
3.2.2 Column
- 테이블의 세로축 데이터
- Field, Attribute라고도 불림
3.2.3 Row
- 테이블의 가로축 데이터
- Tuple, Recode라고도 불림
3.2.4 Value
- 열(column)과 행(row)에 포함되어 있는 데이터
3.2.5 Key
- 행(row)의 식별자로 사용
3.2.6 Relationship
- 1:1 관계 : 1개의 데이터가 1개의 데이터만 관계를 가짐
- 1:n 관계 : 1개의 데이터가 여러개의 다른 데이터와 관계를 가짐
- n:n 관계 : 여러개의 데이터가 다른 여러개의 데이터와 관계를 가짐
3.2.7 Schema
- Schema(스키마)는 데이터 베이스의 구조를 만드는 디자인
4. NoSQL
4.1 특성
- RDBMS의 한계를 극복하기 위해 만들어진 데이터 베이스
- 확장성이 좋음 - 데이터의 분산처리가 용이함
- 데이터 저장이 유연함 - RDBMS와 다르게 구조의 변경이 불필요함
- 스미카 및 join이 없음
- Collection 별로 관계가 없기 때문에 모든 데이터가 들어있어야 함
- 저장되는 데이터는 Key - Value 형태의 JSON 포멧을 사용함
- Select는 RDBMS보다 느리지만 Insert가 빨라 대용량 데이터 베이스에 많이 사용됨
- 트랜젝션(transaction)이 지원되지 않는 단점이 있어 동시 수정에 대한 신뢰성이 지원되지 않음
4.2 Mongodb
- C++ 로 작성된 오픈소스 데이터 베이스
- 뛰어난 확장성과 성능을 가짐
- NoSQL에서는 인지도가 가장 높음
4.2.1 Collection
- RDBMS의 Table과 같은 개념
- Document의 집합
- 정규화된 데이터 구조인 스키마가 정의되어 있지 않음
4.2.2 Document
- RDBMS의 Row와 같은 개념
- JSON 형태의 Key : Value 형태로 데이터를 표한함
- 데이터 형태가 자유로워서, 특정 필드의 데이터 정보를 좀 더 다른 Document로 상세화 가능함
- 데이터의 상세화를 위해 Document안에 Document를 삽임이 가능함
- Document가 모여서 Collection이 되고 Collection이 모여 Database가 됨
4.2.3 Key
- RDBMS의 Column과 같은 개념