DBMS 종류와 특징 및 장단점 정리

김주환·2024년 3월 11일
0
post-thumbnail

Oracle

  • 특징
    • 대용량의 데이터 관리를 지원
    • 물리적으로 상이한 다른 컴퓨터에 있는 데이터베이스를 논리적 데이터베이스로 결합이 가능
    • 다른 OS로 이동해도 작동이 가능해 이식성이 높음
  • 장점
    • 다른 데이터베이스 보다 고성능의 트랜잭션을 처리

      고성능을 낼 수 있는 이유

      • 옵티마이저를 활용하여 쿼리 실행 계획을 최적화
        • 옵티마이저란 쿼리를 분석하고 실행 계획을 생성하는 엔진
      • 쿼리를 분석하고 쿼리를 실행할 때 발생하는 비용(CPU, I/O)에 따른 계획을 생성하여 가장 비용이 적은 계획을 선택
      • 인덱스를 사용하여 데이터의 검색 속도 향상
      • 자주 엑세스 되는 데이터를 메모리에 캐싱하여 디스크 엑세스를 줄이고 버퍼 캐시를 통해 변경된 데이터를 일시적으로 메모리에 보관하여 디스크에 대한 입출력을 줄임
    • Multiple Database 튜닝이 가능 하며 다수의 사용자가 동시에 접근 가능
    • 높은 가용성을 보장

      높은 가용성을 보장하는 이유

      • 실시간 백업 및 복구 기능을 제공하여 데이터 손실을 최소화 하고 신속하게 복원할 수 있음
      • Oracle Data Guard는 데이터베이스의 높은 가용성을 제공하는 솔루션 중 하나입니다. 이는 주 데이터베이스와 이를 보조하는 스탠바이 데이터베이스 간에 데이터를 동기화하여, 주 데이터베이스에 장애가 발생한 경우 스탠바이 데이터베이스로 즉시 전환하여 서비스 중단을 최소화
      • Oracle RAC은 여러 노드 간에 데이터베이스를 공유하여 고가용성과 확장성을 제공합니다. 이를 통해 시스템 장애가 발생해도 사용자는 다른 노드에서 서비스를 계속 받을 수 있음
  • 단점
    • 기능이 많고 안정성이 높은 대신 상당히 비싼 비용이 들어감
    • 많은 기능들이 있지만 이로 인해 관리 및 구성이 복잡할 수 있음
    • DBMS를 운영하기 위해 많은 하드웨어의 지원이 필요함

MySQL

  • 특징
    • 오픈소스 DBMS로 상용 목적으로 사용하지 않으면 비용이 발생하지 않음
    • MySQL 서버는 다른 DBMS에 비해 작고 빠르며 설치가 간단함
    • 읽기 전용 쿼리를 처리하는데 빠른 속도를 보임
    • 여러 스토리지 엔진을 지원하기 때문에 사용자의 요구에 맞게 엔진을 선택할 수 있음

      스토리지 엔진 종류

      • InnoDB
        • 가장 많이 사용되는 엔진으로 ACID 트랜잭션을 지원하며 뛰어난 성능과 장애 복구 기능을 가진 대표적인 엔진
        • 결재 정보와 같이 무결성을 가져야 하고 손실이 되면 안되는 중요한 데이터를 필요로 할 때 사용
        • 자동 데드락 감지, 외래키 지원, 자동화 장애 복구등을 지원
      • MyISAM
        • full-text인덱싱, 압축, 공간 (Geographic Information System, GIS, 지리정보시스템) 함수 등을 지원하지만 트랜잭션을 지원하지 않기 때문에 에 InnoDB보다 심플하고 기본적으로 빠르지만 동시성 제어가 어려움
        • Read 쿼리가 많은 DW 환경에서 많이 사용된다.
      • Memory
        • 메모리에 데이터를 저장하는 엔진으로 트랜잭션을 지원하지 않고 테이블 레벨 락을 사용
        • 메모리를 사용하기 때문에 기본적으로 속도가 아주 빠르지만 데이터를 잃어버릴 위험이 있기 때문에 빠른 처리가 필요한 임시 테이블로 많이 사용
          ex) 주기적으로 집계되는 데이터의 결과 캐싱용
      • Archive
        • 아주 빠르게 INSERT 쿼리를 처리할 수 있는 엔진으로 데이터 쓰기를 버퍼링하고 각 행이 삽입될 때마다 zlib으로 압축
        • Index를 지원하지 않으며 INSERT/REPLACE/SELECT 쿼리와 같이 데이터를 삽입하거나 읽는 것은 가능하지만 DELETE/UPDATE와 같이 데이터를 삭제하거나 수정할 수 없음
        • transaction을 지원하지 않고 row-level locking을 사용하며 주로 많은 양의 로그성 데이터를 저장하고 읽는데 주로 사용
  • 장점
    • 오픈소스이기 때문에 상용 목적이 아니면 비용이 발생하지 않음
    • 구조가 간단하고 가볍기 때문에 사용이 쉬움
    • 다양한 운영체제에서 사용할 수 있음
    • 보안 수준이 높음
  • 단점
    • 복잡한 쿼리에서 성능이 저하됨
    • 대용량 데이터 조회 시 성능 저하가 발생

