관계형 데이터베이스&NoSQL

Hallelujah·2024년 11월 19일

CS

목록 보기
4/10

관계형 데이터베이스

  • 데이터베이스: 행과 열을 가지는 표 형식의 데이터를 저장하는 형태의 데이터베이스(SQL이라는 언어를 사용하여 조작)
  • 예시) MySQL, PostgreSQL, Oracle, SQL Server, MSSQL, 등등

MySQL

  • MySQL: 대부분의 운영체제와 호환되고 가장 많이 쓰인다 자료
  • C,C++로 만들어짐
  • MyISAM 인덱스 압축기술(MyISAM은 스토리지 엔진이다)
  • B-트리 기반의 인덱스
  • 스레드 기반의 메모리 할당 시스템
  • 빠른 조인
  • 최대 64개의 인덱스 제공
  • 대용량 데이터베이스에 좋음
  • 그 외에 롤백, 커밋, 이중암호지원보안 등등
  • MySQL의 아키텍처(사진 구리다... 책 보셈용)
  1. 클라이언트 계층 (Top Layer)
  • 애플리케이션 및 클라이언트: 사용자가 MySQL 데이터베이스에 연결하는 다양한 방식(API)을 제공합니다.
  • 연결 인터페이스: JDBC, ODBC, MySQL Native Connectors 등을 사용해 MySQL 서버에 접근합니다.
  1. MySQL 서버 계층 (Middle Layer)
  • MySQL 서버의 핵심 로직과 데이터를 처리하는 주요 컴포넌트를 포함합니다.
  • 쿼리 파서(Query Parser):
    SQL 쿼리를 해석하여 구문을 분석하고, 실행 가능한 계획을 생성합니다.
  • 쿼리 최적화(Query Optimizer):
    쿼리 성능을 향상시키기 위해 최적화된 실행 계획을 선택합니다.
  • 캐시(Query Cache):
    이전에 실행된 쿼리 결과를 저장하여 동일한 요청에 대한 응답 속도를 높입니다.
  • 스토리지 엔진 관리자:
    다양한 스토리지 엔진(InnoDB, MyISAM 등)과의 상호작용을 관리합니다.
  1. 주요 스토리지 엔진
  • InnoDB
    • 특징: MySQL의 기본 스토리지 엔진으로, 트랜잭션을 지원하고 ACID(원자성, 일관성, 고립성, 지속성)를 보장합니다.
    • 장점:
    • 외래 키(Foreign Key)를 지원해 데이터 무결성 보장.
    • 높은 데이터 일관성과 신뢰성을 제공.
    • 사용 사례: 금융 시스템, 전자상거래 플랫폼 등 트랜잭션이 중요한 애플리케이션.
  • MyISAM
    • 특징: 트랜잭션 지원은 없지만, 빠른 읽기 성능 제공.
    • 장점: 간단하고, 읽기 중심 작업에서 매우 빠름.
    • 사용 사례: 읽기 작업이 많은 웹 애플리케이션.
  • Memory
    • 특징: 데이터를 메모리에 저장하여 매우 빠른 데이터 접근 가능.
    • 장점: 속도가 중요한 작업에 적합.
    • 단점: 데이터는 휘발성이며, MySQL 재시작 시 데이터가 소실됨.
    • 사용 사례: 임시 데이터 저장, 캐싱.
  • CSV
    • 특징: 데이터를 CSV(Comma Separated Values) 형식으로 저장.
    • 사용 사례: 데이터 마이그레이션이나 간단한 데이터 교환.
  • NDB Cluster
    • 특징: 고가용성과 분산 처리를 지원하는 클러스터링 엔진.
    • 사용 사례: 대규모 분산 환경에서의 실시간 데이터베이스.
  1. 최종적인 데이터 흐름
  • 클라이언트가 SQL 쿼리를 서버에 요청합니다.
  • 서버 계층에서 쿼리를 파싱하고 최적화합니다.
  • 최적화된 쿼리는 스토리지 엔진을 통해 데이터 파일에 접근하거나 캐시에서 결과를 반환합니다.
  • 클라이언트는 최종 결과를 받습니다.

결론적으로는, 모듈식 아키텍처로 스토리지 엔진을 바꿀 수 있고 데이터 웨어하우징, 트랜잭션처리, 고가용성 처리에 강점이 있다.
또한 커넥터, API를 통해 MySQL 데이터베이스와 쉽게 상호작용할 수 있다.
그리고 쿼리 캐시를 통해 쿼리 문에 대한 결과 집합을 저장해 사용자 작성 쿼리와 캐시에 있는 쿼리가 동일하면 서버는 구문 분석, 최적화 실행을 건너뛰고 캐시의 출력만 표시함.

