왜 동네짱은 PostgreSQL에서 MySQL 으로 데이터베이스를 마이그레이션?

이전글

https://mysqlko.wordpress.com/2016/08/05/mysql-vs-postgresql-uber

 

97d37ea1d4a07355a3be45d80001e985
우석고 실질적 짱 : 현상태

Why Uber migrated its databases from Postgres to MySQL?

http://blog.webyog.com/uber-migrated-databases-postgres-mysql

 

Uber 사태?! 에 대한 PostgreSQL 진영!?의 글에 이어서 MySQL 진영?! 글이 올라 왔습니다.

webyog 란?!

SQLyog : MySQL GUI & Admin  과 MONyog : MySQL Monitor 를 만드는 회사입니다. SQLyog Community 버전도 있습니다.

https://www.webyog.com/product/downloads/

PostgreSQL 제한?! 한계?!

  1. Inefficient architecture for writes: A relational database must perform certain key tasks that Postgres were not suited for Uber’s needs.
    • Providing efficient insert/update/delete capabilities
    • Providing capabilities for making schema changes
    • Implementing a MVCC mechanism so that different connections have a transactional view of the data they work with.

  1. 비효율적인 쓰기 구조?! : 우버는 다음과 같은 RDBMS 요건을 필요로 한다. 그러나, PostgreSQL 은…
  • INSERT/UPDATE/DELETE 가 효율적이야 한다. / OLTP 성능이 좋아 한다.
  • 스키마 변경이 되어야 한다. / ALTER 구문이 효율적이야 한다.
  • 서로 다른 연결에 대해서 트랜잭션날 관점에서의 MVCC 메카니즘 구현이 필요하다. / CTID ( OID, RID  동일 ) 값이 물리적 오프셋값(green) 으로 되어 있어서 비효율적이다. CTID 값이 변경시 모든 index 가 변경되어 한다.

With Postgres, the primary index and secondary indexes all point directly to the on-disk tuple offsets. When a tuple location changes, all indexes must be updated.

  • Inefficient data replication: Postgres’ replication required higher bandwidth as compared to MySQL but Postgres replication may not be a problem within a single data center. The real problem with Postgres arises when replication is done between multiple data centers.
  • 비효율적인 데이터 리플리케이션 : PostgreSQL Replication 은 MySQL 대비해서 높은 대역폭(bandwidth) 을 요구하다. 그러나, PostgreSQL Replication 은 데이터센터 내에서는 문제가 되지 않는다. / DC-to-DC 간에는 문제가 될 수 있다?!

  • Issues with table corruption: During one of Uber’s routine master database promotion to increase database capacity, they encountered a Postgres 9.2 bug. This resulted in numerous incorrect timeline switches on replicas that were being undertaken.
  • 테이블 손상 이슈 : 마스터 서버중 하나가 과도한 용량 증가 버그가 PostgreSQL 9.2 에서 있었다. 이 버그는 복제에까지 수많은 영향을 미쳤다. / 마스터서버의 버그가 슬레이브까지 영향을 미쳤다.

  • Poor replica MVCC support: Postgres does not have true replica MVCC support. The fact that replicas apply WAL updates results in having a copy of on-disk data identical to the master at any given point in time.
  • 가난한 리플리카?! MVCC 지원 : PostgreSQL 은 레알 리플리카 MVCC 를 지원하지 않는다. 실제로, 리플리카는 WAL 업데이트가 디스크에 쓰여진 복사본을 가진 시점에서 동일하게 적용된다. / WAL 로그가 디스크에 반영된 후에 복사본을 가지고 이루어지다 보니, 성능이 좋지 않다.

  • Difficulty upgrading to newer releases: With different general available releases of Postgres, it was not possible to replicate the data. Replication records work at the physical level which made it difficult for Uber.
  • 새로운 릴리즈 업그레이드 어려움 : PostgreSQL 은 GA 릴리즈 버전간의 데이터 리플리케이션이 가능하지 않다. 물리적 레벌에서 복제는 우Uber 를 힘들게 했다. / 이중화 구성시 한쪽만 순차적 업그레이드가 불가능하다. downtime 이 불가결하다?!

구글번역기 감사합니다!! ㅠㅠ

이에 반해서 MySQL 은… 생략?!

결국 Uber 가 PostgreSQL 에서 MySQL 로 바꾼 이유는 크게 보면 2가지 입니다.

성능 (Performance)  and 운영, 가용성 ( High Availability, Replication )

예전부터 OLTP : MySQL , OLAP : PostgreSQL 이란 선입견이 일반적이었습니다. 많은 글로벌 서비스가 메인DBMS 를 MySQL 을 채용하고 있는데, 그 이유 중 하나는 글로벌 서비스 자체가 OLTP : high short-request 이기 때문입니다. 거기에, PostgreSQL 이 WAL( Physical Log  ) Replication 을 default 로 하고 있다보니, 그로 인해서 Master-Slave upgrade ( downtime ), Master- Slave incorrect, Replication Performance 등이 뒤따서 이슈가 된 것 같습니다.

결국 Uber 와 같은 글로벌 서비스에서는 운영관리가 편한 자알~ 알려진 Open Source 기반의 OLTP DBMS 가 적합했던 것 같습니다.

PostgreSQL 은 Logical Log Replication 을 지원합니다. 향후에는 default 가 되지 않을까!? 라고 생각됩니다. 그리고, INSERT/UPDATE/DELETE 성능에 대해서는 PostgreSQL 9.x 부터는 성능 이슈에 대해서 EDB 가 크게 기여하고 있기 때문에, 향후 버전업에 따라서 많은 개선이 있으리라 봅니다. 그리고, PostgreSQL 9.6 GA 에는 Parallel Query 가 지원된다면 많은 개선이 되리라 봅니다.

추가적으로, 드루팔 7.x 성능 비교 자료를 보시면 PostgreSQL vs MySQL 성향차이를 이해하는데 도움이 되리라 봅니다.

Comparing PostgreSQL 9.1 vs. MySQL 5.6 using Drupal 7.x

http://posulliv.github.io/2012/06/29/mysql-postgres-bench/

 

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중