유사점
- 둘 다 구조화된 쿼리 언어를 인터페이스로 사용하여 데이터를 읽고 편집 가능
- 둘 다 오픈 소스이며 강력한 개발자 커뮤니티 지원 제공
- 두 제품 모두 데이터 백업, 복제 및 액세스 제어 기능이 내장되어 있음
차이점
ACID 규정 준수
- MySQL : InnoDB 및 NDB 클러스터 스토리지 엔진 또는 소프트웨어 모듈과 함께 사용하는 경우에만 ACID 규정 준수를 제공합니다.
- PostgreSQL : 모든 구성에서 ACID와 완벽하게 호환됩니다.
동시성 제어
다중 버전 동시성 제어(MVCC)는 레코드의 중복 사본을 생성하여 동일한 데이터를 병렬로 안전하게 읽고 업데이트하는 고급 데이터베이스 기능 → 여러 사용자가 데이터 무결성을 손상시키지 않고 동일한 데이터를 동시에 읽고 수정할 수 있음
- MySQL : MVCC 제공 X
- PostgreSQL : MVCC 제공 O
인덱스
- MySQL : 계층적으로 인덱싱된 데이터를 저장하는 B-트리 및 R-트리 인덱싱을 지원
- PostgreSQL : 트리, 표현식 인덱스, 부분 인덱스 및 해시 인덱스가 포함됨 → 크기를 확장할 때 데이터베이스 성능 요구 사항을 세밀하게 조정할 수 있는 더 많은 옵션이 있음
데이터 유형
- MySQL : 순수 관계형 데이터베이스
- PostgreSQL : 객체 관계형 데이터베이스 → 데이터를 속성을 가진 객체로 저장할 수 있음 (상위 - 하위 관계 및 상속과 같은 페러다임을 지원함)
뷰
- MySQL : 뷰 지원
- PostgreSQL : 고급 뷰 옵션 제공 → 특정 기간 동안의 모든 주문 합계 금액과 같은 일부 값을 미리 계산하여 구체화된 뷰를 생성 가능 (복잡한 쿼리의 데이터베이스 성능을 향상시킴)
저장 프로시저
미리작성하고 저장할 수 있는 구조화된 쿼리 언어 또는 코드 명령어 → 동일한 코드를 반복해서 재사용 가능함으로 데이터베이스 관리 작업이 더 효율적임
- MySQL : 저장 프로시저 지원
- PostgreSQL : SQL 이외의 언어로 작성된 저장 프로시저를 호출 가능
트리거
데이터베이스 관리 시스템에서 관련 이벤트가 발생할 때 자동으로 실행되는 저장 프로시저
- MySQL : SQL INSERT, UPDATE 및 DELETE 문에 AFTER 및 BEFORE 트리거만 사용 가능
- PostgreSQL : INSTEAD OF 트리거를 지원하므로 함수를 사용하여 복잡한 SQL 문을 실행할 수 있습니다.
동작
- MySQL : 멀티 스레드 기반으로 동작 → 동시에 많은 연결을 처리할 수 있다는 장점
- PostgreSQL : 멀티 프로세스로 동작 → 각 연결이 독립된 메모리 공간을 가지고 동작하기 때문에 보다 안정적인 데이터 처리가 가능
선택 기준
애플리케이션 범위
- PostgreSQL은 쓰기 작업이 빈번하고 쿼리가 복잡한 엔터프라이즈급 애플리케이션에 더 적합
- MySQL은 읽기 횟수가 많고 데이터 업데이트가 자주 이루어지지 않는 정보 스토리지 엔진을 만들 때나, 사용자 수가 적은 내부 애플리케이션에 더 적합
성능 요구사항
- PostgreSQL : 잦은 데이터 업데이트 필요한 경우 적합
- MySQL : 잦은 데이터 읽는 경우 적합
쓰기 성능
- MySQL은 쓰기 잠금을 사용하여 실제 동시성 구현, PostgreSQL은 MVCC지원으로 쓰기 작업이 빈번하고 동시에 수행되는 경우 더 잘 작동
읽기 성능
- PostgreSQL은 데이터베이스에 연결된 모든 사용자에 대해 상당한 메모리 할당량(약 10MB)을 포함하는 새로운 시스템 프로세스를 생성 → 여러 사용자를 위해 확장하려면 메모리 집약적 리소스 필요
- MySQL은 여러 사용자를 위해 단일 프로세스를 사용 → 주로 데이터를 읽고 사용자에게 표시하는 애플리케이션에서 PostgreSQL보다 성능이 더 뛰어남
나의 생각
PostgreSQL은 공간 데이터 처리, 복잡한 쿼리 최적화 같은 기능을 필요로 하는 애플리케이션에 더 적합함. (지리 정보 시스템(GIS) 애플리케이션, 금융 데이터 분석 플랫폼 등) 그러나 읽기 성능에서는 MySQL보다 상대적으로 좋지 않음. 따라서 요구사항에 따라 데이터베이스를 선택해야 할 것 같음.
PostgreSQL 적용 조건
- 요구사항이 복잡
- 쓰기 연산이 빈번하게 발생
- 특정 요구사항에 따른 최적화된 기능을 보유 (지리 좌표, 트랜잭션 관리, 데이터 보안)
- 다양한 기능들로 각 요구사항을 최적화를 할 수 있다면 PostgreSQL을 선택
MySQL 적용 조건
- 읽기 연산이 빈번하게 발생
- 소규모, 중규모 프로젝트에 적용
- 빠른 성능, 사용의 용이성
- Real Mysql 8.0을 읽으며 해당 기술에 좀 더 깊게 공부할 수 있음
참조
PostgreSQL과 MySQL 비교 - 관계형 데이터베이스 관리 시스템(RDBMS) 간의 차이점 - AWS
MySQL과 PostgreSQL의 차이점 및 선택 가이드