Siner's Blog


주요 RDBMS의 종류

mysql vs mariadb vs postgresql vs sqlite vs oracle vs mssql

2021/10/11


이전 게시물인 RDBMS의 특징을 보고 오면 좋습니다.

RDBMS DB 엔진 중 유명한 것들을 비교해보고, 특징을 알아보자. 이 게시글을 보는 모두가 데이터베이스를 고르는 과정에 도움이 되었으면 한다.

image

PostgreSQL과 MariaDB의 상승세가 뚜렷하다

image

Oracle

Oracle사에서 제공하는 DBMS. 온프레미스, 클라우드, 하이브리드 클라우드 등의 환경을 제공한다.

오랜 역사와 막강한 영업력으로 데이터베이스 시장 부동의 1위. 기업시장을 위시로 한 오픈소스 데이터베이스를 쓸 수 없는 환경(문제 발생시 책임소재 등의 이유)에서는 대부분 오라클이 쓰인다. 특히 극한의 신뢰성이 요구되는 미션크리티컬 환경은 오라클이 꽉 잡고 있다.

카카오뱅크가 이례적으로 오라클과 함께 오픈소스 DB인 MySQL을 부분적으로 사용한다는 점만으로 화제가 될 만큼 공고한 시장장악력을 가지고 있다.

온라인 게임의 경우 대표적으로 월드 오브 워크래프트가 오라클로 구성되어 있다.

하지만 비싼 가격과 오라클의 갑질 등의 이유로 오라클을 쓰다가 이탈한 고객들도 은근이 많다고 함.

티맥스소프트의 티베로가 이 부분을 노린 제품으로, 자국 버프와 저렴한 가격, 오라클과의 호환성 등의 이유로 공공시장에서 오라클의 자리를 일부 뺏어오는데 성공했다고 한다.

AWS도 메인 DB를 오라클에서 다른 오픈소스 DB로 교체하는 계획을 진행중에 있다.

image

  • 장점
    • 돈내고 쓰는만큼 서포트를 해준다
    • 고성능 트랜잭션 처리를 제공하여 속도가 빠르다
    • 대규모 데이터베이스 지원
    • SQL문을 실행하는 가장 효율적인 방법을 선택한다. 쿼리비용 최소화를 위한 테이블 인덱싱 분석
  • 단점
    • 구동에 고사양의 장비가 필요하다 (메모리 너무 많이 먹어서 컨테이너로 띄울수없다)
    • 비싸다 (특히 클라우드)

MySQL

MySQL의 실질적인 소유주는 오라클이다. 오라클은 자체 상용 DBMS인 오라클 데이터베이스를 가지고 있고, 오픈 소스에 대해 호의적이지 않은데다 프로그램이 갈수록 복잡해지고 있어서 MySQL 사용자들 사이에서도 불안감이 커지고 있다. 그래서 오픈 소스 진영에서 MySQL을 모태로 MariaDB라는 DBMS를 만들었다. 리눅스 배포판 중 페도라와 오픈수세는 MySQL을 버리고 MariaDB를 장착했다. 애플은 OS X 서버 버전에서 MySQL을 버리고 PostgreSQL을 채용했다.

  • 인수 히스토리

    1. 1995년 설립된 MySQL AB에서 개발되었다
    2. 2008년 썬마이크로시스템즈에 의해 인수되었다
    3. 2010년 오라클에 의해 인수되었다 (이 시점에 mariaDB와 갈라지게 되었다)
  • 특징

    • top n개의 레코드를 가지고 오는 케이스에 특화되어있다
    • 웹 애플리케이션으로서의 MySQL의 인기는 PHP의 인기도와 맞물려있다.
    • 복잡한 알고리즘은 가급적 지원하지 않는다
    • 간단한 처리속도를 향상시키는 것을 추구한다
    • 정확함
  • 장점

    • 오픈소스로 무료 사용이 가능하다
    • 오픈소스이다?
  • 단점

    • 문자열 비교에서 대소문자를 구분하지 않는다
    • nested loop join만 지원한다
      • 바깥 테이블의 처리 범위를 하나씩 접근하면서 추출된 값으로 안쪽 테이블을 조인하는 방식
      • 중첩 루프문과 동일한 원리
      • 좁은 범위에 유리하다
      • 순차적으로 처리한다
    • 과거의 치명적 문제

MSSQL

  • 특징
    • 관대함
  • 장점
    • 엔터프라이즈 급 관리 소프트웨어
    • 우수한 데이터 복구 지원
  • 단점
    • 비싸다
    • windows 기반 서버에서만 실행되도록 설계되어있다.

MySQL vs MSSQL

image image

  • ODBC

image

  • 장점
    • 다양한 DBMS를 동일한 인터페이스로 접근 가능
  • 단점
    • 실제 내부 구현이 DBMS마다 서로 다르다
    • mysql: multi-thread safe하지 않음 : setlocale()를 사용 안한다는 옵션을 설정해야 multi-thread를 사용 가능함
  • 문자열

image

  • 16진수 상수

MSSQL에서는 integer로 제대로 반환해주었지만, MYSQL에서는 string으로 판단했음

image

image

  • 1000배정도 느리다고 함

