믿을 수 있는 애플리케이션의 조건들

신뢰성

“결함”이 있더라도, 사용자가 예상하는 기능을 “올바르게” 제공해야 함을 의미합니다. 하지만 이러한 결함들이 0 이 될 수는 없는 법이다.
그렇기에 각 결함에 대한 예방과 결함 해소를 위한 훈련 그리고 우발적인 결함을 피하기 위한 규율이 필요하다.

확장성

확장을 위해선 현재 부하의 측정이 가능해야하고, 목표로 하는 처리 성능을 모니터링 해야한다.

유지보수성

애플리케이션은 변한다. 그렇기에 수정할 수 있어야한다.

하지만 복잡하면 수정하기 어렵다. 그렇기에 단순해야한다.

그러니 추상화가 필요하다. 하지만 추상화는 언제나 그렇듯이 더럽게 어렵다. (문과를 나왓어야 했나..)

데이터 모델과 질의 언어

데이터 모델과 이를 사용하는 객체와는 항상 불일치가 있다.

관계형, 문서형 등 다양한 데이터 모델에 대한 논쟁은 예나 지금이나 끊이지 않는다.

하지만 최근 관계형과 문서형의 차이는 점검 줄어들고 있으며, 서로를 상호 보안하는 방향으로 발전하고 있다.

저장소와 탐색

참고 링크

데이터는 수정 사항들이 파일 뒷편에 추가만 되며, 주기적으로 합쳐서 최신 변경사항과 만일 발생하는 문제 상황에 대비한다.

해시 색인

a:1|b:2 와같이 저장되어 있을 때 메모리 상에 a:0번째부터, b:5번째부터와 같이 offset을 저장해두고 빠르게 찾아가는 방식이다.

특징

문제점

SS 테이블

모든 데이터의 키를 저장하는 것이 아닌 정렬된 부분적인 정보만을 저장해두고 짧은 범위에서 검색합니다.

a:1|b:2|c:3|d:4 와같이 저장되어 있을 때 메모리 상에는 a:0번째부터, c:9번째부터 와 같이 저장되어 있고, b를 찾을 때 메모리에있는 ac의 정보를 통해 0 번째 ~ 9 번째 사이에 b가 있다는 것을 알 수 있다.

SS 테이블에서 LSM 트리 만들기

LSM 트리의 기본 개념: 백그라운드에서 SS 테이블을 지속적으로 병합한다.

B 트리

B 트리에 존재하는 키 값 갱신

B 트리에 새로운 키를 추가하기

위의 알고리즘은 트리가 계속 균형을 유지하는 것을 보장하고, n개의 키를 가진 B 트리는 깊이가 항상 O(log n) 이다.

기타 색인 구조

트랜잭선 처리나 분석?

특성 트랜잭션 처리 시스템(OLTP) 분석 시스템(OLAP)
주요 읽기 패턴 질의당 적은 수의 레코드, 키 기준으로 가져옴 많은 레코드에 대한 집계
주요 쓰기 패턴 임의 접근, 사용자 입력을 낮은 지연 시간으로 기록 대규모 불러오기, 이벤트 스트림
주요 사용처 웹 애플리케이션을 통한 최종 사용자 의사결정 지원을 위한 내부 분석가
데이터 표현 데이터의 최신 상태 시간이 지나며 일어난 이벤트 이력
데이터셋 크기 기가바이트에서 테라바이트 테라바이트에서 페타바이트
  사업 운영에 중요  
  높은 가용성, 낮은 지연 시간의 트랜잭션 처리 기대  
병목 디스크 탐색 디스크 대역폭