본문 바로가기

JAVA HTML JAVASCRIPT/DB

Oracle, MySQL, PostgreSQL 차이점

728x90
반응형

면접에서 DB의 차이점을 물어봤는데 진짜 하나도 모르겠었다. 차이점을 생각도 해본 적도 없었다. 그래서 정리해 보기로 했다.

Oracle

성능이 좋고, 기능이 많은데 비싸다.
그래서 나는 사용할 일이 없을 것 같다.

  • 대규모 데이터베이스를 지원한다.
  • 고성능 트랜잭션 처리를 제공하여 속도가 빠르다.
  • SQL문을 실행하는 가장 효율적인 방법을 선택한다. 비용을 최소화하기 위해 테이블과 인덱스를 분석한다.

MySQL

오픈 소스로 무료로 사용 가능하다.

  • top n개의 레코드를 가지고 오는 케이스에 특화되어 있다.
  • update 성능이 postgre보다 우수하다.
  • Nested Loop Join만 지원한다.Nested Loop Join
    바깥 테이블의 처리 범위를 하나씩 접근하면서 추출된 값으로 안쪽 테이블을 조인하는 방식이다.
    • 중첩 루프문과 동일한 원리
    • 좁은 범위에 유리하다.
    • 순차적으로 처리한다.
  • 복잡한 알고리즘은 가급적 지원하지 않는다.
  • 문자열 비교에서 대소 문자를 구분하지 않는다.
  • 간단한 처리 속도를 향상 시키는 것을 추구함

간단한 데이터 트랜잭션을 위한 데이터베이스가 필요한 웹 기반 프로젝트에 널리 사용된다. 로드가 많거나 복잡한 쿼리는 성능이 저하된다.

PostgreSQL

오픈 소스로 무료로 사용 가능하다.

  • 다양한 join 방법을 제공한다.
    - nested loop join, hash join, sort merge join
    - 결합 할 데이터가 많을 때는 hash, sort merge join
    - 데이터가 이미 정렬 되어 있는 경우에는 sort merge
    - 그렇지 않으면 hash join 추천sort merge join
    조인의 대상범위가 넓을 경우 발생하는 Random Access를 줄이기 위한 경우나 연결고리에 마땅한 인덱스가 존재하지 않을 경우 해결하기 위한 조인 방안
    양쪽 테이블의 처리범위를 각자 Access하여 정렬한 결과를 차례로 Scan하면서 연결고리의 조건으로 Merge하는 방식
  • hash join
    해시값을 이용하여 테이블을 조인하는 방식
  • update를 할 때, 과거 행을 삭제하고 변경된 데이터를 가진 새로운 행을 추가하는 형태라서 update가 느리다.
  • 처리 속도를 빠르게 하기 위해 여러 CPU를 활용하여 쿼리를 실행한다.
  • 데이터베이스 클러스터 백업 기능을 제공한다.클러스터 : 디스크로부터 데이터를 읽어오는 시간을 줄이기 위해 자주 사용되는 테이블의 데이터를 디스크의 같은 위치에 저장시키는 방법

읽기, 쓰기 속도가 중요하고 데이터를 검증해야 하는 대규모 시스템에서 널리 사용된다.
빈번한 update 성격일 경우 성능, 불안정 하지만 insert 위주 성격일 경우에는 적합하다.
복잡한 쿼리를 실행해야하는 시스템에서 가장 잘 사용 된다.
동시성을 효율적으로 처리하여 매우 높은 수준의 동시성을 달성한다.

결론

상황에 맞는 DB를 선택하면 된다.

간단한 동작을 구현하는 서비스는 MySQL
복잡한 쿼리를 요구하고, insert 위주의 대규모 서비스인 경우에는 PostgreSQL

728x90
반응형