Big Data/Designing Data-Intensive Applicatiosn 12

06. 파티셔닝(Partitioning) - 2

파티셔닝(Partitioning) 이전 포스트에 이어서 파티셔닝에서 사용하는 리밸런싱 기법에 관해 살펴보고, 클라이언트에서 질의 요청을 어떻게 처리할 것인지에 관해 알아보겠습니다. 파티션 리밸런싱 리밸런싱이란 클러스터에서 한 노드가 담당하던 부하를 다른 노드를 옮기는 과정입니다. 이러한 리밸런싱이 필요한 경우는 시간이 지나면서 데이터베이스에 변화가 생기기 때문입니다. 예를 들어 질의 처리량이 증가하여 부하를 늘리기 위해 CPU를 추가하거나, 데이터 셋의 크기가 증가하여 디스크와 램을 추가 하는 등의 변화입니다. 이러한 리밸런싱을 위한 전략이 몇가지가 있습니다. 리밸런싱 전략 쓰면 안되는 방법: 해시값 mod N mod 연산을 사용하면 쉽게 각 키를 노드에 할당하는 것이 쉽다. 예를 들어 노드가 10대가 ..

06. 파티셔닝(Partitioning) - 1

데이터셋이 매우 크거나 질의 처리량이 매우 높은 경우 데이터를 파티션으로 쪼개야 합니다. 이번 포스트에서 이야기하는 파티셔닝은 대용량 데이터베이스에서 데이터를 작은 단위로 쪼개는 방법을 말합니다. 몽고DB, 엘라스틱서치, 솔라에서는 샤드라고 하며 HBase에서는 리전, 빅테이블에서는 태블릿(tablet), 카산드라와 리악에서는 vnode, 카우치베이스에서 vBucker이라고 부릅니다. 데이터 파티셔닝의 가장 큰 목적은 확장성을 갖기 위함입니다. 대용량 데이터셋을 파티셔닝하여 여러 디스크에 분산시킬 수 있고, 질의 부하를 분산시킬 수 있습니다. 주로 파티셔닝은 복제(Replication)와 함께 적용해 파티션의 복사본을 여러 노드에 저장합니다. 복제에 관한 설명은 이전 포스트에서 확인할 수 있습니다. 파티..

05. 복제(Replication) - 2

동기식 복제와 비동기식 복제 이전 포스트에 이어서 복제에 관해 살펴보겠습니다. 복제는 동기 또는 비동기적으로 이루어집니다. 동기식 복제는 리더가 해당 팔로워가 쓰기를 수신했는지 확인해줄 때까지 기다리는 방식입니다. 아래의 그림에서는 Follwer1의 복제는 동기식으로 동작합니다. 동기식 복제의 장점은 팔로워가 리더와 일관성 있게 최신 데이터 복사본을 갖는 것을 보장합니다. 동기식의 경우 리더가 동작하지 않아도 데이터는 팔로워에서 계속 사용할 수 있습니다. 그러나 동기적으로 동작하는 팔로워가 응답하지 않는다면 쓰기는 처리될 수 없는 단점이 존재합니다. 즉, 리더는 해당 팔로워가 다시 동작할 때까지 기다려야 하는 문제가 발생합니다. 그렇기 때문에 모든 팔로워가 동기식으로 복제하는 방법은 사용되지 않습니다. ..

05. 복제(Replication) - 1

이번 장의 주제는 복제(Replication)입니다. 복제란 네트워크로 연결된 여러 장비에 동일한 데이터의 복사본을 유지하는 것을 의미합니다. 복제를 통한 이점은 다양합니다. 첫째로, 지리적으로 사용자와 가까운 곳에 데이터가 존재할 수 있어서 지연 시간(latency)을 줄여줍니다. 둘째로, 시스템에 일부 장애가 발생해도 지속적으로 동작할 수 있게 해 가용성(availability)를 높여줍니다. 셋째로, 데이터를 여러 장비로부터 읽을 수 있어서 처리량을 늘려줍니다. 이번 장에서는 노드간 변경을 복제하기 위한 세 가지 접근 방법인 싱글 리더, 멀티 리더, 리더리스 복제에 대해 살펴볼 예정입니다. 또한 복제에 고려해야 할 트레이드오프가 존재하는데 예를 들어 동기식 복제와 비동기식 복제 중 어떤 것을 사용할..

04. 인코딩(Encoding)과 발전(Evolution)

만물은 변하고 그대로 있는 것은 아무것도 없다. - 에베소의 헤라클레이토스, 플라톤이 크라틸로스에서 인용(기원전 360년) 4장은 다음과 같은 인용문으로 시작합니다. 익스트림 프로그래밍에도 나오는 "모든 것은 변한다"라는 말과 일맥상통합니다. 애플리케이션은 시간이 지남에 따라 필연적으로 변합니다. 즉, 요구사항이 변하거나 환경이 변함에 따라 기능이 추가되거나 변경되는 것입니다. 이러한 개념은 1장에서 나온 특성 중 발전성(evolvability)에 의미와 같이 변경 사항은 쉽게 적용할 수 있어야 한다는 의미입니다. 이와 같이 애플리케이션의 기능이 변경하려면 저장하는 데이터도 변경되어야 합니다. 새로운 필드나 레코드 유형을 저장하거나 기존 데이터를 새로운 방법으로 나타내야 할 것입니다. 여러 데이터 모델에..

