1.데이터베이스의 종류
데이터베이스란
사용자나 프로그램에서 사용하기 위해 저장 및 관리하는 데이터 집합이다.
데이터베이스의 특징
실시간 접근 : 데이터베이스에 언제든지 접근해 필요한 처리를 할 수 있다.
동시 공유 : 여러 사용자가 데이터베이스에 접근할 수 있다.
지속적 변화 : 데이터의 갱신, 삽입, 삭제 등을 통해 계속해서 변화한다.
내용 기반 참조 : 데이터의 값을 이용해 데이터에 접근할 수 있다
데이터베이스의 개념적 요소
- 개체(entity, 엔터티) : 데이터로 표현하려는 대상을 의미하며, 하나 이상의 속성으로 구성한다.
- 속성(attribute, 애트리뷰트) : 개체의 특성과 상태를 나타내며, 데이터베이스를 구성하는 가장 작은 논리적 단위이다.
- 관계(relationship) : 개체 간에 어떤 관련이 있는지를 나타내며, 주로 동사로 표현한다.
스키마(schema)
데이터의 구조와 표현 방식, 제약 조건을 정의
- 외부 스키마(사용자 관점) :
- 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의
- 개념 스키마(통합 관점) :
- 데이터베이스의 전체적인 논리적 구조
- 모든 응용 프로그램이나 사용자들이 필요로 하는 데이터를 종합한 조직 전체의 데이터베이스, 하나만 존재
- 내부 스키마(물리적 관점) :
- 물리적 저장장치의 입장에서 본 데이터베이스 구조
- 실제로 저장될 레코드의 형식, 저장 데이터의 항목 표현 방법, 내부 레코드의 물리적 순서 등
데이터 설계 3단계
개념적 설계 :
- 현실 세계에 대한 인식을 추상적으로 표현하는 과정.
- 개념 스키마 모델링과 트랜잭션 모델링 병행 수행
- 요구 조건 명세를 E-R 다이어그램으로 작성
- 현실 세계에 대한 인식을 추상적으로 표현하는 과정.
논리적 설계 :
- 목표 DBMS에 맞는 논리 스키마 설계, 트랜잭션 인터페이스 설계.
- 현실 세계에서 발생하는 자료를 특정 DBMS가 지원하는 논리적 자료 구조로 변환(mapping)시키는 과정
- 개념 세계의 데이터를 필드로 기술된 데이터 타입과 이 데이터 타입들 간의 관계로 표현되는 논리적 구조의 데이터로 모델화
- 개념 스키마를 평가 및 정제하고, DBMS에 따라 서로 다른 논리적 스키마를 설계하는 단계
- 시스템으로 구축하고자 하는 업무에 대해 식별자를 도출하고 Key, 속성, 관계 등을 정확하게 표현, 정규화를 수행하여 데이터 모델의 독립성과 재사용성 확보, 논리 데이터 모델은 데이터 모델링 완료 상태. 재 사용성이 높음
물리적 설계 :
- 목표 DBMS에 맞는 물리적 구조의 데이터로 변환.
- 논리적 설계에서 논리적 구조로 표현된 데이터를 물리적 구조의 데이터로 변환하는 과정
- 데이터베이스 파일의 저장 구조 및 액세스 경로를 결정
- 실제로 데이터베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계. DB를 구축함
관계형 데이터베이스
릴레이션(Relation)은 데이터들을 표(Table)의 형태로 표현한 것. 구조를 나타내는 릴레이션 스키마와 실제 값들인 릴레이션 인스턴스로 구성
릴레이션(relation) : 관계형 데이터베이스에서 데이터의 개념적 모델
릴레이션 스키마 : 속성들의 집합
릴레이션 인스턴스
- 데이터 개체를 구성하고 있는 속성들에 데이터 타입이 정의되어 구체적인 데이터 값을 가진 것
- 튜플들의 집합
테이블(table) : 릴레이션을 실제로 구현한 개체
테이블은 키와 값으로 이루어진 2차원 형태로, 행과 열로 구성된다.
- 행(row) = 튜플(tuple) = 레코드(record) :
- 속성의 모임
- 레코드와 같은 의미
- 튜플의 수 = 카디널리티, 기수, 대응수 (튜카 기대)
- 열(column) = 필드(field)
- 이름과 타입을 가진 데이터의 속성(attribute)
- 속성(attribute)
- 데이터베이스를 구성하는 가장 작은 논리적 단위
- 데이터 항목 또는 데이터 필드
- 개체의 특성
- 디그리 또는 차수 (차DA)
- 데이터베이스를 구성하는 가장 작은 논리적 단위
- 행(row) = 튜플(tuple) = 레코드(record) :
NoSQL(Not Only SQL) 데이터베이스
비관계형으로 보다 유연한 형태의 데이터베이스
주요 특징
- 비관계형 데이터 모델:
- NoSQL 데이터베이스는 전통적인 테이블 구조의 관계형 데이터 모델을 사용하지 않고, 보다 유연한 데이터 구조를 제공합니다. 데이터는 문서, 키-값 쌍, 그래프, 열 패밀리 등 다양한 형태로 저장될 수 있습니다.
- 수평적 확장성:
- NoSQL 데이터베이스는 대규모 데이터를 처리하기 위해 수평적 확장(스케일 아웃)을 지원합니다. 이는 서버를 추가하여 성능을 확장하는 방식으로, 대규모 데이터와 높은 처리량을 효과적으로 관리할 수 있습니다.
- 유연한 스키마:
- NoSQL 데이터베이스는 고정된 스키마를 요구하지 않으며, 데이터 구조가 동적으로 변할 수 있습니다. 이로 인해 데이터 구조의 변경이 자주 발생하는 애플리케이션에서 유연하게 대응할 수 있습니다.
- 고성능:
- NoSQL은 대용량 데이터 처리와 빠른 읽기/쓰기 성능에 최적화되어 있습니다. 이는 특히 빅데이터 처리, 실시간 분석, 소셜 네트워킹 애플리케이션 등에 적합합니다.
NoSQL의 한계
- 데이터 일관성 문제:
- 대부분의 NoSQL 데이터베이스는 일관성(Consistency)보다 가용성(Availability)과 분할 허용성(Partition Tolerance)을 우선시합니다. 이로 인해, 데이터 일관성을 보장하는 데 어려움이 있을 수 있습니다.
- 제한된 쿼리 기능:
- NoSQL 데이터베이스는 SQL의 복잡한 쿼리 기능을 지원하지 않을 수 있으며, 관계형 데이터베이스에서 제공하는 조인, 트랜잭션 등의 기능이 제한적일 수 있습니다.
- 성숙도:
- 일부 NoSQL 기술은 아직 성숙 단계에 이르지 않아, 기능적 한계나 성능 이슈가 발생할 수 있습니다.
- 관리 복잡성:
- NoSQL 데이터베이스는 관계형 데이터베이스에 비해 관리와 유지보수가 복잡할 수 있으며, 분산 시스템에서의 운영 경험이 필요할 수 있습니다.
NoSQL 데이터베이스 유형
- 문서형 데이터베이스 (Document-Oriented Database)
- 특징: JSON, BSON 또는 XML 형식의 문서를 기본 단위로 데이터를 저장합니다. 각 문서는 고유한 구조를 가지며, 문서 내에서 여러 데이터를 계층적으로 포함할 수 있습니다.
- 예시: MongoDB, Couchbase
- 장점: 유연한 데이터 모델링, 복잡한 데이터 구조를 간단하게 표현 가능
- 키-값 스토어 (Key-Value Store)
- 특징: 데이터는 키-값 쌍으로 저장됩니다. 각 키는 고유하며, 키에 대응하는 값은 어떤 형태든 가능하다.
- 예시: Redis, DynamoDB, Riak
- 장점: 빠른 데이터 접근, 간단한 모델, 높은 성능
- 단점: 키를 통해 특정 값을 지정하기에 키를 이용해 값 전체를 검색할 수 있지만 값의 일부를 검색하거나 값의 내용을 이용한 질의는 할 수 없고 별도의 처리 필요
- 열 지향 데이터베이스 (Column-Family Store)
- 특징: 데이터를 행(row) 대신 열(column) 단위로 구분하여, 데이터를 그룹화한 컬럼 패밀리와 키의 쌍으로 데이터를 저장한다. 컬럼 패밀리는 관련 있는 컬럼 값들이 모여서 구성된다. 행마다 컬럼 패밀리를 다르게 설정 가능하다.
- 예시: Apache Cassandra, HBase
- 장점: 대규모 분산 데이터베이스에 적합, 특정 열에 대한 빠른 조회 가능
- 그래프 데이터베이스 (Graph Database)
- 특징: 노드와 엣지로 이루어진 그래프 구조로, 노드에 데이터를 저장하고 간선으로 데이터 간의 관계를 표현한다. 관계를 일급 객체로 취급하여, 복잡한 관계 데이터를 효율적으로 관리합니다.
- 예시: Neo4j, ArangoDB
- 장점: 관계가 중요한 애플리케이션(예: 소셜 네트워크, 추천 시스템)에서 매우 효과적
NoSQL의 사용 사례
- 빅데이터 애플리케이션:
- 대량의 비정형 데이터를 실시간으로 처리해야 하는 애플리케이션에서 사용됩니다. 예를 들어, 로그 수집, 분석 시스템, 소셜 미디어 분석 등이 있습니다.
- 콘텐츠 관리 시스템(CMS):
- 구조화되지 않은 데이터, 예를 들어 블로그 포스트, 문서, 이미지 등을 관리하는 시스템에서 유용합니다.
- 실시간 데이터 처리:
- 실시간으로 대규모 데이터를 처리하고, 높은 처리량을 요구하는 환경에서 사용됩니다. 예를 들어, 온라인 게임, 금융 거래 시스템 등이 있습니다.
- 소셜 네트워크:
- 관계 데이터가 중요한 소셜 네트워크 애플리케이션에서 그래프 데이터베이스가 효과적으로 사용됩니다.
RDBMS vs NoSQL
RDBMS 장단점
- 장점
- 명확하게 정의 된 스키마, 데이터 무결성 보장
- 관계를 통해 각 데이터를 중복 없이 한 번만 저장
- 단점
- 덜 유연함, 데이터 스키마를 사전에 계획하고 알려야함(나중에 수정이 힘듦)
- 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어질 수 있다
- 대체로 수직적 확장만 가능
NoSQL 장단점
장점
- 스키마가 없어서 유연하다. 언제든지 저장된 데이터를 조정하고 새로운 필드 추가 가능
- 데이터는 애플리케이션이 필요로 하는 형식으로 저장됨. 데이터 읽어오는 속도 빨라짐
- 수직 및 수평 확장이 가능해서 애플리케이션이 발생시키는 모든 읽기/쓰기 요청 처리 가능
단점
- 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있음
- 데이터 중복을 계속 업데이트 해야 함
- 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 함 (SQL에서는 중복 데이터가 없으므로 한번만 수행이 가능)
수직적 확장과 수평적 확장
- 수직적 확장 : 단순히 데이터베이스 서버의 성능을 향상시키는 것 (ex. CPU 업그레이드)
- 수평적 확장 : 더 많은 서버가 추가되고 데이터베이스가 전체적으로 분산됨을 의미 (하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동)
데이터가 저장되는 방식 때문에 RDBMS는 일반적으로 수직 확장만을 지원한다. 수평 확장은 NoSQL 데이터베이스에서만 가능하다.
RDBMS 사용이 더 좋을 때
- 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우( NoSQL에서는 여러 컬렉션을 모두 수정해야 하기 때문에 비효율적)
- 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우
NoSQL 데이터베이스 사용이 더 좋을 때
- 정확한 데이터 구조를 알 수 없거나 변경/확장 될 수 있는 경우
- 읽기를 자주 하지만, 데이터 변경은 자주 없는 경우
- 데이터베이스를 수평으로 확장해야 하는 경우 (막대한 양의 데이터를 다뤄야 하는 경우)
Reference
'CS > DB' 카테고리의 다른 글
2. 관계형 데이터베이스 (0) | 2024.08.17 |
---|---|
인덱스 (0) | 2021.12.28 |
정규화 (0) | 2021.12.28 |
스프링 트랜잭션과 트랜잭션 전파 (0) | 2021.12.28 |
트랜잭션 격리수준 (0) | 2021.12.28 |