DB

MySQL vs PostgreSQL

yn98 2024. 11. 28. 21:05

https://aws.amazon.com/ko/compare/the-difference-between-mysql-vs-postgresql/

 

PostgreSQL과 MySQL 비교 - 관계형 데이터베이스 관리 시스템(RDBMS) 간의 차이점 - AWS

MySQL은 데이터를 행과 열이 있는 테이블로 저장할 수 있는 관계형 데이터베이스 관리 시스템입니다. 많은 웹 애플리케이션, 동적 웹 사이트 및 임베디드 시스템을 지원하는 널리 사용되는 시스

aws.amazon.com

아마존 문서를 보고 정리했다.

 

MySQL과 PostgreSQL의 차이점

MySQL은 데이터를 행과 열이 있는 테이블로 저장할 수 있는 관계형 데이터베이스 관리 시스템이다.

많은 웹 애플리케이션, 동적 웹 사이트 및 임베디드 시스템을 지원하는 널리 사용되는 시스템이다.

 

PostgreSQL은 MySQL보다 더 많은 기능을 제공하는 객체 관계형 데이터베이스 관리 시스템이다.

데이터 유형, 확장성, 동시성 및 데이터 무결성에 있어 유연성이 더 뛰어나다.

 

 

PostgreSQL과 MySQL의 유사점

모두 관계형 데이터베이스 관리 시스템이다.

공통 열 값을 통해 서로 관련된 테이블에 데이터를 저장한다. 예를 들면,

  1. 어떤 회사는 고객 데이터를 customer_id, customer_name, 및 customer_address 열 이름을 포함한 Customer라는 테이블에 저장한다.
  2. 또한 이 회사는 제품 데이터를 product_id, product_name and product_price를 포함한 Products라는 테이블에 저장한다.
  3.  고객이 구매하는 품목을 기록하기 위해 이 회사에는 customer_id and product_id 열을 포함한 Customer_Orders라는 테이블이 있다.

PostgreSQL과 MySQL의 기타 유사점은 다음과 같다.

  • 둘 다 구조화된 쿼리 언어(SQL)를 인터페이스로 사용하여 데이터를 읽고 편집 가능
  • 둘 다 오픈 소스이며 강력한 개발자 커뮤니티 지원 제공
  • 두 제품 모두 데이터 백업, 복제 및 액세스 제어 기능이 내장되어 있음

주요 차이점: PostgreSQL과 MySQL 비교

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

ACID 규정 준수

원자성, 일관성, 격리성, 지속성(ACID)은 예상치 못한 오류가 발생한 후에도 데이터베이스를 유효한 상태로 유지하는 데이터베이스 속성이다. 예를 들어, 많은 수의 행을 업데이트했는데 중간에 시스템이 실패하는 경우 행을 수정해서는 안 된다.

 

MySQL은 InnoDB 및 NDB 클러스터 스토리지 엔진 또는 소프트웨어 모듈과 함께 사용하는 경우에만 ACID 규정 준수를 제공한다.

 

PostgreSQL은 모든 구성에서 ACID와 완벽하게 호환된다.

동시성 제어

다중 버전 동시성 제어(MVCC)는 레코드의 중복 사본을 생성하여 동일한 데이터를 병렬로 안전하게 읽고 업데이트하는 고급 데이터베이스 기능이다.

MVCC를 사용하면 여러 사용자가 데이터 무결성을 손상시키지 않고 동일한 데이터를 동시에 읽고 수정할 수 있다.

 

MySQL 데이터베이스는 MVCC를 제공하지 않지만 PostgreSQL은 이 기능을 지원한다.

인덱스

데이터베이스는 인덱스를 사용하여 데이터를 더 빠르게 검색한다. 자주 액세스하는 데이터를 다른 데이터와 다르게 정렬 및 저장하도록 데이터베이스 관리 시스템을 구성하여 자주 액세스하는 데이터를 인덱싱할 수 있다.

 

MySQL은 계층적으로 인덱싱된 데이터를 저장하는 B-트리 및 R-트리 인덱싱을 지원한다.