03. 저장소(Storage)와 검색(Retrieval) - 4

벌써 4번째 포스트입니다. 3장 저장소와 검색은 정리하면서 중요한 개념들이 많이 나와 있어 자세히 정리를 하고 있습니다. 이번 포스트에서는 데이터베이스에 접근하는 방식의 차이에 따라 구분되는 온라인 트랜잭션 처리(online transaction processing, OLTP)와 온라인 분석 처리(online anlaytic processing, OLAP)에 관해 살펴보겠습니다. 트랜잭션 처리와 분석 처리 초창기 비즈니스 데이터 처리는 데이터베이스 쓰기가 보통 상거래(commercial transaction)에 해당했습니다. 그러나 이러한 상거래가 아닌 영역으로 데이터베이스가 확장되었어도 트랜잭션이라는 용어는 그대로 사용하고 있습니다. 데이터베이스에서 트랜잭션은 논리 단위로 읽기와 쓰기와 같은 상호작용의..

03. 저장소(Storage)와 검색(Retrieval) - 3

이전 포스트에 이어서 세 번째 포스트입니다. 이전 포스트에서는 SS테이블과 LSM 트리에 관해 알아보았습니다. 이번 포스트에서는 데이터베이스에서 가장 많이 사용하고 일반적인 색인 유형인 B 트리에 대해서 살펴보겠습니다. B 트리 B 트리는 거의 대부분의 관계형 데이터베이스에서 표준 색인 구현으로 사용할 뿐만 아니라 비관계형 데이터에서도 사용합니다. B트리는 SS테이블과 같이 키로 정렬된 key-value 쌍을 유지하지 때문에 key-value 검색과 range query에 효율적입니다. 이와 같이 LSM 트리와는 유사한 점은 이게 다이고 B 트리의 설계 철학은 매우 다릅니다. LSM 트리는 일반적으로 수 메가바이트 이상의 가변크기를 가진 세그먼트를 나누고 순차적으로 세그먼트를 기록합니다. 반면 B 트리는..

03. 저장소(Storage)와 검색(Retrieval) - 2

이전 포스트에 이어서 저장소와 검색을 계속 살펴보겠습니다. 이전 포스트 마지막 부분에 대한 설명은 해시 테이블을 통한 색인이 가진 제한사항에 대해 살펴보았습니다. 이러한 제한이 없는 색인 구조를 이어서 살펴보도록 하겠습니다. SS 테이블과 LSM 트리 위 그림과 같이 log-structured 저장소 세그먼트는 key-value 쌍의 시퀀스입니다. key-value 쌍은 쓰여진 순서대로 저장되며 로그에서 같은 키를 갖는 값 중 나중 값이 최신 값이 됩니다. 여기에 간단한 변경사항을 적용해 봅시다. 세그먼트를 key를 기준으로 정렬하는 것입니다. 일단 이러한 변경은 순차적으로 쓰는 것을 못하게 할 것 같습니다. 그러나 이러한 문제는 조금 더 뒤에 살펴보도록 하겠습니다. 먼저 세그먼트를 정렬하는거에 집중해봅..

03. 저장소(Storage)와 검색(Retrieval) - 1

이전 포스트에서는 데이터 모델과 질의 언어에 대해 알아보았습니다. 예를 들어 애플리케이션 개발자 관점에서 데이터베이스에 저장하는 데이터 포맷과 데이터를 다시 요청하는 메커니즘과 같은 것들을 살펴보았습니다. 이번 장에서는 데이터베이스 관점에서 데이터를 저장하는 방법과 데이터를 요청했을 때 다시 찾을 수 있는 방법에 대해서 살펴볼 예정입니다. 일반적으로 애플리케이션 개발자는 처음부터 자신의 저장소 엔진을 구현하기 보다는 사용가능한 저장소 엔진중에 애플리케이션 요구사항에 적합한 데이터 모델을 처리할 수 있는 저장소 엔진을 선택합니다. 특정 작업부하(workload) 유형에서 좋은 성능을 내도록 저장소 엔진을 조정하려면 어느 정도 저장소 엔진의 내부적인 이해가 필요합니다. 일반적으로 트랜잭션 작업 부하에 최적화..

02. 데이터 모델(Data Models)과 질의 언어(Query Languages) - 2

이번 포스트는 이전 포스트에 이어서 데이터 모델과 질의 언어에 대한 포스트입니다. 이전 포스트를 보지 않은 분들은 먼저 이전 포스트를 보고 오시는 것을 추천드립니다. 데이터를 위한 질의 언어 데이터베이스에 데이터를 질의하는 방법은 각각의 데이터 모델마다 조금씩 다릅니다. 일반적으로 알고 있는 관계형 모델의 경우는 SQL을 이용합니다. SQL은 선언형 질의 언어입니다. 그리고 선언형(declarative) 질의와 대조되는 질의 방식은 명령형(imperative) 질의 방식이 있습니다. 그러면 선언형과 명령형을 사용하여 데이터를 조회하는 방법을 한번 살펴보겠습니다. 동물의 종 목록이 있을 때 목록에서 상어만 반환하는 질의를 비교해보겠습니다. 먼저 명령형 질의 방식으로 상어를 반환하는 방식은 아래와 같습니다...

반응형