티스토리 뷰
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
- 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 report, 2Geographic 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
링크
TAG
- 위코드
- Isolate level
- HTTP/3
- cka
- 창업
- buildkit
- inflearn
- 원티드
- 덕타이핑
- gitignore
- user-agent
- thetextbook
- docker-compose
- Git
- Complier
- pytest
- GitHub
- MSA
- go
- direnv
- web_server
- database
- HTTP/2
- QUIC
- 프리온보딩
- k8s
- Network
- Python
- http
- no-op
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함