PostgreSQL 인덱스 유형에는 트리, 표현식 인덱스, 부분 인덱스 및 해시 인덱스가 포함된다.

 

크기를 확장할 때 데이터베이스 성능 요구 사항을 세밀하게 조정할 수 있는 더 많은 옵션이 있다.

데이터 유형

MySQL은 순수 관계형 데이터베이스이다. 반면 PostgreSQL은 객체 관계형 데이터베이스이다.

 

즉, PostgreSQL에서는 데이터를 속성을 가진 객체로 저장할 수 있다. 객체는 Java 및 .NET과 같은 여러 프로그래밍 언어의 일반적인 데이터 유형이다.

객체는 상위-하위 관계 및 상속과 같은 패러다임을 지원한다.

 

PostgreSQL을 사용하는 것은 데이터베이스 개발자에게 더 직관적이다. PostgreSQL은 배열 및 XML과 같은 다른 추가 데이터 유형도 지원한다.

저장 프로시저

저장 프로시저는 미리 작성하고 저장할 수 있는 구조화된 쿼리 언어(SQL) 쿼리 또는 코드 명령문이다. 동일한 코드를 반복해서 재사용할 수 있으므로 데이터베이스 관리 작업이 더 효율적이다.

MySQL과 PostgreSQL 모두 저장 프로시저를 지원하지만 PostgreSQL을 사용하면 SQL 이외의 언어로 작성된 저장 프로시저를 호출할 수 있다.

트리거

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

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

즉, 사용자가 데이터를 수정하기 전이나 후에 프로시저가 자동으로 실행된다.

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

PostgreSQL과 MySQL 중 하나를 선택하는 방법

두 관계형 데이터베이스 모두 대부분의 사용 사례에 적합하다.  최종 결정을 내리기 전에 다음 요소를 고려할 수 있다.

애플리케이션 범위

PostgreSQL은 쓰기 작업이 빈번하고 쿼리가 복잡한 애플리케이션에 더 적합하다.

 

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

데이터베이스 개발 경험

MySQL은 초보자에게 더 적합하며 학습 기간이 짧다.

새 데이터베이스 프로젝트를 처음부터 빌드하는 데 걸리는 시간이 줄어든다.

MySQL을 독립형 제품으로 설정하거나 LAMP 스택과 같은 다른 웹 개발 기술과 함께 간단히 사용할 수 있다.

반면 초보자에게는 PostgreSQL이 훨씬 더 어려울 수 있다.

일반적으로 복잡한 인프라 설정 및 문제 해결 경험이 필요하기 때문이다.

LAMP 스택 »

성능 요구 사항

애플리케이션에 잦은 데이터 업데이트가 필요한 경우 PostgreSQL이 더 나은 선택이다.

그러나 데이터를 자주 읽어야 하는 경우에는 MySQL을 사용하는 것이 좋다.

쓰기 성능

MySQL은 쓰기 잠금을 사용하여 실제 동시성을 구현한다.

예를 들어 한 사용자가 테이블을 편집하는 경우 다른 사용자가 테이블을 변경하려면 작업이 완료될 때까지 기다려야 할 수 있다.

그러나 PostgreSQL에는 읽기-쓰기 잠금이 없는 다중 버전 동시성 제어(MVCC) 지원이 내장되어 있다.

따라서 쓰기 작업이 빈번하고 동시에 수행되는 경우 PostgreSQL 데이터베이스이가 더 잘 작동한다.

읽기 성능

PostgreSQL은 데이터베이스에 연결된 모든 사용자에 대해 상당한 메모리 할당량(약 10MB)을 포함하는 새로운 시스템 프로세스를 생성한다. 여러 사용자를 위해 확장하려면 메모리 집약적 리소스가 필요하다.

반면 MySQL은 여러 사용자를 위해 단일 프로세스를 사용한다. 따라서 MySQL 데이터베이스는 주로 데이터를 읽고 사용자에게 표시하는 애플리케이션에서 PostgreSQL보다 성능이 뛰어나다.

차이점 요약: PostgreSQL과 MySQL 비교

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