본문 바로가기

Database General

PostgreSQL vs MySQL - 1. 개요

글을 작성하기 전에

OpenSource RDBMS 시장의 2위 PostgreSQL 과 1위 MySQL을 비교해보겠습니다. 두 DBMS 모두 일반적으로 사용 가능한 DB로 개인적인 용도로 사용한다면 특이사항 없이 사용 가능할 것입니다. 해당 포스팅은 DBA 입장에서 두 DB Operation 시의 차이점과 고려사항들을 시리즈로 정리하기 전 간단한 개요의미의 포스팅입니다.

MySQL과 PostgreSQL은 새로운 버전이 릴리즈됨에 따라 포스팅할 내용들의 개선점이 적용되었을 수 있으므로, 댓글을 통해 정보 공유해주시면 감사하겠습니다.

 

PostgreSQL vs MySQL (OpenSource RDBMS)

대부분의 학부생들이 처음 접할 수 있는 RDBMS는 MySQL일 것이다. 작성자도 가장 유명하고 접하기 쉬운 MySQL을 활용하여 웹을 구현했던 경험이 있다. 

DBA로써는 신규프로젝트 도입 시 PostgreSQL과 MySQL들에 대해 검토한다면 우선적으로 검토해야 할 것은 DBA의 숙련도 일 것이다.

 

PostgreSQL

가장 발전된 오픈소스 관계형 데이터베이스(The most advanced Opensource Database)라는 슬로건을 제시하며 미국, 일본에서 주로 사용되는 관계형 데이터베이스이다. 해당 슬로건을 제시한만큼 다양한 기능들을 포함하고 있다. 우리나라에서는 MySQL보다 사용되는 기업의 수가 적으며, 네카라쿠배 모두 사용하고 있으나 모두 메인 DB로 사용되지는 않는다. MySQL보다 주력으로 사용되는 대기업의 경우 현대,KT 등이 있다. 물론 해당 기업들도 Oracle이나 Tibero가 같은 상용 데이터베이스를 사용하는 경우가 많이 있는 것으로 알고 있다.

 

MySQL이 오라클에 인수된 이후 완전한 오픈소스로는 DBMS 점유율 1위이며 메이저 버전이 매년 신규로 발표되며 MySQL에서 지원하지 않는 다양한 프로그래밍 언어, OS, SQL을 제공한다. PostgreSQL ecosystem은 다양한 extension을 통해 시계열 데이터베이스, 샤딩 등의 기능을 제공할 수 있으며 최대한 많은 기능을 제공하는데 주력한다.

 

MySQL

가장 유명한 오픈소스 관계형 데이터베이스(The most popular Opensource Database))라는 슬로건을 제시하며 세계 어디서든 주로 사용되는 관계형 데이터베이스이다. 해당 슬로건을 제시한만큼 가장 알려져있는 오픈소스 DBMS이며 stackoverflow 글 및 다양한 레퍼런스가 제일 많이 있다. 우리나라에서는 네카라쿠배당토직야 모두 MySQL 기반 데이터베이스를 메인으로 사용하고 있는 것으로 알고 있다. (물론 Aurora MySQL, RDS MySQL, MySQL commnuinity, MySQL percona edition 등 다양한 솔루션을 활용 중)

 

MySQL이 오라클에 인수된 이후 MariaDB와 분리되었으며, MySQL 5.7버전 이후 8.0 버전이 2020년에 배포되었다. 이전 버전에서는 누구나 쉽게 설치할 수 있도록 간단하고, 가벼운 기능들을 포함하였지만 8.0으로 업그레이드 된 이후에 기존에 미흡했던 기능(role, Transactional Data Dictionary, 조인 방식, Json 등등) 을 제공하여 기능적인 부분에 대해서도 개선되었다.

 

결론

두 데이터베이스는 Top 2 OpenSource RDBMS인 만큼 핵심적인 기능들은 모두 제공하고 있음. 그러나 두 가지 중 하나를 선택하는 문제는 간단하지 않음. 추후 해당 포스팅 시리즈를 통해 DBA 입장에서 PostgreSQL과 MySQL의 관리 포인트 차이에 대해 기술할 예정

 

해당 내용을 비교하기 전 간단하게 정의를 내린다면, 대용량 데이터베이스에서 복잡한 쿼리(OLAP)가 유입되는 환경에서는 PostgreSQL을 선택하는 방안을 검토해야 할 것이며 OLAP 보다 실시간성이 더 짙은 OLTP 쿼리가 유입된다면 이해하기 쉬우면서 관리 및 설정의 레퍼런스가 더 많은 MySQL을 사용하는 것을 검토

 

 

 

