티스토리 뷰
| 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
- Object-relational database
 - 복잡한 데이터 타입, 프로퍼티 상속 가능 (ORDB기 때문에) 
- 이게 오히려 더 복잡성을 가져 올 수도 있다
 
 - ACID를 만족하는 하나의 storage engine이 있다.
 - 매 연결마다 하나의 프로세스를 생성하기 때문에 유저가 많으면 많은 메모리를 요구하게 된다.
 - 견고하고 materialized-view1를 제공하기 때문에 복잡한 쿼리에서 좋은 성능을 낸다.
 - SQL이 아닌 프로그래밍 언어로 프로시져를 작성할 수 있다
 
 - 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 기능을 제공한다
 - offload2 report, Geographic 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
									
							
								
								- 창업
 - GitHub
 - user-agent
 - QUIC
 - thetextbook
 - web_server
 - HTTP/2
 - inflearn
 - 덕타이핑
 - go
 - http
 - docker-compose
 - Network
 - database
 - direnv
 - Python
 - MSA
 - Isolate level
 - Git
 - 프리온보딩
 - no-op
 - 위코드
 - buildkit
 - Complier
 - cka
 - pytest
 - k8s
 - 원티드
 - HTTP/3
 - gitignore
 
| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
									글 보관함