티스토리 뷰

Development

MySQL vs PostgreSQL

신잼 2022. 4. 8. 00:28

 

Architecture ORDBMS, multi-process(연결마다 프로세스 생성) RDBMS, single-process(연결마다 쓰레드 생성)
Data types supported Numeric, date/time, character, boolean, enumerated, geometric, network address, JSON, XML, HSTORE, arrays, ranges, composite Details Numeric, date/time, character, spatial, JSON Details
Indexes supported B-tree, hash, GiST, SP-GiST, GIN, and BRIN 기본적으로 B-tree;특정 데이터 타입에 R-tree, hash, inverted index 사용
Performance 읽기와 쓰기가 많은 어플리케이션에 적합 읽기가 많은 어플리케이션에 적합
Security 접근 관리, multi encryped connection 옵션 Details 접근 관리, encryped connection 옵션Details
Support Community support Community support, vender-provided

Architecture

  • PostgreSQL
    • Object-relational database
    • 복잡한 데이터 타입, 프로퍼티 상속 가능 (ORDB기 때문에)
      • 이게 오히려 더 복잡성을 가져 올 수도 있다
    • ACID를 만족하는 하나의 storage engine이 있다.
    • 매 연결마다 하나의 프로세스를 생성하기 때문에 유저가 많으면 많은 메모리를 요구하게 된다.
    • 견고하고 materialized-view[각주:1]를 제공하기 때문에 복잡한 쿼리에서 좋은 성능을 낸다.
    • SQL이 아닌 프로그래밍 언어로 프로시져를 작성할 수 있다
  • MySQL
    • relational database
    • 상황에따라 16개의 다른 storage engine을 선택할 수 있다. (default는 InnoDB)
    • 매 연결마다 thread를 생성하기 때문에 enterprise 서비스까지는 아닐때 적합

Data types

  • Postgres가 더 많은 데이터 타입을 제공한다
  • 유니크한 데이터 타입이나 unstructed 데이터를 다뤄야 하면 Postgers가 적합
  • 단순이 character나 numeric 데이터만 다룬다면 MySQL, Postgres 둘다 적합

Security

  • 둘 다 user와 group에 역할 권한을 부여 할 수 있다
  • Postgres는 PAM과 Kerberos를 사용하여 유저 인증
  • MySQL는 PAM, native window service와 LDAP를 사용한 유저 인증을 지원

Support and documentation

  • Postgres는 회사에서 개발하지 않았기 때문에 지원 엔지니어가 부족하지만 커뮤니티 지원 포럼은 매우 좋음
  • MySQL은 유사한 포럼과 오라클에서 구입할 수 있는 유료 지원 플랜을 제공

MySQL 사용 이유

  • Master-Slave Replication, Scale-Out 기능을 제공한다
  • offload[각주:2] report, Geographic Data Distribution 지원 
  • MyISAM storage engine을 사용하면 대부분의 일기전용의 어플리케이션에서 매우 작은 오버헤드 발생
  • 빈번하게 사용되는 테이블에 대한 Memory storage engine을 지원
  • 반복적으로 사용되는 구문에 대한 query cache
  • 쉽게 레퍼런스를 찾을 수 있고 도움 받을 수 있음

특징

  • 많이 사용되는 언어와 미들웨어를 사용하는 다양한 플랫폼과 호환
  • MVCC(Multi-version concurrency control) 지원
  • ANSI SQL 표준 준수
  • 로그 및 트리거 기반 replication SSL 허용
  • 객체 지향과 ANSI-SQL2008 호환
  • 독립적인 모듈료 Multi-layered design 구현 가능
  • 커널 쓰레드를 사용한 완전한 multi-threaded
  • 쿼리 분석 및 공간 분석을 위한 기능 제공
  • 5천만 행 이상의 많은 데이터 처리 가능
  • UNIX 뿐만아니라 Windows에서 사용 가능

단점

  • system catalog와 관련된 트랜잭선이 ACID하지 않음
  • 서버 충돌이 system catalog를 손상 시킬 수 있음
  • 추가 인증 모듈이 불가능해 중앙에서 계정 관리 어려움
  • role이 불가능해 많은 유저를 관리 하기 어려움
  • Stored procedure가 cache되지 않음
  • 프로시저나 트리거를 위해 사용되는 테이블은 항상 pre-locked 

PostgreSQL 사용 이유

  • Table partitioning, Point in Time Recovery, Transactional DDL 등 유용한 기능 제공
  • PKI 인증시스템에서 3rd party 키 저장소를 사용할 수 있음
  • 오픈 소스기 때문에 무료 사용가능
  • 유저와 Role이 객제 단계에서 할당 가능
  • AES, 3DES 등 암호화 알고리즘 지원

특징

  • Oracle, DB2, SQL Server 등의 일반적인 대체제
  • 주요한 모든 OS에서 실행 가능
  • MVCC 지원
  • 고성능을 위한 넓은 index 지원
  • XML, JSON 등 지원
  • 기술 및 코드에 대한 ANSI SQL 지원
  • 효율적인 데이터 저장을 위한 외래키 지원
  • 유연한 데이터 조회를 위한 테이블 조인 및 뷰 제공
  • 복잡한 프로그램과 트랜잭션을 위한 trigger와 stored 프로시저 
  • 데이터 백업 및 읽기 확장성을 위한 Replication

단점

  • 외부 솔류션들이 높은 학습 곡선 
  • 버전 업그레이드 어려움
  • 쿼리의 결과를 바로 보는데 index가 사용되지 않는다
  • 쿼리실행 계획이 cache되지 않음
  • bulk loading이 CPU bound 

 

  • 트랜잭션ID(XID) Wraparound
  • Failover의 데이터 손실 가능
  • 비효율적인 복제로 인해 하드웨어 문제 발생시 데이터 손실의 확대
  • MVCC의 Garbage 문제
  • Process-Per-Connection이라서 Scale어려움
  • PK 인덱스가 쓸데없는 공간을 차지함
  • Major 버전업시 다운타임을 필요로 함
  • 번거로운 복제 설정
  • Query Planner Hint 제공 안함
  • Block 압축 지원 안함

 

Why PostgreSQL

  • Data types: 필요한 data type을 다 제공한다.(documents, primitives, geometry, structure 등)
  • Data integrity: 제약 조건과 data 추가를 규제함으로 무결성을 보장한다.
  • Performance: read query 병렬화, 강력한 indexing, mvcc 등의 특징으로 성능 향상과 최적화를 가져온다.
  • Disaster Recovery & Reiliability: 정교한 replication 옵션들로 안정성을 제공한다.
  • Extensibility: 다양한 데이터 type을 제공하기 때문에 특정 type으로 인해 제한을 안가져도 된다.
  • Support of non-relational data: 비 관계형 데이터를 지원한다. JSON, XML 등을 지원한다.

 


Reference

반응형

'Development' 카테고리의 다른 글

Database 고르기  (0) 2022.04.07
SOLID/Cohesion/Coupling  (0) 2022.03.19
Network command line  (0) 2022.03.01
k8s 공부 하면서 헷갈렸던 용어 정리  (0) 2022.02.21
docker compose VS docker-compose  (0) 2022.02.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함