일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 공부
- AI
- kotlin spring
- Pinpoint
- 정보처리기사 실기 기출문제
- kotlin coroutine
- Java
- AWS EKS
- aws
- CKA 기출문제
- minikube
- Linux
- kotlin
- IntelliJ
- 기록으로 실력을 쌓자
- mysql 튜닝
- kotlin querydsl
- 정보처리기사실기 기출문제
- Spring
- 오블완
- 코틀린 코루틴의 정석
- 정보처리기사 실기
- Kubernetes
- Elasticsearch
- CKA
- PETERICA
- 티스토리챌린지
- APM
- CloudWatch
- MySQL
- Today
- Total
피터의 개발이야기
MySQL과 PostgreSQL의 차이점 본문
ㅁ 들어가며
PostgreSQL과 MySQL의 차이점을 알아보았다. 아래의 글들을 읽고 정리해보았다.
ㅇ AWS - MySQL과 PostgreSQL의 차이점은 무엇인가요?
ㅇ 우아한형제들 - Aurora MySQL vs Aurora PostgreSQL
ㅁ DBMS 랭킹
PostresSQL의 인기는 날로 높아지고 있는 추세이다.
ㅁ PostgreSQL VS MsSQL 비교
카테고리 | MySQL | PostgreSQL |
데이터베이스 기술 | 순수 관계형 DBMS | 객체 관계형 DBMS |
기능 | 보기, 트리거 및 프로시저와 같은 DB 기능을 제한적으로 지원 | 구체화된 뷰, INSTEAD OF 트리거, 여러 언어의 저장 프로시저와 같은 최고급 데이터베이스 기능을 지원 |
데이터유형 | 숫자, 문자, 날짜 및 시간, 공간, JSON | 기하학, 열거형, 네트워크 주소, 배열, 범위,XML, hstore, 복합 |
ACID 규정 | MySQL은 InnoDB 및 NDB 클러스터 스토리지 엔진에서만 ACID를 준수합니다. | PostgreSQL은 항상 ACID와 호환됩니다. |
인덱스 | B-트리 및 R-트리 인덱스를 지원 | 트리와 함께 표현식 인덱스, 부분 인덱스, 해시 인덱스와 같은 여러 인덱스 유형을 지원 |
성능 | 높은 빈도의 읽기 작업 성능을 개선 | 높은 빈도의 쓰기 작업 성능을 개선 |
초보자 지원 | MySQL은 시작하기가 더 쉽습니다. 기술 지식이 없는 사용자를 위한 광범위한 도구 세트가 있음 | PostgreSQL은 시작하기가 더 복잡합니다. 기술 지식이 없는 사용자를 위한 제한된 도구 세트가 있다. |
ㅁ 유사점
ㅇ PostgreSQL과 MySQL은 모두 관계형 데이터베이스 관리 시스템이으로 공통 열 값을 통해 서로 관련된 테이블에 데이터를 저장
ㅇ 구조화된 SQL를 인터페이스로 사용하여 데이터를 관리
ㅇ 오픈 소스, 강력한 개발자 커뮤니티 지원
ㅇ 데이터 백업, 복제 및 액세스 제어 기능이 내장됨
ㅁ 차이점
ㅇ ACID
원자성, 일관성, 격리성, 지속성(ACID)은 예상치 못한 오류가 발생한 후에도 데이터베이스를 유효한 상태로 유지하는 데이터베이스 속성이다. MySQL은 InnoDB 및 NDB 클러스터 스토리지 엔진 또는 소프트웨어 모듈과 함께 사용하는 경우에만 ACID 규정 준수하고 PostgreSQL은 모든 구성에서 ACID와 완벽하게 호환된다.
ㅇ 동시성 제어
PostgreSQL만 지원하는 다중 버전 동시성 제어(MVCC)는 레코드의 중복 사본을 생성하여 동일한 데이터를 병렬로 안전하게 읽고 업데이트하는 고급 데이터베이스 기능이다. MVCC를 사용하면 여러 사용자가 데이터 무결성을 손상시키지 않고 동일한 데이터를 동시에 읽고 수정할 수 있다.
ㅇ 인덱스
PostgreSQL은 트리, 표현식 인덱스, 부분 인덱스 및 해시 인덱스를 제공하여 DB 성능을 세밀하게 조정할 수 있는 많은 옵션을 제공
ㅇ 데이터 유형
PostgreSQL은 Java와 같은 객체지향적 프로그래밍 언어의 일발적인 데이터 속성을 가진 객체로 저장하여 상위-하위 관계 및 상속과 같은 패러다임을 제공한다.
ㅇ View
PostgreSQL은 고급 View 옵션을 제공하여 통계성 데이터를 미리 계산하여 구체화된 뷰로 생성할 수 있다. 일부 통계 작업을 뷰를 통해 구체화할 수 있다.
ㅇ 저장 프로시저
MySQL과 PostgreSQL 모두 저장 프로시저를 지원하지만 PostgreSQL을 사용하면 SQL 이외의 언어로 작성된 저장 프로시저를 호출할 수 있다.
ㅇ 트리거
- MySQL는 INSERT, UPDATE 및 DELETE 문에 AFTER 및 BEFORE 트리거를 설정하여 사용자가 데이터를 수정하기 전후로 프로시저가 자동으로 실행된다.
- PostgreSQL은 INSTEAD OF 트리거를 지원하므로 함수를 사용하여 복잡한 SQL 문을 실행할 수 있다.
ㅁ PostgreSQL과 MySQL 중 선택방법
ㅇ 프로세스 차이로 인한 쓰기 읽기 성능차이
- 쓰기 작업
MySQL은 단일 프로세스로 쓰기 잠금을 사용하여 실제 동시성을 구현한다. PostgreSQL에는 읽기-쓰기 잠금이 없는 다중 버전 동시성 제어(MVCC)기능이 내장되어 있어, 쓰기 작업을 병렬로 처리가 가능하다.
- 읽기 성능
PostgreSQL은 사용자 별로 메모리(약 10MB)를 할당하는 새로운 시스템 프로세스를 생성한다. 여러 사용자를 위해 확장하려면 메모리 집약적 리소스가 필요하다. 반면 MySQL은 여러 사용자를 위해 단일 프로세스를 사용합니다.
MySQL 데이터베이스는 주로 데이터를 읽고 사용자에게 표시하는 애플리케이션에서 PostgreSQL보다 성능이 뛰어나다.
ㅇ 성능 요구 사항
다중 버전 동시성 제어(MVCC)를 제공하는 PostgreSQL은 쓰기 작업이 빈번하고 쿼리가 복잡한 엔터프라이즈급 애플리케이션에 더 적합하다. 사용자 수가 적고, 읽기 횟수가 많아 데이터 업데이트가 자주 이루어지지 않는다면 MySQL가 적합하다.
ㅇ 데이터베이스 개발 경험
MySQL은 독립형으로 설정하기 쉬워 초보자에게 접근성이 높다. PostgreSQL은 일반적으로 복잡한 인프라 설정 및 문제 해결 경험이 필요하다.
ㅁ 마무리
다양한 서비스를 운영하면서 데이터가 누적되면 통계나 정산이 대량 데이터로 인해 배치 수행 속도가 느려질 때가 많다. 그간 MySQL을 많이 사용하였는데, 쿼리를 튜닝하였지만 드라마틱한 개선점을 얻기는 힘들었다. MySQL의 멀티쓰레드 환경과 제한된 join 방식(5.7의 제한적인 Nested loop Join)으로 데이터가 증가할 때 MySQL의 성능은 떨어지게 한다. 이러한 MySQL의 한계점을 보안하고자 개발자 친화적인 PostgreSQL은 분명한 장점을 가지고 있다. 병렬처리가 가능하고 성능개선을 위한 고급오셥을 제공하는 PostgreSQL은 앞으로 더 인기가 높아질 것이다.
ㅁ 함께 보면 좋은 사이트
'Database > MySQL' 카테고리의 다른 글
[MySQL] 중복체크를 위한 Count vs Limit vs Exists (0) | 2024.06.30 |
---|---|
[MySQL] MySQL과 Java의 SSL 연결 방법 (0) | 2024.06.17 |
MySQL 콘솔 접속 방법 (0) | 2024.01.18 |
[MySQL] Mysql Docker 설치, 8.0 (0) | 2023.08.22 |
[MySQL] DB 용량 확인, 테이블별 용량 확인 (3) | 2023.08.18 |