본문 바로가기

Studying/Data System Design

(11)
저장소와 검색 [데이터 중심 애플리케이션 설계 3장] 로그 구조 저장소: 쓰기에 좋은 구조 LSM 트리: SS 테이블을 여러개로 구성된 인덱스 구조 SS 테이블: merge sort 방식으로 순차적으로 쌓인 키를 컴팩션 시 정렬하여 저장 순차적으로 write하기 때문에 속도가 빠르다. 페이지를 사용하지 않아 오버헤드가 적어 압축률이 좋다. 컴팩션 과정이 있기 때문에 성능에 영향을 줄 수가 있다. 페이지 지향 저장소: 읽기에 좋은 구조 B 트리: 고정 크기의 블록이나 페이지로 나누고 한 페이지에서 다음 페이지를 참조한다. B 트리의 쓰기는 디스크 상의 페이지를 덮어쓴다. 이것은 문제 발생 시 위험한 동작으로 WAL(Write-ahead log)를 추가해서 문제 발생 이후에도 복구가 가능하도록 한다. (copy-on-write scheme 방식도 있음) WAL..
데이터 모델 및 질의 언어 [데이터 중심 애플리케이션 설계 2장] 관계형 모델 스키마 변경이 힘들고 실제 데이터와 애플리케이션 과의 차이가 발생하여 임피던스 불일치 발생 최근에는 json등을 지원함 mysql에서는 alter 명령어 수행 시 비용이 큼 다대일과 다대다 관계 관계형 모델에서는 다대다 관계를 일대다 관계로 풀어서 해결한다. 일대다 관계는 문서 모델에서의 트리 구조로 표현 가능 관계형 모델에서는 일대다의 반대인 다대일도 id기반으로 쉽게 해결가능 문서 모델에서는 다대일 관계는 적합하지 않음 (join 필요) NoSQL 문서 데이터베이스 조인이 미흡하다 관계형 DB의 쓰기 스키마와 반대되는 읽기 스키마 지역성 활용 가능 (관계형은 조인을 해야해서 전체 검색이 필요함) 그래프 데이터베이스 다른 데이터베이스와의 차이 다대다 관계에 적합 특정 조건을 찾을 때까지 반..
신뢰성, 확장성, 유지보수성 [데이터 중심 애플리케이션 설계 1장] 신뢰성: 하드웨어나 소프트웨어 결함, 심지어 인적 오류(human error) 같은 역경에 직면하더라도 시스템은 지속적으로 올바르게 동적(원하는 성능 수준에서 정확한 기능을 수행)해야 한다. 올바르게 동작이라는 것은 “무언가 잘못되더라도 지속적으로 올바르게 동작함”을 의미한다. 잘못될 수 있는 일은 결함(fault)라고 부른다. 결함에 대처할 수 있는 시스템을 내결함성(fault-tolerant) 또는 탄력성(resilient)를 지녔다고 말한다. 결함은 장애와 다르다. 장애는 서비스 자체가 멈추는 것이고 결함이 발생해도 장애는 발생하지 않도록 해야 한다. 확장성: 시스템의 데이터 양, 트래픽 양, 복잡도가 증가하면서 이를 처리할 수 있는 적절한 방법이 있어야 한다. 트위터 홈 타임라인 구현 방식 모든 ..