※ 원티드 프리온보딩 2월 "MySQL 잘 사용하기" 학습내용 1일차 - 1
◎ 데이터베이스란
- 여러 사람들이 공유하고 사용할 목적으로 통합 관리되는 데이터들의 모임
◎ 데이터베이스의 원칙
-
무결성 (Data Integrity)
- 데이터가 전송, 저장, 처리되는 과정에서 변경되거나 손상되지 않는 것
- 완전성, 정확성, 일관성을 유지함
- 개체 무결성, 참조 무결성 ... (참고 자료)
-
안정성 (Data Reliability)
- 데이터를 보호할 수 있는 방법
- 인증/인가되지 않은 사용자로부터 데이터를 보호함
- 고장이 안나야 됨
-
확장성 (Scalability)
- 데이터 양, 사용자가 늘어날 때 대처가 가능하여야 함
◎ RDBMS(관계형 데이터베이스)
-
RDB(Relational Database)
- 관계형 데이터 모델에 기초를 둔 데이타베이스
- 데이터를 row와 column으로 이루어진 Table의 형태로 저장함
- SQL(Structured Query Language)를 사용해서 데이터를 읽어오거나 조작함
- 저장하는 내부 방식에 따라 row-oriented, column-oriented로 나눌 수 있다.
-
row-oriented
- 각 데이터는 레코드 단위로 기록되며, 메모리 상 레코드끼리 수평적으로 저장
- 장점
- 데이터의 끝에 행을 추가하기만 하면 되기 때문에 저장 속도가 빠르다.
- 행 단위 데이터를 불러오는 속도가 빠름
- 단점
- 데이터 간의 집합을 만드는 경우 속도 저하 현상이 발생
- 불필요한 연산 시간을 초래하며, 간편한 입력에 비해 출력하는 과정이 필요 이상의 메모리 소모를 유발
- 예시 : MySQL, postgreSQL, hbase
- column-oriented
- 각 데이터는 필드 단위로 기록되며, 메모리 상 필드끼리 수평적으로 저장
- 장점
- 데이터 쿼리를 할 때 성능이 더 좋은 경우가 있다.
- 데이터 집합을 만드는 경우 추가 메모리 소모 없이 필요한 결과를 출력할 수 있으며, 이에 따라 성능이 크게 향상
- 단점
- 데이터 저장시에 중간중간에 저장해야 하므로 효율이 떨어진다.
- 행 단위 데이터를 불러오기 위해서 각 Disk별로 조회하기 때문에 효율이 떨어진다.
- 예시 : cassandra, hbase, BigQuery
◎ NoSQL(비관계형 데이터베이스)
-
key-value
- key-value pair로 데이터를 저장함
- key는 unique identifier로도 사용됨
- 예시 : Redis, DynamoDB (참고 자료1, 참고 자료2)
-
graph
- 데이터를 graph의 형태로 저장
- 각 항목이 node로 이루어져있고, node간의 관계는 edge를 사용해서 나타냄
- SNS등 서로 관계가 복잡한 상황에서 자주 사용됨
- 예시 : Neo4j, OrientDB (링크드인 - 1촌, 2촌)
-
document database
- row, column과 같은 구조는 없고 자유로운 형태로 데이터를 저장함
- 데이터베이스별로 데이터를 조작할 수 있는 언어가 따로 있음
- 예시 : MongoDB, CassandraDB, Couchbase
◎ RDBMS vs NoSQL
구분 | RDBMS (관계형 DB) | NoSQL (비관계형 DB) |
---|
Data Modeling | - 스키마에 맞춰서 관리하기 때문에 데이터 정합성 보장 - 관계를 맺고있는 데이터가 자주 변경되는 경우 | - 자유롭게 데이터를 관리할 수 있다 - 데이터 구조를 정확히 알 수 없는 경우 - 데이터가 변경/확장될 수 있는 경우 |
Scalability | - Scale Up | - Scale Out |
Query Language | SQL(Structured Query Language) | DB마다 문법이 다름 |
Consistency | STRONG | eventual consistency - may take time to be consistent |
flexibility | 상대적으로 떨어짐 | 매우 유연함 |