책
-
맵리듀스와 분산 파일 시스템책/데이터 중심 어플리케이션 설계 2024. 6. 27. 13:57
맵 리듀스(MapReduce)는 구글에서 개발한 대용량 데이터 처리를 위한 분산 컴퓨팅 모델이다. 이 모델은 주로 빅데이터를 분석하고 처리하는 데 사용된다. 맵 리듀스는 두 가지 주요 단계로 구성돠는데 크게 맵(Map) 단계와 리듀스(Reduce) 단계이다. 먼저, 맵(Map) 단계에서는 입력 데이터를 여러 조각으로 나누어 각 조각을 병렬로 처리한다.. 각 조각은 키-값 쌍으로 변환되며, 이 쌍들이 중간 결과로 생성된다. 예를 들어, 단어 빈도를 계산하는 경우, 입력 텍스트의 각 단어를 키로, 단어의 출현 횟수를 값으로 하는 쌍이 만들어 질 수 있다. 그 다음, 리듀스(Reduce) 단계에서는 맵 단계에서 생성된 중간 결과를 취합하여 최종 결과를 생성한다. 같은 키를 가진 데이터들을 모아서 지정된 연산을..
-
분산 시스템에서의 일관성 모델: 다이나모 스타일과 완화된 일관성책/데이터 중심 어플리케이션 설계 2024. 6. 26. 23:38
분산 시스템에서 데이터 일관성을 유지하는 것은 매우 중요한 과제이다. 특히, 데이터가 여러 노드에 복제되는 환경에서 일관성을 유지하면서도 성능과 가용성을 높이는 것은 어려운 일이다. 다이나모 스타일 복제를 사용하는 시스템에서의 일관성 모델과 완화된 일관성 모델에 대해 알아보.다이나모 스타일 복제다이나모 스타일 복제(Dynamo-style replication)는 리더 없는 분산 시스템에서 사용된다. 이러한 시스템은 모든 노드가 동일한 역할을 수행하며, 쓰기 및 읽기 요청이 임의의 노드에 분산된다. 이로 인해 특정 노드의 장애가 시스템 전체에 미치는 영향을 최소화할 수 있다.다이나모 스타일 복제를 사용하는 시스템은 궁극적 일관성(eventual consistency)을 제공한다. 궁극적 일관성이란 시간이 ..
-
분산 시스템에서 2PC ( 2-Phase-Commit) 해결책과 한계책/데이터 중심 어플리케이션 설계 2023. 7. 30. 23:26
분산 시스템에서 2PC와 일관성 보장: 해결책과 한계 분산 시스템에서는 여러 노드가 협력하여 작업을 수행한다. 이러한 시스템에서 트랜잭션의 일관성을 보장하는 것은 매우 중요하다. 이를 위해 다양한 방법이 사용되는데, 그 중 하나가 2PC(2-Phase Commit) 프로토콜이다. 2PC는 분산 트랜잭션의 일관성을 보장하지만, 단점도 존재한다. 2PC(2-Phase Commit) 프로토콜2PC의 원리2PC는 두 단계로 구성된다: 준비 단계(Prepare Phase)와 커밋 단계(Commit Phase)이다.준비 단계 (Prepare Phase): 코디네이터는 모든 참가자에게 트랜잭션을 준비할 수 있는지 요청한다. 각 참가자는 준비가 되었는지 여부를 코디네이터에게 응답한다. 모든 참가자가 준비 상태임을 응..
-
합의 알고리즘에 대한 이해책/데이터 중심 어플리케이션 설계 2023. 5. 30. 18:51
분산 시스템에서 합의 알고리즘은 여러 노드들이 하나의 일관된 결정을 내리도록 하는 메커니즘이다. 분산 시스템은 다양한 노드들이 협력하여 작업을 수행하므로, 데이터의 일관성과 신뢰성을 유지하기 위해 합의 알고리즘이 필요하다. 합의 알고리즘은 비잔틴 결함이 없다고 가정하는데 비잔틴 결함이 뭘까? 비잔틴 결함은 분산 시스템에서 발생할 수 있는 가장 심각한 유형의 결함 중 하나이다. 이는 시스템 내 일부 노드가 실패할 때, 단순히 작동을 멈추는 것이 아니라 의도적으로 잘못된 정보를 보내거나 예측할 수 없는 방식으로 행동하여 전체 시스템의 동작을 방해하는 것을 의미한다. 그렇다면 합의 알고리즘에서 비잔틴 결함이 없다고 가정해도 될까?비잔틴 결함의 발생 원인비잔틴 결함은 다양한 원인으로 발생할 수 있다. 첫째는 악..
-
innoDB의 버퍼풀과 리드어헤드책/Real MySql 2021. 8. 12. 09:32
디스크와 인덱스 페이지디스크는 데이터를 영구적으로 저장하는 물리적 장치이다. 데이터베이스는 디스크에 데이터를 저장하고 필요할 때 이를 읽어 메모리로 가져온다. MySQL InnoDB는 데이터를 페이지 단위로 관리한다. 페이지는 데이터베이스의 논리적 저장 단위로, 일반적으로 16KB 크기를 가진다. 하나의 페이지에는 여러 레코드가 저장될 수 있다. 인덱스는 특정 컬럼에 대한 데이터의 위치를 빠르게 찾기 위해 사용하는 구조이다. 인덱스는 디스크에 저장되지만, 인덱스를 이용한 데이터 검색은 페이지 단위로 이루어진다. 인덱스를 통해 관련 페이지를 찾고, 해당 페이지를 메모리로 불러와서 필요한 데이터를 읽는다. 버퍼 풀(Buffer Pool)InnoDB의 버퍼 풀은 메모리 내에서 동작하는 데이터베이스 성능 최적화..
-
인덱스 개수가 늘어날수록 InnoDB 버퍼를 위한 메모리가 더 많이 필요한 이유책/Real MySql 2021. 8. 3. 09:06
InnoDB는 MySQL의 기본 스토리지 엔진으로, 데이터베이스 성능을 최적화하기 위해 다양한 기법을 사용한다. 그중 하나가 버퍼 풀(Buffer Pool)이다. 버퍼 풀은 디스크 I/O를 최소화하고, 데이터베이스의 응답 시간을 단축시키는 중요한 역할을 한다. InnoDB 버퍼 풀(Buffer Pool)의 역할버퍼 풀은 디스크에 저장된 데이터와 인덱스 페이지를 메모리에 캐싱하여, 자주 사용되는 데이터에 빠르게 접근할 수 있도록 한다. 이를 통해 디스크 접근을 줄이고, 데이터베이스 성능을 향상시킨다. 버퍼 풀의 주요 역할은 다음과 같다:데이터 페이지 캐싱: 자주 접근하는 데이터 페이지를 메모리에 유지하여, 디스크 I/O를 줄인다.인덱스 페이지 캐싱: 자주 사용되는 인덱스 페이지를 메모리에 캐싱하여, 인덱..
-
InnoDB 인덱스와 클러스터링 인덱스책/Real MySql 2021. 5. 26. 16:52
InnoDB는 MySQL의 저장 엔진 중 하나로, 높은 성능과 데이터 무결성을 제공한다. InnoDB의 인덱스 구조와 클러스터링 인덱스에 대해 알아보자. InnoDB 인덱스 구조InnoDB에서 인덱스는 B-tree 구조를 사용한다. B-tree는 데이터베이스 인덱싱에서 널리 사용되는 구조로, 데이터를 정렬된 상태로 유지하고 검색, 삽입, 삭제 작업을 효율적으로 수행할 수 있도록 돕는다.B-tree 인덱스B-tree 인덱스는 여러 노드로 구성되며, 각 노드는 다음과 같은 구성 요소를 포함한다:루트 노드(Root Node): 트리의 최상위 노드로, 데이터베이스가 인덱스 검색을 시작하는 지점이다.내부 노드(Internal Node): 루트 노드와 리프 노드 사이에 위치한 노드로, 자식 노드로의 포인터를 포함..
-
OOP 객체지향처럼 생각해보기 2책/객체지향의 사실과 오해 2020. 12. 21. 20:43
인터페이스 정리하기 전 글에서 우리가 얻어낸 것은 객체들의 인터페이스입니다. 객체가 수신한 메시지가 객체의 인터페이스를 결정한다는 사실을 기억해야 합니다. 메시지가 객체를 선택했고, 선택된 객체는 메시지를 자신의 인터페이스로 받아들입니다. 각 객체를 협력이라는 문맥에서 떼어내어 수신 가능한 메시지만 추려내면 객체의 인터페이스가 됩니다. 객체가 어떤 메시지를 수신할 수 있다는 것은 그 객체의 인터페이스 안에 메시지에 해당하는 오퍼레이션이 존재한다는 것을 의미합니다. 각 객체별로 설명하면 다음과 같습니다. 손님 객체의 인터페이스 안에는 ‘제품을 주문하라’ 라는 오퍼레이션이 메뉴판 객체의 인터페이스 안에는 ‘메뉴 항목을 찾아라’ 라는 오퍼레이션이 바리스타 객체의 인터페이스 안에는 ‘커피를 제조하라’ 라는 오퍼..