PostgreSQL

  • JSON을 이용해서 데이터 접근가능

  • 지정 시간에 복구, 로깅, 접근제어, 중첩트랜잭션, 백업, 등이 가능

  • VACUUM(중요하지 않음) -> 디스크조각이 차지하는 영역을 회수하는 기능
    PostgreSQL에서 VACUUM은 데이터베이스의 저장 공간을 정리하고 성능을 유지하기 위해 사용하는 명령입니다. PostgreSQL은 MVCC (다중 버전 동시성 제어) 방식을 사용하기 때문에 데이터 수정이 이루어질 때마다 이전 데이터 버전을 삭제하지 않고 유지합니다. 이로 인해 시간이 지남에 따라 불필요한 공간(즉, 사용되지 않는 데이터)이 쌓이게 됩니다. VACUUM은 이러한 문제를 해결합니다.

    • VACUUM의 주요 목적
      • 불필요한 공간 정리
        • UPDATE 또는 DELETE가 발생한 후에도 물리적인 디스크 공간은 바로 반환되지 않는데, VACUUM이 이를 정리합니다.
        • 테이블 내의 사용되지 않는 데이터(데드 튜플, Dead Tuples)를 삭제하여 디스크 공간을 확보합니다.
      • 테이블 통계 정보 갱신
        • VACUUM은 PostgreSQL이 테이블의 데이터를 효율적으로 검색할 수 있도록 데이터 통계를 갱신합니다.
        • 이는 자동 쿼리 최적화에 도움을 줍니다.
      • 데이터베이스 성능 유지
        • 디스크 공간을 재활용하고 인덱스를 정리하여 테이블과 인덱스 접근 성능을 최적화합니다.
    • VACUUM의 종류
      • VACUUM (일반)
        • 사용되지 않는 공간을 재활용할 수 있도록 정리합니다.
        • 디스크 공간을 바로 반환하지 않으며, 다른 트랜잭션과 동시에 실행할 수 있습니다.
      • VACUUM FULL
        • 테이블의 사용되지 않는 공간을 완전히 반환합니다.
        • 데이터를 새로 정리하여 디스크 공간을 최대한 줄입니다.
        • 단점: 실행 중 테이블이 잠기며, 수행 시간이 길어질 수 있음.
      • AUTOVACUUM (자동 VACUUM)
        • PostgreSQL에서 자동으로 실행되는 VACUUM 프로세스입니다.
        • 관리자가 설정한 기준에 따라 주기적으로 불필요한 데이터를 정리합니다.
        • 대부분의 경우 AUTOVACUUM이 잘 작동하며, 수동 VACUUM 실행이 필요하지 않을 수 있음.

NoSQL

  • NoSQL: SQL을 사용하지 않는 데이터베이스
  • 관계형 데이터베이스가 정형화된 데이터와 엄격한 스키마를 사용하는 것과 달리, NoSQL은 다양한 데이터 구조를 유연하게 처리할 수 있어, 대규모 데이터 및 실시간 데이터 처리에 적합합니다.
  • 예시) MongoDB, redis
  • NoSQL vs. RDBMS

MongoDB

  • Binary JSON형태로 데이터가 저장된다.
  • 와이어드타이거 엔진이 기본 스토리지 엔진으로 장착된 key-value데이터 모델에서 확장된 도큐먼트 기반의 데이터베이스입니다.
  • 확장성이 뛰어납니다.(빅데이터 저장에 좋고 고가용성과 샤딩, 레플리카셋을 지원)
  • 스키마 저장하지 않고 데이터 삽입가능하다.(로깅 구현에 강점이 있고 다양한 도메인의 데이터베이스를 기반으로 분석가능)
  • 도큐먼트 생성시 유니크 값인 ObjectID가 생성됨

redis

  • 인메모리 데이터베이스, key-value-데이터 모델 기반의 데이터베이스
  • 기본적인 데이터 타입은 문자열이다.
  • 셋, 해시 등을 지원한다.
  • 사용예시) pub/sub기능을 통한 채팅 시스템, 캐싱 계층, key-value가 필요한 세션정보 관리, 정렬괸 셋 자료구조를 이용한 실시간 순위표서비스
profile
개발자

0개의 댓글