요즘 많은 애플리케이션은 계산 중심(CPU intensive)이 아닌, 데이터 중심이다. 데이터 양, 데이터 복잡도, 데이터 변화 속도에 성능이 영향을 받는다.소프트웨어 시스템은 아래 세가지가 중요하다.신뢰성 : 역경에 직면하더라도 시스템은 지속적으로 올바르게 동작해야
관계형 데이터베이스의 근원은 비즈니스 데이터 처리에 있다. 이것은 보통 트랜잭션 처리, 일괄처리 등이다. (오늘날 일반적인)관계형 데이터베이스와 비관계형 데이터스토어가 함께 사용되는 것을 다중 저장소 지속성(polyglot persistence)이라고 한다.데이터를 관
데이터베이스의 저장, 검색 처리 원리를 애플리케이션 개발자가 이해해야하는 이유는, 특정 작업부하 유형에서 좋은 성능을 내개끔 저장소 엔진을 조정하려면 내부 원리에 대해 이해할 필요가 있기 때문이다.색인 데이터베이스에서 특정 키의 값을 효율적으로 찾기 위해서 필요한 다
애플리케이션은 항상 변한다. 데이터도 변경해야 한다. 변화할 때 시스템이 원활히 실행되게 하려면 양방향으로 호환성을 유지해야 한다.프로그램은 보통 두가지 형태로 표현되 데이터를 사용한다.메모리에 객체, 구조체, 목록, 배열 등으로 데이터가 유지된다. 이런 데이터 구조는
여러 장비 간 분산된 데이터베이스를 필요로 하는 이유확장성내결함성/고가용성지연 시간공유 메모리 아키텍처 (수직 확장)단점비용이 선형적인 추세보다 훨씬 빠르게 증가제한적인 내결함성하나의 지리적인 위치로 제한됨비공유 아키텍처 (수평 확장) 공유 아키텍처의 단점을 극복할
데이터셋이 매우 크거나 질의 처리량이 매우 높다면 복제만으로는 부족하고, 데이터를 파티션으로 쪼갤 필요가 있다. 이 작업을 샤딩이라고 한다.각 파티션은 그 자체로 작은 데이터베이스가 된다.데이터 파티셔닝을 원하는 주된 이유는 확장성이다. 대용량 데이터셋이 여러 디스크에
트랜잭션은 애플리케이션에서 몇 개의 읽기와 쓰기를 하나의 논리적 단위로 묶는 방법이다.모든 애플리케이션에서 트랜잭션이 필요하지는 않다. 어떤 안정성은 트랜잭션 없이도 보장될 수 있다.원자성, 일관성, 격리성, 지속성원자적이란 더 작은 부분으로 쪼갤 수 없는 무언가를 가
좋은 소프트웨어가 설치된 각각의 컴퓨터는 보통 완전하게 동작하거나 전체 장애가 발생하지 그 중간 상태가 되지는 않는다.분산 시스템에서는 더 이상 이상화된 시스템 모델에서 동작하지 않는다.분산 시스템에서는 시스템의 어떤 부분은 잘 동작하지만 다른 부분은 예측할 수 없는
내결함성을 지닌 시스템을 구축하는 가장 좋은 방법은 유용한 보장을 해주는 범용 추상화를 찾아 이를 구현하고, 애플리케이션에서 이 보장에 의존하게 하는 것이다.복제 데이터베이스는 대부분 최소한 최종적 일관성을 제공한다. 그러나 이것은 언제 복제본이 수렴될지 모르기 때문에
시스템을 세 가지 유형으로 구분서비스(온라인 시스템) 서비스는 클라이언트로부터 요청이나 지시가 올 때까지 기다린다. 응답 시간은 서비스 성능 측정에 중요한 지표다. 일괄 처리 시스템(오프라인 시스템) 일괄 처리 시스템은 매우 큰 입력 데이터를 받아 데이터를 처리하
일괄 처리는 입력이 고정된 크기로 한정되므로 입력을 읽는 작업이 끝나는 시점을 알 수 있다.맵리듀스의 정렬 연산은 출력을 생산하기 전에 전체 입력을 다 읽어야하므로, 조기에 출력을 시작할 수 없다.사용자는 데이터를 계속 생산하므로 데이터셋은 절대 완료되지 않는다. 따라
데이터를 사용하는 모든 다른 상황에 적합한 소프트웨어가 있을 가능성은 낮다. 그래서 원하는 애플리케이션 기능을 제공하기 위해서는 반드시 여러 다른 소프트웨어를 함께 엮어 사용해야 한다.데이터를 다른 방식으로 표현하는 수가 늘어날수록 데이터 시스템을 통합하기가 더욱 어렵