MySQL 과 PostgreSQL

바다·2024년 9월 9일
3

DataBase

목록 보기
6/6
post-thumbnail

MySQL 과 PostgreSQL 비교하기

나는 몰랐는데, PostgreSQL의 인기가 점점 더 많아지고 있는 추세이기도 하고
내가 MySQL 말고는 다른 RDMS를 사용해 본 적이 없어서, 이번 기회에 MySQL과 PostgreSQL을 비교해보려고 한다



유사점

  • PostgreSQL과 MySQL 모두 관계형 데이터베이스 관리 시스템
    • 공통 열 값을 통해 서로 관련된 테이블에 데이터를 저장한다
  • 둘 다 SQL을 인터페이스로 사용해서 데이터를 읽고, 편집이 가능하다
  • 둘 다 오픈소스이며, 강력한 개발자 커뮤니티 지원을 제공한다
  • 두 제품 모두 데이터 백업, 복제 및 엑세스 제어 기능이 내장되어 있다

주요 차이점

PostgreSQL과 MySQL은 개념적으로는 유사하지만, 구현하기 전에 고려해야 할 많은 차이점이 있다

ACID 규정 준수

ACID
Atomicity - 원자성
Cnsistency - 일관성
Isolation - 격리성
Durability - 지속성

MySQL은 InnoDB 및 NDB 클러스터 스토리지 엔진 또는 소프트웨어 모듈과 함께 사용하는 경우에만 ACID 규정 준수를 제공하지만, PostGreSQL은 모든 구성에서 ACID와 완벽하게 호환된다.


동시성 제어

다중 버전 동시성 제어(MVCC)는 레코드의 중복 사본을 생성하여 동일한 데이터를 병렬로 안전하게 읽고 업데이터하는 고급 데이터베이스 기능이다. MVCC를 사용하면 여러 사용자가 데이터 무결성을 해치지 않고, 동일한 데이터를 동시에 읽고 수정할 수 있다.

MySQL은 롤백세그먼트, 언두세그먼트 방식으로 MVCC를 구현한다. 이는 데이터를 replace 한 후에 별도 저장소에 변경 전의 데이터를 보관하여 활용하는 방식이다.

PostgreSQL은 Perssimistic Lock을 사용하는 MGA(Multi Generation Architecture)로 MVCC를 구현하고 있으며, 이는 데이터를 replace하지 않고, 같은 영역에 추가로 보관한 후에 활용하는 방식이다.

인덱스

MySQL은 B-트리 및 R-트리 인덱싱을 지원하며,

PostgreSQL은 트리, 표현식 인덱스, 부분 인덱스 및 해시 인덱스를 지원한다.


데이터 유형

MySQL은 순수한 관계형 데이터베이스이지만, PostgreSQL은 객체 관계형 데이터베이스이다.

PostgreSQL은 데이터를 속성을 가진 객체로 저장할 수 있고, 객체는 상위-하위 관계와 상속과 같은 패러다임은 지원한다.


보기

MySQL은 일반적인 보기를 지원하는 반면, PostgreSQL은 고급 보기 옵션을 제공한다.

특정 기간 동안의 주문 합계 금액과 같은 일부 값을 미리 계산하여 구체화된 뷰를 생성할 수 있다.


저장 프로시저

저장 프로시저 : 미리 작성하고 저장할 수 있는 SQL 쿼리 또는 코드 명령문

MySQL, PostgreSQL 모두 저장 프로시저를 지원하지만, PostgreSQL은 SQL 이외의 언어로 작성된 저장 프로시저도 호출할 수 있다.


트리거

데이터베이스 관리 시스템에서 관련 이벤트가 발생하면 자동으로 실행되는 저장 프로시저

MySQL은 데이터베이스에서는 SQL INSERT, UPDATE, DELETE 문에 AFTER 및 BEFORE 트리거만 사용할 수 있다.

PostgreSQL은 INSTEAD OF 트리거를 지원하기 때문에 함수를 사용하여 복잡한 SQL문을 실행할 수 있다.



선택 가이드

성능 요구사항

읽기 성능 : MySQL이 더 빠름

쓰기 성능 : PostgreSQL이 더 빠름

애플리케이션에 잦은 데이터 업데이트가 필요한 경우 PostgreSQL이 더 나은 선택, 그러나 데이터를 자주 읽어야 하는 경우에는 MySQL을 사용하는 것이 나음.


애플리케이션 범위

MySQL : 프로토타입을 만들거나, 사용자 수가 적은 내부 애플리케이션을 만들거나, 읽기 횟수가 많고 데이터 업데이트가 자주 이루어지지 않는 정보 스토리지 엔진을 만들고 싶다면

PostgreSQL : 쓰기 작업이 빈번하고 쿼리가 복잡한 엔터프라이즈급 애플리케이션


데이터베이스 개발 경험

MySQL : 초보자에게 적합하며 학습 기간이 짧음

PostgreSQL : 초보자에게 어려울 수 있음 / 복잡한 인프라 설정 및 문제 해결 경험이 필요



표로 정리해보기

카테고리MySQLPostgreSQL
데이터베이스순수 관계형 데이터베이스 관리 시스템객체 관계형 데이터베이스 관리 시스템
기능보기, 트리거 및 프로시저와 같은 데이터베이스 기능을 제한적으로 지원구체화된 뷰, INSTEAD OF 트리거, 여러 언어의 저장 프로시저와 같은 최고급 데이터베이스 기능을 지원
데이터 유형숫자, 문자, 날짜 및 시간, 공간, JSON 데이터 유형을 지원기하학, 열거형, 네트워크 주소, 배열, 범위, XML, hstore, 복합을 포함하여 모든 MySQL 데이터 유형을 지원
ACID 규정 준수InnoDB 및 NDB 클러스터 스토리지 엔진에서만 ACID를 준수항상 ACID와 호환
인덱스B-트리 및 R-트리 인덱스트리와 함께 표현식 인덱스, 부분 인덱스, 해시 인덱스와 같은 여러 인덱스 유형 지원
성능높은 빈도의 읽기 작업 성능 개선높은 빈도의 쓰기 작업 성능을 개선
초보자 지원시작하기가 더 쉬움시작하기가 더 복잡


마지막으로

PostgreSQL과 MySQL의 차이점을 정리하다 보니, 왜 이전에 진행했던 EZPZ 프로젝트에서 배치 작업을 수행할 때 최적화가 쉽지 않았는지 알 수 있었다 😂 미리 알아보고, 준비했다면 MySQL이 아닌 PostgreSQL을 사용해보았을 텐데 아쉽다! 나중에 더 복잡한 쿼리를 다루거나 대용량 데이터를 다루어야 할 때 PostgreSQL을 사용해보아야겠다 :)

참고한 글

profile
ᴘʜɪʟɪᴘᴘɪᴀɴs 3:14

0개의 댓글