데이터베이스

강두연·2020년 11월 1일
0
post-thumbnail

Database Management System (DBMS)

말 그대로 데이터베이스 관리 시스템이다.

데이터베이스(DB) 란?

데이터베이스는 메타데이터를 포함하여 로직상 관련이 있는 데이터의 모음이다.
e.g.) Data: name, city, birthdate
    Metadata: name - string, length

💨 DBMS라고도 하는 데이터베이스 관리 시스템은 사용자가 데이터베이스를 생성, 유지 관리 및 쿼리할 수 있게 해주는 소프트웨어 시스템이다.

💨 데이터를 장기 기간동안 저장 및 보존 하기 위해서 데이터 베이스를 사용한다.

💨 대부분의 DBMS는 데이터 액세스를 빠르고, 신뢰할 수 있고, 안전하게 하는 성능을 기본적으로 갖추고 있다.

💨 일반적으로 database에는 크게 관계형 데이터베이스(RDBMS)와 "NoSQL"로 명칭되는 비관계형(Non-relational) database가 있다.



관계형 데이터베이스(RDBMS)

말 그대로, 이름 그대로, 관계형 데이터 모델에 기초를 둔 데이터베이스 시스템을 말한다.
가장 대표적인게 MySQL, 그리고 Postgres, Oracle DB 가 있다.

💨 관계형 데이터란 데이터를 서로 상호관련성을 가진 형태로 표현한 데이터를 말한다.

  • 모든 데이터들은 2차원 테이블(table)들로 표현 된다.
  • 각각의 테이블은 컬럼(column)과 row(로우)로 구성된다.
    • 컬럼은 테이블의 각 항목을 말한다.
    • 로우는 각 항목들의 실제 값들을 이야기 한다.
    • 각 로우는 저만의 고유 키(Primary Key)가 있다. 주로 이 primary key를 통해서 해당 로우를 찾거나 인용(reference)하게 된다.

💨 각각의 테이블들은 서로 상호관련성을 가지고 서로 연결될 수 있는데 이때 연결된 테이블끼리의 관계에는 크게 3가지 종류가 있다.

  • One-to-One : 테이블 A의 로우와 테이블 B의 로우가 정확히 일대일 매칭이 되는 관계
  • One-to-Many : 테이블 A의 로우가 테이블 B의 여러 로우와 연결이 되는 관계
  • Many-to-Many : 테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결이 되는 관계

💨 Foreign Key(외래키)를 주로 이용하여 테이블을 연결한다.
- A, B 테이블을 서로 연결한다고 하면, A 테이블의 고유 키를 B 테이블에서 외래 키로 지정하는 방식으로 연결한다.

정규화(Normalization)

💨 하나의 테이블에 모든 정보를 다 넣으면 동일한 정보들이 불필요하게 중복되어 저장되며 더 많은 디스크를 사용하게 되고 잘못된 데이터가 저장 될 가능성이 높아진다.

💨 여러 테이블에 나누어서 저장한후 필요한 테이블 끼리 연결 시키면 위의 2문제가 사라진다. 중복된 데이터를 저장하지 않음으로 디스크를 더 효율적으로 쓰고, 서로 같은 데이터이지만 부분적으로 틀린 데이터가 생기는 문제가 없어진다. 이것을 normalization(정규화) 이라고 한다.

RDBMS의 Pros & Cons

🧡 관계형 데이터베이스는 데이터를 더 효율적으로 그리고 체계적으로 저장할 수 있고 관리 할 수 있다.
🧡 미리 저장하는 데이터들의 구조(테이블 스키마)를 정의 함으로 데이터의 완전성이 보장된다.
🧡 트랜잭션(transaction)
🧡 정형화된 데이터들 그리고 데이터의 완전성이 중요한 데이터들을 저장하는데 유리하다.

💔 테이블을 미리 정의해야 함으로 테이블 구조 변화 등에 덜 유연한다.
💔 확장성이 쉽지 않다.

  • 테이블 구조가 미리 정의 되어 있다보니 단순히 서버를 늘리는것 만으로 확장하기가 쉽지 않고 서버의 성능 자체도 높여야 한다.
  • 서버를 늘려서 분산 저장 하는것도 쉽지 않다.
  • Scale up (서버의 성능을 높이는것)으로 확장성이 됨.


