[DB/PostgreSQL] 관계형 DB시스템의 비교

류성훈·2022년 7월 13일
0

DB

목록 보기
1/3
post-thumbnail

소개

데이터를 행(row)와 열(column)로 구성하는 관계형 데이터 모델은 DB관리 툴에 있어서 대체를 차지하고 있습니다.
최근 NoSQL과 NewSQL을 포함한 다른 데이터 모델이 있지만 관계형 데이터 베이스 관리 시스템(RDBMS)은 데이터를 저장하고 관리하는 데 있어서 여전히 전 세계적으로 대다수를 차지합니다.

PostgreSQL

Postgre라고도 불리는 PostgreSQL은 "세계에서 가장 진보된 오픈소스 관계형 데이터베이스"라고 자부합니다.
확장성이 뛰어나고 표준을 준수한다는 목표로 만들어 졌습니다.
PostgreSQL은 객체 관계형(object-relational)데이터베이스 입니다. 즉 기본적으로는 관계형 데이터베이스지만 객체 데이터베이스와 연관되는 기능(ex:테이블 상속 및 함수 오버로딩)도 포함하고 있습니다.

PostgreSQL은 동시성(Concurrency)을 특징으로 갖고 있습니다.
동시성은 동시에 여러 작업을 효율적으로 처리할 수 있도록 합니다.
ACID 준수라고도 하는 트랜잭션의 원자성(Atomically), 일관성(Consistency), 격리성(Isolation), 내구성(Durability)을 보장하는 MVCC(Multiversion Concurrency Control) 덕분에 읽기에 대한 잠금 없이 이를 달성할 수 있습니다.

PostgreSQL은 MySQL만큼 널리 사용되지는 않지만 pdAdmin 및 Postbird를 포함하여 PostgreSQL작업을 단순화하도록 설계된 타사 도구 및 라이브러리가 많습니다.

PostgreSQL의 데이터 타입

PostgreSQL은 MySQL과 같이 숫자, 문자열, 날짜와 시간 타입을 지원합니다.
또한 기하학적인 도형, 네트워크 주소, 비트 문자열, 텍스트 검색, JSON항목과 몇 가지 특이한 데이터 타입을 지원하기도 합니다.

1. Numereic 타입

  • bigint: 부호 있는 8바이트 정수
  • bigserial: 자동으로 증가하는 8바이트 정수
  • double precision: 8바이트 double precision 부동 소수점 숫자
  • integer: 부호 있는 4바이트 정수
  • serial: 자동으로 증가하는 4바이트 정수
  • number,decimal: 선택 가능한 precision. 돈의 금액과 같이 정확성이 중요한 경우 사용하도록 권장합니다
  • real: 4바이트 single precision 부동 소수점 숫자
  • smallint: 부호 있는 2바이트 정수
  • smallserial: 자동으로 증가하는 2바이트 정수

2. Character 타입

  • character: 지정된 고정 길이를 가지는 문자열
  • character varying, varchar: 가변이지만 제한된 길이를 갖는 문자열
  • text: 길이에 제한이 없는 문자열

3. Date와 Time 타입

  • date: 일, 월, 년도로 구성된 날짜
  • interval: 시간 간격 범위
  • time, time without time zone: 시간대를 제외한 시간
  • time with time zone: 시간대를 포함한 시간
  • timestamp, timestamp without time zone: 시간대를 제외한 타임스탬프
  • timestamp with time zone: 시간대를 포함한 타임스탬프

4. Geometric 타입

  • box: 평면상의 직사각형 상자
  • circle: 평면상의 원
  • line: 평면상의 무한한 선
  • lseg: 평면상의 선분
  • path: 평면상의 기하학적 경로
  • point: 평면상의 기하학적인 점
  • polygon: 평면상의 닫힌 기하학적 경로

5. Network address 타입

  • cdir: IPv4 또는 IPv6 네트워크 주소
  • inet: IPv4 또는 IPv6 호스트 주소
  • macaddr: MAC(Media Access Control) 주소

6. Bit Search 타입

  • bit: 고정된 길이의 비트 문자열
  • bit varying: 가변 길이의 비트 문자열

7. Text Search 타입

  • tsquery: 텍스트 검색 쿼리
  • tsvector: 텍스트 검색 문서(document)

8. JSON 타입

  • json: 텍스트 JSON 데이터
  • jsonb: 분해된 이진 JSON 데이터

9. 그 외의 타입

  • boolean: True or False (논리값)
  • bytea: "byte array"의 약자. 이 타입은 이진 데이터에 이용된다.
  • money: 통화 금액
  • ph_lsn: 로그 시퀀스 번호
  • txid_snapshot: 사용자 수준의 트랜잭션 ID스냅샷
  • uuid: 보편적인 고유식별자
  • xml: xml데이터

PostreSQL의 장점

표준 SQL을 준수합니다.
SQLite 또는 MySQL보다 PostgreSQL은 표준에 좀 더 가깝게 구현하는 것을 목표로 하고 있습니다.
공식 PostreSQL 문서에 따르면 PostgreSQL은 전체 핵심 SQL:2011 규정에 필요한 179개의 기능 중 160개를 지원하며 긴 목록의 선택적 기능도 지원합니다.

