대용량 처리 이해 21

MongoDB 구조

기본 Database Database Description admin ∙ 인증과 권한부여 역할이다. ∙ 일부 관리 작업을 하려면 admin Database에 대한 접근이 필요하다. local ∙ 모든 mongo instance는 local database를 소유한다. ∙ oplog와 같은 replication 절차에 필요한 정보를 저장한다. ∙ startup_log와 같은 instance 진단 정보를 저장한다. ∙ local database 자체는 복제되지 않는다. config ∙ shared cluster에서 각 shard늬 정보를 저장한다. 배포형식 Standalone 프로세스 하나만 이용해서 띄운 형태 Replica Set 동일한 데이터를 가지고 있는 디비를 여러 개 가지고 있는 형태 한쪽으로 wr..

MongoDB 개요

SQL VS NoSQL 관계형 데이터베이스 장점 데이터 중복 방지 Join 성증 좋음 복잡하고 다양한 쿼리 가능 잘못된 입력을 방지할수있다. 단점 하나의 레코드를 확인하기 위해 여러 테이블을 Join 해야할수있음.( 가시성이 떨어짐) 스키마가 엄격해서 변경에 대한 공수가 크다. 스케일 아웃이 가능하나 어렵다. 전통적으로 스케일 아웃보단 스케일 업 위주로 확장함. 확장할때마다 App단 수정이 필요하다. NoSQL Document Store Key-Value Store Wide-Column Store Graph Store 등등.. Document Store : MongoDB MongoDB 장점 데이터 접근성과 가시성이 좋다. Join없이 조회가능해서 응답속도가 일반적으로 빠르다. 스키마 변경 공수가 적다. ..

동시성 제어

멀티스레드 환경 동시성 이슈가 발생하는 일반적인 패턴 공유자원 조회 다른 트랜잭션이 공유자원 조회 공유자원 갱신 다른 트랜잭션 공유자원 갱신 읭?! 결과가 이상하다?!!?! sequenceDiagram autonumber participant T1 as 트랜잭션1 participant S as 공유자원 participant T2 as 트랜잭션2 T1 ->> S : 공유자원 조회(SELECT) data = 1 T2 ->> S : 공유자원 조회(SELECT) data = 1 T1 ->> S : 공유자원 갱신(UPDATE) data += 1 Note Left Of S: 기대값 : data = 2, 결과값 : data = 2 T2 ->> S : 공유자원 갱신(UPDATE) data += 1 Note Right ..

트랜잭션

ACID Atomicity 원자적 연산을 보장해야 한다. MVCC를 통해서 Consistency 트랜잭션이 종료되었을 때 데이터 무결성이 보장된다. 제약조건을 통해 Isolation 트랜잭션은 서로 간섭하지 않고 독립적으로 동작한다. 많은 성능을 포기해야하므로 개발자가 제어가능 트랜잭션 격리레벨을 통해 Durability 완료된 트랜잭션은 유실되지 않는다. WAL을 통해 MVCC (Multi Version Concurrency Control) Lock걸지 않고 데이터의 읽기 일관성을 보장해주는 내부 기법. Lock : 한 트랜잭션이 Lock을 걸면 Lock가 풀리기 전까지 다른 트랜잭션에서 write를 못하거나 read, write 둘다 못한다. MVCC는 이런 제약의 단점을 보완하기 위해 잠금을 사용하..

CAP이론

CAP이론이란? 네트워크로 연결된 분산 시스템에서 Consistency (일관성), Availability (가용성), Partitions Tolerance (분리 내구성) 이 3가지 속성을 모두 가지는 것은 불가능하다는 이론이다. 2개만 선택해라.. Consistency (일관성) 여기서 말하는 일관성은 결과적 일관성이 아니다. 데이터를 요청할때 언제나 가장 최신의 데이터를 리턴해야 한다. 즉, 각 노드가 동기화되기 전에 반환하는 게 아니고 모두 동기화 후에 반환을 하던가 실패를 하던가. 모든 노드가 같은 시간에 같은 데이터를 보여줘야 한다. Availability (가용성) 어떤 노드에 장애가 생겨도 항상 서비스가 가능해야 한다. DB에 대한 모든 동작은 성공적으로 리턴되어야 한다. Partition..

페이지네이션 최적화