Postgresql

  • 특징
    • 오픈소스로 라이센스 비용이 들지 않음
    • 관계형과 객체 지향 기능을 결합한 ORDBMS(Object - Oriented Database Management System)으로 구조화된 데이터 유형과 복잡한 데이터 유형을 모두 관리
    • 사용자 정의 함수 및 저장 프로시저를 지원하며 C, C++, Java 등과 같은 다른 프로그래밍 언어로 만든 사용자 정의 함수를 통합할 수 있음
  • 장점
    • 복잡한 쿼리와 대규모 서비스에 특화됨
    • ANSI SQL 표준을 준수
      • 전체 179 항목 중 170항목인 약 95%의 표준 SQL 지원
    • 다양한 데이터 유형을 지원
      • 배열, jsonb, json 형식으로 저장 가능
    • 다중 버전 동시성 제어(Multi-Version Concurrency Control) 지원

      다중 버전 동시성 제어란?

      • 갱신 / 변경된 데이터를 이전 데이터와 버전을 달리해 버전을 관리하고 이를 기반으로 일관성을 유지
      • 버전 데이터가 계속 쌓인다는 단점이 있지만 일반적인 RDBMS보다 빠르게 작동한다는 장점이 있음
      • 버전 데이터는
    • 관계형과 객체 지향 기능을 결합한 ORDBMS
      • 객체 지향 프로그래밍과 유사한 방식으로 데이터를 모델링
      • 데이터베이스 내의 요소들(테이블, 행 등)을 객체로 취급하고 이들 사이의 관계를 객체 간의 관계로 표현
      • 테이블간의 상속을 지원하여 하나의 테이블이 다른 테이블의 속성과 기능을 상속 받을 수 있음
  • 단점
    • Update 성능이 떨어짐
      • update를 진행하게 되면 delete한 후 insert하는 방식으로 진행됨
      • 그렇기 때문에 update가 진행되면 인덱스 정보도 다시 업데이트가 되어야 하기 때문에 성능이 떨어짐
    • 메모리 성능이 떨어짐
      • 새로운 클라이언트를 연결 할 때 마다 새로운 프로세스를 fork 하기 때문에 메모리 성능이 떨어짐
  • 사용이유
    • 데이터 무결성: 데이터 무결성을 엄격하게 유지하여 신뢰성 향상
    • 데이터 복잡성 처리 : 복잡한 데이터 모델과 쿼리 처리에 적합
    • 비용 절감 : 오픈 소스로 비용이 없음
    • 확장성과 고가용성 : 대규모 어플리케이션과 클러스터 지원
    • 고급기능 : 고급기능, 사용자 정의 함수, 프로시저, 트리거, 전문검색 사용 가능

MS SQL

  • 특징
    • Microsoft에서 개발한 관계형 데이터베이스 관리 시스템으로 주로 Window 환경에 최적화되어 있음
    • 오라클 보다 가격이 저렴함
  • 장점
    • .NET Framework와 연동하여 데이터 베이스와의 상호작용이 용이
    • Microsoft에서 개발하고 유지보수 하기 때문에 풍부한 지원 및 커뮤니티를 제공
  • 단점
    • Window환경에서만 동작
      • Linux도 지원되는 부분이 있지만 거의 Window에서만 사용할 수 있음
    • 라이센스 비용이 들어감

참고

https://nomadlee.com/mysql-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80-%EC%97%94%EC%A7%84-%EC%A2%85%EB%A5%98-%EB%B0%8F-%ED%8A%B9%EC%A7%95/
https://velog.io/@onejaejae/DB-MVCC
https://daniel6364.tistory.com/entry/PostgreSQL-RDBMS
https://www.integrate.io/ko/blog/postgresql-vs-mysql-which-one-is-better-for-your-use-case-ko/

profile
머리로 이해한것을 적으며 기록하자!

0개의 댓글