PostgrSQL

  • 특징
    • 다양한 join 방법을 제공한다
      • nested loop join, hash join, sort merge join
    • update시 과거 행을 삭제하고 변경된 데이터를 가진 새로운 행을 추가하는 형태라서 update 성능이 좋지 않다
    • 처리속도를 빠르게 하기 위해 여러 cpu를 활용하여 쿼리를 실행한다
    • 데이터베이스 클러스터 백업 기능을 제공한다
    • 동시성 제공을 위한 MVCC를 제공한다
      • MVCC (Multi-Version Concurrency Control)
    • 데이터 무결성을 보장하기 위한 WAL을 제공한다
    • hot backup + wal replay를 통해 원하는 시점 복구가 가능하다

image

  • 강력한 db admin인 pgAdmin

SQLite

SQLite란?

SQLite는 self-contained, serverless, zero-configuration, transactional한 SQL 데이터베이스 엔진입니다. SQLite는 오픈소스이고, 유명한 프로젝트에서 많이 사용되고 있습니다.

SQLite의 코드는 international team이 풀타임으로 서포트하고 있고, 원한다면 professional support도 가능합니다. SQLite 프로젝트는 2000년 5월 9일에 시작되었고, 2050년까지 지원하는 것을 목표로 하고 있습니다.

  • C언어로 구현되어있다. (현재 3.35.5버전까지 릴리즈 되어있다.)

  • 지원기능

  • Transaction https://gywn.net/2013/08/let-me-intorduce-sqlite/

    • Journal Mode
    • WAL Mode
  • 장점

    • 파일을 통째로 복사하면 백업이 끝난다.
    • 설정이 필요없다.
    • 빠르다.
    • 작다.
    • db file은 크로스플랫폼을 지원하여 32-bit와 64-bit 시스템 또는, big endian과 little-endian 아키텍처 사이에서 자유롭게 copy and paste를 통해 오갈 수 있음.
    • 라이브러리의 모든 기능을 포함하더라도 600KB 미만으로 매우 경량화되어있음. 적은 메모리 환경에서도 좋은 성능을 보이고, 사용법에 따라 file I/O보다 더 빠를 수도 있음.
    • 임베디드 데이터베이스 엔진이므로, 별도의 서버가 필요없어서 모바일 기기 등 많은곳에서 사용된다.
  • 단점

    • 한명의 사용자만 동시 접근이 가능함. 멀티유저를 지원하려면 프록시 레이어가 필요함.
    • 복잡하거나 큰 데이터의 보관이 적절치 않음.
    • 유니코드만 사용 가능
    • SQL Parser가 성능저하의 원인이 됨.
    • 룩업테이블의 경우, 다른 데이터베이스는 해시탐색 알고리즘을 사용하여 O(1)이지만, SQLite는 R-Tree를 사용하여 O(log n) 수준임.
    • 룩업 테이블 전체가 메모리에 올라가있는 반면, SQLite는 FileIO 기반이므로 성능을 대폭 저하시킴. → Batch Job에 적절하지 않음.
    • 경량화의 이유로 편의기능은 부족하다.
  • SQLite Backup API

mariaDB

오라클 소유의 현재 불확실한 MySQL의 라이선스 상태에 반발하여 만들어짐.

5.5버전까지는 MySQL의 모든 기능을 포함하고 있었으나, 이후의 개발판에서는 10.x로 버전을 변경하여 MySQL과 궤를 달리하여 MariaDB의 색깔을 분명히 하고자 했다.

→ MySQL의 명령어를 사용하는 mariaDB는 반쪽짜리...

MariaDB는 GPL v2 라이선스를 따르는 순수한 오픈소스 프로젝트이기에 오라클로부터 자유롭다.

MariaDB 커뮤니티는 MySQL과 비교해 애플리케이션 부분 속도가 약 4~5천배 정도 빠르며, MySQL이 가지고 있는 모든 제품의 기능을 완벽히 구현하면서도 성능 면에서는 최고 70%의 향상을 보이고 있다고 주장한다.

  • 특징
    • backup
      • MariaBackup
        • Percona XtraBackup의 fork본으로 10.1.23이상 버전에 포함되어있음
      • mysqldump
        • 논리적 백업을 수행. 가장 flexible한 방법이며, 데이터 크기가 상대적으로 작은 경우에 적합함
        • 데이터가 클 경우, 백업 파일이 클 수 있고, 복원 시간이 길어질 수 있음
        • mysqlhotcopy (deprecated)
        • XtraBackup (10.1버전 또는 그 이후부터는 Mariabackup 사용을 권장)
          • 빠르게 hot backup을 수행할 수 있음
        • Filesystem snapshot
          • snapshot중에는 테이블이 lock됨
        • LVM
          • Perl 스크립트를 사용
  • 다양한 스토리지 엔진
    • XtraDB - 오라클 InnoDB를 대체하기 위해 만들어진 InnoDB 파생 포크 프로젝트
    • Aria - MyISAM 파생 엔진 대체용
    • SphinxSE - 5.2이상에서 지원, Full-Text Searching이 필요할때 사용 가능.
    • Cassandra - 10.0에서 포함되어, nosql 저장엔진을 끌어들이려 함
    • FederatedX - MySQL Federated 파생 엔진, 트랜잭션 제공
    • OQGRAPH - 5.2이상에서 지원
    • TokuDB - 다른 엔진보다 압축률이 높음

MySQL vs mariaDB

퍼포먼스 성능 비교

공통점과 차이점

아무튼 mariaDB가 좋음

결론

image