오프셋 기반 페이징시 문제 마지막 페이지를 구하기 위해 전체 개수를 구해야 한다. 오프셋 이전의 데이터를 다시 읽어온다. (불필요한 데이터 조회 발생) 대안 : 커서 기반 페이징 페이지 번호가 아닌 키 번호를 전달받음 전달받은 키 이전의 데이터는 조회하지 않음. 마지막 키 번호를 반납함. 그러나 게시판 형태의 UI구현이 어렵다. 커버링 인덱스 검색 조건이 인덱스에 부합할 때 테이블에 바로 접근 하기보다 인덱스를 통해 접근하는 것이 더 빠르기 때문에 인덱스를 통해서 테이블로 흐른다. 그렇기 때문에 커버링 인덱스는 테이블까지 접근하지 않고 인덱스를 데이터를 내려준다. 예를 들어 나이 id 19 3 27 2 32 1 45 4 -> 인덱스 테이블 id 이름 성별 나이 직업 1 이훈재 남 35 개발자 2 홍길동 ..

정규화

정규화 중복되는 데이터는 반드시 정규화해야 할까? 무조건적인 기계적인 정규화보다는, 정규화는 결국 읽기 비용이 늘고 쓰기 비용이 줄어드는 작업이기 때문에 상황에 맞게 작업해야 함. 고려해야 할 것 얼마나 빠르게 데이터 최신성을 보장해야 하는지 히스토리성 데이터는 오히려 정규화를 하지 않아야 한다 데이터가 많아지면 테이블 참조의 비용이 많아진다. 데이터 변경 주기와 조회 주기는 어떻게 되는지 변경주기가 빈번하면 정규화가 유리하지만, 반대의 경우엔 비정규화가 유리하다. 테이블 탐색 깊이가 얼마나 깊은지 너무 깊이 타고 들어가게 되면 많은 참조가 생기게 되어 조회 시 비용이 많이 들어가게 될 것이고 참조 중간에 비정규화를 하게 되면 가장 깊은 테이블의 데이터를 수정 시 중간에 비정규화 진행한 테이블도 같이 수..

인덱스

인덱스 기본동작 인덱스는 정렬된 자료구조로서 이를 통해 탐색범위를 최소화 한다. 데이터주소 name age 1 홍길동 23 2 이훈재 35 3 임꺽정 33 4 이순신 32 이 테이블에 age를 인덱스로 잡으면 age 데이터주소 23 1 32 4 33 3 35 2 인덱스를 걸어둔 컬럼(age)을 기준으로 정렬한 테이블이 하나 생긴다. 쿼리가 들어오면 인덱스를 먼저 확인한다. 인덱스를 이용한 검색자료구조 HashMap 단건 검색속도 O(1) 범위 검색 속도 O(N) 전방 일치 탐색 불가 ex) like 'AB%' List 정렬되지 않은 리스트 O(N) 정렬된 리스트 O(logN) 정렬되지 않은 리스트의 정렬 시간 복잡도 O(N) ~ O(N * logN) 삽입/ 삭제 비용 매우 높음 Tree 트..

데이터베이스 성능

메모리 / 디스크 비교 메모리 디스크 속도 빠름 느림 영속성 휘발 비휘발 가격 고가 저가 데이터는 결국 디스크에 저장된다. 디스크에 쓰기전에 메모리에 쓴다. 메모리에 쓰는 속도는 빠르기 때문에 데이터 베이스 성능의 핵심은 디스크 I/O를 최소화하는것이다. 그럼 디스크 접근을 줄이는 방법은?? 메모리에 올라운 데이터로 최대한 요청을 처리하자 메모리 캐시 히트율을 높이자 디스크에 쓰기전에 전원 공급이 없으면 휘발하는 메모리에 저장된 데이터가 유실될수도? WAL(Wright Ahead Logging) 사용 WAL : 트랜잭션 발생시 로그에 일단 기입하여 기록을 남기고, 특정 데이터가 쌓이면 이를 flush 해 DB의 disk에 DATA BLOCK 형태로 write하게 된다. 로그로 남기때문에 문제가 생겨도 순..

정규화

정규화 중복되는 데이터는 반드시 정규화 해야할까? 무조건적인 기계적인 정규화보다는 정규화는 결국 읽기 비용이 늘고 쓰기 비용이 줄어드는 작업. 상황에 맞게 작업해야함. 고려해야할 것 얼마나 빠르게 데이터 최신성을 보장해야 하는지 히스토리성 데이터는 오히려 정규화를 하지 않아야 한다 데이터가 많아지면 테이블 참조의 비용이 많아진다. 데이터 변경 주기와 조회 주기는 어떻게 되는지 변경주기가 빈번하면 정규화가 유리하지만, 반대의 경우엔 비정규화가 유리하다. 테이블 탐색 깊이가 얼마나 깊은지 너무 깊이 타고 들어가게 되면 많은 참조가 생기게 되어 조회시 비용이 많이 들어가게될것이고 참조 중간에 비정규화를 하게되면 가장 깊은 테이블의 데이터를 수정시 중간에 비정규화 진행한 테이블도 같이 수정하게 되어 비용이 많이..