데이터 중심의 애플리케이션 설계 - 스트림 처리의 기본
배치 처리와 다르게 스트림 처리는 입력 데이터가 한정된다. 스트림 처리는 시간이 지남에 따라 점진적으로 도착하는 제한되지 않은 데이터를 처리하기 위한 솔루션이다. 스트림 처리를 사용하는 이유는 무엇일까? 스트림 처리를 사용하면 데이터 처리 지연을 줄일 수 있으며, 심지어 이벤트가 ...
배치 처리와 다르게 스트림 처리는 입력 데이터가 한정된다. 스트림 처리는 시간이 지남에 따라 점진적으로 도착하는 제한되지 않은 데이터를 처리하기 위한 솔루션이다. 스트림 처리를 사용하는 이유는 무엇일까? 스트림 처리를 사용하면 데이터 처리 지연을 줄일 수 있으며, 심지어 이벤트가 ...
스트림 처리는 다양한 용도로 사용되며, 그 중 모니터링이 가장 대표적인 예다.
일시적 메시징과 영구 저장소의 차이는 무엇일까. 메시지 브로커에서 흔히 볼 수 있는 일시적 메시징은 일반적으로 컨슈머에게 전달된 메시지를 삭제한다. 반면 데이터베이스와 파일시스템은 명시적으로 삭제할 때까지 데이터를 영구적으로 기록하는 것을 목표로 한다.
맵리듀스는 HDFS와 같은 분산 파일 시스템에서 대규모 데이터 세트를 처리하는 코드를 작성할 수 있는 프로그래밍 프레임워크다.
맵 리듀스는 유닉스 도구와 비슷하다. 차이점은 수천 대의 머신에 분산되어 있다는 점이다. 맵 리듀스는 유닉스 도구와 마찬가지로 상당히 무차별 대입 방식이지만 놀라울 정도로 효과적인 도구다. 단일 맵리듀스 작업은 단일 유닉스 프로세스와 유사하다. 맵리듀스는 유닉스 프로세스와 같이 하...
유닉스에서 간단한 스크립트를 사용하여 로그 파일을 아주 쉽게 분석할 수 있는 이유는 유닉스의 철학 덕분이다. 유닉스 파이프의 발명가인 더그 맥일로이는 1964년에 처음으로 파이프를 개발했다. 그는 파이프를 배관에 비유하였다. 프로그램을 파이프로 연결한다는 아이디어는 현재 유닉스 개...
여기 하나의 웹 서버가 있다.이 웹 서버는 요청을 처리할 때마다 로그 파일에 한 줄을 추가한다.
요청과 응답, 쿼리와 결과라는 데이터 처리 방식은 많은 현대의 데이터 시스템에서 가정하는 방식이다. 사용자가 무언가를 요청하거나 지시를 보내면 얼마 후 시스템이 답변을 준다. 데이터베이스, 캐시, 검색 인덱스, 웹 서버 및 기타 많은 시스템이 이러한 방식으로 작동한다.
요청과 응답, 쿼리와 결과라는 데이터 처리 방식은 많은 현대의 데이터 시스템에서 가정하는 방식이다. 사용자가 무언가를 요청하거나 지시를 보내면 얼마 후 시스템이 답변을 준다. 데이터베이스, 캐시, 검색 인덱스, 웹 서버 및 기타 많은 시스템이 이러한 방식으로 작동한다.
ZooKeeper나 etcd와 같은 프로젝트는 “분산 키-값 저장소” 또는 “코디네이션 및 구성 서비스”로 설명된다. 이러한 서비스의 API는 주어진 키의 값을 읽고 쓸 수 있고, 키를 반복할 수 있는 기능을 갖춘 것이 마치 데이터베이스와 매우 유사하다. 그런데 이것이 데이터베이스...
합의는 여러 노드가 어떤 것에 동의 하는 것이다. 합의의 문제는 동시 쓰기 문제에서 비롯된다. 예를 들어, 여러 비행기 승객이 마지막 좌석을 예약하기 위해 동시에 예약을 요청했다면 어떤 고객에게 좌석을 부여할지 결정해야 한다.
대부분의 클라우드 서비스는 분산 트랜잭션이 야기하는 운영상의 문제 때문에 분산 트랜잭션을 구현하지 않는다.
트랜잭션의 원자성을 지키는 이유는 쓰기 작업 도중 발생하는 문제로 인한 불일치를 막기 위해서다.
인과성은 중요한 개념이다. 하지만, 모든 인과관계를 파악하는 것은 비실용적이다.
분산 시스템의 작업은 순서가 존재 한다. 이 때, 전체 순서와 부분 순서의 차이는 데이터 베이스 일관성 모델에서도 적용된다.
단일 리더 복제에서 리더의 목적은 쓰기의 순서를 복제 로그에서 결정하는 것이다.
선형화 가능한 데이터베이스가 단일 리더 데이터베이스든, 다중 리더 데이터베이스에 상관없이 언제든지 네트워크 오류가 발생할 수 있다. 즉, 선형화 가능한 데이터베이스에서 발생하는 문제는 데이터 센터의 수에 상관없이 네트워크로 인해 발생할 수 있다. 만약 당신의 애플리케이션이 선형화 ...
최종 일관성 데이터베이스는 서로 다른 두 복제본에 동시에 동일한 질문을 하면 두 개의 다른 답변을 얻을 수 있다. 데이터베이스에 복제본이 하나만 있는 것처럼 보이도록 하는 모델을 선형화 가능성이라고 한다.
분산 시스템은 어떤 오류라도 발생할 수 있다. 오류를 다루는 가장 간단한 방법은 오류가 발생하면 전체 시스템 실패로 만들어버리는 방법이 있지만, 내부 컴포넌트의 오류가 발생해도 서비스가 올바르게 동작하는 것이 대부분의 목적일 것이다.
대부분의 알고리즘들은 분산 시스템 문제를 해결하기 위해 만들어졌다. 알고리즘은 하드웨어나 소프트웨어에 종속되지 않고 구동될 수 있도록 작성된다. 시스템에서 발생할 수 있는 여러 종류의 오류들을 형식화하는 작업이 시스템 모델링이다. 시스템 모델링은 일종의 알고리즘이 어떻게 동작하는지...
펜싱 토큰은 잘못된 행동을 하는 노드를 감지하고 차단할 수 있지만, 악의적인 노드가 가짜 펜싱 토큰을 메시지와 전송하여 시스템을 망가뜨릴 수 있다. 분산 시스템은 노드가 프로토콜에 맞게 행동하지만, GC나 네트워크에 신뢰할 수 없는 경우를 가정해야 한다.
단일 노드에서 구동되는 프로그램과 분산 시스템의 차이점은 메시지를 주고받기 위해서 네트워크를 사용해야 한다는 점이다. 네트워크 통신은 부분 실패 문제, 시각 문제, 그리고 정지 프로세스 문제를 유발한다.
오류를 감지하는 가장 확실한 방법은 타임아웃이다. 그렇다면 얼마나 타임아웃을 길게 설정해야 할까?
중간 규모의 데이터센터는 월 평균 12개의 네트워크 오류를 겪는다. EC2와 같은 퍼블릭 클라우드를 사용하든, 사설 관리형 데이터센터를 사용하든 네트워크 문제는 누구도 피해갈 수 없다.
분산 시스템 위에서 동작하는 소프트웨어와 단일 시스템에서 동작하는 소프트웨어는 근본적으로 동작과 오류의 양상이 다르다. 신뢰할 수 없는 네트워크, 시각과 타이밍 문제 등이 대표적인 분산 시스템에서 겪을 수 있는 이슈다.
다음은 두 트랜잭션의 동시 쓰기 경합 상황이다.
스냅샷 격리(Snapshot isolation)는 읽기만 가능한 트랜잭션에 매우 효과적인 격리 수준이다. 하지만 데이터베이스에 따라 용어를 다르게 사용하고 있다.
커밋된 읽기(read committed)와 스냅샷 격리 (snapshot isolation) 는 동시에 쓰기를 수행할 때 읽기 전용 트랜잭션이 무엇을 보는지를 결정한다.
MVCC는 트랜잭션의 격리(Isolation)을 스냅샷 수준에서 구현한 메커니즘이다. MVCC가 적용된 데이터베이스에서 인덱스는 어떻게 동작할까?
두 트랜잭션이 동일한 데이터를 건드리지 않는다면, 어느 트랜잭션도 다른 트랜잭션에 의존하지 않기 때문에 안전하게 병렬로 실행할 수 있다.
ACID 에서 A(Atomicity)와 I(Isolation)은 하나의 클라이언트가 하나의 트랜잭션 안에서 여러번의 쓰기 연산을 수행할 때 데이터베이스는 어떤 행동을 해야하는지를 설명한다.
트랜잭션은 애플리케이션이 여러 읽기 및 쓰기를 하나의 논리적 단위로 그룹화하는 방법이다. 트랜잭션을 사용하면 일부 작업은 성공하고 일부는 실패하는 경우에 대해 걱정할 필요가 없기 때문에 애플리케이션의 오류 처리가 훨씬 간단해진다.
레코드가 기본 키를 통해서만 접근되는 경우, 해당 키에서 파티션을 결정하고 이를 사용하여 해당 키를 담당하는 파티션으로 읽기 및 쓰기 요청을 라우팅할 수 있다.
대량의 데이터가 있고 이를 분할해서 저장해야한다면, 어떤 레코드를 어떤 노드에 저장할지 어떻게 결정할까?
리더 기반 복제의 특징은 웹 애플리케이션과 유사하다.
데이터 세트가 매우 크거나 쿼리 처리량이 매우 높은 경우에는 복제만으로는 충분하지 않다. 데이터를 파티션으로 분할하는 샤딩이 필요하다.
리더 기반 복제는 내부적으로 어떻게 동작하는지 살펴보자.
시스템은 예기치 않은 장애로 인해 다운될 수 있지만, 최신 보안 패치를 설치하기 위해 시스템을 재부팅하는 경우로 인해 다운될 가능성도 있다.
데이터베이스의 복사본을 저장하는 각 노드를 복제본(replica)이라고 한다.
복제는 네트워크를 통해 연결된 여러 컴퓨터에 동일한 데이터의 복사본을 보관하는 것을 말한다. 데이터를 복제해야 하는 이유는 여러 가지가 있다:
데이터가 한 프로세스에서 다른 프로세스로 이동하는 방식은 매우 다양하다.
프로그램은 두 가지 방식의 표현으로 데이터를 처리한다.
애플리케이션은 시간이 지남에 따라 필연적으로 변화한다.
초창기에는 데이터베이스는:
데이터베이스는 두 가지 작업을 수행해야 한다.
키-값 쌍이 연속적으로 저장된 로그 구조의 스토리지 세그먼트를 키-값 쌍의 순서가 키별로 정렬되도록 해보자. 이러한 형식을 정렬된 Sorted String Table 또는 줄여서 SSTable이라고 부른다. SSTable의 각 키는 병합된 각 세그먼트 파일 내에서 한 번만 나타나야...
키-값 데이터에 대한 인덱스는 일반적이며 더 복잡한 인덱스를 위한 유용한 구성 요소다.
다대다 관계는 서로 다른 데이터 모델을 구분하는 중요한 기능이다. 애플리케이션의 대부분이 일대다 관계(트리 구조 데이터)로 구성되었거나, 레코드 간에 관계가 없는 경우 문서 모델이 적합하다. 하지만 데이터에 다대다 관계가 애플리케이션에 일반적 데이터 모델이라면 그래프로 모델링하는 ...
도큐먼트 데이터베이스는 역사를 반복하고 있는가?
데이터 모델은 소프트웨어 개발에서 가장 중요하다. 소프트웨어가 작성되는 방식뿐만 아니라 해결하려는 문제를 생각하는 방식에도 영향을 미치기 때문이다.
성능 저하의 일반적인 원인 중 하나는 부하 증가다. 확장성은 부하 증가에 대처하는 시스템의 능력을 설명하는 용어다. 그러나 확장성을 일차원적으로 보면 안된다. 확장성은 “시스템이 특정 방식으로 확장하는 경우 대처할 수 있는 옵션은 무엇인가?”, “추가 부하를 처리하기 위해 컴퓨팅 ...
신뢰가능하고, 확장가능하며, 유지보수 가능한 애플리케이션
<데이터 중심의 애플리케이션 설계>는 데이터 시스템의 근간이 되는 트레이드오프와 다양한 원리들을 다룬다. 다양한 프로덕트에서 접목할 수 있는 다양한 시스템 디자인들을 탐구해볼 수 있는 명저이다.
배치 처리와 다르게 스트림 처리는 입력 데이터가 한정된다. 스트림 처리는 시간이 지남에 따라 점진적으로 도착하는 제한되지 않은 데이터를 처리하기 위한 솔루션이다. 스트림 처리를 사용하는 이유는 무엇일까? 스트림 처리를 사용하면 데이터 처리 지연을 줄일 수 있으며, 심지어 이벤트가 ...
스트림 처리는 다양한 용도로 사용되며, 그 중 모니터링이 가장 대표적인 예다.
일시적 메시징과 영구 저장소의 차이는 무엇일까. 메시지 브로커에서 흔히 볼 수 있는 일시적 메시징은 일반적으로 컨슈머에게 전달된 메시지를 삭제한다. 반면 데이터베이스와 파일시스템은 명시적으로 삭제할 때까지 데이터를 영구적으로 기록하는 것을 목표로 한다.
맵리듀스는 HDFS와 같은 분산 파일 시스템에서 대규모 데이터 세트를 처리하는 코드를 작성할 수 있는 프로그래밍 프레임워크다.
맵 리듀스는 유닉스 도구와 비슷하다. 차이점은 수천 대의 머신에 분산되어 있다는 점이다. 맵 리듀스는 유닉스 도구와 마찬가지로 상당히 무차별 대입 방식이지만 놀라울 정도로 효과적인 도구다. 단일 맵리듀스 작업은 단일 유닉스 프로세스와 유사하다. 맵리듀스는 유닉스 프로세스와 같이 하...
유닉스에서 간단한 스크립트를 사용하여 로그 파일을 아주 쉽게 분석할 수 있는 이유는 유닉스의 철학 덕분이다. 유닉스 파이프의 발명가인 더그 맥일로이는 1964년에 처음으로 파이프를 개발했다. 그는 파이프를 배관에 비유하였다. 프로그램을 파이프로 연결한다는 아이디어는 현재 유닉스 개...
여기 하나의 웹 서버가 있다.이 웹 서버는 요청을 처리할 때마다 로그 파일에 한 줄을 추가한다.
요청과 응답, 쿼리와 결과라는 데이터 처리 방식은 많은 현대의 데이터 시스템에서 가정하는 방식이다. 사용자가 무언가를 요청하거나 지시를 보내면 얼마 후 시스템이 답변을 준다. 데이터베이스, 캐시, 검색 인덱스, 웹 서버 및 기타 많은 시스템이 이러한 방식으로 작동한다.
요청과 응답, 쿼리와 결과라는 데이터 처리 방식은 많은 현대의 데이터 시스템에서 가정하는 방식이다. 사용자가 무언가를 요청하거나 지시를 보내면 얼마 후 시스템이 답변을 준다. 데이터베이스, 캐시, 검색 인덱스, 웹 서버 및 기타 많은 시스템이 이러한 방식으로 작동한다.
ZooKeeper나 etcd와 같은 프로젝트는 “분산 키-값 저장소” 또는 “코디네이션 및 구성 서비스”로 설명된다. 이러한 서비스의 API는 주어진 키의 값을 읽고 쓸 수 있고, 키를 반복할 수 있는 기능을 갖춘 것이 마치 데이터베이스와 매우 유사하다. 그런데 이것이 데이터베이스...
합의는 여러 노드가 어떤 것에 동의 하는 것이다. 합의의 문제는 동시 쓰기 문제에서 비롯된다. 예를 들어, 여러 비행기 승객이 마지막 좌석을 예약하기 위해 동시에 예약을 요청했다면 어떤 고객에게 좌석을 부여할지 결정해야 한다.
대부분의 클라우드 서비스는 분산 트랜잭션이 야기하는 운영상의 문제 때문에 분산 트랜잭션을 구현하지 않는다.
트랜잭션의 원자성을 지키는 이유는 쓰기 작업 도중 발생하는 문제로 인한 불일치를 막기 위해서다.
인과성은 중요한 개념이다. 하지만, 모든 인과관계를 파악하는 것은 비실용적이다.
분산 시스템의 작업은 순서가 존재 한다. 이 때, 전체 순서와 부분 순서의 차이는 데이터 베이스 일관성 모델에서도 적용된다.
단일 리더 복제에서 리더의 목적은 쓰기의 순서를 복제 로그에서 결정하는 것이다.
선형화 가능한 데이터베이스가 단일 리더 데이터베이스든, 다중 리더 데이터베이스에 상관없이 언제든지 네트워크 오류가 발생할 수 있다. 즉, 선형화 가능한 데이터베이스에서 발생하는 문제는 데이터 센터의 수에 상관없이 네트워크로 인해 발생할 수 있다. 만약 당신의 애플리케이션이 선형화 ...
최종 일관성 데이터베이스는 서로 다른 두 복제본에 동시에 동일한 질문을 하면 두 개의 다른 답변을 얻을 수 있다. 데이터베이스에 복제본이 하나만 있는 것처럼 보이도록 하는 모델을 선형화 가능성이라고 한다.
분산 시스템은 어떤 오류라도 발생할 수 있다. 오류를 다루는 가장 간단한 방법은 오류가 발생하면 전체 시스템 실패로 만들어버리는 방법이 있지만, 내부 컴포넌트의 오류가 발생해도 서비스가 올바르게 동작하는 것이 대부분의 목적일 것이다.
대부분의 알고리즘들은 분산 시스템 문제를 해결하기 위해 만들어졌다. 알고리즘은 하드웨어나 소프트웨어에 종속되지 않고 구동될 수 있도록 작성된다. 시스템에서 발생할 수 있는 여러 종류의 오류들을 형식화하는 작업이 시스템 모델링이다. 시스템 모델링은 일종의 알고리즘이 어떻게 동작하는지...
펜싱 토큰은 잘못된 행동을 하는 노드를 감지하고 차단할 수 있지만, 악의적인 노드가 가짜 펜싱 토큰을 메시지와 전송하여 시스템을 망가뜨릴 수 있다. 분산 시스템은 노드가 프로토콜에 맞게 행동하지만, GC나 네트워크에 신뢰할 수 없는 경우를 가정해야 한다.
단일 노드에서 구동되는 프로그램과 분산 시스템의 차이점은 메시지를 주고받기 위해서 네트워크를 사용해야 한다는 점이다. 네트워크 통신은 부분 실패 문제, 시각 문제, 그리고 정지 프로세스 문제를 유발한다.
오류를 감지하는 가장 확실한 방법은 타임아웃이다. 그렇다면 얼마나 타임아웃을 길게 설정해야 할까?
중간 규모의 데이터센터는 월 평균 12개의 네트워크 오류를 겪는다. EC2와 같은 퍼블릭 클라우드를 사용하든, 사설 관리형 데이터센터를 사용하든 네트워크 문제는 누구도 피해갈 수 없다.
분산 시스템 위에서 동작하는 소프트웨어와 단일 시스템에서 동작하는 소프트웨어는 근본적으로 동작과 오류의 양상이 다르다. 신뢰할 수 없는 네트워크, 시각과 타이밍 문제 등이 대표적인 분산 시스템에서 겪을 수 있는 이슈다.
다음은 두 트랜잭션의 동시 쓰기 경합 상황이다.
스냅샷 격리(Snapshot isolation)는 읽기만 가능한 트랜잭션에 매우 효과적인 격리 수준이다. 하지만 데이터베이스에 따라 용어를 다르게 사용하고 있다.
커밋된 읽기(read committed)와 스냅샷 격리 (snapshot isolation) 는 동시에 쓰기를 수행할 때 읽기 전용 트랜잭션이 무엇을 보는지를 결정한다.
MVCC는 트랜잭션의 격리(Isolation)을 스냅샷 수준에서 구현한 메커니즘이다. MVCC가 적용된 데이터베이스에서 인덱스는 어떻게 동작할까?
두 트랜잭션이 동일한 데이터를 건드리지 않는다면, 어느 트랜잭션도 다른 트랜잭션에 의존하지 않기 때문에 안전하게 병렬로 실행할 수 있다.
ACID 에서 A(Atomicity)와 I(Isolation)은 하나의 클라이언트가 하나의 트랜잭션 안에서 여러번의 쓰기 연산을 수행할 때 데이터베이스는 어떤 행동을 해야하는지를 설명한다.
트랜잭션은 애플리케이션이 여러 읽기 및 쓰기를 하나의 논리적 단위로 그룹화하는 방법이다. 트랜잭션을 사용하면 일부 작업은 성공하고 일부는 실패하는 경우에 대해 걱정할 필요가 없기 때문에 애플리케이션의 오류 처리가 훨씬 간단해진다.
레코드가 기본 키를 통해서만 접근되는 경우, 해당 키에서 파티션을 결정하고 이를 사용하여 해당 키를 담당하는 파티션으로 읽기 및 쓰기 요청을 라우팅할 수 있다.
대량의 데이터가 있고 이를 분할해서 저장해야한다면, 어떤 레코드를 어떤 노드에 저장할지 어떻게 결정할까?
리더 기반 복제의 특징은 웹 애플리케이션과 유사하다.
데이터 세트가 매우 크거나 쿼리 처리량이 매우 높은 경우에는 복제만으로는 충분하지 않다. 데이터를 파티션으로 분할하는 샤딩이 필요하다.
리더 기반 복제는 내부적으로 어떻게 동작하는지 살펴보자.
시스템은 예기치 않은 장애로 인해 다운될 수 있지만, 최신 보안 패치를 설치하기 위해 시스템을 재부팅하는 경우로 인해 다운될 가능성도 있다.
데이터베이스의 복사본을 저장하는 각 노드를 복제본(replica)이라고 한다.
복제는 네트워크를 통해 연결된 여러 컴퓨터에 동일한 데이터의 복사본을 보관하는 것을 말한다. 데이터를 복제해야 하는 이유는 여러 가지가 있다:
데이터가 한 프로세스에서 다른 프로세스로 이동하는 방식은 매우 다양하다.
프로그램은 두 가지 방식의 표현으로 데이터를 처리한다.
애플리케이션은 시간이 지남에 따라 필연적으로 변화한다.
초창기에는 데이터베이스는:
데이터베이스는 두 가지 작업을 수행해야 한다.
키-값 쌍이 연속적으로 저장된 로그 구조의 스토리지 세그먼트를 키-값 쌍의 순서가 키별로 정렬되도록 해보자. 이러한 형식을 정렬된 Sorted String Table 또는 줄여서 SSTable이라고 부른다. SSTable의 각 키는 병합된 각 세그먼트 파일 내에서 한 번만 나타나야...
키-값 데이터에 대한 인덱스는 일반적이며 더 복잡한 인덱스를 위한 유용한 구성 요소다.
다대다 관계는 서로 다른 데이터 모델을 구분하는 중요한 기능이다. 애플리케이션의 대부분이 일대다 관계(트리 구조 데이터)로 구성되었거나, 레코드 간에 관계가 없는 경우 문서 모델이 적합하다. 하지만 데이터에 다대다 관계가 애플리케이션에 일반적 데이터 모델이라면 그래프로 모델링하는 ...
도큐먼트 데이터베이스는 역사를 반복하고 있는가?
데이터 모델은 소프트웨어 개발에서 가장 중요하다. 소프트웨어가 작성되는 방식뿐만 아니라 해결하려는 문제를 생각하는 방식에도 영향을 미치기 때문이다.
성능 저하의 일반적인 원인 중 하나는 부하 증가다. 확장성은 부하 증가에 대처하는 시스템의 능력을 설명하는 용어다. 그러나 확장성을 일차원적으로 보면 안된다. 확장성은 “시스템이 특정 방식으로 확장하는 경우 대처할 수 있는 옵션은 무엇인가?”, “추가 부하를 처리하기 위해 컴퓨팅 ...
신뢰가능하고, 확장가능하며, 유지보수 가능한 애플리케이션
<데이터 중심의 애플리케이션 설계>는 데이터 시스템의 근간이 되는 트레이드오프와 다양한 원리들을 다룬다. 다양한 프로덕트에서 접목할 수 있는 다양한 시스템 디자인들을 탐구해볼 수 있는 명저이다.
배치 처리와 다르게 스트림 처리는 입력 데이터가 한정된다. 스트림 처리는 시간이 지남에 따라 점진적으로 도착하는 제한되지 않은 데이터를 처리하기 위한 솔루션이다. 스트림 처리를 사용하는 이유는 무엇일까? 스트림 처리를 사용하면 데이터 처리 지연을 줄일 수 있으며, 심지어 이벤트가 ...
스트림 처리는 다양한 용도로 사용되며, 그 중 모니터링이 가장 대표적인 예다.
일시적 메시징과 영구 저장소의 차이는 무엇일까. 메시지 브로커에서 흔히 볼 수 있는 일시적 메시징은 일반적으로 컨슈머에게 전달된 메시지를 삭제한다. 반면 데이터베이스와 파일시스템은 명시적으로 삭제할 때까지 데이터를 영구적으로 기록하는 것을 목표로 한다.
맵리듀스는 HDFS와 같은 분산 파일 시스템에서 대규모 데이터 세트를 처리하는 코드를 작성할 수 있는 프로그래밍 프레임워크다.
맵 리듀스는 유닉스 도구와 비슷하다. 차이점은 수천 대의 머신에 분산되어 있다는 점이다. 맵 리듀스는 유닉스 도구와 마찬가지로 상당히 무차별 대입 방식이지만 놀라울 정도로 효과적인 도구다. 단일 맵리듀스 작업은 단일 유닉스 프로세스와 유사하다. 맵리듀스는 유닉스 프로세스와 같이 하...
유닉스에서 간단한 스크립트를 사용하여 로그 파일을 아주 쉽게 분석할 수 있는 이유는 유닉스의 철학 덕분이다. 유닉스 파이프의 발명가인 더그 맥일로이는 1964년에 처음으로 파이프를 개발했다. 그는 파이프를 배관에 비유하였다. 프로그램을 파이프로 연결한다는 아이디어는 현재 유닉스 개...
여기 하나의 웹 서버가 있다.이 웹 서버는 요청을 처리할 때마다 로그 파일에 한 줄을 추가한다.
요청과 응답, 쿼리와 결과라는 데이터 처리 방식은 많은 현대의 데이터 시스템에서 가정하는 방식이다. 사용자가 무언가를 요청하거나 지시를 보내면 얼마 후 시스템이 답변을 준다. 데이터베이스, 캐시, 검색 인덱스, 웹 서버 및 기타 많은 시스템이 이러한 방식으로 작동한다.
요청과 응답, 쿼리와 결과라는 데이터 처리 방식은 많은 현대의 데이터 시스템에서 가정하는 방식이다. 사용자가 무언가를 요청하거나 지시를 보내면 얼마 후 시스템이 답변을 준다. 데이터베이스, 캐시, 검색 인덱스, 웹 서버 및 기타 많은 시스템이 이러한 방식으로 작동한다.
ZooKeeper나 etcd와 같은 프로젝트는 “분산 키-값 저장소” 또는 “코디네이션 및 구성 서비스”로 설명된다. 이러한 서비스의 API는 주어진 키의 값을 읽고 쓸 수 있고, 키를 반복할 수 있는 기능을 갖춘 것이 마치 데이터베이스와 매우 유사하다. 그런데 이것이 데이터베이스...
합의는 여러 노드가 어떤 것에 동의 하는 것이다. 합의의 문제는 동시 쓰기 문제에서 비롯된다. 예를 들어, 여러 비행기 승객이 마지막 좌석을 예약하기 위해 동시에 예약을 요청했다면 어떤 고객에게 좌석을 부여할지 결정해야 한다.
대부분의 클라우드 서비스는 분산 트랜잭션이 야기하는 운영상의 문제 때문에 분산 트랜잭션을 구현하지 않는다.
트랜잭션의 원자성을 지키는 이유는 쓰기 작업 도중 발생하는 문제로 인한 불일치를 막기 위해서다.
인과성은 중요한 개념이다. 하지만, 모든 인과관계를 파악하는 것은 비실용적이다.
분산 시스템의 작업은 순서가 존재 한다. 이 때, 전체 순서와 부분 순서의 차이는 데이터 베이스 일관성 모델에서도 적용된다.
단일 리더 복제에서 리더의 목적은 쓰기의 순서를 복제 로그에서 결정하는 것이다.
선형화 가능한 데이터베이스가 단일 리더 데이터베이스든, 다중 리더 데이터베이스에 상관없이 언제든지 네트워크 오류가 발생할 수 있다. 즉, 선형화 가능한 데이터베이스에서 발생하는 문제는 데이터 센터의 수에 상관없이 네트워크로 인해 발생할 수 있다. 만약 당신의 애플리케이션이 선형화 ...
최종 일관성 데이터베이스는 서로 다른 두 복제본에 동시에 동일한 질문을 하면 두 개의 다른 답변을 얻을 수 있다. 데이터베이스에 복제본이 하나만 있는 것처럼 보이도록 하는 모델을 선형화 가능성이라고 한다.
분산 시스템은 어떤 오류라도 발생할 수 있다. 오류를 다루는 가장 간단한 방법은 오류가 발생하면 전체 시스템 실패로 만들어버리는 방법이 있지만, 내부 컴포넌트의 오류가 발생해도 서비스가 올바르게 동작하는 것이 대부분의 목적일 것이다.
대부분의 알고리즘들은 분산 시스템 문제를 해결하기 위해 만들어졌다. 알고리즘은 하드웨어나 소프트웨어에 종속되지 않고 구동될 수 있도록 작성된다. 시스템에서 발생할 수 있는 여러 종류의 오류들을 형식화하는 작업이 시스템 모델링이다. 시스템 모델링은 일종의 알고리즘이 어떻게 동작하는지...
펜싱 토큰은 잘못된 행동을 하는 노드를 감지하고 차단할 수 있지만, 악의적인 노드가 가짜 펜싱 토큰을 메시지와 전송하여 시스템을 망가뜨릴 수 있다. 분산 시스템은 노드가 프로토콜에 맞게 행동하지만, GC나 네트워크에 신뢰할 수 없는 경우를 가정해야 한다.
단일 노드에서 구동되는 프로그램과 분산 시스템의 차이점은 메시지를 주고받기 위해서 네트워크를 사용해야 한다는 점이다. 네트워크 통신은 부분 실패 문제, 시각 문제, 그리고 정지 프로세스 문제를 유발한다.
오류를 감지하는 가장 확실한 방법은 타임아웃이다. 그렇다면 얼마나 타임아웃을 길게 설정해야 할까?
중간 규모의 데이터센터는 월 평균 12개의 네트워크 오류를 겪는다. EC2와 같은 퍼블릭 클라우드를 사용하든, 사설 관리형 데이터센터를 사용하든 네트워크 문제는 누구도 피해갈 수 없다.
분산 시스템 위에서 동작하는 소프트웨어와 단일 시스템에서 동작하는 소프트웨어는 근본적으로 동작과 오류의 양상이 다르다. 신뢰할 수 없는 네트워크, 시각과 타이밍 문제 등이 대표적인 분산 시스템에서 겪을 수 있는 이슈다.
다음은 두 트랜잭션의 동시 쓰기 경합 상황이다.
스냅샷 격리(Snapshot isolation)는 읽기만 가능한 트랜잭션에 매우 효과적인 격리 수준이다. 하지만 데이터베이스에 따라 용어를 다르게 사용하고 있다.
커밋된 읽기(read committed)와 스냅샷 격리 (snapshot isolation) 는 동시에 쓰기를 수행할 때 읽기 전용 트랜잭션이 무엇을 보는지를 결정한다.
MVCC는 트랜잭션의 격리(Isolation)을 스냅샷 수준에서 구현한 메커니즘이다. MVCC가 적용된 데이터베이스에서 인덱스는 어떻게 동작할까?
두 트랜잭션이 동일한 데이터를 건드리지 않는다면, 어느 트랜잭션도 다른 트랜잭션에 의존하지 않기 때문에 안전하게 병렬로 실행할 수 있다.
ACID 에서 A(Atomicity)와 I(Isolation)은 하나의 클라이언트가 하나의 트랜잭션 안에서 여러번의 쓰기 연산을 수행할 때 데이터베이스는 어떤 행동을 해야하는지를 설명한다.
트랜잭션은 애플리케이션이 여러 읽기 및 쓰기를 하나의 논리적 단위로 그룹화하는 방법이다. 트랜잭션을 사용하면 일부 작업은 성공하고 일부는 실패하는 경우에 대해 걱정할 필요가 없기 때문에 애플리케이션의 오류 처리가 훨씬 간단해진다.
레코드가 기본 키를 통해서만 접근되는 경우, 해당 키에서 파티션을 결정하고 이를 사용하여 해당 키를 담당하는 파티션으로 읽기 및 쓰기 요청을 라우팅할 수 있다.
대량의 데이터가 있고 이를 분할해서 저장해야한다면, 어떤 레코드를 어떤 노드에 저장할지 어떻게 결정할까?
리더 기반 복제의 특징은 웹 애플리케이션과 유사하다.
데이터 세트가 매우 크거나 쿼리 처리량이 매우 높은 경우에는 복제만으로는 충분하지 않다. 데이터를 파티션으로 분할하는 샤딩이 필요하다.
리더 기반 복제는 내부적으로 어떻게 동작하는지 살펴보자.
시스템은 예기치 않은 장애로 인해 다운될 수 있지만, 최신 보안 패치를 설치하기 위해 시스템을 재부팅하는 경우로 인해 다운될 가능성도 있다.
데이터베이스의 복사본을 저장하는 각 노드를 복제본(replica)이라고 한다.
복제는 네트워크를 통해 연결된 여러 컴퓨터에 동일한 데이터의 복사본을 보관하는 것을 말한다. 데이터를 복제해야 하는 이유는 여러 가지가 있다:
데이터가 한 프로세스에서 다른 프로세스로 이동하는 방식은 매우 다양하다.
프로그램은 두 가지 방식의 표현으로 데이터를 처리한다.
애플리케이션은 시간이 지남에 따라 필연적으로 변화한다.
초창기에는 데이터베이스는:
데이터베이스는 두 가지 작업을 수행해야 한다.
키-값 쌍이 연속적으로 저장된 로그 구조의 스토리지 세그먼트를 키-값 쌍의 순서가 키별로 정렬되도록 해보자. 이러한 형식을 정렬된 Sorted String Table 또는 줄여서 SSTable이라고 부른다. SSTable의 각 키는 병합된 각 세그먼트 파일 내에서 한 번만 나타나야...
키-값 데이터에 대한 인덱스는 일반적이며 더 복잡한 인덱스를 위한 유용한 구성 요소다.
다대다 관계는 서로 다른 데이터 모델을 구분하는 중요한 기능이다. 애플리케이션의 대부분이 일대다 관계(트리 구조 데이터)로 구성되었거나, 레코드 간에 관계가 없는 경우 문서 모델이 적합하다. 하지만 데이터에 다대다 관계가 애플리케이션에 일반적 데이터 모델이라면 그래프로 모델링하는 ...
도큐먼트 데이터베이스는 역사를 반복하고 있는가?
데이터 모델은 소프트웨어 개발에서 가장 중요하다. 소프트웨어가 작성되는 방식뿐만 아니라 해결하려는 문제를 생각하는 방식에도 영향을 미치기 때문이다.
성능 저하의 일반적인 원인 중 하나는 부하 증가다. 확장성은 부하 증가에 대처하는 시스템의 능력을 설명하는 용어다. 그러나 확장성을 일차원적으로 보면 안된다. 확장성은 “시스템이 특정 방식으로 확장하는 경우 대처할 수 있는 옵션은 무엇인가?”, “추가 부하를 처리하기 위해 컴퓨팅 ...
신뢰가능하고, 확장가능하며, 유지보수 가능한 애플리케이션
<데이터 중심의 애플리케이션 설계>는 데이터 시스템의 근간이 되는 트레이드오프와 다양한 원리들을 다룬다. 다양한 프로덕트에서 접목할 수 있는 다양한 시스템 디자인들을 탐구해볼 수 있는 명저이다.
배치 처리와 다르게 스트림 처리는 입력 데이터가 한정된다. 스트림 처리는 시간이 지남에 따라 점진적으로 도착하는 제한되지 않은 데이터를 처리하기 위한 솔루션이다. 스트림 처리를 사용하는 이유는 무엇일까? 스트림 처리를 사용하면 데이터 처리 지연을 줄일 수 있으며, 심지어 이벤트가 ...
스트림 처리는 다양한 용도로 사용되며, 그 중 모니터링이 가장 대표적인 예다.
일시적 메시징과 영구 저장소의 차이는 무엇일까. 메시지 브로커에서 흔히 볼 수 있는 일시적 메시징은 일반적으로 컨슈머에게 전달된 메시지를 삭제한다. 반면 데이터베이스와 파일시스템은 명시적으로 삭제할 때까지 데이터를 영구적으로 기록하는 것을 목표로 한다.
맵리듀스는 HDFS와 같은 분산 파일 시스템에서 대규모 데이터 세트를 처리하는 코드를 작성할 수 있는 프로그래밍 프레임워크다.
맵 리듀스는 유닉스 도구와 비슷하다. 차이점은 수천 대의 머신에 분산되어 있다는 점이다. 맵 리듀스는 유닉스 도구와 마찬가지로 상당히 무차별 대입 방식이지만 놀라울 정도로 효과적인 도구다. 단일 맵리듀스 작업은 단일 유닉스 프로세스와 유사하다. 맵리듀스는 유닉스 프로세스와 같이 하...
유닉스에서 간단한 스크립트를 사용하여 로그 파일을 아주 쉽게 분석할 수 있는 이유는 유닉스의 철학 덕분이다. 유닉스 파이프의 발명가인 더그 맥일로이는 1964년에 처음으로 파이프를 개발했다. 그는 파이프를 배관에 비유하였다. 프로그램을 파이프로 연결한다는 아이디어는 현재 유닉스 개...
여기 하나의 웹 서버가 있다.이 웹 서버는 요청을 처리할 때마다 로그 파일에 한 줄을 추가한다.
요청과 응답, 쿼리와 결과라는 데이터 처리 방식은 많은 현대의 데이터 시스템에서 가정하는 방식이다. 사용자가 무언가를 요청하거나 지시를 보내면 얼마 후 시스템이 답변을 준다. 데이터베이스, 캐시, 검색 인덱스, 웹 서버 및 기타 많은 시스템이 이러한 방식으로 작동한다.
요청과 응답, 쿼리와 결과라는 데이터 처리 방식은 많은 현대의 데이터 시스템에서 가정하는 방식이다. 사용자가 무언가를 요청하거나 지시를 보내면 얼마 후 시스템이 답변을 준다. 데이터베이스, 캐시, 검색 인덱스, 웹 서버 및 기타 많은 시스템이 이러한 방식으로 작동한다.
ZooKeeper나 etcd와 같은 프로젝트는 “분산 키-값 저장소” 또는 “코디네이션 및 구성 서비스”로 설명된다. 이러한 서비스의 API는 주어진 키의 값을 읽고 쓸 수 있고, 키를 반복할 수 있는 기능을 갖춘 것이 마치 데이터베이스와 매우 유사하다. 그런데 이것이 데이터베이스...
합의는 여러 노드가 어떤 것에 동의 하는 것이다. 합의의 문제는 동시 쓰기 문제에서 비롯된다. 예를 들어, 여러 비행기 승객이 마지막 좌석을 예약하기 위해 동시에 예약을 요청했다면 어떤 고객에게 좌석을 부여할지 결정해야 한다.
대부분의 클라우드 서비스는 분산 트랜잭션이 야기하는 운영상의 문제 때문에 분산 트랜잭션을 구현하지 않는다.
트랜잭션의 원자성을 지키는 이유는 쓰기 작업 도중 발생하는 문제로 인한 불일치를 막기 위해서다.
인과성은 중요한 개념이다. 하지만, 모든 인과관계를 파악하는 것은 비실용적이다.
분산 시스템의 작업은 순서가 존재 한다. 이 때, 전체 순서와 부분 순서의 차이는 데이터 베이스 일관성 모델에서도 적용된다.
단일 리더 복제에서 리더의 목적은 쓰기의 순서를 복제 로그에서 결정하는 것이다.
선형화 가능한 데이터베이스가 단일 리더 데이터베이스든, 다중 리더 데이터베이스에 상관없이 언제든지 네트워크 오류가 발생할 수 있다. 즉, 선형화 가능한 데이터베이스에서 발생하는 문제는 데이터 센터의 수에 상관없이 네트워크로 인해 발생할 수 있다. 만약 당신의 애플리케이션이 선형화 ...
최종 일관성 데이터베이스는 서로 다른 두 복제본에 동시에 동일한 질문을 하면 두 개의 다른 답변을 얻을 수 있다. 데이터베이스에 복제본이 하나만 있는 것처럼 보이도록 하는 모델을 선형화 가능성이라고 한다.
분산 시스템은 어떤 오류라도 발생할 수 있다. 오류를 다루는 가장 간단한 방법은 오류가 발생하면 전체 시스템 실패로 만들어버리는 방법이 있지만, 내부 컴포넌트의 오류가 발생해도 서비스가 올바르게 동작하는 것이 대부분의 목적일 것이다.
대부분의 알고리즘들은 분산 시스템 문제를 해결하기 위해 만들어졌다. 알고리즘은 하드웨어나 소프트웨어에 종속되지 않고 구동될 수 있도록 작성된다. 시스템에서 발생할 수 있는 여러 종류의 오류들을 형식화하는 작업이 시스템 모델링이다. 시스템 모델링은 일종의 알고리즘이 어떻게 동작하는지...
펜싱 토큰은 잘못된 행동을 하는 노드를 감지하고 차단할 수 있지만, 악의적인 노드가 가짜 펜싱 토큰을 메시지와 전송하여 시스템을 망가뜨릴 수 있다. 분산 시스템은 노드가 프로토콜에 맞게 행동하지만, GC나 네트워크에 신뢰할 수 없는 경우를 가정해야 한다.
단일 노드에서 구동되는 프로그램과 분산 시스템의 차이점은 메시지를 주고받기 위해서 네트워크를 사용해야 한다는 점이다. 네트워크 통신은 부분 실패 문제, 시각 문제, 그리고 정지 프로세스 문제를 유발한다.
오류를 감지하는 가장 확실한 방법은 타임아웃이다. 그렇다면 얼마나 타임아웃을 길게 설정해야 할까?
중간 규모의 데이터센터는 월 평균 12개의 네트워크 오류를 겪는다. EC2와 같은 퍼블릭 클라우드를 사용하든, 사설 관리형 데이터센터를 사용하든 네트워크 문제는 누구도 피해갈 수 없다.
분산 시스템 위에서 동작하는 소프트웨어와 단일 시스템에서 동작하는 소프트웨어는 근본적으로 동작과 오류의 양상이 다르다. 신뢰할 수 없는 네트워크, 시각과 타이밍 문제 등이 대표적인 분산 시스템에서 겪을 수 있는 이슈다.
다음은 두 트랜잭션의 동시 쓰기 경합 상황이다.
스냅샷 격리(Snapshot isolation)는 읽기만 가능한 트랜잭션에 매우 효과적인 격리 수준이다. 하지만 데이터베이스에 따라 용어를 다르게 사용하고 있다.
커밋된 읽기(read committed)와 스냅샷 격리 (snapshot isolation) 는 동시에 쓰기를 수행할 때 읽기 전용 트랜잭션이 무엇을 보는지를 결정한다.
MVCC는 트랜잭션의 격리(Isolation)을 스냅샷 수준에서 구현한 메커니즘이다. MVCC가 적용된 데이터베이스에서 인덱스는 어떻게 동작할까?
두 트랜잭션이 동일한 데이터를 건드리지 않는다면, 어느 트랜잭션도 다른 트랜잭션에 의존하지 않기 때문에 안전하게 병렬로 실행할 수 있다.
ACID 에서 A(Atomicity)와 I(Isolation)은 하나의 클라이언트가 하나의 트랜잭션 안에서 여러번의 쓰기 연산을 수행할 때 데이터베이스는 어떤 행동을 해야하는지를 설명한다.
트랜잭션은 애플리케이션이 여러 읽기 및 쓰기를 하나의 논리적 단위로 그룹화하는 방법이다. 트랜잭션을 사용하면 일부 작업은 성공하고 일부는 실패하는 경우에 대해 걱정할 필요가 없기 때문에 애플리케이션의 오류 처리가 훨씬 간단해진다.
레코드가 기본 키를 통해서만 접근되는 경우, 해당 키에서 파티션을 결정하고 이를 사용하여 해당 키를 담당하는 파티션으로 읽기 및 쓰기 요청을 라우팅할 수 있다.
대량의 데이터가 있고 이를 분할해서 저장해야한다면, 어떤 레코드를 어떤 노드에 저장할지 어떻게 결정할까?
리더 기반 복제의 특징은 웹 애플리케이션과 유사하다.
데이터 세트가 매우 크거나 쿼리 처리량이 매우 높은 경우에는 복제만으로는 충분하지 않다. 데이터를 파티션으로 분할하는 샤딩이 필요하다.
리더 기반 복제는 내부적으로 어떻게 동작하는지 살펴보자.
시스템은 예기치 않은 장애로 인해 다운될 수 있지만, 최신 보안 패치를 설치하기 위해 시스템을 재부팅하는 경우로 인해 다운될 가능성도 있다.
데이터베이스의 복사본을 저장하는 각 노드를 복제본(replica)이라고 한다.
복제는 네트워크를 통해 연결된 여러 컴퓨터에 동일한 데이터의 복사본을 보관하는 것을 말한다. 데이터를 복제해야 하는 이유는 여러 가지가 있다:
데이터가 한 프로세스에서 다른 프로세스로 이동하는 방식은 매우 다양하다.
프로그램은 두 가지 방식의 표현으로 데이터를 처리한다.
애플리케이션은 시간이 지남에 따라 필연적으로 변화한다.
초창기에는 데이터베이스는:
데이터베이스는 두 가지 작업을 수행해야 한다.
키-값 쌍이 연속적으로 저장된 로그 구조의 스토리지 세그먼트를 키-값 쌍의 순서가 키별로 정렬되도록 해보자. 이러한 형식을 정렬된 Sorted String Table 또는 줄여서 SSTable이라고 부른다. SSTable의 각 키는 병합된 각 세그먼트 파일 내에서 한 번만 나타나야...
키-값 데이터에 대한 인덱스는 일반적이며 더 복잡한 인덱스를 위한 유용한 구성 요소다.
다대다 관계는 서로 다른 데이터 모델을 구분하는 중요한 기능이다. 애플리케이션의 대부분이 일대다 관계(트리 구조 데이터)로 구성되었거나, 레코드 간에 관계가 없는 경우 문서 모델이 적합하다. 하지만 데이터에 다대다 관계가 애플리케이션에 일반적 데이터 모델이라면 그래프로 모델링하는 ...
도큐먼트 데이터베이스는 역사를 반복하고 있는가?
데이터 모델은 소프트웨어 개발에서 가장 중요하다. 소프트웨어가 작성되는 방식뿐만 아니라 해결하려는 문제를 생각하는 방식에도 영향을 미치기 때문이다.
성능 저하의 일반적인 원인 중 하나는 부하 증가다. 확장성은 부하 증가에 대처하는 시스템의 능력을 설명하는 용어다. 그러나 확장성을 일차원적으로 보면 안된다. 확장성은 “시스템이 특정 방식으로 확장하는 경우 대처할 수 있는 옵션은 무엇인가?”, “추가 부하를 처리하기 위해 컴퓨팅 ...
신뢰가능하고, 확장가능하며, 유지보수 가능한 애플리케이션
<데이터 중심의 애플리케이션 설계>는 데이터 시스템의 근간이 되는 트레이드오프와 다양한 원리들을 다룬다. 다양한 프로덕트에서 접목할 수 있는 다양한 시스템 디자인들을 탐구해볼 수 있는 명저이다.
다음은 두 트랜잭션의 동시 쓰기 경합 상황이다.
스냅샷 격리(Snapshot isolation)는 읽기만 가능한 트랜잭션에 매우 효과적인 격리 수준이다. 하지만 데이터베이스에 따라 용어를 다르게 사용하고 있다.
커밋된 읽기(read committed)와 스냅샷 격리 (snapshot isolation) 는 동시에 쓰기를 수행할 때 읽기 전용 트랜잭션이 무엇을 보는지를 결정한다.
MVCC는 트랜잭션의 격리(Isolation)을 스냅샷 수준에서 구현한 메커니즘이다. MVCC가 적용된 데이터베이스에서 인덱스는 어떻게 동작할까?
두 트랜잭션이 동일한 데이터를 건드리지 않는다면, 어느 트랜잭션도 다른 트랜잭션에 의존하지 않기 때문에 안전하게 병렬로 실행할 수 있다.
ACID 에서 A(Atomicity)와 I(Isolation)은 하나의 클라이언트가 하나의 트랜잭션 안에서 여러번의 쓰기 연산을 수행할 때 데이터베이스는 어떤 행동을 해야하는지를 설명한다.
트랜잭션은 애플리케이션이 여러 읽기 및 쓰기를 하나의 논리적 단위로 그룹화하는 방법이다. 트랜잭션을 사용하면 일부 작업은 성공하고 일부는 실패하는 경우에 대해 걱정할 필요가 없기 때문에 애플리케이션의 오류 처리가 훨씬 간단해진다.
Reddit은 전세계 사람들이 모여서 각각 고유한 문화를 가진 상호 연결된 커뮤니티다.
스타트업과 벤처 캐피털에서 종종 영업에 타고난 사람들을 만나게 된다. 그들은 영업을 어딘가에서 배웠을 테지만 교실 환경에서 배운 것은 아니다. 그들은 어린 시절 학교 운동장에서 배웠거나 부모님과의 협상을 통해 배웠거나, 일부는 유전적 요소일 수도 있다.
“우리는 데이터에 둘러싸여 있지만 인사이트에 굶주려 있다.” - Jay Baer
Bret Malinowski 의 팟캐스트에서 나온 한 에피소드의 인터뷰 내용을 정리했다.
만약 내가 모든 자산을 잃고 영어권 국가에 아무 도시에 떨어진다고 해도, 나는 부자가 될 수 있다고 생각한다. 왜냐하면 부자가 되는 것은 기술이기 때문이다.
Microsoft Excel은 1985년부터 오랫동안 사랑받아온 소프트웨어이며 엑셀은 가장 영향력있는 소프트웨어다. 스프레드시트는 사용자에게 일종의 초능력을 부여한다. 이러한 초능력으로 사용자는 도메인 영역에 제한 없이 문제를 해결할 수 있다.
리더 기반 복제의 특징은 웹 애플리케이션과 유사하다.
리더 기반 복제는 내부적으로 어떻게 동작하는지 살펴보자.
시스템은 예기치 않은 장애로 인해 다운될 수 있지만, 최신 보안 패치를 설치하기 위해 시스템을 재부팅하는 경우로 인해 다운될 가능성도 있다.
데이터베이스의 복사본을 저장하는 각 노드를 복제본(replica)이라고 한다.
복제는 네트워크를 통해 연결된 여러 컴퓨터에 동일한 데이터의 복사본을 보관하는 것을 말한다. 데이터를 복제해야 하는 이유는 여러 가지가 있다:
Reddit은 전세계 사람들이 모여서 각각 고유한 문화를 가진 상호 연결된 커뮤니티다.
스타트업과 벤처 캐피털에서 종종 영업에 타고난 사람들을 만나게 된다. 그들은 영업을 어딘가에서 배웠을 테지만 교실 환경에서 배운 것은 아니다. 그들은 어린 시절 학교 운동장에서 배웠거나 부모님과의 협상을 통해 배웠거나, 일부는 유전적 요소일 수도 있다.
“우리는 데이터에 둘러싸여 있지만 인사이트에 굶주려 있다.” - Jay Baer
데이터베이스는 두 가지 작업을 수행해야 한다.
키-값 쌍이 연속적으로 저장된 로그 구조의 스토리지 세그먼트를 키-값 쌍의 순서가 키별로 정렬되도록 해보자. 이러한 형식을 정렬된 Sorted String Table 또는 줄여서 SSTable이라고 부른다. SSTable의 각 키는 병합된 각 세그먼트 파일 내에서 한 번만 나타나야...
키-값 데이터에 대한 인덱스는 일반적이며 더 복잡한 인덱스를 위한 유용한 구성 요소다.
데이터가 한 프로세스에서 다른 프로세스로 이동하는 방식은 매우 다양하다.
프로그램은 두 가지 방식의 표현으로 데이터를 처리한다.
애플리케이션은 시간이 지남에 따라 필연적으로 변화한다.
Bret Malinowski 의 팟캐스트에서 나온 한 에피소드의 인터뷰 내용을 정리했다.
만약 내가 모든 자산을 잃고 영어권 국가에 아무 도시에 떨어진다고 해도, 나는 부자가 될 수 있다고 생각한다. 왜냐하면 부자가 되는 것은 기술이기 때문이다.
레코드가 기본 키를 통해서만 접근되는 경우, 해당 키에서 파티션을 결정하고 이를 사용하여 해당 키를 담당하는 파티션으로 읽기 및 쓰기 요청을 라우팅할 수 있다.
대량의 데이터가 있고 이를 분할해서 저장해야한다면, 어떤 레코드를 어떤 노드에 저장할지 어떻게 결정할까?
Microsoft Excel은 1985년부터 오랫동안 사랑받아온 소프트웨어이며 엑셀은 가장 영향력있는 소프트웨어다. 스프레드시트는 사용자에게 일종의 초능력을 부여한다. 이러한 초능력으로 사용자는 도메인 영역에 제한 없이 문제를 해결할 수 있다.
Microsoft Excel은 1985년부터 오랫동안 사랑받아온 소프트웨어이며 엑셀은 가장 영향력있는 소프트웨어다. 스프레드시트는 사용자에게 일종의 초능력을 부여한다. 이러한 초능력으로 사용자는 도메인 영역에 제한 없이 문제를 해결할 수 있다.
Microsoft Excel은 1985년부터 오랫동안 사랑받아온 소프트웨어이며 엑셀은 가장 영향력있는 소프트웨어다. 스프레드시트는 사용자에게 일종의 초능력을 부여한다. 이러한 초능력으로 사용자는 도메인 영역에 제한 없이 문제를 해결할 수 있다.
미루는 습관은 산만함을 먹고 자란다. 대부분의 사람들은 앉아서 아무것도 하지 않는 것만으로도 불편함을 느낀다.
도큐먼트 데이터베이스는 역사를 반복하고 있는가?
다대다 관계는 서로 다른 데이터 모델을 구분하는 중요한 기능이다. 애플리케이션의 대부분이 일대다 관계(트리 구조 데이터)로 구성되었거나, 레코드 간에 관계가 없는 경우 문서 모델이 적합하다. 하지만 데이터에 다대다 관계가 애플리케이션에 일반적 데이터 모델이라면 그래프로 모델링하는 ...
초창기에는 데이터베이스는:
초창기에는 데이터베이스는:
데이터 세트가 매우 크거나 쿼리 처리량이 매우 높은 경우에는 복제만으로는 충분하지 않다. 데이터를 파티션으로 분할하는 샤딩이 필요하다.