비관계형 데이터베이스(NoSQL)

NoSQL은 'NotSQL' (SQL이 아닌), 혹은 'NotOnlySQL' (SQL만이 아닌)로도 정의된다.
대표적으로 MongoDB, Redis 등이 있다.

💨 NoSQL은 데이터베이스가 구축되기 전에 설계된 테이블과 데이터 스키마가 있는 구조인 기존의 RDBMS(Relational Database Management System)-관계형DBMS에서 기존방식에서 벗어나 변화를 나타내는 데이터베이스에 대한 접근방식이고, NoSQL 데이터베이스는 이러한 구조에 의존하지 않고 보다 유연한 데이터 모델을 사용한다.

💨 RDBMS는 클라우드 및 웹 애플리케이션에서 대규모 데이터베이스 클러스터링이 요구하는 성능, 확장성 및 유연성 요구사항을 충족하지 못하고 있다.

💨 NoSQL은 특히 비정형 데이터를 저장하는 데 유용하다. 일반적인 비정형 데이터 유형으로는 사용자 및 세션 데이터, 채팅, 메시징 및 로그 데이터, IoT 및 장치 데이터와 같은 시계열 데이터, 비디오 및 이미지와 같은 큰 개체 등이 있다.

NoSQL의 종류

기존의 방식인 관계형DBMS를 사용하지 않는 NoSQL에는 특정 요구 사항과 사용 사례를 지원하기 위해 다양한 방식(type)이 존재한다.

💨 Key-value data stores

  • Key-value NoSQL 데이터베이스는 단순성에 초점을 맞추고 있으며, 비 트랜잭션 데이터의 고속 읽기 및 쓰기 처리를 지원하는 애플리케이션을 가속화하는 데 매우 유용하다.
  • 저장된 값은 모든 유형의 이진 객체(텍스트, 비디오, JSON 문서 등)가 될 수 있으며 키를 통해 액세스할 수 있고 값에 저장된 것에 대해 완전한 제어권한을 가지며 가장 유연한 NoSQL 모델이기도 하다.
  • 데이터는 확장성과 가용성을 얻기 위해 클러스터 전체에 걸쳐 분할 및 복제된다. 이 때문에 키 밸류 스토어는 거래(transaction)를 지원하지 않는 경우가 많다. 그러나, 이들은 높은 속도, 비 트랜잭션 데이터를 처리하는 응용 프로그램의 확장에는 매우 효과적이다.

💨 Document stores

  • 문서 데이터베이스는 일반적으로 자체 설명 JSON, XML 및 BSON 문서를 저장한다. 이들은 키 밸류 스토어와 유사하지만, 이 경우 밸류는 특정 키와 관련된 모든 데이터를 저장하는 단일 문서다. 문서에서 인기 있는 필드는 키를 모르는 상태에서 빠른 검색을 위해 색인화할 수 있다. 각 문서는 동일하거나 다른 구조를 가질 수 있다.

💨 Graph stores

  • 그래프 데이터베이스는 그래프 구조를 사용하여 관계를 저장, 매핑 및 쿼리한다. 인덱스를 사용하지 않고 인접한 요소들이 서로 연결되도록 인덱스프리 인접성을 제공한다.

💨 Wide-column stores, Multi-modal databases 등 굉장히 많은 방식이 존재한다.

NoSQL의 Pros & Cons

🧡 테이터 구조를 미리 정의하지 않아도 됨으로 저장하는 데이터의 구조 변화에 유연하다.
🧡 확장하기가 비교적 쉽다. 그냥 서버 수를 늘리면 된다(scale out).
🧡 확장하기가 쉽고 테이터의 구조도 유연하다 보니 방대한 양의 데이터를 저장하는데 유리하다.
🧡 주로 비정형화 데이터 그리고 완전성이 상대적으로 덜 유리한 데이터(ex. 로그 데이터)를 저장하는데 유리하다.

💔 데이터의 완전성이 덜 보장된다.
💔 트랜잭션이 안되거나 비교적 불안정하다.

profile
Work hard, Play hard

0개의 댓글