추후 시리즈로 기술할 PostgreSQL vs MySQL 비교 내용 상세  

출처) https://postgresqltutorial.com/postgresql-tutorial/postgresql-vs-mysql/

 

PostgreSQL vs. MySQL: A Comprehensive Comparison

PostgreSQL vs. MySQL is an important decision when it comes to choosing an open-source relational database management system. Both PostgreSQL and MySQL are time-proven solutions that can compete with enterprise solutions such as Oracle and SQL Server. MySQ

www.postgresqltutorial.com

  PostgreSQL MySQL
Known as The world’s most advanced open source database. The world’s most popular open source database.
Development PostgreSQL is an open source project. MySQL is an open-source product.
Licensing MIT-style license GNU General Public License
Implementation programming language C C/C++
GUI tool PgAdmin MySQL Workbench
ACID Yes Yes
Storage engine Single storage engine Multiple storage engines e.g., InnoDB and MyISAM
Full-text search Yes Yes (Limited)
Drop a temporary table No TEMP or TEMPORARY keyword in DROP TABLE statement Support the TEMP or TEMPORARY keyword in the DROP TABLE statement that allows you to remove the temporary table only.
DROP TABLE Support CASCADE option to drop table’s dependent objects e.g., tables and views. Does not support CASCADE option.
 TRUNCATE TABLE PostgreSQL TRUNCATE TABLE supports more features like CASCADE, RESTART IDENTITY, CONTINUE IDENTITY, transaction-safe, etc. MySQL TRUNCATE TABLE does not support CASCADE and transaction safe i.e,. once data is deleted, it cannot be rolled back.
Auto increment Column  SERIAL  AUTO_INCREMENT
Identity Column Yes No
Analytic functions Yes No
Data types Support many advanced types such as arrayhstore, and user-defined type. SQL-standard types
Unsigned integer No Yes
Boolean type Yes Use TINYINT(1) internally for Boolean
IP address data type Yes No
Set default value for a column Support both constant and function call Must be a constant or CURRENT_TIMESTAMP for TIMESTAMP or DATETIME columns
CTE Yes Yes (Supported CTE since MySQL 8.0)
 EXPLAIN output More detailed Less detailed
Materialized views Yes No
CHECK constraint Yes Yes (Supported since MySQL 8.0.16, Before that MySQL just ignored the CHECK constraint)
Table inheritance Yes No
Programming languages for stored procedures Ruby, Perl, Python, TCL, PL/pgSQL, SQL, JavaScript, etc. SQL:2003 syntax for stored procedures
 FULL OUTER JOIN Yes No
 INTERSECT Yes No
 EXCEPT Yes No
Partial indexes Yes No
Bitmap indexes Yes No
Expression indexes Yes No
Covering indexes Yes (since version 9.2) Yes. MySQL supports covering indexes that allow data to be retrieved by scanning the index alone without touching the table data. This is advantageous in case of large tables with millions of rows.
Triggers Support triggers that can fire on most types of command, except for ones affecting the database globally e.g., roles and tablespaces. Limited to some commands
Partitioning RANGE, LIST RANGE, LIST, HASH, KEY, and composite partitioning using a combination of RANGE or LIST with HASH or KEY subpartitions
Task Schedule pgAgent Scheduled event
Connection Scalability Each new connection is an OS process Each new connection is an OS thread
Pronunciation post gress queue ell my ess queue ell
 

 

(그림 출처 및 참고 자료)

 

https://eh-career.com/engineerhub/entry/2017/09/05/110000/?PK=40870E - 일본 PostgreSQL/MySQL 전문가의 8가지 관점에서의 비교

https://eng.uber.com/postgres-to-mysql-migration/ - 우버가 PostgreSQL에서 MySQL로 변경한 이유

https://www.codementor.io/@goetas/why-i-prefer-postgresql-to-mysql-hikp0wbu6 - 내가 MySQL보다 PostgreSQL을 더 좋아하는 이유

https://behmaster.com/ko/postgresql-vs-mysql-explore-their-12-critical-differences/ - PostgreSQL 대 MySQL: 12가지 중요한 차이점

https://techblog.woowahan.com/6550/ - 우아한형제들 Aurora MySQL vs Aurora PostgreSQL

https://www.youtube.com/watch?v=8YCGo_N6lrI - Inzent eXperDB(PostgreSQL 기반) vs 주요 DBMS