데이터베이스
RDBMS
ACID-ity. 정해진 스키마에 따라야 함. 테이블 간 조인 기능. 확장에 어려움이 있다.(Vertical Scaling. 서버 내 메모리 등 서버 자체의 성능향상만 가능)
NoSQL
스키마 없음. 관계 없음(No relation). 성능은 끌어올렸지만 일관성 보장 못함. 중복된 데이터를 허용 -> 업데이트 시 전부 업뎃해줘야 함. Horizontal Scaling. 확장성이 뛰어나다. 여러 서버를 추가할 수 있음. key-value / column-based / document
Atomicity : All or nothing. 커밋되거나 롤백하거나
Consistency : 항상 일관되게 처리되어야됨. 1+1 = 3이 되면 안됨
Isolation : 주변 영향없이 단독으로 처리되듯이 작동되어야 함.
Durability : 한번 Commit되면 반드시 디스크에 반영되어야 함.
삽입/삭제/갱신 이상 -> 정규화로 중복 값 줄이며 해결. -> 성능 저하되면 역정규화 (자주 조회되는 범위, 테이블, 조인 -> 중복해서 만듬)
트랜잭션 -> serializable하게 만들어 성능 높임. 병행제어의 필요(locking)
Shared Lock : 읽을 때 Lock을 걸음. write 불가. read는 가능.
Exclusive Lock : 쓸 때 Lock을 걸음. wirte 불가. read 불가
의도잠금 : 특정행에 대해서만 락을 걸면 외부에서 접근 시 테이블 내부에 대해 일일히 락을 검사해야하므로 성능이 저하된다.
테이블 전체에 락을 걸어 성능을 높임.
IS : shared lock 걸린 행이 속한 테이블 전체에 대해 Lock. 읽기 가능. 쓰기 불가능
IX : exclusive lock 걸린 행이 속한 테이블 전체에 대해 Lock. 읽기 불가능. 일부행에 대해서 쓰기 가능
인덱스로 빠른 접근이 가능. 그러나 별도의 용량을 차지하고 insert, delete시 마다 인덱스가 변경됨.
clustered / unclusterd index.
인덱스 : select에는 좋지만 insert/delete/update엔 안좋음
DDL : ALTER, CREATE, DROP, TRUNCATE
DCL : COMMIT, ROLLBACK, GRANT, REVOKE
DML : SELECT, INSERT, DELETE, UPDATE
데이터베이스 Sharding(Partitioning) -> 부하를 분산시키기는게 가능해짐
Horizontal
Vertical : 조인 힘들어짐
Range : 테이블 간 불균형해질 수도.
Hash : resizing시 다시 할당해야 함. consistent hashing으로 부담 최소화.
'DevOps' 카테고리의 다른 글
인성질문 (0) | 2020.11.22 |
---|---|
기타 (0) | 2020.11.21 |
컴퓨터 네트워크 (0) | 2020.11.20 |
운영체제(OS) / 컴퓨터구조 (0) | 2020.11.20 |
자료구조, 알고리즘 (0) | 2020.11.20 |