오픈소스 및 커뮤니티가 이끄는 데이터베이스입니다.
완전한 오픈소스 프로젝트인 PostgreSQL의 소스코드는 대규모 헌신적인 커뮤니티에서 개발되었습니다.
Postgres 커뮤니티는 DBMS로 작업하는 방법을 설명하는 공식문서, 위치, 온라인 폴럼을 포함한 수많은 리소스를 유지 관리하고 기여합니다.

확장성이 뛰어납니다.
사용자는 카탈로그 기반 작업과 동적 로드 사용을 통해 PostgreSQL을 프로그래밍 방식으로 즉시 확장할 수 있습니다.
공유 라이브러리와 같은 객체 코드 파일을 지정할 수 있고 PostgreSQL은 필요에 따라 이를 로드합니다.

PostgreSQL의 단점

메모리 성능이 떨어집니다.
모든 새로운 클라이언트 연결에 대해 PostgreSQL은 새로운 프로세스를 포크합니다.
각각의 새로운 프로세스에는 약 10MB의 메모리가 할당되므로 많은 연결이 있는 경우 메모리가 빠르게 증가합니다.
따라서 읽기가 많은 간단한 작업의 경우 PostgreSQL은 일반적으로 MySQL과 같은 RDBMS보다 성능이 떨어집니다.

인기도가 떨어집니다.
최근 몇 년 동안 더 널리 사용되고 있지만 PostgreSQL은 역사적으로 보았을 때 인기 측면에서 MySQL에 뒤쳐집니다. 그 결과 PostgreSQL 데이터베이스를 관리하는 데 도움이 되는 타사 도구가 여전히 적습니다.
마찬가지로 MySQL은 경험이 있는 사람이 많은 것에 비해 PostgreSQL 데이터베이스 관리 경험이 있는 사람들은 많지 않습니다.

PostgreSQL을 사용하면 좋은 경우

데이터 무결성이 중요한 경우 적합합니다.
PostgreSQL은 2001년부터 ACID를 완벽히 준수하고 데이터 일관성이 유지되도록 MVCC를 구현하였습니다.
데이터 무결성이 중요한 경우 RDBMS 중 PostgreSQL을 강력하게 추천합니다.

다른 도구들과 통합되어야 하는 경우에 적합합니다.
PostgreSQL은 다양한 프로그래밍 언어 및 플랫폼과 호환됩니다.
즉 데이터베이스를 다른 운영체제로 마이그레이션 하거나 특정 도구화 통합이 필요한 경우 다른 DBMS보다 PostgreSQL 데이터베이스를 사용하는 것이 더 쉽게 작업할 수 있습니다.

복잡한 작업 연산을 수행하는 경우 적합합니다.
PostgreSQL은 더 빠른 속도로 쿼리에 응답하기 위해 여러 CPU를 활용할 수 있는 쿼리 계획을 지원합니다.
이는 동시에 여러 사용자에 대한 강력한 지원과 결합되며 데이터 웨어하우스 및 온라인 트랜잭션 처리와 같은 복잡한 작업에 적합한 선택이 될 수 있습니다.

PostgreSQL을 사용하면 안 되는 경우

속도에 민감한 경우 적합하지 않습니다.
PostgreSQL은 속도를 희생하며 확장성과 호환성을 염두하고 설계되었습니다.
프로젝트에 가능한 가장 빠른 읽기 작업이 필요한 경우 PostgreSQL은 최선의 선택이 아닐 수도 있습니다.

간단한 설정히 필요한 경우 적합하지 않습니다.
광범위한 기능들과 표준 SQL에 대한 강력한 준수로 인해 PostgreSQL은 간단한 데이터베이스 설정에 대해서도 많은 작업이 필요합니다.
속도가 중요하고 읽기 작업이 많은 경우 일반적으로 MySQL이 더 실용적인 선택이 될 수 있습니다.

간단한 복제 작업을 원하는 경우 적합하지 않습니다.
PostgreSQL은 복제에 대해 강력한 지원을 제공하지만 여전히 비교적 새로운 기능이며 Priary-Priary 구조와 같은 일부 구성만 가능합니다.
복제는 MySQL에서 더 성숙한 기능이며 많은 사용자들이 특히 필요한 데이터베이스 및 싯템 관리 경험이 부족한 사용자들은 MySQL의 복제 지능을 구현하는게 더 쉽다고 생각합니다.

마침

최근 SQLite, MySQL, PostgreSQL은 세계에서 가장 인기 있는 세 가지 오픈소스 관계형 데이터베이스 관리 시스템입니다. 각각 고유한 기능과 한계가 있으며 특정 시나리오에서 최상의 성능을 보입니다. RDBMS를 설정할 때 사용되는 변수는 상당히 많으며 선택은 가장 빠른 것을 선택하거나 가장 많은 기능을 가진 것을 선택하는 것만큼 간단하지는 않습니다. 다음에 관계형 데이터베이스 솔루션이 필요할 때 이 글이 도움이 되었으면 좋겠습니다.

[참고] https://smoh.tistory.com/370 [Simple is Beautiful.:티스토리]

profile
(전)Backend Developer / (현)Data Engineer

0개의 댓글