Professional Documents
Culture Documents
ch20~ 최적화
ch20~ 최적화
ch20~ 최적화
병렬 및 분산 데이터베이스
을다룬다.
881
데이터베이스 시스템 구조
이스 구조 전반에 대해 소개한다.
如•1 개요
883
884 PART 8 병렬 및 분산 데이터베이스
도 병렬적으로 실행된다.
역할을 담당한다.
재하지 않을 수도 있다. 이러한 시스템의 경우, SQL 대신 데이터 접근을 위한 API를 제공하기도
한다. 이것을 내장 데이터베이스(embedded database)라고 하는데, 그 이유는 이 시스템을 일반적
으로 단일 응용 프로그램에 연결할 수 있도록 설계하였고 오직 해당 응용 프로그램으로부터만 (해
의의 형식이거나, API를 사용하여 지정된 데이터의 검색, 저장, 갱신에 대한 요청일 수 있다.
병렬화는 소프트웨어 시스템 설계, 특히 데이터베이스 시스템 설계에서 중요한 문제로 여겨져
오0.3 서버 시스템 구조
I,
ス 튜플, 객체 등 파일보다 더 작은 데이터 단위도 지원한다. 또한 데이터 서버는 데이터에 대한
인덱스 기능을 제공하며, 트랜잭션 기능을 통해 클라이언트 장치나 프로세스가 고장 난 경우에
프로세스가 있다.
• 버퍼 풀
• 잠금테이블
노트20.1 원자적명령어
이러한 상호 배제는 세마포어 (sem叩hore)라 불리는 운영체제 함수를 사용해서 구현할 수 있다.
오버헤드가 덜한 대안으로는, 컴퓨터 하드웨어가 지원하는 원자적 명령어(atomic instruction)를 사
있다.
음의 단계를 실행한다.
18.1.4절에서 설명했다.
4. 잠금 테이블의 뮤텍스를 해제한다.
890 PART 8 병렬 및 분산 데이터베이스
이언트 장치에서 모든 처리를 수행한 다음, 새로운 데이터 또는 갱신된 데이터를 다시 서버 시스템
데이터 서버는 전체 데이터 항목의 통신을 지원한다. (매우 큰 데이터 항목의 경우, 전체 데이터
20 .3.3 클라이언트의 캐싱
데이터 중 일부는 처리되는 곳과 다른 장치에 저장될 수 있다. 최적화 전략은 다음을 포함한다.
적으로 요청을 보내는 경우, 네트워크 대기 시간으로 인한 상당한 지연이 발생할 수 있다.
이 튜플은 캐시에 존재하지 않을 수 있다. 트랜잭션은 서버에 접속하여 이러한 튜플을 찾아야 할
수도 있다.
트 장치에 캐시될 수 있다. 클라이언트가 캐시에서 데이터 항목을 발견하고, 캐시에 존재하는 데
항목에 대한 접근은 서버와 아무런 통신 없이 진행될 수 있다. 그렇지만 서버는 캐시된 잠금에
는 더 미세한 단위의 잠금을 획득하고 굵은 단위의 잠금을 해제함으로써 서버에 응답을 보낸다.
금하지 않은) 캐시된 데이터 항목에 대한 것이었다면, 더 미세한 단위의 잠금을 획득하는 대신
오0.4 병렬 시스템
지는 않다.
20.4.2 병렬 시스템의 성능 평가 요소
있다.
를 증가시킨다고 해 보자. 목표는 프로세스 개수와 할당된 디스크 숫자에 반비례하는 시간에 작업
7;이라고 가정하자. 그러면 규모 증대는 TjTi로 정의할 수 있다. 만약 작업。에 대해서 Tl = Ts라
면, 병렬 시스템 順은 선형 규모 증대(linear scaleupX 보인다고 말한다. 만약 TL > 라면, 시스
problem size----►
그림 20.3 문제 크기와 자원이 증가함에 따른 규모 증대
경로가 된다. 하지만 규모 증대 기준을 사용하는 경우에는 절대적인 성능 수치도 살펴보아야 한다.
두 감소시킬 수 있다.
3 예를 들어. 특정 지역의 대기를 한 변의 길이가 200m인 정육면체로 나누는 날씨 시뮬레이션은한 변의 길이가 100m인 정육
면체를 이용하여 더 미세한 해상도를 갖도록 수정할 수 있다. 따라서 정육면체의 개수는 8배로 늘어난다.
896 PART 8 병렬 및 분산 데이터베이스
러나 순차적 부분에 걸리는 시간이 문제의 크기에 따라 증가하지 않는다면 문제 크기가 커지더
한 서비스 시간을 결정하게 된다. 작업을 정확하게 같은 크기로 나누는 것이 어려울 수 있는데,
20.4.3 상호 연결 네트워크
匚1口TFTコ
(a) bus (b) ring
그림 20.4 상호 연결네트워크
어 있고, 3차원 메시에서 각 노드는 (최대) 여섯 개의 인접한 노드에 연결되어 있다. 그림 20.4c
2
는 차원 메시를 보여 준다. 직접 연결되지 않은 노드 간의 통신은 서로 간에 직접 연결된 일련
를 확장하기가 더욱 쉽다.
결되게 된다. 따라서 〃개의 구성요소 각각은 log(")개의 다른 구성요소에 연결되어 있다. 그림
20.4d는 여덟 개의 노드를 갖는 하이퍼큐브를 보여 준다. 하이퍼큐브 상호 연결에서 한 구성요
사용되지 않는다.
하고, 모든 집계 스위치는 차례로 코어 스위치 (core switch)에 연결된다. 이러한 구조는 3계층
(three-tiers)의 트리 토폴로지(tree topology)가 된다. 트리 상단의 코어 스위치는 외부 네트워크
Chapter 20 데이터베이스 시스템 구조 899
에 대한 연결도 제공한다.
回Hヱコ
画卜「M
回卜せ가
叵卜[セコ
財トロ가
그림 20.5 병렬 데이터베이스 구조
현하는 데 사용된다. 다양한 버전의 표준이 수년간 증가한 대역폭을 지원해 왔는데, 2이 1 년에는
20.4.4 병렬 데이터베이스 구조
• 공유 디스크(Shared disk): 노드의 집합은 공통의 디스크 집합을 공유한다. 각 노드는 スト체 프로
킨다(그림 20.5c).
사용된다.
20.4.5 공유 메모리
공유 메모리 구조에서 프로세서는 보통 상호 연결 네트워크를 통해서 공통 메모리에 접근하며 디
점 더 중요해지고 있다.
20.4.5.1 공유메모리 구조
4 인텔의 공동 설립자인 Gordon Moore는 1960년대에 트랜지스터의 수가 기하급수적으로 증가할 것으로 예측했다. 그의 예
측은 기술적으로는 법칙이 아닌 관찰이자 예측이지만, 무어의 법칙(Moore's law)으로 널리 알려져 있다. 초기 수십 년 동안
공정 미세화 기술에 따라 프로세서의 속도는 증가했지만. 전력 소비 및 발열이 자연스럽게 증가하여 수 기가헤르츠(Hz) 이
상의 프로세서 클럭 주파수(이ock frequency)를 달성할 수 없었기에. 그 추세는 2000년대 중반에 끝났다. 무어의 법칙은 가
끔 프로세서 속도의 기하급수적인 증가를 예측한 것으로 잘못 해석되기도 한다.
Chapter 오0 데이터베이스 시스템 구조 903
I/O
Controller
Memory
I/O
Controller
코어의 개념이 나타난 이유는 다음과 같다. 만약 (메모리에서 데이터를 가져오기를 기다리는) 캐시
일반적으로 64개의 연속적인 바이트로 구성되는 캐시 라인(cache line) 단위로 캐시에서 읽거나 캐
시에 기록된다.
20.4.5.2 캐시 일관성
그림 20.7 다층의캐시시스템
서 메모리 위치에 갱신이 발생할 때마다 다른 캐시에 저장된 해당 메모리 위치 내용의 복사본을 무
효화해야 한다.
화 메시지를 처리하는 데 추가로 지연이 발생할 수 있다. (항상 즉각적인 무효화 처리를 하는 방법
캐시 일관성이 떨어지면 프로세스가 갱신된 메모리 위치를 보기를 기대하지만 그렇지 못하는
용되어야 한다. 메모리 장벽을 사용하지 않아서 캐시가 “강력한” 일관성을 유지하지 않는다면, 다
그램이 데이터에 접근하기 전에 잠금을 획득하고 갱신을 수행한 후에만 잠금을 반납하는 한 캐시
일관성을 유지하기 위한 부가적인 코드를 포함할 필요가 없다. 구체적으로 살펴보면, 데이터 항목
게, Ifence 명령어는 (잠금 획득 기능의 일부로) 데이터 항목을 잠근 직후에 (그리고 데이터 항목을
및 독점적 잠금을 사용한다는 점도 흥미롭다. MESI라 불리는 널리 사용되는 규약은 다음과 같다.
개별 메모리 위치에 대한 잠금을 지원하는 대신, 여러 메모리 위치를 포함하는 캐시 라인 수준에서
지 않는 대신, (무효화 메시지의 지연된 배달을 허용하는 것과 같이) 처리 속도를 높이는 최적화 방
장벽 명령어가 필요하다.
20.4. 6 공유 디스크
I
공유 디스크 모델에서 각 노드에는 ス 체 프로세서와 메모리가 있지만, 모든 노드는 상호 연결 네트
워크를 통해 모든 디스크에 직접 접근할 수 있다. 이 구조는 공유 메모리 구조와 비교하면 두 가지
906 PART 8 병렬 및 분산 데이터베이스
수 있다는 점이다. 둘째. 이 구조가 어느 정도의 고장 허용을 싼값에 제공할 수 있다는 점이다. 만일
12장에 나오는 것처럼 이러한 디스크 서브시스템 자체를 RAID 구조를 사용하여 장애 허용하게
할 수 있으므로, 개별 디스크가 고장이 나더라도 시스템이 잘 작동할 수 있다. RAID 시스템에 많
인했다.
그림 20.8 SAN
Chapter 20 데이터베이스 시스템 구조 907
20.4. 7 비공유
비공유 시스템에서 각 노드는 하나의 프로세서 메모리 그리고 한 개 이상의 디스크로 구성된다.
20.4. 8 계층형
계층형 구조는 공유 메모리, 공유 디스크, 비공유 구조의 특성을 결합한다. 최상위 수준에서 살펴보
공유하지는 않는다. 따라서 최상위 수준에서는 비공유 구조를 갖는다. 시스템의 각 노드는 실제로
스템이고, 일련의 디스크 집합을 공유하는 각 시스템이 공유 메모리 시스템을 이룰 수 있다. 그래서
하위에는 소수의 프로세서를 가지는 공유 메모리 구조, 상위에는 비공유 구조를 가지며, 중간은 공
유 디스크 구조를 가지는 계층형으로 시스템을 구성할 수 있다. 그림 20.5d는 공유 메모리 노드를
갖고 있으며 서로가 비공유 구조로 연결된 계층형 구조를 보여 준다.
20.5 분산 시스템
그림 20.9 분산 시스템
워크에 비해 네트워크 연결의 대역폭이 낮고, 대기 시간이 길며, 장애가 발생할 가능성이 크다.
경우가 많다.
에서 관리된다는 것이다.
특성을 갖는다.
트랜잭션이 두 노드에 걸쳐서 동작하는 경우, 시스템 설계자가 주의를 기울이지 않으면 한 노드에
규약은 이러한 상황이 일어나지 않도록 보장해 준다. 2단계 커밋 규약(two-phase commit protocol,
비(ready) 상태로 불린다. 트랜잭션을 수행하는 모든 노드가 준비 상태가 되었을 때에만 조정자는
트랜잭션을 커밋하도록 결정한다. 그렇지 않은 경우(예를 들어, 어떤 노드에서 트랜잭션을 중단한
한다.
5 네트워크 분할(network partitioning)이라는 용어와 데이터 분할(data partitioning)이라는 용어를 혼동해서는 안 된다. 데이터
분할은 데이터 항목을 여러 노드에 저장할 수 있는 분할로 나누는 것을 말한다.
Chapt이• 20 데이터베이스 시스템 구조 911
노드에서 지역적으로 수행될 것이다. 하지만 복수의 노드에서 발생한 트랜잭션에 관련된 교착 상
태의 가능성은 여전히 존재한다. 따라서 교착 상태 탐지를 복수의 노드에 걸쳐서 수행할 필요가 있
있도록 하는 데이터 항목의 복제는 동시성 제어를 더욱 복잡하게 만든다. (잠금 기반 기법을 기술
이와 반대로, 클라우드 컴퓨팅 (cloud computing) 모델의 경우, 다른 회사가 관리하는 인프라상
에서 기업의 응용 프로그램을 실행한다(보통 여러 기업이나 사용자가 사용하는 많은 장치를 데이
다양한 업체가 클라우드 서비스를 제공하는데, 여기에는 Amazon, Microsoft, IBM 및 Google
과 같은 대규모 공급업체는 물론 작은 규모의 공급업체도 있다. 클라우드 서비스의 선구자 중 하나
는 불과 몇 년 만에 매우 큰 인기를 얻게 되었다.
Platform-as-a-Service
Data storage, Database,
Application server,...
Infrastructure-as-a-Service
Containers
Virtual Machines
Servers Storage
그림 20.10 클라우드서비스 모델
제한적이다.
이터의 양에 따라 결정된다.
공되고 있다.
렴해지긴 했지만 컴퓨터에 전력을 공급하고 유지하는 데에는 여전히 비용이 든다. 가상 머신을 사
용하면 이러한 비용을 여러 사용자끼리 나누어 부담할 수 있다. 또한 가상 머신은 새로운 장치로
그림 20.11 응용 프로그램배치 대안
이다.
라이언트 기업이 대규모 시스템 지원 인력을 유지해야 할 필요성을 줄여 주고, 신생 기업이 컴퓨팅
시스템에 대규모의 초기 자본을 투자하지 않고도 운영을 시작할 수 있도록 해 준다. 게다가 기업의
클라우드 컴퓨팅 사용자는 자신의 데이터가 다른 기관에 보관된다는 사실을 기꺼이 받아들일
으로부터 제기된 법적 책임에 직면할 수 있다. 그러나 클라이언트는 클라우드 공급업체의 보안에
한다.
이러한 단점에도 불구하고, 클라우드 서비스의 이점은 충분히 크고, 클라우드 서비스 시장은 빠
르게 성장하고 있다.
20.8 요약
• SAN은 근거리망의 특별한 형태로, 대량의 저장 장치와 컴퓨터 사이의 고속 상호 연결을 제공하
도록 설계되었다.
• 클라우드 서비스는 다양한 수준으로 제공된다. 서비스로서 인프라는 클라이 언트가 자기 자신의
• 클라우드 서비스를 사용하는 기관은 데이터가 원격 위치에 저장될 가능성을 인지하여 데이터의
고려해야 한다.
용어정리
。 내장데이터베이스 • 집계 스위치
〇 서버 • 이더넷
° 굵은 단위 병렬화 • 파이버 채널
° 미세 단위 병렬화 • 인피니밴드
• 서버 시스템 구조 • 원격 직접 메모리 접근(RDMA)
O 트랜잭션 서버 • 병렬데이터베이스구조
0 질의 서버 ° 공유 메모리
° 데이터 서버 시스템 ° 공유 디스크
。서버 프로세스 ° 클러스터
• 상호배제 。 비공유
• 원자적 명령어 。계층형
• 데이터 캐싱 • 무어의법칙
• 병렬시스템 • 불균일 메모리 구조(NUMA)
。굵은 단위 병렬 장치 • 캐시 미스
° 대규모 병렬 장치 • 하이퍼 스레딩
。미세 단위 병렬 장치 • 하드웨어스레드
。데이터 센터 • 캐시
• 의사결정지원질의 • 공유디스크
• 성능측정 • 고장허용
0 처리량 • SAN
° 응답 시간 • 분산데이터베이스시스템
° 선형 속도 향상 • 지역자치성
。 선형보다 낮은 속도 향상 • 동종 분산데이터베이스
° 선형 규모 증대 • 연합데이터베이스시스템
° 선형보다 낮은 규모 증대 • 이종 분산 데이터베이스시스템
• 순차적 계산 • 지연시간
• 암달의 법칙 • 네트워크분할
• 초기 가동 비용 • 가용성
• 상호연결네트워크 • 클라우드컴퓨팅
〇 버스 • 서비스로서 인프라
〇 고리 , 서비스로서 플랫폼
° 메시 • 클라우드 기반 데이터 저장소
。 하이퍼큐브 • 서비스로서 데이터베이스
° 트리형 • 서비스로서 소프트웨어
。엣지 스위치 • 마이크로서비스구조
Chapter 20 데이터베이스 시스템 구조 919
실전문제
20.7 공유 메모리 구조에서 접근하려는 메모리 위치에 따라 메모리 접근 시간이 달라지는 이유는 무
엇인가?
20.9 조인과 같은 일부 데이터베이스 명령은 데이터(예를 들어, 조인과 관련된 릴레이션 중 하나)가
메모리에 전부 올라올 경우와 그렇지 않은 경우, 속도에 상당한 차이를 보인다. 이러한 사실이
어떻게 선형보다 높은 속도 향상의 현상을 설명할 수 있는지 보여라. 선형보다 높은 속도 향상에
서 응용 프로그램은 자신에게 할당된 자원의 양보다 더 큰 속도 향상을 보일 수 있다.
20.11 다른 클라우드 서비스 모델에서 제공하는 서비스보다 그냥 기본적인 서비스로서 인프라 모델만
구독하는 클라이 언트가 흔하다. 그 이유는 무엇인가?
20.12 데이터가 외부 저장 장치에 있다고 가정한다. 클라우드 컴퓨팅 서비스가 서비스 제공업체의 실
제 장치에서 직접 실행하는 것보다 가상 머신을 사용하는 것이 전통적인 데이터베이스 시스템을
잘 지원하는 이유는 무엇인가?
920 PART 8 병렬 및 분산 데이터베이스
연습문제
20.13 각자 데이터베이스 시스템을 운영하는 사이트의 모임을 가진 은행에 대해 생각해 보자. 데이터
베이스가 서로 소통할 수 있는 유일한 수단이 영속 메시지 처리를 통해 서로 돈을 전자적으로 전
송하는 방법뿐이라고 해 보자. 이와 같은 시스템이 분산 데이터베이스로서 자격이 있겠는가? 그
이유는 무엇인가?
20.18 메모리에 대한 단일 인터페이스가 있었던 이전의 구조들과는 달리, 오늘날의 메모리 시스템은
주어진 시간에 각각 별도의 요청을 처리할 수 있는 여러 모듈로 나뉜다. 이러한 메모리 구조는
공유 메모리 시스템에서 지원될 수 있는 프로세서의 수에 어떤 영향을 미치겠는가?
20.21 주요 데이터베이스 공급업체가 자사의 데이터베이스 시스템(예를 들어, Oracle, SQL Server
DB2)을 클라우드 서비스로 제공한다고 가정하자. 이는 클라우드 서비스 모델 중 어느 모델에 적
합한가? 그 이유는 무엇이 겠는가?
더 읽어보기
참고문헌
[Abts and Felderman (2012)] D. Abts and B. Felderman, “A Guided Tour of Datacenter Networking",
Communications of the ACM, Volume 55, Number 6 (2012), pages 44-51.
[Gray and Reuter (1993)]
J. Gray and A. Reuter, Transaction Processing: Concepts and Techniques,
Morgan Kaufmann (1993).
[Hennessy et al. (2017)]J. L. Hennessy, D. A. Patterson, and D. Goldberg, Computer Architecture:
A Quantitative Approach, 6th edition, Morgan Kaufmann (2017).
[Ozsu and Valduriez (2010)] T. Ozsu and P. Valduriez, Principles of Distributed Database Systems,
3nd edition, Prentice Hall (2010).
크레딧
병렬 및 분산 데이터 저장소
21.1 소개
nothing) 병렬 데이터베이스 시스템에 초점을 맞추고 있지만, 이러한 기술은 데이터가 지리적
(geographically)으로 분산 저장되어 있는 분산 데이터베이스 시스템에도 적용될 수 있다.
여러 개의 노드에서 동작하는 분산 파일 시스템(distributed file system)은 병렬 시스템에서 데이
병렬 키-값 저장소 (key-value store)가 종종 사용된다. 여기서 설명하는 관계형 데이터 저장을 위한
병렬 저장소 기술은 21.7절에서 논의하는 키-값 저장소에도 사용될 수 있다. 이 책에서 데이터 저
923
924 PART 8 병렬 및 분산 데이터베이스
21.2 데이터분할
밑단에서 RAID 시스템은 블록을 다수의 디스크에 분할하여 이들을 병렬 접근할 수 있도록 한
로빈 방식에서 번째 블록을 ii mod 〃번째 디스크에 할당한다. 하지만 RAID 시스템을 이용하는 블
록 단위 분할 기법은 릴레이션의 튜플이 특정 디스크나 노드에 저장되도록 지정할 수 없다. 따라서
할하는 것에만 초점을 맞추고, 각 노드 안에서 블록과 디스크를 할당하는 것은 해당 노드의 운영체
제에 위임한다.
않는다고 가정하면, 릴레이션 r(A, B. C, 0)는 r(A, B)와 r(A, C, D)로 수직 분할될 수 있다. 튜플은
수평 분할된 이후에도 각 노드에 서 다시 수직 분할될 수 있다.
의미한다.
21.2.1 분할기법
[15,40)
[40, 75)
[ 75, +이
그림 21.1 범위 분할벡터의예
• 라운드-로빈 (Round-robin). i
이 기법은 릴레이션을 순서대로 읽어서, 번째 튜플을^(,.1)modn)+1
번째 노드로 보낸다. 이 기 법은 튜플을 노드에 균등하게 분할하기 때문에 각 노드는 대략 비슷한
수의 튜플을 가지 게 된다.
분할 속성으로 사용한다. 이때 {1, 2, ..., “}의 범위를 가지는 해시 함수를 선택한다. 릴레이션
X < %일 경우에『는 노드 N、로 간다. X > 匕-일 경우에 /는 노드 N”으로 가게 되며, v, <x< vi+l
인 경우에 f는 노드 N+i로 가게 된다.
1로 배치된다. [15, 40)의 범위를 가지는 값(값이 15보다 크거나 같고 40보다는 작은)은 노드 2로
배치되며, [40, 75)의 범위를 가지는 값(값이 40보다 크거나 같고 75보다는 작은)은 노드 3으로 배
21.2.2 분할 기법비교
검색할 수 있다. 비슷하게 릴레이션이 분할될 때에도 여러 노드에 병렬로 기록될 수 있다. 따라서
1. 전체 릴레이션 읽기(scan)
2. 특정 속성에서 특정한 값을 가지는 튜플을 찾는(예를 들어, ”叩/。yeeー〃a 〃[e="Campbell") 점
질의 (point query) 처리
3. 주어진 속성값이 특정한 범위 내에 속하는 모든 튜플을 찾는(예를 들어, 10.000 < salary <
20,00〇) 범위 질의 (range query) 처리
다양한 분할 기법이 서로 다른 수준의 효율성을 가지며 이러한 형태의 접근을 지원한다.
드를 탐색해야 한다.
분할 유형은 22.3절과 22.4.1 절에서 살펴볼 조인과 같은 다른 관계형 연산에도 영향을 미친다.
따라서 분할 기법을 선택할 때에는 어떤 연산을 필요로 하는지도 고려해야 한다. 일반적으로는
오1.3 분할에서치우침처리
이 서장되는 치우침이 발생할 수 있다. 이러한 데이터 분배의 불균형을 데이터 분배 치우침 (data
distribution skew)이라고 한다. 데이터 분배 치우침은 아래의 두 가지 원인 중 하나에 의해 일어날
수 있다.
• 속성값 치우침은 분할 속성에서 다수의 튜플이 특정한 값을 가지는 경우를 말한다. 분할 속성에
를 말한다.
928 PART 8 병렬 및 분산 데이터베이스
(timestamp)로 분할되며 최근에 많은 수의 튜플이 쌓였다고 가정해 보자. 그러면 분할이 동일한 수
의 튜플을 가진다 해도 최근의 튜플을 담고 있는 분할이 더 높은 부하를 받을 것이다.
킨다.
한다.
그림 21.2 히스토그램의 예
나면 튜플이 삽입, 삭제되거나 수정되더라도 자동적으로 변경되지 않는다. 시스템이 데이터 분배의
1
법으로는 라운드-로빈 할당이 있다. 만약 부터 "까지의 번호를 가지는 〃개의 실제 노드가 있다고
최소화할 수 있다.
시스템은 이 연결에 관해 기록하고, 이를 실제 노드에 접근할 때 사용한다. 만약 가상 노드에 연
i
real_map[] 배열에 저장될 수 있다. 이 배열의 번째 원소에는 가상 노드,와 연결된 실제 노드가
담겨 있다.
21.3.3 동적재분할
치우침은 전체 스키마 분할을 재계산함으로써 해결할 수 있다. 하지만 새로운 스키마 분할에 기
하면 된다.
광범위하게 사용된다. 데이터 저장소 시스템에서 용어 테이블 (table)은 데이터 항목의 모음을 나타
그림21.3 분할테이블의예
드에 보내어 처리한다.
드로 전달한다.
이러한 방법에 기반한 분산 해시 테이블 (distributed hash table)은 마스터 노드나 라우터를 필요
로 하지 않는다. 대신 각 분할 노드는 몇 개의 다른 동료 노드를 추적하고, 서로 협 력하는 방식으로
고한다.
21.4 복제
21.4.1 사본의위치
실이나 불가용성을 방지할 방법은 없다. 데이터 저장소로 저가 사용 장비를 사용하는 시스템의 경
따라서 분할의 사본이 저장되는 노드의 위치는 장애가 발생해도 최소 하나의 사본에는 접근할
4 캐싱(caching)도 일종의 데이터 복제와 같으나 그 목적은 데이터 접근 속도를 높이는 데 있다. 또한 캐시에 있는 데이터는 언
제든 사라질 수 있기 때문에 장애 발생 시 가용성(availability)을 보장하지 않는다.
934 PART 8 병렬 및 분산 데이터베이스
복제되어 있을 수 있다.
노드에도 복제한다.
진이나 폭풍과 같이 해당 지역의 모든 데이터 센터가 폐쇄되는 재난에 대응하는 중요한 요소다.
된다.
M에 분할“에서 P9까지의 사본이 하나씩 저장되어 있다고 가정하면, 분할0의 다른 사본은 %에,
〃는 做에 저장되는 방식으로 계속되어 pg의 다른 사본은 乂。에 저장된다. 이런 경우 乂의 장애가
21.4.2 사본의갱신과일관성
을 가지고 있기 때문에 어떠한 사본을 읽어도 내용이 동일하다. 만약 저장소 시스템의 모든 사본이
한 것은 2362절에서 소개한다.
936 PART 8 병렬 및 분산 데이터베이스
오 1.5 병렬인덱스
• 지역 인덱스 (local index)는 특정한 노드에 담긴 튜플에 대해 인덱스를 만드는 것이다. 일반적으
로 이러한 인덱스는 주어진 릴레이션의 모든 분할에서 생성된다. 인덱스는 데이터와 같은 노드
에 저장된다.
특정한 ID 값(예를 들어 ID 값 557)을 가지는 튜플을 검색하는 질의를 생각해 보자. 질의는 먼저
ID의 분할 함수를 사용하여 지정된 ID 값 557을 포함하고 있을 수 있는 분할을 찾고, 해당 노드에
보내진다. 이 노드들은 필요한 튜플의 위치를 찾기 위해 ID 값에 대한 지역 인덱스를 가지고 있다.
릴레이션에서 전역 2차 인덱스 (global secondary index)는 인덱스 속성이 튜플의 분할에 사용된
속성과 일치하지 않는 전역 인덱스다.
Tablet 1 Tablet 6
자. 이러한 인덱스를 구성하는 가장 간단한 방법은 student 튜플당 하나의 (name, ID) 튜플 집합을
만드는 것이다. 이제 이 튜플 집합을 index_name—S. 부르도록 흐卜자. 그러면 각 index_name 분할
ID 값에 대한 전역 인덱스가 사용된다.
한 전역 인덱스를 만들고 싶을 경우, 다음의 속성을 포함하는 새로운 릴레이션 厂:를 만든다.
938 PART 8 병렬 및 분산 데이터베이스
1. K와.
2. 만약 분할 속성 「가 중복을 가지면, 속성 K“를 추가하여 인덱스를 구성할 릴레이션의 키 값으
로 K„ U K,를 사용한다.
릴레이션 片는 (에 따라 분할되고 K,에 대해 지역 인덱스가 만들어진다・ 王한 속성 (ム, K“)에 대한
r
지역 인덱스는 릴레이션 의 각 분할마다 생성된다.
commit)을 사용할 수 있다. 만약 2차 인덱스가 가장 최신의 상태를 유지할 필요가 없다면, 23.2.3
절에 설명하는 영속 메시징 기법에 기반한 다른 방법을 사용할 수도 있다.
21.6 분산 파일시스템
클라이언트가 파일에 접근하거나 파일을 식별하기 위한 파일의 이름과 경로가 있다. 클라이언트는
않으면 성능을 저하시킬 수 있다. GFS와 HDFS의 경우, 네임노드 (namenode)로 불리는 단일 노드
에 파일 시스템 메타데이터를 저장하는 단순하고 실용적인 접근 방식을 채택하고 있다.
그림 21.7 하둡 파일 시스템(HDFS)의 구조
(acknowledgment)이 전송된다.
파일이 갱신될 경우 복제로 인해 데이터의 사본 간에 동시성 문제가 야기된다. 예를 들어 하나
의 데이터 블록이 갱신되었으나 시스템 장애로 인해 다른 사본은 갱신되지 못했다고 가정해 보자.
일반적으로 데이터 저장소 시스템은 23장에서 학습하는 기술을 이용하여 일관성을 유지해야 하
의 각 블록이 생성되면 이 블록은 사본에 복사된다. 파일은 닫히기 (closed) 전까지 읽을 수 없는데.
즉 데이터가 파일에 써지고 블록이 자신의 모든 사본에 성공적으로 복사될 때까지 기다려야 한다.
근 모델이라고 한다. GFS와 같은 다른 시스템은 갱신을 허용하며, 불일치 상태를 감지하여 사본에
쓰기 작업 중 장애 발생에 대처할 수 있지만, 트랜잭션(원자적) 갱신을 지원하지는 않는다.
도 한다. 만약 시스템이 데이터 항목을 위한 스키마의 정의를 지원하면, 시스템은 데이터 항목의 특
2
정 속성값에 대한 차 인덱스를 만들고 유지하는 것이 가능하다.
• 일부 저장소는 관계형 데이터 저장소와 유사하게 열 이름을 스키마 정의의 일부로 지정할 수 있다.
일부 사람들의 경우, 어떠한 형태의 스키마도 지원하지 않고, 값을 해석되지 않은 바이트의 나열로
장소로는 Megastore, Google의 Spanner, 그리고 Yahoo!의 Sherpa/PNUTS가 있다. 반정형 데이터
(문서 저장소로 알려진)를 지원하는 키-값 저장소로는 Couchbase, Amazon의 DynamoDB 그리고
5 역자주 행(row)이 아니라 열(column) 단위로 데이터를 저장하는 방식으로 "칼럼 스토어-라고 번역하는 경우도 있다.
Chapter 21 병렬 및 분산 데이터 저장소 943
리 키-값 저장소다.
때문에 완전한 형태의 데이터베이스는 아니다. 키-값 저장소가 일반적으로 지원하지 않는 기능에
21.7.1 데이터표현
응용이 접근한다. 이 프로필에는 다양한 속성이 포함되어 있으며, 프로필의 속성에 값이 추가되는
상황이 빈번하다. 특히 일부 속성은 복잡한 데이터를 가지고 있어서 간단한 관계형 모델로는 적합
하게 표현하기 어렵다.
면 레코드 식별자만으로 만들어 진 접두사 일치 질의를 사용한다. get() 함수는 속성의 이름과 값을
반환한다. 레코드의 모든 속성을 효과적으로 찾기 위해서는 저장소 시스템의 엔트리(entry)가 키에
따라 정렬되어 있어 특정한 레코드의 속성값이 함께 모여 있어야 한다.
edu.yale.cs.www/people/silberschatz.html
로 대응시킬 수 있다.
경우에 따라 데이터 저장소 시스템은 여러 버전의 데이터 항목을 저장할 수 있다. 버전을 식별하
이 절에선 2133절에서 설명한 분할을 태블릿이라 부르기로 한다. 또한 태블릿 서버 (tablet server)
는 특정한 태블릿의 서버 역할을 하는 노드를 지칭하며, 이 서버에는 특정 태블릿과 연관된 모든
스터 사본 역할을 하는 노드다. 7
마스터 (master)는 분할 정보의 마스터 복제본을 가지는 사이트를 지칭하며, 분할 정보에는 각 태
블릿과 해당 태블릿이 가지는 키 범위, 태블릿의 사본을 가지고 있는 사이트 그리고 이 태블릿의
8
현재 태블릿 서버 등이 담겨 있다. 마스터는 태블릿 서버의 상태를 추적해야 한다. 만약 어떤 태블
릿 서버에 장애가 발생하면, 마스터는 이 태블릿의 사본을 가지고 있는 다른 노드를 지정하여 새로
운 태블릿 서버로 동작할 수 있게 한다. 또한 마스터는 시스템에 새로운 노드가 추가되거나 특정한
어야 한다.
은 라우터 사이트 중 하나로 보내지고, 요청을 받은 라우터 사이트는 적합한 태블릿 마스터로 요
닐 수 있다. 식별된 태블릿 마스터 노드에 요청이 도착했을 때, 해당 태블릿이 분할되었거나 사이트
있도록 한다).
지리적으로 분산 저장하는 주요한 이유 중 하나는 화재나 지진과 같은 재난으로 인해 데이터 센
주요한 이유는 데이터의 복사본을 사용자와 지리적으로 가까운 지역에 위치시키는 것이다. 전 세
을 확인할 때까지 기다려야 한다. 다른 키-값 저장소는 원격 지역에 대한 비동기 갱신을 지원하며,
신이 복제되기 전에 장애가 발생하면 갱신이 손실될 위험이 있다. 따라서 일부 키-값 저장소의 경
21.7.2. 2 인덱스 구조
merge tree. LSM tree)의 변형인 단계적 합병(stepped-merge) 방법을 사용한다. 이는 24.2절에서 살
펴볼 것이다. LSM 트리는 현재 트리에서 갱신을 수행하지 않고 새로운 데이터나 기존의 트리를 합
병하여 새로운 트리를 만든다. 따라서 변하지 않는 파일만 지원하는 분산 파일 시스템 위에 구성하
21.7.3 트랜잭션지원
대부분의 키-값 저장소는 트랜잭션에 대해 제한된 지원만 제공한다. 예를 들어, 키-값 저장소는 일
반적으로 단일 데이터 항목에 대해 원자적 갱신을 지원하고, 데이터 항목에 갱신이 직렬화(즉 갱신
만족할 수 있다. 하지만 트랜잭션이 한 개 이상의 데이터 항목에 접근할 수 있기 때문에 트랜잭션
또한 일부 키-값 저장소는 응용이 제한된 형태의 동시성 제어를 구현할 수 있도록 test-and-set
연산을 지원하며, 관련하여 바로 다음에서 살펴보도록 한다.
21.7.3.1 동시성제어
Google의 Megastore와 Spanner 시스템과 같은 키-값 저장소는 잠금을 이용한 동시성 제어를 지원
한다. 분산 동시성 제어의 문제점은 23장에서 논의한다. 또한 Spanner는 버저닝(versioning)과 타
21.7.3.2 원자적 커밋
2
위에서 본 제약 사항으로 인해 이러한 시스템은 차 인덱스를 지원하지 않는다. 데이터 항목의
2
갱신에는 차 인덱스의 갱신이 요구되는데 이는 원자적으로 수행할 수 없기 때문이다.
2
송되자마자 적용되도록 되어 있지만, 이 갱신이 적용되기 전까지는 차 인덱스는 실제 데이터와 불
21.7.3.3 장애처리
받아 처리해야 한다. 마스터 노드는 각 노드의 장애를 감시하고 태블릿 서버를 재할당할 책임이
있다.
새 노드가 태블릿 서버로 지정되면 해당 서버는 태블릿의 상태를 복구해야 한다. 태블릿에 대한
가능하도록 로그 레코드를 다수의 사이트에 복제한다. 새로운 노드가 태블릿 서버를 인계받으려
유지하는 것이다. 각 시스템은 서로 다른 방식을 사용하여 원자적 갱신을 구현하고 있다. Google
의 BigTable과 Apache HBase는 이를 직접 구현하는 대신 밑단의 파일 시스템(BigTable은 GFS,
붙여진 파일은 파일 블록의 모든 사본에 복제된다. 이 덧붙임 (append) 작업은 모든 사본에 적용이
완료되었을 때 성공적으로 끝이 날 수 있다. 시스템 장애가 발생했을 때 일부 사본에만 덧붙임 작
된다.
설명한다. 이런 시스템은 갱신을 수행하기 위해 대부분의 사본이 가용한 상태여야 한다. Apache
의 Cassandra와 MongoDB 같은 다른 시스템은 갱신을 수행하기 위해 몇 개의 사본이 가용한 상태
여야 하는지 사용자가 설정할 수 있다. 값을 낮게 잡으면 갱신이 충돌할 수 있으며 이런 경우 추후
조인을 필요로 하는 응용은 조인을 응용 내에서 코드로 작성하거나 실체화 뷰의 형태로 구현한
대해 질의하는 것이다.
21.7.5 성능 최적화
데이터 저장소 시스템을 사용할 때 데이터의 물리적 위치는 저장소 시스템에 의해 결정되고 클라
주 발생한다면 이들의 조인 속성과 동일한 방법으로 분할하는 것이 최적일 수 있다. 이렇게 분할하
22.7.4절에서 살펴본다.
이런 시나리오를 지원하기 위해 일부 데이터 저장소 시스템은 한 릴레이션의 튜플과 (주로 외래
가 특정할 수 있도록 하고 있다. 이 기능의 일반적인 용도는 특정한 개체와 관련된 모든 튜플을 동
많은 데이터 저장소 시스템은 일정 시간이 지나면 오래된 버전의 데이터 항목을 자동적으로 지
21.8 요약
• 데이터 분할은 다수의 노드에 걸쳐 데이터를 분산 저장하는 것을 말한다. I/O 병렬화를 사용하
면 릴레이션을 사용 가능한 디스크에 분할 저장하여 빠르게 찾을 수 있다. 일반적으로 사용되는
• 병렬 데이터 저장소 시스템은 반드시 노드의 장애에 대해 복원력을 갖추어야 한다. 노드의 장애
접근할 수 있게 된다.
저장된 튜플에 대해 만들어진다. 이 인덱스는 데이터가 저장된 노드와 동일한 노드에 저장된다.
필요가 없다.
용어정리
• 키-값저장소 • 수평분할
• 데이터 저장소 시스템 • 분할기법
° 범위 분할 • 라우터
• 분할벡터 • 일관된해싱
• 점 질의 • 분산 해시테이블
• 범위질의 • 복제
• 치우침 。데이터 센터 내 복제
。 실행 치우침 ° 데이터 센터 간 복제
° 데이터 분배 치우침 〇 마스터 사본
。속성값 치우침 。 사본의 일관성
。분할 치우침 • 궁극적 일관성
• 치우침처리 • 전역 주 인덱스
。균형 잡힌 범위 분할 벡터 • 전역 2차 인덱스
〇 히스토그램 • 분산 파일 시스템
〇 가상노드 • 한 번 쓰기-여러 번 읽기 접근 모델
• 저장소의유연성 • 넓은열 기반저장소
• 테이블 , 문서 저장소
• 태블릿 • 열패밀리
• 분할테이블 • 태블릿서버
• 마스터 노드
실전문제
21.4 복제:
21.5 병렬 인덱스
a. 중앙집중 데이터베이스에서 2차 인덱스가 레코드 식별자를 담고 있다. 전역 2차 인덱스 또한
레코드를 가지는 분할 번호와 분할 내의 레코드 식별자를 가질 수 있다. 이것이 잘못된 이유
를 설명하라.
21.6 병렬 데이터베이스 시스템은 각 데이터 항목(혹은 분할)의 사본을 하나 이상의 노드에 저장한다.
21.7 분할과복제:
21.8 데이터 항목의 마스터 사본에 요청을 보내기 위해서 노드는 어떤 사본이 데이터 항목의 마스터
사본인지 알아야 한다.
연습문제
a. 해시 분할
b. 범위 분할
각 경우에 치우침을 줄일 수 있는 방법은 무엇인가?
21.13 키-값 저장소에서 조인 연산은 매우 비싸며, 시스템이 SQL이나 선언적 질의 언어를 지원하지
않는 경우 표현하기도 어렵다. 이런 환경에서 응용 개발자가 손쉽게 조인이나 집계 질의 결과를
얻을 수 있는 방법은 무엇인가?
관련도구
상용 병렬 데이터베이스 시스템에는 Teradata, Teradata Aster Data, IBM Netezza, 그리고 Pivotal
Greenplum 등이 있다. IBM Netezza, Pivotal Greenplum, Teradata Aster Data 모두 PostgreSQL을 밑
단 데이터베이스로 사용하며, 각 노드에서 독립적으로 동작한다. 이들 시스템은 상단에 계층을 구축하
여 데이터 분할과 노드 간의 병렬 질의 처리 등을 수행한다.
954 PART 8 병렬 및 분산 데이터베이스
더 읽어보기
1970년대 말과 1980년대 초에 관계형 모델이 자리 잡음에 따라 사람들은 관계형 연산이 고도의 병렬화
가 가능하고 좋은 데이터 흐름 속성을 가지고 있음을 인지했다. 데이터 병렬 저장과 질의 병렬 처리의
참고문헌
[Baker et al. (2011)] J. Baker, C. Bond, J. C. Corbett, J. J. Furman, A. Khorlin, J. Larson, J.-
M. Leon, Y. Li, A. Lloyd, and V. Yushprakh, “Megastore: Providing Scalable, Highly Available
Storage for Interactive Services ', In Proceedings of the Conference on Innovative Data system
Research (CIDR) (2011), pages 223-234.
[Chang et al. (2008)] F. Chang. J. Dean, S. Ghemawat,W. C. Hsieh, D. A.Wallach, M. Burrows,
T. Chandra, A. Fikes, and R. E. Gruber, Bigtable: A Distributed Storage System for Structured
Data', ACM Trans. Comput. Syst.. Volume 26, Number 2 (2008).
I Cooper et al. (2008)] B. F. Cooper, R. Ramakrishnan, U. Srivastava, A. Silberstein, P. Bohannon,
H.-A. Jacobsen, N. Puz, D. Weaver, and R. Yemeni, “PNUTS: Yahoofs Hosted Data Serving
Platform', Proceedings of the VLDB Endowment, Volume 1, Number 2 (2008), pages 1277-1288.
[Corbett et al. (2013)]J. C. Corbett et al., “Spanner: Googles Globally Distributed Database”,ACM
Trans, on Computer Systems, Volume 31, Number 3 (2013).
[DeCandia et al. (2007)] G. DeCandia. D. Hastorun, M. Jampani, G. Kakulapati, A. Lakshman,
A. Pilchin, S. Sivasubramanian, P. Vbsshall. andW. Vogels, “Dynamo: Amazons Highly Available
Key-value Store ', In Proc, of the ACM Symposium on Operating System Principles (2007), pages
205-220.
[DeWitt (1990)] D. DeWitt, “The Gamma Database Machine Project ', IEEE Transactions on
Knowledge and Data Engineering, Volume 2, Number 1 (1990), pages 44-62.
[Ghemawat et al. (2003)] S. Ghemawat, H. Gobioff, and S.-T. Leung, “The Google File System'',
Proc, of the ACM Symposium on Operating System Principles (2003).
[Graefe (1990)] G. Graefe, "Encapsulation of Parallelism in the Volcano Query Processing System ',
In Proc, of the ACM SIGMOD Conf, on Management of Data (1990), pages 102- 111.
Chapter 오 1 병렬 및 분산 데이터 저장소 955
[Karger et al. (1997)]D. Karger, E. Lehman, T. Leighton, R. Panigrahy, M. Levine, and D. Lewin,
“Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots
on the World Wide Web",In Proc, of the ACM Symposium on Theory of Computing (1997), pages
654-663.
[Stonebraker et al. (1988)]
M. Stonebraker, R. H. Katz, D. A. Patterson, and J. K. Ousterhout, “The
Design of XPRS \ In Proc, of the International Conf, on Very Large Databases (1988), pages 318-
330.
크레딧
병렬 및 분산질의 처리
플에만 영향을 준다. 대규모 트랜잭션 처리 부하를 다루기 위해서는 병렬 실행이 핵심인데, 이 주제
는 23장에서 다룬다.
22.1 개요
957
958 PART 8 병렬 및 분산 데이터베이스
이 장이 초점을 두고 설명한다.
연스러운 것이다.
적상, 하이브리드 구조에서 각 코어는 비공유 시스템의 노드로 간주할 수 있다. 일부 코어가 다른 코
22.2 병렬정렬
수 있다.
22.2.1 범위 분할 정렬
그림 22.1 병렬정렬알고리즘
지고 범위 분할을 수행해야 한다. 21.3.1 절에서 이러한 분할 벡터를 생성하는 방법을 학습했다.
2132절에서 논의한 가상 노드 분할은 치우침(skew)을 줄인다. 실제 노드보다 몇 배나 많은 가상
노드가 존재하며, 가상 노드 분할은 각 가상 노드에 대한 분할을 생성한다. 그런 다음 가상 노드를
22.2.2 병렬 외부 정렬-합병
1. 시스템은 각 노드 N,에 있는 정렬된 분할을 노드 N、, N2, ... , N,“에 걸쳐 (같은 분할 벡터를 사
용하여) 범위 분할한다. 튜플을 정렬된 순서로 전송하므로 각 노드는 정렬된 스트림으로 튜플을
수신한다.
기술하였듯이, 이러한 일련의 행동은 흥미로운 형태의 실행 치우침 (execution skew)을 초래한다.
1
왜냐하면 처음에는 모든 노드가 분할 의 모든 튜플을 노드 N、으로 보내고, 그다음 모든 노드가 분
Chapter 22 병렬 및 분산 질의 처리 961
22.3 병렬 조인
리즘에 따라 다르다.
22.3.1 분할 조인
특정 종류의 조인에 대해 두 개의 입력 릴레이션을 노드에 분할한 다음 각 노드에서 지역적으로 조
• 조인속성으로범위 분할
• 조인속성으로해시 분할
r
여 튜플 를 노드 N로 전송한다. 또한 각 노드는 자신에게 전송되는 튜플을 동시 에 수신하고 지 역
디스크에 저장한다. 이 작업을 데이터 송수신을 위한 별도의 스레드를 사용하여 수행할 수 있다. 이
s
절차를 다른 릴레이션 의 모든 튜플에 대해 반복한다.
962 PART 8 병렬 및 분산 데이터베이스
그림 22.2 분할 병렬 조인
사용할 수 있는 것이다.
s
만일 하나 또는 양쪽 릴레이션「과 가 조인 속성으로 이미 분할되어 있다면(해人] 분할이나 범
위 분할에 의해) 분할에 필요한 작업은 상당히 줄어든다. 만일 릴레이션이 분할되어 있지 않거나
야한다.
이때 런 생성 전에 디스크에 쓰는 것을 피한다.
22.3.2 단편-복제 조인
그림 22.3 단편-복제 기법
그림 22.3a는 비대칭 단편-복제 기법을 보이고 있다. 만일「이 이미 분할에 의해 저장되어 있다면,
단계 1 에서 그 릴레이션을 다시 분할할 필요가 없다. 릴레이션 s를 모든 노드에 복제시키기만 하면
된다.
s
플을 加번 복제하고 의 각 튜플을 n 번 복제한다는 점을 유의해야 한다.
단편-복제 조인은 두 릴레이션의 복제를 포함하므로 분할보다 비용이 더 많이 들기 때문에 동등
s r
그러나 만약 가 단편화되고 이 복제되었다면, 외부 조인 연산 rJX16 s를 지역적으로 계산할 수
없다. 왜냐하면 「의 튜플은 분할 s,에서 일치하는 튜플이 없지만 분할 sノ에서。キ Z) 일치하는 튜플
1 비용 추정은 조인 속성에 대한 히스토그램을 사용하여 수행해야 한다. 휴리스틱 근사는 각 노드 N,에서 조인 비용을 ハ와 s,
크기의 합으로 예측하고, 크기 합의 균형을 맞추기 위해 범위 분할 벡터를 선택하는 것이다.
966 PART 8 병렬 및 분산 데이터베이스
오오.4 기타연산
22.4.1 기타 관계연산
있다.
수 있다.
22.4.2 맵과 리듀스 연산
10.3절에 서 서술한, 병렬 데이터 처리 프로그램의 작성을 용이하게 하도록 설계된 맵리듀스 패러다
임을 상기해 보자.
리 맵 함수의 출력은 일반적으로 리듀스 함수의 입력이 되도록 의도된다. 따라서 맵 함수의 출력은
group by 속성 역할을 하는 연관된 키를 가지고 있다. 리듀스 함수는 값의 모음을 입력으로 가지고
하나의 결과를 출력한다는 것을 상기하자. 일반적으로 사용되는 리듀스 함수의 경우에 결과는 입
개념적으로 맵과 리듀스 연산을 관계형 연산인 추출과 집계가 병렬화되는 것과 동일한 방식으
는 것에 주목한다.
맵리듀스 시스템은 작업자에게 태스크를 할당하는 스케줄러도 가지고 있다. 작업자는 태스크를 2
완료할 때마다 새 태스크를 할당받는데, 이를 모든 태스크가 할당될 때까지 반복한다.
2 스케줄러는 마스터 노드라는 전용 노드에서 실행된다. map() 및 reduce() 태스크를 수행하는 노드는 하둡ハ3리듀스
(Hadoop/ MapReduce) 용어에서 슬레이브 노드라고 한다.
Chapter 오오 병렬 및 분산 질의 처리 969
partitions files
reduce()를 실행한다.
리듀스 태스크는 작업자에 의해 병렬로 실행된다. 한 작업자가 리듀스 태스크를 완료하면, 모든
오2.5 질의 수행 계획의 병렬 평가
실행 계획을 고려한다.
22.5.1 연산 간 병렬화
파이프라인 체인은 높은 수준의 병렬화를 제공하기에 충분한 길이를 달성하지 못한다. 둘째. 차집
하는 실제적인 이유는 파이프라인 실행으로 디스크에 중간 결과를 기록할 필요가 없다는 것이다.
로 한다. 풀 모델에서 버퍼가 없으면 생산자는 하나의 튜플을 생성하자마자 멈춘다. 그림 22.5는 그
사이에 버퍼를 가지고 있는 생산자와 소비자를 보여 준다. 생산자와 소비자가 그림 22.5a와 같이
동일한 노드에 있는 경우 버퍼는 공유 메모리에 있을 수 있다. 그림 22.5b와 같이 생산자와 소비자
가 서로 다른 노드에 있는 경우 두 개의 버퍼가 존재해야 한다. 한 버퍼는 생산된 튜플을 수집하기
자 노드에 위치한다.
buffer
(b) Producer-consumer across a network
처 리는 이 오버헤드를 크게 줄인다.
입/검색하여 줄일 수 있다.
22.5.1.2 독립병렬화
질의 수식에서 다른 연산에 종속적이지 않은 연산을 병렬로 실행할 수 있다. 이러한 형태의 병렬화
1 1 Xら
에 주목한다.
972 PART 8 병렬 및 분산 데이터베이스
22.5.2 교환 연산자 모델
것이다.
1. 지정된 속성 집합으로 해시 분할
2. 지정된 속성 집합으로 범위 분할
3. 모든노드에서 입력 데이터를복제(방송이라고도 함)
4. 모든 데이터를 단일 노드로 전송
한다.
해야 한다.
수 있다.
터 병렬화라고 한다. 교환 연산자 모델을 사용하여 데이터 병렬 실행을 구현하면 코드의 상당한 변
서 연산자는 입력에서 여러 튜플을 가져와 각 목적지 노드로 향하는 튜플의 배치를 만들 수 있다.
22.5.3 종합하기
에 대한 조인을 계산한다. 집계는 그림에서 연산자 HA로 표시한 메모리 내 해시 집계를 사용하여
계산한다. 우리는 해시 테이블이 메모리에 포함될 수 있을 정도로 그룹의 수가 적다고 가정한다.
시 집계 연산자로 파이프라인한다.
그림 22.7 병렬질의실행계획
s
다음 단계 실행을 시작할 수 있다. 반면에「과 의 초기 교환 및 분할은 서로 독립적인 파이프라인
단계에서 발생한다. 이 러한 독립 단계는 원하는 경우 동시에 스케줄링할 수 있다.
22.5.4 질의수행계획의장애허용
보장하게 되었다.
처리를 시작한다.
요한 모든 데이터를 가져올 때까지 리듀스 노드는 작업을 수행하지 않는다. 맵 노드의 장애는 리듀
때때로 노드가 완전히 실패하지는 않지만, 매우 느리게 실행된다는 점도 주목할 필요가 있다. 이
러한 노드를 낙오자 (straggler) 노드라 한다. 단일 낙오자 노드라도 다음 단계의 모든 노드를 지연시
키거나(다음 단계가 있는 경우) 또는 태스크 완료를 지연시킬 수 있다(마지막 단계에 있는 경우).
낙오자 노드를 장애가 발생한 노드와 유사하게 다루어서 다른 노드에서 태스크를 재실행한다(낙오
4
계를 완료할 때까지 작업을 수행할 수 없다. 맵과 리듀스 단계를 여러 번 실행하는 경우, 다음 단계
의 맵 수행은 이전 단계의 리듀스 수행을 완료할 때까지 어떠한 작업도 수행할 수 없다. 이는 단계
실체화 (materialized)해야 한다. 실체화(즉 데이터 저장)는 상당한 부담을 수반하여 계산 속도를 저
하한다.
(algebraic operation)을 지원한다. 스파크는 RDD를 생성한 연산을 기록한다. RDD 손실을 야기하
는 장애가 발생한 경우, RDD를 생성한 작업을 재실행하여 RDD를 다시 생성한다. 그러나 이 방식
은 시간이 많이 소요될 수 있으므로, 스파크는 데이터 손실 가능성을 줄이기 위해 복제를 지원하고,
장애가 발생한 노드에서 수행된 계산만 재실행하기 위해 셔플(교환) 단계를 실행할 때 데이터의 지
역 사본 서장을 지원한다.
드에서 수신한 데이터를 추적해야 한다. 소스 노드에 장애가 발생하면, 소스 노드의 작업은 백업 노
드에서 다시 수행되므로 이전에 수신한 일부 튜플을 다시 수신할 수 있다. 따라서 이전에 수신한
4 맵 노드가 태스크를 완료하면, 다른 맵 노드가 여전히 활성 상태인 경우에도 해당 노드의 결과를 리듀스 노드로 재배포하는
것을 시작할 수 있다. 그러나 리듀스 노드의 실제 계산은 모든 맵 태스트를 완료하고 모든 맵 결과를 재배포할 때까지 시작
할수 없다.
978 PART 8 병렬 및 분산 데이터베이스
을 크게 최적화할 수 있다.
템에서 실행할 수 있지만 오늘날 가장 큰 규모의 시스템은 일반적으로 계층 구조를 지니고 있음에
용할 수 있다.
문이다.
세서에 연결되어 있으면 더 높다. 이런 메모리 시스템을 비균일 메모리 접근 (Non-Uniform Memory
Access) 또는 NUMA 구조라고 한다.
최상의 성능을 얻으려면 알고리즘이 NUMA-인식NUMA-awa®이어야 한다. 즉 특정 프로세
서에서 실행 중인 스레드가 접근하는 데이터를 가능한 한 해당 프로세서의 지역 메모리에 저장하
완한다.
그러나 각 프로세서 코어는 자체 캐시가 있는데, 해당 캐시는 (다른 프로세서 코어가 이후에 갱
가 GPU에서 제공하는 SIMD 지원을 사용하여 관계형 연산을 병렬 처 리하는 것이다. Intel의 Xeon
여러 SIMD 명령도 지원한다. 이러한 SIMD 구조에서 관계형 연산을 병렬로 처리하는 방법에 대한
상당한 연구가 진행되었다. 이 주제에 대한 자세한 정보는 온라인으로 제공되는 이 장의 참고문헌
을 참조한다.
모델이 더 복잡하다.
22.7.1 병렬 질의 실행 계획 공간
15.1 절에서 보았듯이, 순차 질의 계획을 대수식 트리로 표현할 수 있다. 대수식 트리의 각 노드는
령을 주석으로 가질 수도 있다.
수 있다.
° 각 연산에 사용할 노드 수
。순차적으로 실행할 연산
。 독립적으로 병렬 실행할 연산
s s
분할 결정의 예로서, 조인 r X,ハ““荘川 는「과 를 세 가지 방식으로 병렬적으로 분할할 수
있다. r.A와 s.A 속성만으로 분할을 하거나, 厂.8와 s.B 속성만으로 분할을 하거나 (r.A, r.8)와 (s.A,
s.B) 속성으로 분할을 하는 것이다. 마지막 방식은 이 조인만 고려하면 가장 좋은 결정이다. 왜냐하
문이다.
문이다.
22.7.2 병렬 질의 평가 비용
행 계획에서 연산자의 CPU와 I/O 비용을 합산한다. 네트워크 비용을 추가로 고려하여 다른 비용
적으로 수행하는) 이러한 연산의 비용은 입력 릴레이션이 〃개의 노드에 걸쳐 균일하게 분할되어 각
노드가 전체 입력의 1/"을 수신한다고 가정하면, 15장에서 살펴본 기법을 사용하여 추정할 수 있다.
982 PART 8 병렬 및 분산 데이터베이스
용 모델의 (CPU 비용 + I/O 비용)이 아닌 wax (CPU 비용, I/O 비용)으로 모델링 하는 것이 더 좋
각각 C|, iOf 및 c2, 込인 경우, 응답 시간 비용은 max{cx + c2, io} + 込)이다. 만약 연산 5과。2 작
이다.
데 중요하다.
22.7.3 병렬 질의 실행 계획 선택
로 선택할 수 있다.
우에 합리 적으로 잘 작동한다.
택해야 한다.
22.7.4 데이터의 동일 장소 배치
로 하는 많은 응용 프로그램이 존재한다.
련 튜플(특정 /。에 해당하는,〃,加両와 takes 레코드)을 포함하는 객체를 생성하고, 연관된 키(이
예에서 /£))와 함께 데이터 저장 시스템에 저장하는 것이다.
22.7.5 실체화뷰의병렬관리
제하고 인덱스 항목 (bl, al, cl)을 삽입한다. 보조 인덱스 자체가 분할되어 있으므로 이 두 갱신을
Chapter 22 병렬 및 분산 질의 처리 985
year, semester, sec_id) 속성으로 분할한 takes 릴레이션의 복사본을 유지하고 각 누드.에서 집계
수행해야 하는 경우, 해당 갱신을 위에서 선택한 분할을 기반으로 적절한 노드로 전파되어야 한다.
으로 유지할 수 있다.
동일한 분할 함수를 사용하여 갱신을 적절한 노드로 전송한다. 이 갱신을 수신한 노드를 가정하자.
파된다.
필수적이다. 스트리밍 데이터 시스템은 들어오는 데이터에 다양한 연산을 적용한다. 이제 이러한
생산자에서 소비자로 튜플을 라우팅하여(경로 지정하여) 데이터 처리를 수행해야 한다. 22.8.1
절에서 튜플 라우팅에 대해 논의한다. 22.8.2절은 스트림 작업의 병렬 처리를 설명하고, 22.8.3절은
장애 허용을 설명한다.
할 뿐만 아니라, 스트리밍 데이터 시스템에서 지원하는 언어로 데이터를 질의하는 코드를 작성할
필요가 있다. 최근에는 이런 중복을 피하기 위해 동일한 시스템 내 저장된 데이터에 대해 스트림
처리와 질의 처리를 수행하려는 노력이 있었다.
22.8.1 튜플 라우팅
한 작업이다. 먼저 라우팅의 논리적 구조를 고려하고, 나중에 병렬 처리를 고려하는 물리적 구조를
다룬다.
튜플의 논리적 라우팅은 연산자를 노드로 하는 사이클이 없는 방향 그래프 (directed acyclic graph,
DAG)를 생성하여 수행한다. 노드 사이의 간선(edge)은 튜플의 흐름을 정의한다. 연산자의 각 튜플
출력은 연산자의 나가는 간선(out-edge)을 따라 소비 연산자로 전송된다. 각 연산자는 모든 들어오
(a) DAG representation of streaming data flow (b) Publish-subscribe representation of streaming data flow
우팅을 보여 준다. 그림에서 연산 노드를 “Op” 노드로 표시한다. 스트림 처리 시스템의 진입점은
DAG의 데이터 소스 노드다. 이 노드는 스트림 소스로부터 튜플을 소비하고 스트림 처리 시스템에
주입한다. 스트림 처리 시스템의 출구 지점은 데이터 싱크 노드다. 데이터 싱크를 통해 시스템을 빠
는 시스템의 예다. 스톰 시스템에서 데이터 소스 노드를 spoi/f라 하고 연산자 노드는 んノ〃라 하며,
간선은 이 노드를 연결한다.
있다는 것이다. 그림 22.8b는 출판-구독 표현을 사용하는 튜플의 라우팅을 보여 준다. 각 데이터 소
스는 고유한 주제명을 가진다. 각 연산자의 출력에도 고유한 주제명을 할당한다. 각 연산자는 입 력
의 주제를 구독하고 출력에 해당하는 주제에 출판한다. 데이터 소스는 관련 주제에 출판하고 데이
아파치 카프카 (Apache Kafka) 시스템은 출판-구독 모델을 사용하여 스트림에서 튜플의 라우팅
을 관리한다. 카프카 시스템에서 주제에 대해 출판된 튜플은 지정된 기간(보존 기간이라고 함) 동
어오는 튜플을 연산자의 적절한 물리적 인스턴스로 라우팅해야 한다. 어떤 튜플이 연산자의 어떤
소비자가 처리할 수 있도록, 카프카는 소비자 연산자가 지정된 소비자 그룹 (consumer group)"
에 등록하는 것을 허용한다. 소비자 그룹은 논리 연산자에 해당하는 반면 개별 소비자는 병렬로 실
행되는 논리 연산자의 물리적 인스턴스에 해당한다. 주제의 각 튜플은 소비자 그룹의 한 소비자에
비자에게 전송한다. 그러나 여러 분할의 튜플이 동일한 소비자에게 전송될 수 있으므로 분할에서
많은 스트리밍 데이터 처리 구현이 카프카를 사용하여 튜플을 라우팅한다. 카프카 스트림 (Kafka
Streams)은 스트림에 대한 대수 연산을 지원하는 클라이언트 라이브러리를 제공하는데, 이를 카프
카 출판-구독 시스템 위에 스트리밍 응용 프로그램을 구축하는 데 사용할 수 있다.
표준 관계형 연산의 경우, 연산의 병렬 평가를 위해 살펴본 기법을 스트리밍 데이터와 함께 사용할
수 있다.
6 그룹화가 윈도우화(10.5.2.1 절)와 결합될 때 그룹은 윈도우 내에 있는 모든 튜플을 포함하는데, 이들은 그룹화 속성에 대해
동일한 값을 지닌다.
Chapter 22 병렬 및 분산 질의 처리 989
윈도우화 (windowing)는 스트리밍 데이터 시스템에서 중요한 작업이다. 10.5.2.1 절에서 들어오
는 데이터를 일반적으로 타임스탬프를 사용하여 윈도우로 나눈 것을 상기해 보자. 윈도우는 튜플
않는다고 판단하면 해당 윈도에 대한 집계가 출력될 수 있음을 보장한다. 예를 들어, 시간을 기반으
5
로 하는 윈도우를 가정하고, 각 분에 해당하는 윈도우를 정의한다. 시스템이 미래 튜플은 특정 윈
도우의 끝보다 큰 타임스탬프를 가질 것이라고 결정하면, 해당 윈도우의 집계를 출력한다. 그룹화
이러한 의미를 보장하기 위해 스트리밍 시스템은 각 연산자에서 처리한 튜플과 출력한 튜플을
추적해야 한다. 이전에 출력한 튜플과 비교하여 중복을 감지하고 제거할 수 있지만, 시스템이 정상
적인 처리 중에 중복이 없음을 보장하는 경우에만 가능하다. 왜나하•면 장애가 발생한 경우, 스트리
따라서 스트리밍 데이터 시스템은 (하위 시스템에) 내재하는 장애 허용과 고가용성 기법을 사용하
위해 추가 작업을 수행해야 한다. 예를 들어, 윈도우 연산자는 윈도우 시작에 해당하는 스트림의 한
기록하고, 재생은 마지막 검사점부터 시작한다. 검사점 기록한 상태는 지역적으로 저장할 수 있다.
그러나 이는 노드를 복구할 때까지 스트림 처리를 진행할 수 없음을 의미한다. 대안으로, 상태를 분
고가용성을 보장하기 위해 데이터를 복제한다. 따라서 한 노드에 장애가 발생하면, 마지막 검사점
본에서 출력을 가져올 수 있다. 시스템은 복제본에서 중복 튜플이 소비자에게 출력되지 않도록 조
22.9 분산 질의처리
근해야 할 수도 있다.
템 위에 추가적인 소프트웨어 계층을 필요로 한다. 이 계층은 물리적 데이터베이스 통합을 요구하
관계형 뷰를 제공하는 래퍼를 지원한다. 이러한 래퍼는 파일에 저장된 데이터 타입에 따라 다르다.
데이터 통합의 목표가 의사결정 지원 질의만 실행하는 것이라면, 11.2절에서 살펴본 데이터 웨어
하우스가 데이터베이스 통합을 위해 널리 사용되는 방식이다. 데이터 웨어하우스는 중앙집중식 스
Chapter 22 병렬 및 분산 질의 처리 993
키마를 사용하여 여러 소스의 데이터를 단일 (아마도 병렬) 시스템으로 가져온다. 지속적인 가져오
우스의 질의는 데이터 소스의 다른 질의와 트랜잭션 성능에 영향을 주지 않는다. 개별 질의에 대해
응답하기 위해서 데이터 웨어하우스 구조를 사용할지, 아니면 데이터 소스의 데이터에 직접 접근
에서 다른 의미로 사용된다.
을사용
렵 다.
근 방식을 사용하여 명세할 수 있다. イ〃de〃Ls3와 student_s4 릴레이션은 각각 사이트 s3와 s4에
에서만 실행하고 사이트 s4에서 실행할 필요가 없음을 파악할 수 있다. 스키마 통합에 대한 자세한
내용은 온라인에서 이용 가능한 이 장의 참고문헌에서 찾을 수 있다.
물리적 표현에서 문제가 발생할 수 있다. 한 시스템은 8비트 ASCH를 사용하고 다른 시스템은 16
비트 유니코드를 사용할 수 있다. 부동 소수점 표현도 다를 수 있다. 정수를 빅-엔디안(big-endian)
다중 데이터 소스에 흩어져 있는 데이터에 접근하는 질의를 실행하는 단순한 방법은 필요한 모든
없다. 데이터 소스에서 선택 연산을 수행하고, (만약 있다면) 다른 연산은 질의를 요청한 데이터베
선택이 허용되는지를 제한할 수 있으며 추가로 특정 필드에 선택이 있어야 함을 요구할 수 있다.
수 있어야 하고, 부분적으로 데이터 소스와 질의를 실행하는 사이트에서 수행될 수 있어야 한다.
네트워크가 저대역폭의 원거리 통신망인 경우, 데이터 전송을 최소화하는 데 특별한 주의를 기울
여야 한다.
へXなX r3
八는 사이트 &에 セ는 5?에 ら는 &에 저장되어 있다고 하자. S은 질의를 요청한 사이트를 나타낸다
고 하자. 시스템은 사이트 却에서 결과를 생성할 필요가 있다. 이 질의를 처리하기 위한 전략으로는
다음과 같은 것이 있다.
• 세 개의 릴레이션의 사본을 모두 사이트 &에 전달한다. 16장의 기법을 이용하여 전체 질의를 &
에서 지역적으로 처리하는 전략을 선택한다.
디스크 접근을 수반한다. 두 번째 전략의 다양한 변형이 있는데, 이 변형은 조인을 다른 순서로 처
리 한다.
22.9.3.2 세미조인전략
八 X な「시 n&n&S)
S X %ノゝ&(ハ))X r2
정의한다.
r 1 X ら 익「【公(r1 X「2)
히 작은 부분이 조인에 기여하는 경우, temp, 전송의 오버헤드보다 ら에 있는 튜플의 일부만 전송하
속성값의 개수의 몇 배로 설정한다. 또한 어떤 k(k > 1)에 대해, k개의 독립 해시 함수를 사용하여
22.9.3.3 분산 질의 최적화
할수있다.
한다. 알고리즘 실행을 위한 대체 사이트를 추가로 고려하도록 최적화기를 확장할 수 있다. 지정된
화 비용을 줄일 수 있다.
다른 예로, 사이트 s5에 있는 학생 데이터가 사이트 s3에 있는 데이터의 복제본인 경우, 최적화
기는 두 사이트 중 저렴한 비용이 드는 곳에서 질의를 실행하도록 선택할 수 있다. 두 사이트 모두
22.9.4 분산디렉터리시스템
는 IP 주소를 기반으로 메시지를 라우팅하므로 도메인 이름을IP 주소로 변환하는 방법은 인터넷
기능에 매우 중요한 부분이다. 경량 디렉터 리 접근 규약(Lightweight Directory Access Protocol.
• 첫째, 디렉터리 접근 규약은 제한된 유형의 데이터 접근을 지원하는 간소화된 규약이다. 이들은
퓨터에 대한 정보를 저장한다. DNS 서버는 정보를 계층적 방식으로 저장한다. 예를 들어, Yale
DNS 서버에서 제공하는 정보를 CS DNS와 Math DNS 서버와 같은 Yale의 하위 도메인을 사
용하여 분산된 방식으로 저장할 수 있다.
한다.
일, (부서와 같은) 조직 단위, 방 번호, 전화번호, 그리고 (암호화된) 암호와 같은 각 직원의 정보를
오오.10 요약
적으로 정렬한다.
Chapter 22 병렬 및 분산 질의 처리 1001
모델을 사용하여 수행할 수 있다. 질의 실행 비용의 중요한 요소인 데이터 교환을 최소화하기 위
용어정리
• 질의간병령화 • 분할되지않음
• 질의 내 병렬화 • 임의합병
。연산 내 병렬화 • 정렬합병
。연산간병렬화 • 병렬 질의 실행 계획
• 범위분할정렬 • 공유메모리에서질의처리
• 데이터 병렬화 • 스레드
• 병렬외부정렬-합병 • 단일 명령 다중 데이터(SIMD)
• 분할조인 • 응답시간비용모델
• 분할 병렬 해시 조인 • 병렬뷰관리
• 분할병렬합병-조인 • 스트리밍 데이터
• 분할병렬중첩반복조인 • 람다구조
• 분할 병렬 인덱스 중첩 반복 조인 • 스트림의 라우팅
• 비대칭 단편-복제 조인 • 출판-구독
• 방송조인 • 주제분할
• 단편-복제조인 • 최소 한번 의미
• 대칭 단편-복제 조인 • 최대 한 번 의미
• 조인 치우침 회피 • 정확히 한 번
• 조인치우침의동적처리 • 연합데이터베이스시스템
• 작업도용 • 전역 스키마
• 병렬선택 • 지역 스키마
• 병렬중복제거 • 스키마통합
• 병렬추출 • 중재자
• 병렬 집계 • 데이터 가상화
• 부분집계 • 외부데이터
• 중간키 • 외래 테이블
• 파이프라인병렬화 • 데이터 레이크
• 독립 병렬화 , GAV(Glob시-as-view)
• 교환 연산자 , LAV( Local-as-view)
Chapter 22 병렬 및 분산 질의 처리 1003
• 링크드데이터 • 과탐지
실전문제
22.2 데이터 전송을 줄이기 위해 count 및 avg 집계 함수에 대해 부분 집계를 구현하는 방법을 설명
하라.
a. 그 이유를 설명하라.
b. 기계가 공유 메모리 구조를 가지고 있을 때에도 파이프라인으로 처리하는 것이 좋은 아이디
어인가? 왜 그런지 또는 왜 그렇지 않은지 설명하라.
22.4 범위 분할을 이용하는 비대칭 단편-복제 조인 처리를 고려하자. 조인 조건이 |M - s.이 < k(k는
작은 상수)인 경우 어떻게 평가를 최적화할 수 있는가? 여기서 |x|는 X의 절댓값을 나타낸다. 이
러한 조인 조건이 있는 조인을 밴드 조인(band join)이라고 부른다.
/■cYcount(s.Z))((,4>5(,))^r.B=s.B s)
연습문제
a. 차집합연산
b. count 집 계 연산
c. count distinct 집 계 연산
Chapter 22 병렬 및 분산 질의 처리 1005
d. avg 집계 연산
e. 조인 조건에 동등 조건만 포함하는 왼쪽 외부 조인
f. 조인 조건에 동등 조건이 아닌 비교 조건을 포함하는 왼쪽 외부 조인
g. 조인 조건에 동등 조건이 아닌 비교 조건을 가지는 전체 외부 조인
관련도구
유래한 Apache Hive(hi ve.apache.org), Cloudera 에서 유래한 Apache Impala(im pa la. apache,
org), Pivotal에서 유래한 Apache HAWQ(hawq.apache.org)를 포함한다. University of California,
Berkeley에서 유래한 Apache Spark(spark.apache.org)와 Apache Tez(tez.apache.org)는 기본적인
맵과 리듀스를 넘어서는 다양한 연산자를 지원하는 병렬 실행 프레임워크다. Hive SQL 질의는 이 두
플랫폼 모두에서 실행할 수 있다. 다른 병렬 실행 프레임워크로는 Yahoo!에서 유래한 Apache Pig(pig.
apache.org), University of California, Irvine에서 유래한 Asterix 시스템(asterix.ics.uci.edu),
Technical University, Berlin, Humboldt University와 the Hasso-Plattner Institute의 Stratosphere 프로
젝트로 시작된 Apache Flink 시스템(flink.apache.org)이 있다. Apache Spark 및 Apache Flink는 병
렬 기계 학습을 위한 라이브러리도 지원한다.
만, 오늘날 하둡 구현은 시퀀스 파일(바이너리 데이터 허용), Avro(반구조적 스키마 지원) 및 Parquet(열
데이터 표현 지원)과 같은 여러 최적화된 파일 형식을 지원한다.
위 대부분의 시스템은 Amazon AWS, Google Cloud. Microsoft Azure 및 기타 유사한 플랫폼에서
제공하는 클라우드 서비스의 일부로 클라우드 기반 서비스로도 제공된다.
더 읽어보기
al. (1989)])와 Volcano([Graefe (1990)])를 포함한다. [Graefe (1993)]는 질의의 병렬 처리를 포함한
질의 처리에 대한 훌륭한 문헌 정리를 제공한다. 교환 연산자 모델은 [Graefe (1990)]와 [Graefe and
McKenna (1993)]가 옹호했다. 병렬 조인에서 치우침 처리는 [DeWitt et al. (1992)]이 설명했다.
[Ganguly et al. (1992)]는 병렬 질의 실행을 위한 응답 시간 비용 모델에 기반한 질의 최적화 기술을
설명하였고, IZhou et al. (2010)]는 분할 특성 및 병렬 실행 계획을 설명하기 위해 질의 최적화기를 확장
허용 연속 질의에 중점을 두고, 장애 허용을 지원하는 교환 연산자의 확장을 [Shah et al. (2004)]이 기술
한다. Google MillWheel 시스템의 장애 허용 스트림 처리는 [Akidau et al. (2013)]이 설명한다.
다중 코어 프로세서를 사용하는 공유 메모리 시스템에서 병렬 질의 평가에 대한 (작은) 조각-구동 접
근 방식은 [Leis et al. (2014)]이 설명하고, [Kersten et al. (2018)]은 생산자 구동 파이프라이닝과 함께
SIMD 명령어와 같은 최적화를 사용한 벡터별 질의 처리 비교를 제공한다.
[Carbone et al. (2이5)]는 Apache Flink의 스트림 및 일괄 처리를 설명한다. [Ozsu and Valduriez
(2010)]는 분산 데이터베이스 시스템의 교과서적 설명을 제공한다.
참고문헌
[Agrawal et al. (2009)]
P. Agrawal, A. Silberstein, B. F. Cooper, U. Srivastava, and R. Ramakrishnan,
“Asynchronous view maintenance for VLSD databases ,. In Proc, of the ACM SIGMOD Conf on
Management of Data (2009), pages 179-192.
[Akidau et al. (2013)] T. Akidau, A. Balikov, K. Bekiroglu, S. Chernyak, J. Haberman, R. Lax, S.
McVeety, D. Mills, P. Nordstrom, and S. Whittle, “MillWheel: Fault-tolerant Stream Processing at
Internet Scale ,, Proceedings of the VLDB Endowment, Volume 6, Number 11 (2013), pages 1033-
1044.
[Carbone et al. (2015)] P. Carbone, A. Katsifodimos, S. Ewen, V. Markl, S. Haridi, and K.
Tzoumas, “Apache Flink: Stream and Batch Processing in a Single Engine'', IEEE Data Eng. Bull.,
Volume 38, Number 4 (2015), pages 28-38.
[Dean and Ghemawat (2010)] J. Dean and S. Ghemawat, “MapReduce: a flexible data processing
tool ', Communications of the ACM, Volume 53, Number 1 (2010), pages 72-77.
[DeWitt (1990)] D. DeWitt, “The Gamma Database Machine Project 5, IEEE Transactions on
Knowledge and Data Engineering, Volume 2, Number 1 (1990), pages 44-62.
[DeWitt et al. (1992)] D. DeWitt, J. Naughton, D. Schneider, and S. Seshadri. "Practical Skew
Handling in Parallel Joins ', In Proc, of the International Conf, on Very Large Databases (1992),
pages 27-40.
[Ganguly et al. (1992)] S. Ganguly, W. Hasan, and R. Krishnamurthy, “Query Optimization for
Parallel Execution ', In Proc, of the ACM SIGMOD Conf, on Management of Data (1992), pages
9-18.
[Graefe (1990)] G. Graefe, "Encapsulation of Parallelism in the Volcano Query Processing System ",
In Proc, of the ACM SIGMOD Conf, on Management of Data (1990), pages 102- 111.
[Graefe (1993)] G. Graefe, “Query Evaluation Techniques for Large Databases",ACM Computing
Surveys, Volume 25, Number 2 (1993).
[Graefe and McKenna (1993)] G. Graefe and W. McKenna, “The Volcano Optimizer Generator ',
In Proc, of the International Conf, on Data Engineering (1993), pages 209-218.
[Herodotou and Babu (2013)] H. Herodotou and S. Babu, “A What-if Engine for Cost-based
MapReduce Optimization', IEEE Data Eng. Bull., Volume 36, Number 1 (2013), pages 5-14.
[Kersten et al. (2018)]
T. Kersten, V. Leis, A. Kemper, T. Neumann, A. Pavlo, and P. A. Boncz,
“Everything You Always Wanted to Know About Compiled and Vectorized Queries But Were
1008 PART 8 병렬 및 분산 데이터베이스
Afraid to Ask: Proceedings of the VLDB Endowment, Volume 11, Number 13 (2018), pages 2209-
2222.
[Kwon et al. (2013)] Y. Kwon, K. Ren, M. Balazinska, and B. Howe, “Managing Skew in Hadoop”,
IEEE Data Eng. Bull., Volume 36, Number 1 (2013), pages 24-33.
[Leis et al. (2014)]
V. Leis, P. A. Boncz, A. Kemper, and T. Neumann, “Morsel-driven parallelism: a
NUMA-aware query evaluation framework for the many-core age",In Proc, of the ACM SIGMOD
Conf, on Management of Data (2014), pages 743-754.
[Ozsu and Valduriez (2010)] T. Ozsu and P. Valduriez, Principles of Distributed Database Systems,
3rd edition, Prentice Hall (2010).
[Shah et al. (2004)] M. A. Shah, J. M. Hellerstein, and E. A. Brewer, ^Highly-Available, Fault-
Tolerant, Parallel Dataflows', In Proc, of the ACM SIGMOD Conf, on Management of Data (2004),
pages 827-838.
[Stonebraker et al. (1989)] M. Stonebraker, P. Aoki, and M. Seltzer, “Parallelism in XPRS ', In
Proc, of the ACM SIGMOD Conf, on Management of Data (1989).
[Zaharia et al. (2012)] M. Zaharia, M. Chowdhury, T. Das, A. Dave, J. Ma, M. McCauly, M. J.
Franklin, S. Shenker, and I. Stoica, “Resilient Distributed Datasets: A Fault-Tolerant Abstraction
for In-Memory Cluster Computing ', In Procs. USENIX Symposium on Networked Systems Design
and Implementation, NSDI (2012), pages 15-28.
[Zaharia et al. (2016)]M. Zaharia, R. S. Xin, P. Wendell, T. Das, M. Armbrust. A. Dave, X. Meng,
J. Rosen, S. Venkataraman, M. J. Franklin, A. Ghodsi, J. Gonzalez, S. Shenker, and I. Stoica,
“Apache Spark: a unified engine for big data processing ', Communications of the ACM, Volume
59, Number 11 (2016), pages 56-65.
[Zhou et al. (2010)] J. Zhou, P. Larson, and R. Chaiken, "Incorporating partitioning and parallel
plans into the SCOPE optimizer,, In Proc, of the International Conf, on Data Engineering (2010),
pages 1060-1071.
크레딧
병렬 및 분산트랜잭션 처리
우리는 18장의 동시성 제어, 19장의 복구에서 중앙집중 데이터베이스에서 트랜잭션을 처리하는 방
법에 대해 학습했다. 이번 장에서 병렬 및 분산 데이터베이스에서 트랜잭션을 처리하는 방법에 대
는 경우가 많다. 만약 차이점이 존재하는 경우, 우리는 그 차이점을 명확히 짚고 넘어갈 것이다 즉
도 적용할 수 있다.
설명한다.
1009
1010 PART 8 병렬 및 분산 데이터베이스
23.1 분산트랜잭션
23.1.1 시스템 구조
여 러 노드로 구성된 시스템 구조를 살펴보자. 각각의 노드는 다른 노드와 무관하게 실패할 수 있다.
노드가 지리적으로 분산되어 있다. 시스템 구조는 두 경우가 비슷하며, 트랜잭션 고립성 및 원자성,
체 시스템이 실패한 상태로 존재한다. 게다가 복구를 위해 단 하나의 트랜잭션 로그만 존재한다. 중
앙집중 데이터베이스 시스템에서 소개된 동시성 제어나 복구 기술을 이러한 시스템에 그대로 적용
할수있다.
transaction
coordinator
transaction
manager
• 복구를위한로그 관리하기
여하기
든 트랜잭션의 실행을 총괄하는 역할을 한다. 각각의 트랜잭션에 대해 조정자는 다음을 관리한다.
• 트랜잭션을시작하는것
23.1.2 시스템실패상태
• 노드의 실패
• 메시지손실
, 통신 경로의 실패
• 네트워크분할
23.오 커밋 프로토콜
23.2.1 2단계 커밋
2단계 커밋 프로토콜 (2PC)이 정상 환경에서 어떻게 동작하는지를 설명한 뒤, 실패를 다루는 방법,
복구 및 동시성 제어 방법에 대해 설명한다.
<no T> 레코드를 로그에 추가하고 G에 abort T 메시지를 전송한다. 만약 커밋을 결정했다면,
<ready T> 레코드를 로그에 추가하고 T와 관련된 다른 로그와 함께 안전한 저장 장치에 저장
한다. 트랜잭션 관리자는 ready T 메시지를 G에 전송한다.
지 않으면 T는 중단된다. 그러한 결정에 따라(commit T> 혹은 <abort T> 레코드가 로그에
추가되고 로그는 안전한 저장 장치에 저장된다. 이때 트랜잭션의 최종 결과가 결정된다.
때까지 무한정 기다릴 수는 없다. 대신 prepare T 메시지 이후에 특정 시간이 지나간 경우 C,는
1014 PART 8 병렬 및 분산 데이터베이스
트랜잭션을 중단할 수 있다. 한 노드가 abort 메시지를 보냈을 때처럼 트랜잭션을 중단하는 과
정을 실행한다.
은 노드의 실패가 있더라도 트랜잭션이 완전히 종료하기 전까지는 유지되어야 하며 자세한 내용은
23.2.1.3절에서 언급한다.
하나의 트랜잭션을 거밋하기 위해서는 참여하고 있는 모든 노드의 합의가 필요하다. 적어도 하
정 된다.
23.2.1.2 실패처리
로 커 밋 프로토콜의 나머 지를 실행한다.
려야 한다.
。정상 동작하는 어떤 노드가 로그에〈 commit 7>를 가지고 있다면 丁는 커밋되어야 한다.
。정상 동작하는 어떤 노드가 로그에(abort T>를 가지고 있다면 7는 중단되어야 한다.
。정상 동작하는 어떤 노드가 로그에 <ready 7>를 가지고 있지 않다면, 실패한 조정자 C,
1. 조정자와 트랜잭션 실행에 참여하는 모든 노드가 하나의 분할에 존재하는 경우. 이 경우에
네트워크 분할은 커밋 프로토콜에 영향을 끼치지 않는다.
처리한다.
23.2.1.3 복구및동시성제어
은 노드와 통신해야 하므로 느릴 수 있다. 게다가 조정자가 실패한 상황에서 완료되지 않은 트랜잭
(이 책에서 잠금이 동시성 제어를 위해 사용된다고 가정한다). <ready T> 로그 레코드를 기록하
는 대신, 복구 알고리즘은 <ready T. L>을 기록하게 되는데 이때 L은 로그가 기록될 당시에 트랜
2PC의 블로킹 문제는 시스템을 관리하는 데 심각한 악영향을 끼칠 수 있다. 왜냐하면 조정자 노드
의 실패는 굉장히 자주 접근하는 어떤 데이터에 대한 잠금을 가지고 있는 트랜잭션이 중단되는 현
라는 사실을 알아야 하고, 중단하기로 했다면 모든 노드가 중단했다는 사실을 알아야 한다. 또한 과
어서는 안 된다.
경우.
사항이 있는지 확인하고, 만약 결정된 사항이 있으면 2PC 참여 노드에 알린다. 컨센서스에 참여
하는 과반수의 노드는 결정된 사항이 있는지 확인하는 데 반드시 협조해야 한다. 이전에도 언급
지 않는다.
수 있다.
가 프로토콜을 다시 시작한다.
로토콜도 존재한다. 이러한 프로토콜은 이전에 언급한 투표 기반의 개념과 비슷하며, 커밋 작업을
23.2.3 트랜잭션처리의대안모델
없는 경우도 있다.
적 악영향은 더욱 커질 수 있다.
금액을 제외한 뒤 수표를 발급한다. 그다음 수표는 다른 은행으로 물리적으로 이동한다. 수표를 수
신한 은행은 확인한 후에 수표의 금액만큼 잔액을 늘린다. 수표는 두 은행 사이를 오가는 메시지의
다. 이와는 반대로 2PC의 경우, 그러한 오류가 트랜잭션에 의해 발견되기에, 애초에 출금 계좌의
잔액이 줄어드는 상황이 발생하지 않는다.
그림 23.3 영속메시지의구현
아가야 하며, 이것이 어떠한 이유로 불가능한 경우 사람이 직접 이러한 오류를 해결해야 한다.
영속 메시지를 사용하는 시스템을 구현하는 데 필요한 추가적인 노력은 블로킹 문제를 제거하
하기 위함이다.
을 방지하기 위해 필수적이다.
발견하면 처리한 후에 처리를 완료했음을 의미하는 Hag를 true로 설정한다. 이는 하나의 메시지
가 수신 후에 정확히 한 번 처리되었음을 보장한다.
지원하기 위한 기초가된다.
18장에서 살펴본 동시성 제어 방법을 분산 환경으로 확장하고자 한다. 각각의 노드가 전역 트랜잭
션 원자성을 보장하기 위해 커밋 프로토콜의 실행에 참여한다고 가정한다.
23.3.1 잠금 프로토콜
지만 필요하다.
23.3.1.2 분산 잠금관리자접근법
메시지 전송이 필요하다. 하지만 잠금 획득과 해제 요청이 하나의 노드에서 이루어지지 않으므로
23.3.2 교착 상태 처리
그림 23.4 지역대기그래프
게 된다.
23.3.3 임대
승인하지 않고, 임대는 파기되며, 잠금은 해제(expire)된다. 임대를 취득한 어떤 노드가 실패하거나
잠금 관리자로부터 통신이 끊기면, 임대 기간이 만료됨과 동시에 자동으로 잠금이 해제된다. 임대
용해야 하는 경우다. 조정자로서 임무를 수행하기 원하는 노드는 프로토콜과 관련된 데이터 항목
에 독점적인 임대를 요청한다. 임대를 획득한 노드는 임대가 파기되기 전까지 조정자의 임무를 수
니즘은 노드의 시계가 모두 동기화되어 있다는 가정만 있다면, 단 하나의 조정자만 존재한다는 사
한다. 노드가 지역 시계를 확인한 시점과 다음 작업을 수행하려는 시점 사이에 임대가 만료될 수도
한다.
지 연 시간을 포함한다.
기화된 시간을 가지는 것은 불가능하므로 올바른 타임스탬프를 만드는 방법은 중요하다. 그다음
23.3.5 타임스탬프의 생성
분산 환경에서 타임스탬프를 만드는 방법에는 두 가지가 있다. 첫째는 중앙집중형 방법, 둘째는 분
local unique
timestamp
사용한다.
로 동기화된다. 서버에서 획득한 시간을 노드에 전송하는 시간을 정확히 파악할 수 없으므로 대
략 동기화되는 것이다.
23.3.6 분산타임스탬프순서화
타임스탬프 순서화 프로토콜은 병렬 분산 데이터베이스 환경으로 쉽게 확장할 수 있다. 각 트랜잭
다른 노드에 전송된 요청은 할당된 타임스탬프를 가지고 있다. 각 노드는 자신이 가지고 있는 데이
의 시간이 다른 노드보다 상당히 뒤처져 있다고 생각해 보자. 또 다른 트랜잭션 厶는 7;이 시작하기
전 이미 데이터 항목 4에 대한 갱신을 정상적으로 완료했지만, 小이 아닌 다른 노드에서 획득한 더
큰 타임스탬프를 가지고 있다고 하자, 이때「이 4에 대해 접근을 시도하면, 4에 대한 타임스탬프
확인 과정은 실패한다. 왜냐하면 이미 더 큰 타임스탬프를 가지는 트랜잭션이 갱신 작업을 정상적
으면, 厶가 거밋할 때까지 T,는 거밋할 수 없다. 애초에 커밋되지 않은 쓰기 작업이 커밋이 완료될
때까지 읽기 작업을 미루면, り가 거밋할 때까지 7;는 커밋할 수 없다는 사실을 보장하게 된다. 이
어질 수 있다. 트랜잭션 7;는 준비된 상태에 있지만 쓰기 작업은 커밋되지 않았기 때문에, 7;가 쓰기
작업을 수행한 데이터 항목을 읽어야 하는 더 큰 타임스탬프를 가진 트랜잭션은 강제로 기다려야
한다.
23.3.7 분산 검증
펴본다.
1. 검증은 각각의 노드에서 지역적으로 수행된다. 타임스탬프를 할당하는 방법은 아래에서 살핀다.
2. 분산 환경에서 검증 타임스탬프 TS(1)는 임의의 노드에서 할당될 수 있지만, 검증이 수행될 때
모든 노드가 같은 검증 타임스탬프를 가지고 있어야 한다. 트랜잭션은 타임스탬프 TS(() 값을
기반으로 직 렬 가능해야 한다.
1030 PART 8 병렬 및 분산 데이터베이스
3. 트랜잭션 7;에 관한 검증 작업은 TS⑷) < TS(TJ인 모든 트랜잭션 를 확인하는 것이다. 7;가
시작하기 전에 り가 종료되었는지, 혹은 厶와 충돌이 있지는 않은지 확인한다. 어떤 트랜잭션이
정이 필요하다.
2
다. 버전 숫자는 데이터 항목이 갱신될 때마다 증가한다.
검증은 데이터 항목에 쓰기 작업을 수행하는 동안 수행되며 버전 숫자에 기반을 둔 검사와 지정
자가 여전히 7일 경우, 쓰기 8
작업을 수행할 수 있고, 버전 숫자를 로 증가시킨다.
HBase는 checkAndPut( )이라고 부르는 하드웨어 수준의 검사와 지정 연산과 비슷한 방식으
로 값의 비교를 통한 검사와 지정 연산을 지원한다. 시스템이 생성한 버전 숫자를 비교하는 대신,
23.4 복제
의 데이터 항목마다 어디에 복제되어 있는지를 기록한다. 릴레이션의 분할 수준의 복제도 가능하
며, 카탈로그는 각각의 분할마다 하나의 항목을 유지하면 되기 때문에 데이터 항목 수준의 복제보
다 오버헤드가 감소한다.
복제본 간의 일관성에 관한 문제를 23.4.1 절에서 다룬다. 장애가 발생하더라도 복제본을 활용하
수 있는 기 법은 23.4.3절에서 다룬다.
23.4.1 복제본의 일관성
념이 다.
장애가 발생해도 가용성을 유지하기 위해 장애가 발생한 (혹은 실패한) 노드는 이 러한 복제본의 집
합에서 제거되어야 하고, 노드의 제거는 이후 살펴보겠지만 난해한 상황을 유발하기도 한다.
신선을 설치해도 모두 실패하는 경우가 발생할 수 있으므로 실패의 종류를 구분하는 것은 여전히
어렵다.
템에서 제거하는 행동들은 백그라운드에서 실행될 수 있으며, 새로운 혹은 복구된 노드를 시스템
상을 띠며 23.6절에서 다룬다.
면 상당한 시간 동안 지연이 발생할 수 있다. 특히 데이터가 하나의 데이터 센터의 실패를 대비하
효하다.
데이터의 복제본이 존재하는 상황에서 잠금을 다루는 몇 가지 방법을 23.421 절부터 23.4.2.4절에
걸쳐 소개한다.
23.4.2.1 주복제본
시스템이 데이터 복제를 사용하고 있을 때 복제본 중 하나를 주 복제본 (primary copy)으로 선택할
수 있다. 어떤 데이터 항목 Q에 대해。의 주 복제본은 정확히 하나의 노드에 존재해야 하며, 그러
한 노드를 Q의 주 노드(primary node)라고 한다.
만약 어떤 트랜잭션이 한 데이터 항목。에 대해 잠금을 필요로 하면 주 노드에 잠금을 요청해
야 한다. 요청에 대한 응답은 승인될 때까지 지연될 수 있다. 주 복제본은 마치 복제본이 존재하지
23.4.2.2 과반수프로토콜
각각의 잠금 관리자는 잠금을 즉시 승인할 수 있는지를 결정한다. 이전에 언급한 것처럼, 요청에 대
해 승인이 지연될 수도 있다. 트랜잭션은 과반수 이상의 노드로부터 잠금을 획득하기 전까지。에
가정한다. 하지만 과반수 프로토콜의 장점은 실패가 존재해도 적용할 수 있다는 점이며, 2343.1절
1034 PART 8 병렬 및 분산 데이터베이스
처리할 수 있으며, 이는 분산 환경에서 중앙 통제형 방식이 가지는 단점을 극복할 수 있다. 하지만
• 구현의 어려움. 과반수 프로토콜은 이전의 방법보다 구현이 어렵다. 잠금을 요청하는 데 적어도
2(미2 + 1)개의 메시지가 필요하며, 잠금 해제를 요청하는 데 적어도 (〃/ 2 + 1)개의 메시지가
필요하다.
공유 잠금과 독점적 잠금을 다루는 방식이 편향된 것을 알 수 있다. 이전에 살펴본 것처럼, 요청에
정족수 컨센서스 프■루투콜 (quorum consensus protocol)은 과반수 프로토콜을 일반화한 것이다. 정
족수란 모임이나 단체에서 어떤 결정을 내리는 데 필요한 최소의 인원수를 의미한다. 각각의 노드
Chapter 23 병렬 및 분산 트랜잭션 처리 1035
X
에 음이 아닌 가중치를 할당한다. 어떤 데이터 항목 에 대한 읽기와 쓰기 연산에 읽기 정족수 (read
quorum) Q,과 쓰기 정족수 (write quorum) 두 개의 정수를 할당하며, 다음의 조건을 만족해야
한다.
다. 쓰기 연산을 수행하기 위해선 잠금을 획득한 노드에 대한 가중치가 적어도 Q”가 되어야 한다.
정족수 컨센서스 프로토콜의 장점은 읽기 혹은 잠금에 대한 정족수를 조정하면서 읽기 혹은 잠
과반수 프로토콜과 마찬가지로 노드가 실패해도 정족수 컨센서스 프로토콜은 작동할 수 있으며,
23.4.3 실패에 대한 대처
복제된 데이터를 처리하는 다음의 프로토콜을 고려해 보자. 쓰기 작업은 어떤 데이터 항목의 모든
복제본에서 성공적으로 수행되어야 한다. 읽기 작업은 복제본 중 하나에 대해서 수행할 수 있다.
읽을 수 있다. 이러한 프로토콜을 하나에서 읽고 모두에 쓰는 프로토콜 (read one, write all copies
protocol)이라고 한다. 왜냐하면 모든 복제본에 관해 쓰기 작업을 수행하고, 읽기 작업은 하나의 복
제본에 대해 수행하기 때문이다.
에도 작업을 계속 수행하기 위해선 하나에서 읽고 가능한 모두에 쓰는 프로토콜 (read one, write all
available protocol)을 사용할 수도 있다. 읽기 작업은 하나에서 읽고 모두에 쓰는 프로토콜과 동일
하게 진행한다. 즉 사용 가능한 한 복제본에 대해 읽기 작업을 수행하고 그에 필요한 잠금을 획득
만약 네트워크 분할이 발생한 경우, 각각의 분할은 다른 분할에 있는 노드가 실패했다고 가정하고
네트워크 분할이나 노드 실패의 경우도 다음 조건을 만족하면 극복할 수 있다. (1) 커밋 당시에 사
가진 것을 읽기 때문이다.
1. 첫 번째 문제는 2PC 프로토콜 도중에 참여 노드가 실패하는 경우를 어떻게 다룰지에 대한 것이다.
이 경우 2PC 프로토콜을 확장하는 형태로 해결할 수 있는데, 만약 과반수의 복제본이 준비
된 상태에 있는 것에 동의한 상황이라면, 몇몇 복제본이 사용 불가능해지더라도 커밋 처리를 진
2. 두 번째 문제는 2PC 프로토콜 도중에 조정자가 실패하는 경우이며, 블로킹 문제를 유발할 수
Chapter 23 병렬 및 분산 트랜잭션 처리 1037
23.4.3.2 읽기비용을줄이는 방법
로토콜과 정확히 일치한다. 이러한 프로토콜에선 버전 숫자를 사용할 필요가 없다. 하지만 단 하나
이러한 방법은 네트워크 분할이 존재해도 주 복제본을 담당하는 노드가 단 하나만 존재한다는
사실을 보장해야 한다. 23.3.3절에서 살펴본 임대의 개념을 활용하면 가능하다. 게다가 이러한 방
법은 새로운 조정자가 모든 데이터 항목에 대해 최신의 값을 가지도록 보장하는 효율적인 방법이
필요하다. 이를 위해 각각의 노드가 로그를 유지하고 다른 노드의 로그와 일관된 상태를 유지하도
않다.
제 기술을 통해 만들어졌다.
23.4.4 재설정및재결합
노드가 실패했을 때 대부분은 빠르게 복구할 수 있으며, 앞에서 언급했던 프로토콜에서 실패한 노
한다.
이전에 살펴본 것처럼, 네트워크의 실패는 사실 노드가 실패하지 않았음에도 노드가 실패한 것
처럼 보이게 한다. 실제로 노드가 실패하지 않았지만, 복제본의 목록에서 삭제하는 것이 일관성에
터베이스 복구 로그를 활용하여 실패했던 노드가 놓쳤던 갱신 작업을 발견하고 수행할 수 있다.
노드를 재결합하는 작업은 생각보다 복잡한데, 심지어 복구를 수행하는 와중에 데이터 항목에
23.4.3.1 절에서 소개한 과반수 프로토콜을 사용하면 재결합 과정이 더 쉬워지는데, 몇몇 노드가
최신이 아닌 값을 가지고 있어도 개의치 않기 때문이다. 최신 값으로 갱신하지 않더라도 재결합할
샷 고립을 확장하는 방법은 2352절에서 언급한다. 각각의 노드가 고유의 동시성 제어 기법을 가
2
잭션의 장점과 단계 잠금의 직 렬 가능성 보장의 장점을 결합한 것이다. 읽기 전용 트랜잭션은 어
2
떤 순간 하나의 스냅샷을 확인하는 반면에, 갱신 트랜잭션은 단계 잠금을 활용하되 갱신하는 데이
터 항목의 새로운 버전을 생성한다. 이 프로토콜을 사용할 때 각각의 트랜잭션 7;는 고유한 타임스
탬프 CommitTS(Z)를 커밋이 이루어지는 순간에 받는다(실제 시간 혹은 카운터 값을 타임스탬프
모든 노드가 완벽하게 정확한 시계를 가지고 있고, 커밋 처리가 시작과 동시에 아무런 지연도 없
X
수 있다. 만약 두 개의 갱신 트랜잭션「과 乙가 하나의 데이터 항목 에 대한 쓰기 작업을 수행
1040 PART 8 병렬 및 분산 데이터베이스
하다.
• Spanner는 각 데이터 센터마다 매우 정확한 원자 시계를 가지고 있으며 GPS 위성에서 제공하
는 시간 정보와 함께 매우 정확한 시간 정보를 만들어 낸다. 따라서 각 노드는 매우 좋은 품질
의 시간을 얻을 수 있다. 우리는 어떠한 완벽하게 정확한 시계가 가리키는 시간을 실제 시간 (true
time)이 라고 부른다.
각각의 노드는 시계를 동기화하기 위해 시간 서버와 주기적으로 통신한다. 만약 시계가 더 빠
른 시간을 가리키고 있으면 늦추고, 시계가 더 느린 시간을 가리키고 있으면 빠르게 맞춘다.
e
통해 지역 시간이 "일 때 실제 시간 t^t'-e<t<t, + 으로 한정되도록 값을 유지할 수 있
• X
위와 같은 방식으로, 어떤 데이터 항목 의 버전 占가 타임스탬프/를 가지고 있다면 우리는 실제
시간♦에 X의 r
값이 실제 값이라고 말할 수 있다. 이것은 시간 에 모든 데이터 항목의 가장 최신
버전을 포함하고 있는 데이터베이스의 스냅샷을 정의할 수 있도록 한다. 만약 직렬화 순서가 실
못할 수도 있다.
23.5.2 분산스냅샷 고립
8
は 절에서도 언급했듯이 스냅샷 고립은 직렬 가능성을 보장하지는 않지만, 많은 동시성 문제를 해
결할 수 있다.
기에 충분하지 않다.
잭션이 전역에서 추가적인 단계를 요구하지 않고 실행될 수 있도록 한다. 추가적인 비용은 둘 이상
2
템이 잠금 행동의 통제를 허용하고 단계 잠금을 따르고 있다면, 연합 데이터베이스 시스템은 전역
트랜잭션이 2단계 잠금을 수행하고 있다는 사실을 보장할 수 있으며, 트랜잭션이 충돌했을 때 잠금
Chapter 23 병렬 및 분산 트랜잭션 처리 1043
한다.
을 보장하는 몇 가지 방법이 있다. 이러한 방법 중 일부는 표 (ticket)의 개념에 기반을 둔다. 표라고
부르는 특별한 데이터 항목을 각각의 지역 데이터베이스 시스템에서 생성한다. 한 노드에 있는 데
생하면 블로킹 문제가 발생할 수도 있다. 게다가 네트워크 분할이 발생한 경우 과반수 분할에 있지
. 일관성 (Consistency)
• 가용성 (Availabilky)
• 분할 허용(Partition-tolerance)
1044 PART 8 병렬 및 분산 데이터베이스
을 희생해야 한다. 이전에 살펴본 방법은 분할이 발생하면 일관성을 위해 가용성을 포기한 경우다.
최우선 목표는 일관성이 약간 깨지더라도 가용성을 보장하는 것이다. 갱신 작업은 가능한 모두에
된 값을 가지는 것이다.
I
ス 하는 방법을 버전 벡터 기법 (version-vector scheme)이라고 하며 23.6.4절에서 설명한다.
일관되지 않은 갱신 작업을 만났을 때 일관성을 복구하는 방법의 핵심은 응용 프로그램의 목적
업을 처 리하길 원하지 않는다. 가능하다면 시스템은 일관성을 유지해야 한다. 아무리 가용성이 더
때만 허용되어야 한다.
다. 하지만 일관되지 않은 갱신의 위험이 도사리고 있으며, 그러한 갱신이 발생한 경우 추후에 반드
23.6.2 비동기적 복제
있다.
신을 수행하는 트랜잭션은 사본이 갱신되기 전에도 커밋될 수 있다. 커밋 이후에 갱신이 전파되는
생하더라도 사본에 갱신이 전파됨을 보장해야 한다. 이 절의 뒷부분은 영속 메시지 기법을 이용하
이터 항목을 읽을 수 있다.
시스템은 사용자가 처음에 본 가격으로 티켓을 예매할 수 있도록 보장하지 않는다. 따라서 몇 분
냅샷에 대한 모든 읽기는 해당 사본으로 처리가 가능하다. 이러한 기법은 Google Spanner 데이터
베이스에서 사용된다.
이다.
사본에 갱신을 전파할 책임이 있다. 이는 지리적으로 사용자에게 가까운 노드가 해당 사용자 데이
다른 사본에 전달되어야 한다. 순서를 지키지 않으면 먼저 발생한 갱신이 나중에 발생한 갱신보다
수 있다. 영속 메시지 기법을 사용할 때는 각각의 주 노드가 모든 사본의 위치를 알고 있어야 한다.
는 원하는 범주를 구독할 수 있음을 떠올려 보자. 비동기적 복제를 구현하기 위해서는 각 분할에
해당하는 범주가 생성될 것이다. 분할에 대한 모든 갱신(삽입, 삭제, 데이터 항목 갱신을 포함한다)
은 분할에 대응하는 범주와 함께 메시지로 발행될 것이다. 발행-구독 시스템은 메시지가 발행되고
Apache Kafka 시스템이나 PNUTS 분산 데이터 저장소 시스템에서 비동기 복제에 사용된
Yahoo Message Bus 서비스와 같이, 병렬 시스템을 위해 설계된 발행-구독 시스템은 많은 수의 범
주를 허용하고, 다른 범주에 대한 메시지를 병렬로 처리하기 위해 여러 개의 서버를 사용한다. 따라
생각해 보자. 새로운 주 노드는 주 사본에서 마지막으로 커밋된 갱신이 무엇인지 알 수 없다. 원래
두 가지 방법이 있지만, 전자는 현실적으로 어렵다. 후자는 새로운 주 노드의 트랜잭션이 데이터 항
문제가 발생할 가능성을 낮추기 위해, 일부 시스템은 주 노드의 로그 기록을 백업 노드에 복제하
한다. 만약 주 노드가 고장나면 백업 노드는 주 노드의 역할을 수행하게 된다. 이는 19.7절의 two-
safe 프로토콜에 해당한다. 이 프로토콜은 노드 하나의 고장에는 탄력적으로 대응할 수 있지만 두
노드의 고장에는 그렇지 못하다.
23.6.3 비동기적뷰관리
된다.
있어야 한다.
해 보スト.
이션의 주제를 구독하여 관련된 모든 갱신을 전달받는다. 22.8.1 절에서 봤던 것처럼 저장된 릴
이터에 대해 사용될 수 있다. 16.5.1 절에서 뷰 관리는 연기, 즉 트랜잭션이 커밋된 이후에 완료
될 수 있다고 설명한 바 있다. 중앙집중 환경에서 연기된 뷰 관리를 위한 기법은 이미 동시적 갱
일반적이다.
Chapter 23 병렬 및 분산 트랜잭션 처리 1049
어떠한 연산도 다른 연산의 갱신 일부만 반영한 데이터베이스의 상태를 봐서는 안 된다는 18.9
절의 연산 일관성의 개념을 떠올려 보자. 우리는 18.9절에서 인덱스를 사용한 스캔의 예를 본
적이 있다. 릴레이션 스캔이 2단계 잠금을 따르지 않는 경우, 동시에 수행되는 다른 트랜잭션에
의해 갱신된 레코드의 두 가지 버전을 보거나 어떤 버전도 볼 수 없었다. 심지어 릴레이션 스캔
을 삭제하고, 값 ウ에 대응하는 분할에 새로운 튜플을 삽입해야 한다. 이러한 갱신은 비동기적으
로 전파된다.
2
전파되는 경우에는 단계 잠금을 사용하면 위 두 경우는 발생하지 않는다.
데이터 항목이 타임스탬프를 가지는 다중 버전 동시성 제어 기술이 사용된 경우, 릴레이션의
한다.
다른 예시로 오프라인 갱신을 지원하는 모바일 장치를 생각해 보자(즉 모바일 장치가 네트워크
응용 프로그램은 지역에 캐시된 사본에 대해 갱신을 수행하고, 장치가 다시 온라인 상태가 되었을
도 갱신이 충돌하는 문제가 발생한다. 아래에 기술된 기법은 노드가 모바일 장치도 지칭하는 것으
돌이 탐지됨을 보장한다.
レ⑴를 I 증가시킨다.
예를 들어, 어떤 데이터 항목이 노드 N\, M, N3에 복제되었다고 해 보자. 항목이 초기에 M에서
생성되었다면 버전 벡터는 [1, 0. 이일 것이다. 그 뒤에 M에 복제되어 노드 M에서 갱신되었다면
에 데이터 항목을 갱신한다고 생각해 보자. 그러면 M에 있는 데이터 항목의 버전 벡터는 11, 2, 이
목을 유지한다. 하지만 데이터 항목을 교환하기 전에 사본이 일관성을 유지하고 있는지 확인해야
한다.
벡터 사본을 대체한다.
2
匕⑵ = 이지만 匕 [2]= 1이고, 匕⑶ =0이지만 匕⑶ = 1이다.
갱신의 합병을 위해 사용자의 간섭이 필요할 수도 있다. 갱신을 합병한 후 (아마도 수동으로)
23.6.5 갱신 충돌의 해결
이때 데이터 항목을 하나의 공통된 버전으로 만들기 위해, 같은 데이터 항목에 대한 갱신의 충돌
(실행 순서에 관계 없이 같은 결과가 나와야 한다). 상품을 장바구니 에 더하는 연산은 분명히 교환
는 있지만, 최종 결과(잔액)는 같다. 물리적 세계에서 이미 연산이 발생했기 때문에 잔고가 음수가
리되어야 한다.
당 방법으로도 해결이 불가능한 최악의 경우에는 시스템이 사람에게 갱신 충돌에 대해서 알리고,
진 버전을 가정한다.
우리는 데이터 항목이 하나의 키(key)와 하나의 값을 가진다고 가정한다. 명시적인 키를 가지지
않는 컬렉션의 경우 데이터 항목 값이 키로 사용될 수 있다.
Hash values of
data items
広(/1)=00
% (ら%
(ら)二11
h\ "4)=00
hy (rs)=10
hi "ノ=11
hi "7)=10
Node identifier shown above node, and has value shown inside node,
Vj denotes stored hash value in node i
그림 23.8 머클 트리의예
값을 비교한다.
노드의 수가 데이터 항목의 수에 가깝게 선택되기 때문에 순회 시간은 데이터 항목 수에도 로그만
따라서 두 집합(매우 클 가능성이 있다) 간 차이를 찾아내는 전체 비용은 O(m log2 N)인데 여기
서 机은 서로 다른 데이터 항목의 수이고 N은 데이터 항목의 총개수다. 순회 과정에서 마주치는 노
23.7 조정자선택
23.7.1 예비 조정자
하다.
다시 시작해야 할 수도 있다.
신해야 한다.
드를 발생시키고 있는 셈이다.
23.7.2 조정자의 선출
(lock leases)를 사용할 수 있다. 현재 조정자는 작업에 관련된 데이터 항목에 대한 잠금을 임대하고
있다. 조정자가 고장 나면 해당 임대는 만료된다. 조정자가 고장 났을 수 있다고 참여자가 판단하면
중 하나만 임대할 수 있도록 하고, 임대에 성공한 참여자가 새로운 조정자가 된다. 23.3.3절에서와
같이 이는 주어진 시간에 하나의 노드만 조정자가 될 수 있도록 보장하고, 널리 쓰이고 있으나 장
참여자는 조정자와 네트워크 연결이 끊어진 상황과 조정자가 고장 난 상황을 구분하지 못한다.
은 정상적으로 동작할 수 있어야 한다. 잠금 임대는 언제나 하나의 노드만 조정자가 될 수 있도록
숫자를 가진 후보를 선택한다. 그래도 메시지가 사라지거나 지연되어서 과반수 조건을 충족하지
선거의 각 라운드에는 숫자가 부여되고 후보는 제안에 라운드의 숫자를 붙인다. 라운드 숫자
• 두 번째 접근법은 다음과 깉■이 동작하는 무작위 재시도 (randomized retry)에 기반한다. (만일 그
때까지 과반수 노드가 특정 노드를 선택했다면 해당 노드를 조정자로 결정한다.) 특정 라운드에
과반수 득표가 나오지 못하면 모든 참여자는 무작위로 설정된 시간만큼 기다린다. 무작위로 설
Chapter 23 병렬 및 분산 트랜잭션 처리 1057
위 설명은 조정자를 선택하는 것이 일회성 활동임을 가정하고 있다. 그러나 선택된 조정자
(term)라는 개념이 필요하다. 위에서 언급한 것처럼 이전 라운드에서 조정자가 선택되지 않았거
나 조정자가 선택된 후 고장 난 경우 노드가 자신을 조정자로 제안한다. 그때마다 제안에는 라운
한다.
는 동시에 여러 개일 수 있다.
노드에 연장을 요청해서 과반수의 노드로부터 확인을 받으면 임대를 연장할 수 있다. 그러나 조
정자가 과반수 노드와의 연결이 끊어지면 임대를 갱신할 수 없어 임대는 만료된다. 특정 노드는
지지 않도록 여러 노드에 복제되어야 한다. 이제 이어지는 절에서 데이터 복제가 어떻게 가용성
23.7.2.1 분산조정서비스
• 계층적 네임스페이스를 사용하여 파일에 (적은 양의 데이터 저장. 이러한 저장소는 일반적으로
• (잠금 구현에 사용되는) 파일의 생성과 삭제 예를 들어, 잠금을 얻기 위해서 프로세스는 잠금의
때 자동으로 이루어진다.
이 절은 분산 시스템의 컨센서스 문제, 즉 노드가 어떻게 장애를 허용하는 방식으로 결정에 동의할
23.8.1 문제 개요
등의 결정이다.
노드가 결정을 위한 제안을 할 수는 있지만 결정을 내리기 위한 과정에 다른 노드가 장애를 허용하
서스 결정을 내리는 과정은 마치 하나의 결정을 로그에 레코드 하나를 추가하는 것으로 추상화해 볼
수 있다. 즉 각 노드는 로그의 사본을 가지고 있고, 레코드가 각 노드의 로그에 추가되는 것이다. 로
렇다. 이 문제를 해결하기 위해 이해와 구현의 용이성을 핵심 목표로 한 래프트 컨센서스 프로토콜
설명한다.
수 있다.)
을 준다. 이 문제를 피하기 위해 팩소스 알고리즘은 조정자 노드를 이용한다. 제안자는 조정자에게
제안을 보내고, 조정자는 제안된 값 중 하나를 선택하여 과반수 득표를 위한 선행 단계를 수행한다.
노드 실패의 상황).
한다.
다면 숫자 “을 가진 제안된 값 V를 수락한다.
안도 수락할 수 있다.
러 결정의 처리를 단순화한다. 래프트 컨센서스 프로토콜은 그러한 프로토콜의 대표적인 예시이고,
로 연결이 끊어져 일부 갱신을 놓치고도 연결이 끊겼다는 사실을 모르는 경우를 떠올려 보자. 더욱
log index 1 2 3 4 5 6 7
1 1 1 2 3 3 3
leader X—2 z «- 2 X <-3 X <- 4 X♦ 1 y <- 6 z1ー 4
1 1 1 2 3
follower 1 x<-2 z y2 X・3 X 4 Xu 1
1 1 1 2 3 3 3
follower 2 X♦2 z 12 X V- 3 X <— 4 X♦ 1 y <一 6 z<-4
1 1 1
follower 3 X <- 2 z «「2 Xy3
1 1 1 2 3 3
follower 4 x -2 z u2 X・3 X «- 4 X・1 V <一 6
committed entries
되지 않은 것으로 본다.
리더는 23.7.2절에서 설명한 무작위 재시도 알고리즘을 이용하여 선출된다. 무작위 재시도 알고
리즘은 이미 임기의 개념을 사용하고 있다. 하나의 노드는 특정 임기를 위한 리더에게 투표한다. 노
다. 리더는 자신의 임기를 로그 레코드의 필드로 추가하고 자신의 로그에 레코드를 추가한다. 그 후
포함한다.
• term: 현재 리더의 임기
6. 참을반환한다.
마지막 단계는 가장 최근에 커밋된 로그 레코드를 파악하고 있다. 리더의 로그가 지역 로그보다 앞
포함해 보낸다. 그러면 노드 N、은 새로운 임기와 그에 해당하는 리더가 있다는 사실을 인지하고 팔
프로토콜은 일부 노드가 오래된 로그를 가지는 문제를 해결해야 한다. 팔로워 프로토콜의 2단계
에서 팔로워는 자신의 로그가 유효 기간이 지났다면 거짓을 반환한다고 했었다. 그런 경우 리더는
한다.
정보를 보내야 한다. 선거에서 노드는 후보의 로그 상태가 최소한 자신의 것만큼은 최신이어야
한다.
때 커밋될 수도 있다.
신"의 정의와 리더가 고장, 복구되거나 다시 리더로 선출될 가능성 때문에 발생한다. 세부 사항
많은 시스템은 서비스가 장애를 허용할 수 있도록 만드는 것을 중요하게 생각한다. 키-값 저장소
령을 팔로워의 로그에도 복제한다. 과반수가 명령이 그들의 로그에 복제되었다고 확인하면 리더는
보자.
Leader declares log record committed after it is replicated at a majority of nodes. Update of state machine at each
replica happens only after log record has been committed.
그림 23.10 복제된상태 기계
컨센서스 프로토콜이 리더를 사용한다면 get() 연산은 기록될 필요가 없고 리더에서만 실행되
어야 한다. get() 연산이 동일한 데이터 항목에 대한 가장 최근 put() 연산의 결과를 보도록 보장
하기 위해, 로그에서 get() 연산에 선행하는 같은 데이터 항목에 대한 모든 put() 연산은 get() 연
산이 처리되기 전에 반드시 커밋되어야 한다. (만약 컨센서스 프로토콜이 리더를 사용하지 않는다
작한다. 연산은 로그에 추가되고, 로그는 팩소스 컨센서스 프로토콜コ을 사용하여 팩소스 그룹 노드
로그에 결정을 기록하는 컨센서스 프로토콜을 사용한다. 조정자가 이후에 고장 나더라도 컨센서스
졌는지 로그를 검사하고, 그렇지 않다면 거밋/중단 결정을 내린 후 결정을 기록하기 위해 컨센서스
2단계 커밋은 클라이 언트가 시작하고, 조정자의 역할은 트랜잭션이 수행되는 분할 중 하나의 팩소
2
스 그룹 리더가 수행한다. 갱신을 수행한 다른 모든 분할은 단계 커밋 프로토콜에서 참여자의 역
할을 수행한다. 준비와 커밋 메시지는 각 분할의 팩소스 그룹 리더 노드로 전송된다. 조정자뿐만 아
2
니라 단계 커밋 참여자도 자신의 지역 로그에 결정을 기록한다는 것을 떠올려 보자. 이 결정은 각
리더가 기록하는데, 리더가 속한 팩소스 그룹의 다른 모든 노드의 컨센서스를 통해 이루어진다.
23.9 요약
정한다.
노드의 고장, 통신선의 고장, 메시지 손실, 네트워크 분할을 포함하는 분산 환경의 추가적인 실
- 2단계 커 밋 프로토콜은 블로킹을 야기할 수 있다. 블로킹은 실패한 노드(특히 조정スト)가 복구될
때까지 트랜잭션의 최종 결과를 결정할 수 없는 상황을 말한다. 이때 블로킹 위험을 줄이기 위해
는 있지만 응용 프로그램 개발자가 다양한 유형의 고장을 다루기 위해 별도의 코드를 작성해야
한다.
데이터 항목의 사본에 대한 동시적 읽기와 쓰기가 직렬화될 수 있음을 보장하는 핵심 속성이다.
• 복제된 데이터를 다루기 위한 프로토콜에는 주 복제본, 과반수, 편향된, 그리고 정족수 컨센서스
른 장단점을 가진다.
1070 PART 8 병렬 및 분산데이터베이스
해야 한다. 이 작업은 네트워크 분할과 노드 고장을 구별하기 어렵기 때문에 굉장히 복잡하다.
• 여러 데이터베이스 시스템이 비동기적 복제를 지원한다. 비동기적 복제는 갱신이 수행된 트랜잭
션 범위의 밖에서 사본에 대해 갱신을 전파하는 것이다. 이러한 기능은 비직렬적 실행을 초래할
용어정리
〇 주복제본 • 골목대장알고리즘
〇 과반수프로토콜 • 임기
〇 편향된 프로토콜 • 분산 컨센서스프로토콜
〇 정족수 컨센서스프로토콜 • 팩소스
• 강건성 ° 제안자
° 과반수 기반 접근법 ° 수락자
° 하나에서 읽고 모두에 쓰기 。학습자
。 하나에서 읽고 가능한 모두에 쓰기 • 래프트
° 노드/사이트 재결합 • 리더
• 외부일관성 • 팔로워
• 커밋대기 • 복제된 상태 기 계
• CAP 이론 • 장애 허용 잠금 관리자
• BASE 속성 • 블로킹 없는 단계커밋2
실전문제
23.1 분산 데이터베이스 설계에 영향을 미치는 근거리망과 광역망의 핵심적인 차이점은 무엇인가?
23.2 높은 기용성의 분산 시스템을 구축하기 위해서는 발생할 수 있는 고장의 종류를 반드시 알아야
한다.
• A B 사이 연결의 고장
23.7 데이터를 주 노드가 아닌 노드에서 읽었을 때, 갱신이 주 사본에 대한 독점적 잠금을 얻더라도
늦은 복제가 비일관적인 데이터베이스 상태를 야기하는 예시를 설명하라.
23.13 큰 릴레이션 r(A, B, C)와 실체화된 뷰 v = 仏1m⑻⑺를 가지고 있다고 가정해 보자. 뷰 관리는
여러 노드에 걸친 트랜잭션을 지원하는 분산ハ병렬 저장소 시스템에서「을 갱신하는 각 트랜잭션
의 일부로 수행될 수 있다. 시스템이 지리적으로 분산된 데이터 센터에 걸쳐 팩소스와 같은 컨센
2
서스 프로토콜과 함께 단계 커밋을 사용한다고 가정해 보자.
연습문제
23.21 조정자를 선택할 때 선거가 사용되는 경우 왜 임기라는 개념이 중요한가? 임기를 사용한 선거와
민주주의에서 이야기하는 선거는 어떤 유사점이 있는가?
23.22 복제된 상태 기계의 올바른 실행을 위해 행동은 결정적이어야 한다. 행동이 비결정적인 경우 어
떤 일이 일어날 수 있는가?
더 읽어보기
은 [Junqueira et al. (2011)]에 기술되어 있다. 래프트 컨센서스 프로토콜은 [Ongaro and Ousterhout
(2014)]에 기술되어 있다.
참고문헌
[Agra wal et al. (1987)] D. Agrawal. A. Bernstein, P. Gupta, and S. Sengupta, "Distributed optimistic
concurrency control with reduced rollback",Distributed Computing, Volume 2, Number 1 (1987),
pages 45-59.
[Agrawal et al. (2009)] P. Agrawal, A. Silberstein, B. F. Cooper, U. Srivastava, and R. Ramakrishnan,
"Asynchronous view maintenance for VLSD databases ', In Proc, of the ACM SIGMOD Conf, on
Management of Data (2009), pages 179-192.
[Bernstein and Goodman (1981)] P. A. Bernstein and N. Goodman, "Concurrency Control in
Distributed Database Systems'', ACM Computing Surveys, Volume 13, Number 2 (1981), pages
185-221.
[Bernstein and Newcomer (2009)] P. A. Bernstein and E.Newcomer, Principles of Transaction
Processing, 2nd edition, Morgan Kaufmann (2009).
[Binnig et al. (2014)] C. Binnig, S. Hildenbrand, F. FAQrber, D. Kossmann, J. Lee, and N. May,
"Distributed snapshot isolation: global transactions pay globally, local transactions pay locally ',
VLDB Journal, Volume 23, Number 6 (2014), pages 987-1011.
[Brewer (2000)] E. A. Brewer, "Towards Robust Distributed Systems (Abstract)^^, In Proc, of the
ACM Symposium on Principles of Distributed Computing (2000), page 7.
[Burrows (2006)] M. Burrows, "The Chubby Lock Service for Loosely-Coupled Distributed
Systems , In Symp. on Operating Systems Design and Implementation (OSDI) (2006), pages 335-
350.
[Chen et al. (2004)] S. Chen, B. Liu, and E. A. Rundensteiner, "Multiversion-based view maintenance
over distributed data sources , ACM Transactions on Database Systems, Volume 29, Number 4
(2004), pages 675-709.
[Cooper et al. (2008)] B. F. Cooper, R. Ramakrishnan, U. Srivastava, A. Silberstein, P. B아lannon,
H.-A. Jacobsen, N. Puz, D. Weaver, and R. Yemeni, "PNUTS: YahooJ's Hosted Data Serving
Platform ', Proceedings of the VLDB Endowment, Volume 1, Number 2 (2008), pages 1277-1288.
[Corbett et al. (2013)] J. C. Corbett et al., "Spanner: Google's Globally Distributed Database', ACM
Trans, on Computer Systems, Volume 31, Number 3 (2013).
[Gilbert and Lynch (2002)] S. Gilbert and N. Lynch, "Brewer s Conjecture and the Feasibility of
Consistent, Available, Partition-Tolerant Web Services",SIGACT News, Volume 33, Number 2
(2002), pages 51-59.
[Gray (1981)] J. Gray, "The Transaction Concept: Virtues and Limitations'', In Proc, of the
International Conf, on Very Large Databases (1981), pages 144-154.
[Gray and Lamport (2004)] J. Gray and L. Lamport, ""Consensus on transaction commit'', ACM
Transactions on Database Systems, Volume 31, Number 1 (2004), pages 133-160.
[Hunt et al. (2010)] P. Hunt, M. Konar, F. Junqueira, and B. Reed, "ZooKeeper: Wait-free
Coordination for Internet-scale Systems'', In USENIX Annual Technical Conference (USENIX
1076 PART 8 병렬 및 분산 데이터베이스
크레딧
고급주제
24장은 14장에서 다룬 인덱스 구조를 자세히 설명한다. 특히 24장은 14장에서 간략하게 설명한
LSM 트리와 그 변형, 비트맵 인덱스 공간 인덱싱에 관한 자세한 내용을 제공한다. 또한 동적 해싱
기술에 관한 자세한 내용을 제공한다.
을둔다.
1077
고급인덱싱기술
는 LSM 트리와 그 변형, 비트맵 인덱스에 대해 자세히 설명한다. 다음으로 사분위트리와 R-트리
를 포함하여 공간 인덱싱과 관련된 자세한 내용을 제공한다. 마지막으로 동적 해싱 기술을 포함하
여 해싱에 대해 다룬다.
오4.1 블룸필터
에 해당하는 비트가 〇이면, V가 집합에 존재하지 않는다고 결정할 수 있다. 그러나 A(v) 위치에 해
당하는 비트가 1 이면, n가 집합에 존재할 수 있다. I,가 존재하지 않더라도 비트 6(レ)가 1 일 수 있으
며 이 경우는 집합에 존재하는 다른 값 /가 조건 ん(め = 를 만족하는 경우다. 따라서 거짓 양성
1079
1080 PART 9 고급주제
거짓 양성을 줄이기 위해, 블룸 필터는 ん개의 독립 해시 함수 〃,( ),i = \ :k를 사용한다伙 > 1).
지 않다면 V가 집합에 존재할 수도 있다고 판단한다. 예를 들어, 비트맵에 10〃개의 비트가 있으면
성 비율은 약 1%다.
오4.오 로그 구조 합병 트리와 변형
인덱스 검색은 La, ... , Lk 트리 각각에 대해 별도의 검색 연산을 수행하고, 검색 결과를 합병하
는 방식으로 수행된다. (지금은 삽입만 있고 갱신과 삭제는 없다고 가정하자. 갱신과 삭제가 있는
Memory
Disk
있다.
의 I/O를 방지한다.
지할 수 있다.
그러나 LSM 구조를 사용하기 위해서는 추가 비용이 발생한다. 즉 *의 엔트리 집합이 厶에 복사될
때마다 트리의 전체 내용이 복사되어야 한다.
않기 때문이다.
기는 厶,의 크기의 ん배로 선택되어야 한다. 유사하게 厶”의 최대 크기는 厶의 크기의 k배로 선택되
I/O 연산 수가 줄어든다.
예를 들어, r = 10」: = 10이면, 삽입에 필요한 I/O 연산 수 측면에서 이점을 얻으려면 인메모리
인덱스가 전체 인덱스 크기의 1%보다 커야 한다. (이전과 마찬가지로 厶〇 가 훨씬 더 작더라도 검색
시 이점은 유효하다.)
분할에 대해 별도의 LSM 트리를 생성하는 것이다. 21.2절에서 본 것처럼 이러한 분할 방식은 병렬
환경에 가장 적합하다.
24.2.2 롤링 합병
24.2.3 삭제와갱신처리
지금까지는 삽입과 조회만 설명했다. 삭제는 다음과 같은 방식으로 수행된다. 인덱스 엔트리를 직
접 찾아서 삭제하는 대신, 삭제할 인덱스 엔트리를 표시하는 새로운 삭제 엔트리(deletion entry)>
삽입한다. 삭제 엔트리를 삽입하는 과정은 일반 인덱스 엔트리를 삽입하는 과정과 동일하다.
Memory
그림 24.2 단계별합병인덱스
LSM 트리의 변형을 살펴보자. 이 구조는 그림 24.2에 표현되어 있다. 이 구조를 소개한 초기 논문
의 용어를 사용하여 이 구조는 단계별 합병 인덱스(stepped-merge index)라고 부른다. 개발자 커뮤
24.2.4.1 삽입 알고리즘
단계별 합병 인덱스에서 입력 데이터는 LSM 트리와 비슷한 방식으로 처음에는 메모리에 상주하
여러 개의 트리가 하나의 새로운 트리로 합병되면 합병된 트리를 사용하여 질의를 수행할 수 있
록된다는 점이다. 기본 LSM 트리의 경우 계층,의 트리가 계층 ム・의 트리로 합병될 때마다 Li+t
B+-트리의 경우 페이지에 100개의 엔트리가 존재하면 쓰기 증폭은 100이 된다. k = 5,/= I00A/
이면 계층은 loggO。) = 3이 된다. LSM 트리의 쓰기 증폭은 5/2x3 = 7.5가 된다. 단계별 합병
인덱스의 쓰기 증폭은 3이 된다. k= 10인 경우, 트리의 계층은 /og10(100) = 2이므로, 단계별 합병
I/O 연산이 필요하지 않다. 그러므로 B+-트리의 성능은 위의 쓰기 증폭 수치가 의미하는 것보다
더 나쁠 것이다.
단계별 합병 인덱스의 검색 연산은 각 트리를 별도로 검사해야 하므로 기본 LSM 방식보다 비용이
목하라.
은 일반 B"트리보다 약간 더 나빠진다.
그러므로 모든 블룸 필터가 메모리에 저장될 수 있다면, 블룸 필터 검사는 포인트 검사에 대해
13.6절에 서 설명한 열 지향 저장소는 속성을 배열에 저장하므로, (주어진 i에 대해) i번째 레코드
의 속성에 효율적으로 접근할 수 있게 해 준다. 그러므로 비트맵 인덱스는 열 지향 저장소에 특히
유용하다.
한다. 각 비트맵은 릴레이션에 있는 레코드의 수만큼 많은 비트를 가지고 있다. 만약 번호가 z・인 레
코드의 속성 4가 り 값을 가지고 있다면, 값 り를 위해 비트맵의 i번째 비트를 로 설정한다. 이 비
덱스에 부가적으로 앞에서 설명했던 income-level 속성에 대한 비트맵 인덱스를 생성해 보자.
이제 $10,00〇〜 19,999 범위에 속하는 수입을 가진 여성을 선택하는 질의를 생각해 보자. 이 질
의는 다음과 같이 표현될 수 있다.
Chapter 24 고급 인덱싱 기술 1087
1 f L2 L2 01000
22222
2 12121 f LI L3 00001
3 15151 m L4 L4 1 00010 ]
4 58583 f L3 L5 1 00000 I
select *
from instructorjnfo
where gender = 'f and income-level = 'L2';
다. 그래서 하나의 비트맵이 차지하는 공간은 보통 릴레이션이 차지하는 공간의 1%도 안 된다. 예
를 들어, 주어진 릴레이션의 레코드 크기가 100바이트라면 하나의 비트맵이 차지하는 공간은 릴
레이션이 차지하는 공간의 1%의!이다. 릴레이션의 속성 A가 여덟 개의 값 중에서 하나를 가질
의 1%를 차지한다.
레코드를 삭제하면 연속적인 레코드에 공백이 생기는데, 왜'中하면 이 공간을 채우기 위해 레코
드(혹은 레코드 번호)를 이동하는 것은 비용이 매우 비싸기 때문이다. 삭제된 레코드를 재구성하기
for 루프를 사용해서 두 비트맵의 교집합을 계산할 수 있다. 루프의,번째 반복은 두 비트맵의,.번
째 비트끼리 and 연산한다. 우리는 대부분의 컴퓨터 명령어 (instruction) 집합에 의해 지원되는 비
될 수 있다. 비트맵의 보수는 비트맵의 각 비트에 보수(1 의 보수는 0이고 〇의 보수는 1 이다)를 취함
으로써 생성된다. not (incomejevel = LT)은 수입 단계 厶1 에 대한 비트맵의 보수를 계산함으로써
구현될 수 있는 것처럼 보일지도 모른다. 그러나 몇 개의 레코드가 삭제된다면 비트맵의 보수 계산
만으로 충분하지 않다. 삭제된 레코드에 대응되는 각 비트는 원래 비트맵에서 0이다. 그러나 보수
를 계산함으로써 레코드가 존재하지 않을지라도 1이 된다. 또한 속성의 값이 널(null)일 때 비슷한
고, 보수 비트맵에서 1 이 될 것이다.
삭제된 레코드에 대응되는 비트가 。으로 설정되도록 하기 위해 보수 비트맵은 삭제된 레코드는
0
체 개수는 으로 설정한다. 비트맵의 각 바이트를 가져와서 이것을 이 배열의 인덱스로 사용하면서
여기에 저장된 개수를 전체 개수에 더한다. 추가 연산은 튜플 개수의(이 발생한다. 그래서 개수를
요소는 레코드 식별자로 적어도 32비트로 구성되어 있는데 보통은 이보다 더 많은 비트로 되어 있
다. 많은 레코드에서 발생하는 값에 대해서는 레코드 목록 대신 비트맵을 저장한다.
특정한 값 匕는 릴레이션의 레코드 중《 레코드에서 발생한다고 가정하자. 릴레이션에서 레코
드의 개수를 N이라 하고, 한 레코드는 식별자로 64비트의 수를 가지고 있다고 가정하자. 비트맵은
레코드당 단지 한 개의 비트만 필요하므로 전체 N개의 비트가 필요하다. 반면 목록을 표현하기 위
트 레코드 식별자) 만약에 64개의 레코드 중에서 한 개 이하의 레코드가 특정한 값을 가진다면 목
록 표현이 이 값을 가진 레코드를 식별하기에 더 낫다. 왜냐하면 비트맵 표현보다 더 적은 비트를
사용하기 때문이다. 64개의 레코드 중에서 한 개 이상의 레코드가 이 값을 가진다면 비트맵 표현이
더 낫다.
24.4 공간 데이터의인덱스
한 인덱스는 범위 및 최근접 질의와 같은 질의를 효율적으로 지원해야 한다. 또한 k-d 트리, 사분위
트리, R-트리에 대해 이미 간략히 설명하였으며, k-d 트리를 이용하여 범위 질의를 효율적으로 응
답하는 방법에 관해 간략하게 설명했다. 이 절에서는 사분위트리와 R-트리에 관한 보다 자세한 내
용을 다룬다.
1
는 최대 점의 개수가 로 설정되어 있다.
24.4.2 R-트리
R-트리라고 하는 저장 구조는 사각형이나 다른 다각형을 인덱스하기에 적합하다. R-트리는 B"트
리와 유사하게 단말 노드에 다각형을 인덱스하고 있는 균형 트리 구조다. 하지만 B"트리와는 달
리 각 트리의 노드는 값의 범위 대신에 경계 상자 founding box)를 가지고 있다. 단말 노드의 경계
상자는 단말 노드에 저장된 모든 객체를 포함하는 축에 평행한 최소의 사각형이다. 단말 노드와 유
Chapter 24 고급 인덱싱 기술 1091
그림 24.5 R-트리
각형이 된다.
R-트리 자체는 그림 24.5의 오른쪽에 있다. 그림에서 경계 상자,,의 좌표는 BB,로 표현하고 있다.
이제 R-트리에서 어떻게 탐색과 삽입, 삭제 연산을 구현하는지 살펴보자.
한다.
를 포함한다.
s
각형의 집합을 라 할 때 이를 겹치는 부분이 없는 a과 S?로 나누고 あ과 多의 경계 상자의 총면
적이 최소가 되게 하는 것이다. 또 다른 휴리스틱은 S를 a과 邑 두 개의 집합으로 나누고 겹치는
부분이 최소가 되도록 하는 것이다. 분할의 결과로 생긴 두 개의 노드는 집합 部과 邑를 각각 포
6
를 동시에 포함하는 경계 상자에서 “와 의 면적을 합한 값을 뺀 값이 가장 커지는 경우를 말한
b
다. 휴리스틱은。와 를 각각 집합 部과 &에 넣는다.
침으로써 수행된다. 또 다른 방법은 엔트리 개수가 모자란 노드의 엔트리를 형제 노드로 완전히
24.5 해시 인덱스
24.5.1 정적 해싱
2
있고, 각 버켓의 크기는 다(물론 실제 인덱스는 버켓 크기가 훨씬 더 크다). 버켓 중에 하나에는 세
개의 키가 대응되므로, 오버플로 버켓이 발생한다. 이 예제에서 ID는 山의 주 키에 해당하
인터를 가질 수 있다.
bucket 0
76766
bucket 1
45565
76543
bucket 2
22222 76766 Crick Biology 72000
10101 Srinivasan Comp. Sci. 65000
45565 Katz Comp. Sci. 75000
bucket 3
83821 Brandt Comp. Sci. 92000
10101
98345 Kim Elec. Eng. 80000
12121 Wu Finance 90000
bucket 4 76543 Singh Finance 80000
32343 El Said History 60000
58583 Califieri History 62000
15151 Mozart Music 40000
bucket 5 22222 Einstein Physics 95000
15151 33465 Gold Physics 87000
33456
bucket 6
83821
bucket 7
12121
32343
24.5.1.1 해시함수
해시 함수를 설계할 때에는 검색 키 값의 분포를 정확히 모르기 때문에 다음의 속성을 가지는
26개의 i
버켓을 가지고 있고 알파벳의 번째 문자로 시작하는 이름을,번째 버켓에 대응시키는 해
시 함수를 정의한다고 가정해 보자. 이 해시 함수는 간단해서 좋긴 하지만 균등한 배분을 하는 데
이다).
bucket 0 bucket 4
12121 Wu Finance 90000
76543 Singh Finance 80000
bucket 1 bucket 5
15151 Mozart Music 40000 76766 Crick Biology 72000
bucket 2 bucket 6
32343 El Said History 80000 10101 Srinivasan Comp. Sci. 65000
58583 Califieri History 60000 45565 Katz Comp. Sci. 75000
83821 Brandt Comp. Sci. 92000
bucket 3 bucket 7
22222 Einstein Physics 95000
33456 Gold Physics 87000
98345 Kim Elec. Eng. 80000
수로 모듈화해서 그 값을 반환한다.
해시 함수는 신중한 디자인을 요한다. 해시 함수가 나쁘면 검색하는 데 걸리는 시간이 파일에 있
평균 검색 시간을 제공한다.
24.5.1.2 버켓오버플로처리
• 충분하지 않은 버켓. 버켓의 수를 %라 나타내면,レ > 〃,〃이 되도록 선택해야 한다. 이때 ",은
한다.
않는다.
우리가 설명했던 해싱의 구조를 형성하는 데 주요한 단점은 시스템을 구현할 때 해시 함수를 선
택해야 한다는 것이다. 그리고 그 이후에 인덱스된 파일이 증가하거나 감소해도 바꿀 수 없다는 것
24.5.2 동적 해싱
24.5.2.1 데이터 구조
00..
01..
10..
11..
그림 24.8 일반적인확장성 해시 구조
20ウ)
24.5.2.2 질의와갱신
이제 확장성 해시 구조에서 검색, 삽입, 삭제를 수행하는 방법에 대해서 공부할 것이다.
는 포인터를 따라간다.
버켓에 레코드를 추가한다. 반대로 버켓이 찼다면 버켓을 분할해서 현재 레코드와 새로 추가된 레
코드를 재분배해야 한다. 버켓을 분할하기 위해 시스템은 먼저 비트의 개수를 늘려야 하는지를 해
시 값으로부터 결정해야한다.
i
다. 의 값을 1 증가시키면 버켓 주소 테이블의 크기가 2배가 된다. 각 엔트리를 원래 엔트리와
동일한 포인터를 포함하는 두 개의 엔트리로 교체한다. 이제 버켓 주소 테이블에 있는 두 개의
i
지는 처음 개의 비트(시스템이 1 증가시켰다는 것을 기억하라)에 달려 있다.
이제 시스템은 새로운 레코드 삽입을 다시 시도한다. 보통 이 시도는 성공할 것이다. 그러나
게 하고), 나머지는 새로이 생성된 버켓(버켓 z)을 가리키도록 설정한다. 그다음 앞의 경우처럼
맞은 하나를 적용한다.
dept_name h(dept_name)
그림 24.9 depjmime을 위한 해시 함수
Chapter 오4 고급 인덱싱 기술 1101
J
러면 어떤 버켓에서 끝나게 되는데 이때의 버켓을 라 하자. 삭제는 버켓에 있는 검색 키와 파일에
있는 레코드 둘 다 제거한다. 버켓이 비게 되면 버켓 역시 제거한다. 이때 몇몇 버켓이 유착될 수
켓을 결정하는 절차와 버켓을 유착하는 방법은 연습문제로 남一겨 둔다. 버켓 주소 테이블의 크기를
(12121, Wu, Finance, 9000〇)을 삽입한다. 또한 시스템은 이 레코드를 우리의 구조에서 한 개밖에
없는 버켓에 넣는다.
그다음 레코드 (15151, Mozart. Music, 40000)을 삽입하려고 할 때 버켓이 찼다는 것을 발견하
게 된다. i =,。이기 때문에 해시 값으로부터 우리가 사용하고 있는 비트의 수를 증가시킨다. 그러면
그림 24.11 세 번의 레코드 삽입 후 해시 구조
1102 PART 9 고급주제
그림 24.12 네 번의 레코드 삽입 후 해시 구조
블의 크기가 2배로 되서 두 개의 엔트리를 가지게 된다. 시스템은 버켓을 분할하고 새로운 버켓에
그림 24.13 여섯 번의 레코드 삽입 후 해시 구조
Chapter 24 고급 인덱싱 기술 1103
그림 24.14 일곱 번의 레코드 삽입 후 해시 구조
어간다. 이어서 레코드 (33456, Gold. Physics, 87000)를 삽입하면 버켓 오버플로가 발생해서 비트
24.5.2.3 정적 해싱 대동적해싱
이제는 정적 해싱과 비교해서 확장성 해싱의 장점과 단점에 대해 알아본다. 확장성 해싱의 주요 장
점은 파일이 커져도 성능이 감소하지 않는다는 것이다. 게다가 최소한의 공간 부담이 있다. 비록 버
대해서 하나의 포인터를 포함한다. 그래서 이 테이블은 작다. 확장성 해싱이 다른 형태의 해싱보다
확장성 해싱의 단점은 검색을 할 때 부가적인 간접 단계를 수반하는 것이다. 왜나하■면 시스템이
24.5.3 순서 인덱스와 해싱 비교
24.6 요약
값이 적은 속성에 가장 적합하다.
• 비트맵은 주어진 선택을 만족하는 튜플의 개수를 계산하는 데 중요하게 사용된다. 이런 질의는
용어정리
• 열린주소 • 확장성 해싱
• 열린해싱 • 선형 해싱
• 동적해싱
실전문제
24.2 비트맵에서 1로 설정된 비트 개수를 세기 위한 최적화 기술을 고려해 보자. 캐시 크기를 고려했
을 때, 더 작은 배열 크기 선택과 더 큰 배열 크기 선택은 각각 어떤 장단점이 있는가?
24.3 선분을 R-트리에 저장하고 싶다고 하자. 선분이 축에 평행한 선분이 아니라면 경계 상자는 커질
것이고빈 공간도늘어날것이다. .
• 주어진 지역을 지나는 선분을 찾으라는 질의에서 경계 상자가 커질 경우에 미치는 영향은 무
엇인가?
24.6 다음의 검색 키 값을 가지는 레코드를 포함하는 파일에 확장성 해싱을 사용하고 있다고 가정하자.
연습문제
24.10 LSM 트리의 단계별 합병 변형은 계층당 여 러 트리를 허용한다. 계층당 더 많은 트리가 있을 때
의 장단점은 무엇인가?
24.11 3차원 데이터에 대해 사분위트리 개념을 적용한다고 가정해 보자. 결과로 생성되는 데이터 구조
(팔진 트리라고 함)가 공간을 어떻게 분할하는가?
24.15 크고 연속적인 디스크 블록이 정적 해시 테이블에 할당될 수 있다는 가정하에 정적 해싱을 기술한
바 있다. 이제 연속적인 C개의 블록만 할당 가능하다고 가정하자. 크기가 블록。개보다 훨씬 큰
해시 테이블을 어떻게 구현할지 제안하라. 이때 블록에 대한 접근은 여전히 효율적이어야 한다.
더 읽어보기
비트맵 인덱스는 [O'Neil and Quass (1997)]에 설명되어 있으며, AS 400 플랫폼의 IBM Model 204
파일 관리자에서 처음 소개되었다. 비트맵 인덱스는 특정 형태의 질의에 대해 매우 큰 속도 향상을 제공
하기 때문에 오늘날 대부분의 데이터베이스 시스템에 구현되어 있다.
[Samet (2006)]은 공간 데이터 구조에 대한 교과서적 설명을 제공한다. [Bentley (1975)]는 k-d 트리
를 설명하고, [Robinson (1981)]은 k-d-B 트리를 설명한다. R-트리는 [Guttman (1984)]에서 처음으로
소개되었다.
해싱의 기본 데이터 구조에 대한 논의는 [Cormen et al. (2009)]에서 찾을 수 있다. 확장성 해싱은
[Fagin et al. (1979)]에서 소개되었다. 선형 해싱은 [Litwin (1978)]와 [Litwin (1980)]에서 소개되었다.
Chapter 오4 고급 인덱싱 フ I술 1109
참고문헌
[Bentley (1975)] J. L. Bentley, "M니tidimensional Binary Search Trees Used for Associative
Searching'5, Communications of the ACM, Volume 18, Number 9 (1975), pages 509-517.
[Cormen et al. (2009)] T. Cormen, C. Leiserson, R. Rivest, and C. Stein, Introduction to Al
gorithms, 3rd edition, MIT Press (2009).
[Fagin et al. (1979)] R. Fagin, J. Nievergelt, N. Pippenger, and H. R. Strong, "Extendible Hashing—
A Fast Access Method for Dynamic Files \ ACM Transactions on Database Systems, Volume 4,
Number 3 (1979), pages 315-344.
[Guttman (1984)] A. Guttman, “R-Trees: A Dynamic Index Structure for Spatial Sear아ling”, In
Proc, of the ACM SIGMOD Conf on Management of Data (1984), pages 47-57.
[Jagadish et al. (1997)] H. V. Jagadish, P. P. S. Narayan, S. Seshadri, S. Sudarshan, and R.
Kanneganti, “Incremental Organization for Data Recording and Warehousing , In Proceedings of
the 23rd International Conference on Very Large Data Bases, VLDB '97 (1997), pages 16-25.
[Litwin (1978)] W. Litwin, “Virtual Hashing: A Dynamically Changing Hashing', In Proc, of the
International Conf, on Very Large Databases (1978), pages 517-523.
[Litwin (1980)] W. Litwin, “Linear Ha아ling: A New Tool for File and Table Addressing'', In Proc,
of the International Conf, on Very Large Databases (1980), pages 212-223.
[〇'Neil and Quass (1997)] P. O'Neil and D. Quass, "Improved Query Performance with Variant
Indexes', In Proc, of the ACM SIGMOD Conf, on Management of Data (1997), pages 38-49.
[O'Neil et al. (1996)] P. O'Neil, E. Cheng, D. Gawlick, and E. O'Neil, 'The Log-structured Merge-
tree (LSM-tree)'', Acta Inf, Volume 33, Number 4 (1996), pages 351-385.
[Robinson (1981)] J. Robinson, “The k-d-B Tree: A Search Structure for Large Multidimensional
Indexes二 !n Proc, of the ACM SIGMOD Conf, on Management of Data (1981), pages 10-18.
[Samet (2006)] H. Samet, Foundations of Multidimensional and Metric Data Structures, Morgan
Kaufmann (2006).
[Vitter (2001)] J. S. Vitter, “External Memory Algorithms and Data Structures: Dealing with
Massive Data ', ACM Computing Surveys, Volume 33, (2001), pages 209-271.
크레딧
고급 응용 프로그램 개발
템은 조직의 중심에 있으며 필수적인 업무를 수행하고 있다. 이런 시스템을 보다 현대적인 시스템
1111
1112 PART 9 고급주제
영향을 미치는 다양한 표준에 대해 설명한다. 조직은 종종 사용자에 대한 정보를 디렉터 리 시스템
대해 간략하게 설명한다.
25.1 성능튜닝
시스템의 성능 튜닝(조율, 조정)은 특정 응용 프로그램의 성능을 개선하기 위해 다양한 매개변수를
이터베이스 설계의 다양한 요소가 응용 프로그램의 성능에 영향을 미친다. 이러한 측면을 각각 조
25.1.1 튜닝동기
도록 하는 것이 중요하다.
25.1.2 병목지점
구성요소의 성능을 개선하여 병목을 제거해야 한다. 하나의 병목을 제거하고 나면, 또 다른 구성요
그 시스템에 병목이 있는 경우, 병목의 일부가 아닌 구성요소는 활용도가 낮으며 아마도 성능이 낮
데이터베이스 시스템은 훨씬 더 복잡하며 질의의 실행은 CPU 시간뿐만 아니라 디스크 I/O 및 네
트워크 통신도 포함한다. 문제 진단의 첫 번째 단계는 운영체제에서 제공하는 감시 도구를 사용하
노트 25.1 데이터베이스성능감시 도구
해 설명한다.
분을 코드를 실행하는 대신 (특히 디스크 I/O 큐와 같은) 큐에서 대기하는 데 사용할 수 있다. 그림
요청이 정확히 균일한 간격으로 떨어져서 들어오고, 각각의 요청을 서비스하는 데 걸리는 시간이
연이은 요청이 도착하는 시간보다 작거나 같으면, 각 요청이 들어왔을 때 자원이 유휴(idle)하므로
기다리지 않고 즉시 서비스를 받을 수 있다. 하지만 불행히도 데이터베이스 시스템으로 들어오는
가한다. 사용률이 100%에 접근하면 큐 길이가 급격히 증가하여 대기 시간이 지나치게 길어진다.
Chapter 25 고급 응용 프로그램 개발 1115
25.1.3 튜닝수준
튜닝은 일반적으로 응용 프로그램의 상황 내에서 수행되며, 데이터베이스 시스템 계층이나 데이터
디스크(SSD)로 교체할 수 있고, 디스크 I/O가 병목인 경우 디스크를 추가하거나 RAID 시스템을
적용할 수 있고, 디스크 버퍼 크기가 병목인 경우 메모리를 추가할 수 있고, CPU 사용량이 병목인
경우 프로세서가 더 많은 시스템으로 이동할 수 있다.
고려한다.
25.1.4 물리적스키마튜닝
25.1.4.1 인덱스튜닝
이션에 하나의 인덱스만 클러스터링 인덱스로 구성할 수 있으며, 이는 인덱스로 지정된 속성에 따
하지만 실체화 뷰를 유지하는 것은 공간상의 부담뿐만 아니라 시간상의 부담도 있어서 실체화
신해야 한다. 따라서 트랜잭션이 더 느리게 수행될 수 있다. 지연된 뷰 관리 기법 (deferred view
maintenance)의 경우, 실체화 뷰는 나중에 갱신된다. 따라서 갱신될 때까지 실제 데이터베이스 릴
레이션과 일치하지 않을 수도 있다. 실체화 뷰를 질의가 사용할 때 갱신하거나 주기적으로 갱신
있다.
야 하는 질의나 갱신을 찾아 그러한 선택을 수동으로 진행할 수 있다. 조사하는 과정에서 데이터베
있다.
그 이상의 실체화 뷰를 생성하고, 작업부하를 실행하여 포함된 질의를 실행하는 데 걸리는 시간을
측정한다. 관리자는 적당한 효율을 보이는 집합을 선택할 때까지 이 절차를 반복한다.
각각의 (year, month) 조합에 대해 하나의 분할을 생성한다고 하자. 그러면 date = 2018-06-01'과
근해야 하며, 이는 잠재적으로 해당 질의의 처 리 속도를 매우 느리게 만든다. 그러한 질의가 드물다
25.1.4.4 물리적설계의자동 튜닝
이 러한 도구는 (질의와 갱신의 기록인) 작업부하를 검사하여 인덱스와 실체화 뷰를 추천해 준다.
도록 해 준다.
한다.
일어난 횟수에 상응하는 가중치를 지닌 하나의 갱신으로 표현할 수 있다. 유사하게, 같은 형태의 질
스와 실체화 뷰의 집합을 제안한다. 이러한 인덱스와 실체화 뷰의 다양한 조합을 시도하여 최적의
공간을 줄이기 위해서, 즉 고려할 조합의 수를 줄이기 위해서 휴리스틱 (heuristic)을 사용한다.
인덱스와 실체화 뷰의 선택을 위한 탐욕 휴리스틱 (greedy heuristic)은 다음과 같이 동작한다. 서
로 다른 인덱스 또는 뷰를 실체화(즉 최적화의 비용 예측 기능을 서브루틴으로 이용)함으로써 생
노트 25.2 튜닝도구
SQL Server의 Database Engine Tuning Advisor와 Oracle의 SQL Tuning Advisor와 깉은 튜닝
도구는 성능 향상을 위해 어떤 인덱스나 실체화 뷰를 추가할 것인지 또는 어떻게 릴레이션을 분할
할 것인지와 같은 권장 사항을 제공한다. 그 후 데이터베이스 관리자가 이러한 권장 사항을 수락하
고 구현할 수 있다.
영향을 미칠 수 있다. ”최종 좋은 수행 계획 강제 실행 (force last good plan)" 기능은 인덱스 추가와
같은 변경 후 질의 성능을 감시할 수 있고, 만약 성능이 나빠지면 변경 전에 (아직 여전히 유효하다
면) 데이터베이스가 이전 수행 계획을 사용하도록 강제할 수 있다.
된다.
25.1.5 질의튜닝
25.1.5.1 질의수행계획튜닝
장한다.
적하고, 릴레이션의 크기가 상당 부분 변경될 때마다 통계를 갱신하기 때문에 analyze 명령을 실
행할 필요가 없다.
처럼 물리적 스키마 튜닝의 일부로 인덱스 선택을 수행할 수 있다. 하지만 질의를 검사하면 어떤
takes.ID 속성을 사용하여 版 s 와 takes 릴레이션의 조인을 포함한다면, fakes .ID 속성으로 구성
한 인덱스가 유용할 수 있다.
았다. 하위 질의에 연관성 제거를 하지 않은 경우, 반복적으로 실행이 되어서 잠재적으로 대량의 임
의 I/O를 유발한다. 반대로, 연관성 제거는 조인과 효율적인 집합 지향 연산을 사용하여 임의 I/O
를 최소화한다. 대부분의 데이터베이스 질의 최적화기는 몇 가지 형태의 연관성 제거를 포함하지
25.1.5.2 집합지향개선기법
대신에 각 학과에서 지출한 총급여의 합을 구하는 아래와 같은 단일 SQL 질의를 사용할 수 있다.
select dept.name, sum(sa/aり')
from instructor
group by depLnaine;
클라이언트 프로그램은 각 학과에 대한 결과를 합치는 작업을 진행할 수 있다. 위에서 본 것처럼
다중 SQL 질의를 하나의 SQL 질의로 합치는 것은 많은 경우에 비용을 줄일 수 있다. instructor
릴레이션이 매우 크고 많은 수의 학과를 가지고 있는 경우가 그런 예다.
대규모 데이터를 데이터베이스에서 탑재할 때[대량 적재 (bulk load) 연산이라 부름], 이러한 삽입을
별개의 SQL insert 문장으로 수행하면 성능은 일반적으로 매우 좋지 않다. 한 가지 이유는 각 SQL
질의를 파싱하는 것에 대한 부담이다. 더 중요한 이유는 삽입되는 개개의 튜플에 대한 무결성 제약
merge 문에는 또한 when not matched then 절이 있는데, 이는 릴레이션에 새로운 레코드를 삽
입하도록 해 준다. 앞의 예제에서 funds_received 튜플에 매칭되는 학과가 없는 경우, 다음과 같은
갱신된 레코드를 마스터 릴레이션으로부터 받는다고 가정해 보자. merge 문에서 일치한 레코드(이
들은 이전 레코드를 갱신한 것임)는 갱신할 수 있고, 일치하지 않은 레코드(이들은 새 레코드임)는
삽입할 수 있다.
25.1.6 논리적스키마의튜닝
논리적 스키마를 튜닝하여 질의 (처리) 성능을 향상할 수 있다. 예를 들어, 선택한 정규형의 제약
데이터 저장을 위한 열 저장소(column store) 방법은 수직적 분할에 기반하고 있지만, 13.6절에
서 살펴본 것처럼 별도의 파일에 릴레이션의 각 속성(열)을 저장함으로써 한계에 부딪히게 된다.
로 주 키 속성을 반복할 필요가 없음에 유의한다. 열 저장소는 I/O를 줄이고, 캐시 성능을 개선하
2 여기서 더 나은 방법은 이러한 레코드를 오류 릴레이션에 삽입하는 것인데. merge 문으로는 수행할 수 없다.
1126 PART 9 고급주제
레이션과 deparrme," 릴레이션의 조인이 미리 계산되어 있으므로, 교수의 이름과 연관된 건물을
가져오는 질의를 빨리 처리할 수 있다. 만약 이러한 종류의 질의가 빈번하게 실행되고 가능한 한
직하다,
25.1.7 동시트랜잭션튜닝
습한다.
통계를 계산하는 대규모 질의를 동시에 실행한다고 가정해 보자. (이 분석) 질의가 릴레이션에 대
구문을 트랜잭션 시작에서 실행한다. Oracle과 PostgreSQL은 위 명령의 snapshot 키워드 자리에
serializable 키워드를 사용하여 동일한 효과를 낸다. 이 두 시스템은 고립성 수준(isolation level)이
Chapter 25 고급 응용 프로그램 개발 1127
없을 것이다.
하지는 못한다. 응용 프로그램의 의미상 논리 (semantic)가 근사한 (일관성이 없는) 결과를 허용할
지를 결정한다.
할 때 카운터에 대한 갱신이 롤백되지 않도록 undo 로깅의 특수 사례 처리와 결합되어 있다. SQL
표준은 다음과 같은 명령으로 시퀀스 카운터를 생성한다.
(앞에서 설명한 이유로 인해) 트랜잭션을 취소하였을 때, 트랜잭션이 획득한 시퀀스 번호를 롤
백할 수 없기 때문에 트랜잭션 취소는 데이터베이스에 삽입된 튜플의 시퀀스 숫자에 간격을 야기할
이 1001 이거나 1003인 튜플은 존재하지만 1002인 튜플은 존재하지 않게 된다. 이러한 간격은 응
용 프로그램에 따라 받아들여지지 않을 수 있다. 예를 들어, 어떠한 금융 응용 프로그램은 청구서
는 속성은 간격이 생길 수 있으므로, 이러한 응용 프로그램에 사용할 수 없다. 2단계 잠금을 사용하
는 일반 튜플에 저장된 시퀀스 카운터는 이러한 간격을 생성하지 않는다. 왜냐하면 트랜잭션 취소
얻기 때문이다.
긴 시간이 걸리는 갱신 트랜잭션은 시스템 로그에 성능 문제를 일으킬 수 있고, 시스템 고장으로
트랜잭션은 전체 직원이 아니라 작은 범위의 직원 ID에 해당하는 일부만 갱신한다. 이러한 트랜잭
피할 수 있다.
25.1.8 하드웨어튜닝
하드웨어 병목에는 메모리, I/O, CPU 및 네트워크 용량이 포함될 수 있다. 이 절은 메모리 및 I/O
스템의 튜닝에서 중요한 요소는 디스크 하위 시스템이 I/O 연산이 요청되는 비율을 처리할 수 있
저장하는 것은 디스크 I/O를 줄일 수 있으므로, 추가적인 메모리 비용을 들일 가치가 있다. 메모리
가 디스크보다 훨씬 비싸기 때문에 자주 사용되지 않는 데이터를 메모리에 보관하는 것은 낭비다.
1130 PART 9 고급 주제
SSD에서 페이지를 가져오는 것 사이에 동일한 비교를 한다면, 4킬로바이트 페이지에 대해 7분이
라는 값이 나온다. 즉 SSD의 페이지를 7분에 한 번 이상 접근한다면 해당 페이지를 메모리에 캐시
할 수 있는 충분한 메모리를 구입하는 것을 추천한다.
임의 쓰기 연산을 수행한다면, RAID 5 구현은 초당 r + 4w번의 I/O 연산이 필요한 반면, RAID I
을 보관할 수 있다. 그러한 응용에 대해, RAID I을 사용하면 실제로 필요한 디스크의 수는 RAID
25.1.9 성능시뮬레이션
데이터베이스 시스템을 설치하기 전이라도 데이터베이스의 성능을 검사하기 위해 성능 시뮬레이션
모델을 만들 수 있다. CPU, 디스크, 버퍼, 동시성 제어와 같은 그림 25」에 나타나 있는 각각의 서비
스를 시뮬레이션에서 모델링한다. 서비스의 세부 사항을 담는 대신, 시뮬레이션 모델은 (처리가 시
작되어 끝나는 데 걸리는 시간인) 서비스 시간 (service time)과 같은 각 서비스의 특정한 부분만 담
을 수 있다. 따라서 시뮬레이션은 평균 디스크 접근 시간으로부터 디스크 접근을 모델링할 수 있다.
일반적으로 서비스에 대한 요청은 자신의 차례를 기다려야 하므로, 시뮬레이션 모델에 나타나는
1132 PART 9 고급주제
각 서비스는 관련된 큐를 가지고 있다. 하나의 트랜잭션은 연속된 요청으로 이루어져 있다. 요청은
각 서비스의 서비스 시간을 변경하는 다양한 실험을 통해 성능이 각 서비스에 얼마나 민감한지 알
있다.
오5.2 성능벤치마크
25.2. 1 작업 묶음
충분치 못하다. 따라서 성능 벤치마크라 불리는 표준화된 작업 묶음으로 시스템의 성능을 측정한다.
있음을 살펴보았다. 숫자의 평균을 내는 타당한 방법은 각 트랜잭션 유형별 처리량 (throughput)에
대한 평균을 구하는 것이 아니라 전체적인 작업부하에 대해 수행 완료 시간(time to completion)을
구하는 것이다. 우리는 이를 통해 특정한 작업부하에 대해 시간당 처리할 수 있는 트랜잭션의 수를
Chapter 25 고급 응용 프로그램 개발 1133
평균 처리량을 구하는 정확한 방법은 처리량의 조화 평균 (harmonic mean)을 구하는 것이다. 〃개의
처리량 ム, ち,..., ム에 대한 조화 평균을 다음과 같이 정의한다.
의 혼합 비율에 달려 있다.
용하여야 한다.
TPC 벤치마크는 매우 자세하게 정의되어 있다. TPC 벤치마크는 릴레이션의 집합과 튜플의 크
에 초점을 맞추기 위해서 TPC-A 벤치마크에서 사용자, 통신, 터미널과 관련된 부분을 제거했다.
(brokerage firm)의 모델에 기반을 두고 있다. 개인은 중개 회사를 상대로 트랜잭션을 발생시키고,
중개 회사는 트랜잭션을 처리하기 위해 금융 시장과 상호작용을 한다.
고객, 주문, 약간의 부가적인 정보로 이루어져 있다. 릴레이션의 크기는 비율로 정의되어 있으며 데
원 시스템에서 일반적으로 사용하는 작업을 모델링한 17개의 SQL 질의로 이루어져 있다. 이 질의
도 존재한다.
한다.
대해서 알아본다.
25.3.1 응용 프로그램 시험
시험은 일회성 작업이 아닌데, 왜냐하면 프로그램은 계속 진화하고 프로그램의 변경이 의도하지
이터베이스의 내용이 예상한 내용과 일치하는지를 검증해야 한다. 그래서 예상한 결과는 사용자의
화면에 출력된 데이터뿐만 아니라 데이터베이스 상태(의 갱신) 또한 포함하고 있어야 한다.
하여 채우는 방식으로 생성하는 것이다. 또한 어떠한 도구는 지정한 데이터 분포를 허락한다. 예를
들면, 대학교 데이터베이스는 학생과 교수의 다른 분포가 필요한데, 대부분 학생은 18살에서 25살
의 범위에 포함되며 대다수 교수는 25살부터 65살의 범위에 해당한다.
이미 존재하는 데이터베이스가 있음에도 불구하고, 조직은 일반적으로 성능 시험을 수행할 수
Chapter 25 고급 응용 프로그램 개발 1137
25.3.2 응용 프로그램이주
시 시스템은 오래된 기술을 사용하여 현재의 표준이나 시스템과 호환되지 않을 수 있다. 오늘날 운
는다.
이라는 절차를 사용할 수 있다. 역공학은 기존의 코드를 검토하여 필요한 (ER 모델이나 객체 지
향 데이터 모델과 같은) 데이터 모델로 스키마를 설계하는 것으로 구성된다. 역공학은 시스템의 상
를 검토한다. 역공학이 필요한 이유는 레거시 시스템이 스키마나 전체적인 시스템의 디자인에 대
존 시스템을 그대로 재구현하는 것이 아니라 기존의 설계를 검토하여 시스템을 개선할 수 있다. 레
1138 PART 9 고급주제
영향을 미치므로 기업에 큰 손실을 초래할 수 있다. 극단적인 경우, 새로운 시스템으로의 전환 시도
25.4 표준화
데이터 모델을 정의하기도 한다. 오늘날의 데이터베이스 시스템은 상호작용하는 독립적인 부분이
모여서 하나의 복잡한 시스템을 이룬다. 예를 들어, 클라이언트 프로그램은 후단부 시스템과는 독
표준 (de facto standards, “사실상의 표준”이라고도 함)으로 받아들여 지는 경우도 있다. SQL-92
나 SQL: 1999 표준의 여러 많은 부분처 럼, 일부 공식적인 표준은 시장을 이끌어 나가는 선행 표준
공식적인 표준을 정하는 위원회는 전형적으로 업체의 대표, 사용자 그룹의 회원, 표준 조직으로
반적으로 연장된) 일정 기간의 토론, 제안서에 대한 수정, 공개적인 검토를 거쳐 위원회의 회원은
해당 제안을 받아들일 것인지 아니면 기각할 것인지에 대해 투표한다. 표준이 정의되고 구현된 후
25.4.1 SQL 표준
베이스 업체와 함께 ANSI와 ISO가 이 작업에서 주도적인 역할을 해 왔다. 첫 버전은 SQL-86이었
고, 1987년에 IBM에서 IBM Systems Application Architecture(SAA) 표준을 발표했다. 사람들이
SQL: 1999 버전은 SQL에 다양한 기능을 추가했다. 이전 장에서 이러한 많은 특성에 대해 이미
살펴보았다.
• SQL2016은 JSON 지원과 관련된 여러 기능을 추가했고, 튜플 그룹의 속성을 하나의 문자열로
대부분의 새로운 기능은 소수의 데이터베이스 시스템만 지원하며, 반대로 대부분의 데이터베이
25.4.2 데이터베이스 연결 표준
관리하는 명령어를 가지고 있다. 다음 정합 수준(level I)은 카탈로그 정보의 검색과 핵심 단계 CLI
기능 외의 다른 기능에 대한 지원을 요구한다. 수준 2는 매개변수 값의 배열을 전송하거나 검색하
는 능력, 좀 더 자세하게 카탈로그 정보를 검색하는 능력과 같은 추가 특성을 요구한다.
일반적인 파일이나 이메일 저장소가 그 예다. Microsoft의 OLE-DB는 ODBC와 유사한 목적을 가
25.4.3 객체 데이터베이스 표준
터 종류의 예로는 이름, 직함, 직원 식별자, 주소, 이메일 주소, 전화번호, 팩스번호 등이 있다. 이러
수 있다.
접근할 수 있다.
25.5.1 디렉터리접근규약
수 있다. 이러한 인터페이스는 사람이 사용하는 데 편리하다. 그러나 프로그램도 디렉터리 정보에
JDBC 또는 ODBC와 같은 규약을 통해 접근할 수도 있다. 그렇다면 의문점은 "왜 디렉터리 정보에
접근하기 위한 전문화된 규약을 고안하는가?”다. 이 질문에 대해서는 다음과 같은 최소한 두 개의
답이 있다.
• 첫째, 디렉터리 접근 규약은 제한된 유형의 데이터 접근을 처리하는 단순화된 규약이다. 이들은
디렉터리 서버는 Murray Hill에 위치한 벨 연구소 직원에 대한 정보를 저장할 수 있고, 다른 서
수 있다는 것이다.
디렉터리 시스템을 보유하고 있다. 조직의 디렉터리 정보는 주소나 구성원의 전화번호, 전자 우편
된다. 클라이언트는 디렉터리 시스템에서 정의한 API를 사용하여 디렉터리 서버와 통신한다. 디
LDAP에서 디렉터리는 객체와 유사한 엔트리 (entry)를 저장한다. 각 엔트리는 엔트리를 고유하
게 식별하는 식별명 (distinguished name, DN)을 반드시 가져야 한다. DN은 일련의 상대 식별명
(relative distinguished name. RDN)으로 구성되어 있다. 예를 들어, 한 엔트리는 다음과 같은 식별
명을 가질 수 있다.
보다시피, 이 예에서 식별명은 이름과 (조직) 주소의 조합인데, 사람의 이름으로 시작하여 그 뒤에
전체 식별명을 엔트리에 저장할 필요는 없다. 시스템은 엔트리에서 DIT를 순회하여 RDN =
25.5.2.2 데이터조작
SQL과 달리 LDAP는 데이터 정의 언어나 데이터 조작 언어를 정의하지 않는다. 그러나 LDAP
는 데이터 정의 및 조작을 수행하기 위한 네트워크 규약을 정의한다. LDAP 사용자는 API를 사용
하거나 다양한 공급업체에서 제공하는 도구를 사용하여 데이터 정의와 조작을 수행할 수 있다. 또
• 반환할속성
25.5.2.3 분산디렉터리트리
조된 D1T에 대한 질의를 실행한다. 참조된 DIT에 대한 접근은 투명하며 사용자 모르게 진행된다.
그 대신에 서버 자체가 참조된 DIT에 질의를 실행하고 지역적으로 계산된 결과와 함께 결과를 반
환할 수 있다.
한다.
25.6 요약
능한 매개변수가 있다.
• 인덱스 및 실체화 뷰의 올바른 선택과 수평 분할의 사용은 상당한 성능 이점을 제공한다. 작업부
하 이력을 기반으로 한 スト동 튜닝 도구는 이러한 튜닝에 크게 도움이 될 수 있다. 인덱스 집합과
용어정리
성능 튜닝 • 데이터베이스-응용 프로그램 유형
병목 • 온라인 트랜잭션 처리(OLTP)
큐잉 시스템 • 의사결정 지원
물리적 스키마 튜닝 • TPC 벤치마크
인덱스 튜닝 。TPC-C
실체화 뷰 〇 TPC-D
즉각적 뷰 관리 기법 〇 TPC-E
지연된 뷰관리 기법 。TPC-H
물리적 설계 튜닝 〇 TPC-DS
작업부하 • 회귀 시험
질의 튜닝 • 변종제거
집합지향 • 응용 프로그램 이주
일괄 갱신(JDBC에서 사용) • 레거시 시스템
대량적재 • 역공학
대량 갱신 • 재공학
Merge 문 • 표준화
논리적 스키마 튜닝 。공식적인 표준
튜닝 가능한 매개변수 ° 실질적인표준
동시 트랜잭션 튜닝 。선행 표준
시퀀스 ° 역행 표준
미니배치 트랜잭션 • 데이터베이스연결표준
하드웨어 튜닝 , X/Open XA 표준
5분규칙 • 객체데이터베이스표준
성능 시뮬레이션 • XML-기 반표준
성능 벤치마크 • LDAP
서비스 시간 • 디렉터 리 정보 트리(DIT)
처리량 • 분산 디렉터리 트리
실전문제
a. 시퀀스 카운터가 2단계 규약에 따라 잠금되었을 경우, 시퀀스 카운터는 동시성 병목이 될 수
있다. 왜 이러한 경우가 발생할 수 있는지 설명하라.
b. 2
많은 데이터베이스 시스템은 단계 규약에 따라 잠금되지 않는 내장 시퀀스 카운터를 지원하
고 있다. 트랜잭션이 시퀀스 번호를 요청하면, 카운터는 잠금되고, 카운터를 증가한 후 잠금
을 해제한다.
25.7 응용 프로그램 개발자가 릴레이션 ん 4, 8)와 s(B,。에 대해 아래의 질의를 작성한다고 가정하자.
select *
from r natural left outer join s;
1148 PART 9 고급주제
select *
from r natural join s;
a. s
두 질의가 같은 결과를 제공하는 r 및 에 대한 샘플 데이터를 제시한다.
연습문제
25.1 0 데이터베이스튜닝:
a. 성능을 향상하기 위해 데이터베이스 시스템을 크게 세 가지 수준에서 튜닝할 수 있는데, 이
세 가지 수준은 무엇인가?
25.1 4 메모리의 가격이 반으로 떨어지고 디스크 접근 속도(초당 접근 수)는 2배가 되지만, 다른 모든
요소는 그대로라고 가정해 보자. 이 변경이 5분 규칙과 I분 규칙에 미치는 영향은 무엇인가?
25.1 5 TPC 벤치마크를 현실적이고 신뢰할 만한 척도로 만드는 요소에 대해 적어도 네 가지 이상 나열
해 보라.
25.1 8 LDAP 기능을 데이터베이스 시스템상에서 구현할 수 있다는 점을 감안할 때, LDAP 표준의 필
요성은 무엇인가?
Chapter 오5 고급응용 프로그램 개발 1149
더 읽어보기
참고문헌
[Appuswamy et al. (2017)] R. Appuswamy, R. Borovica, G. Graefe, and A. Ailamaki, “The Five
minute Rule Thirty Years Later and its Impact on the Storage Hierarchy ',, In Proceedings of the 7th
International Workshop on Accelerating Analytics and Data Management Systems Using Modern
Processor and Storage Architectures (2017).
[Bitton et al. (1983)] D. Bitton, D. J. DeWitt, and C. Turbyfill, "Benchmarking Database Systems: A
Systematic Approach**, In Proc, of the International Conf on Very Large Databases (1983), pages
8-19.
[Graefe (2008)] G. Graefe, “The Five-Minute Rule 20 Years Later: and How Flash Memory
Changes the Rules ', ACM Queue, Volume 6, Number 4 (2008), pages 40-52.
[Gray (1991)] J. Gray, The Benchmark Handbook for Database and Transaction Processing
Systems, 2nd edition, Morgan Kaufmann (1991).
[Gray and Graefe (1997)] J. Gray and G. Graefe, 'The Five-Minute Rule Ten Years Later, and
Other Computer Storage Rules of Thumb'', SIGMOD Record, Volume 26, Number 4 (1997), pages
63-68.
[Harchol-Balte (2013)] M. Harchol-Balte, Performance Modeling and Design of Computer Systems:
Queueing Theory in Action, Cambridge University Press (2013).
[〇'Neil and O'Neil (2000)] P. O'Neil and E. O'Neil, Database: Principles, Programming, Performance,
2nd edition, Morgan Kaufmann (2000).
1150 PART 9 고급주제
[Shasha and Bonnet (2002)] D. Sha아la and P. Bonnet, Database Tuning: Principles, Experiments,
and Troubleshooting Techniques, Morgan Kaufmann (2002).
크레딧
블록체인 데이터베이스
입금이나 인출이 발생할 때마다 은행이 관리하는 원장에 (거래 내역) 항목을 추가한다. 은행이 원
된다.
하자. 기업을 신뢰할 수 있는 조직으로 추정할 수 있다고 해도, 그중 한 기업이 부정행위를 저지르
1151
1152 PART 9 고급주제
지털화된 소유권 문서의 진위를 검증할 수 있으며, 소유자가 자산을 매각한 후 해당 자산을 다른
사람에게 (발각되지 않고) 재판매하지 못하도록 보장한다. 블록체인 데이터 구조가 제공하는 보안
26.1 개요
니는 유일한 이유는 정부가 통화의 가치를 보장하고 국민이 정부를 신뢰하기 때문이다. 오늘날 금
Nakamoto의 뛰어난 업적은 혁신과 선행 연구의 잘 설계된 활용을 적절하게 결합했다는 점이고,
비트코인의 성공은 이 공헌의 가치를 증명한다. 하지만 익명성, 무신뢰성, 완전한 분산 동시성이라
조 방지성이 높도록 분산적으로 관리할 수 있고, 디지털 서명된 레코드를 블록체인에 추가하는 것
부여한다.
체인의 내용과 각 단계에서 추가하는 내용에 합의하도록 하는 것이다. 참여자들이 서로를 신뢰하
시스템의 과반수 (majority)를 제어하게 된다. 다수결에 기초한 모든 결정은 공격자가 제어할 수 있
으며, 공격자는 블록체인의 내용을 변조할 수 있는 결정을 강요할 수 있다. 이 경우 블록체인의 변
조 방지 속성이 손상된다.
제어하는 경우)에도 사용할 수 있다. 비잔틴 합의는 오래된 문제이고 해결책은 오래전부터 존재해
절을 참조한다.
스처럼 기업에 대한 다양한 유형의 데이터를 저장할 수 있다. 전통적인 블록체인 데이터 구성은 그
이 장에서 학습한다.
26.8절에서 설명한다.
26.2 블록체인 속성
가장 기본적인 수준에서 블록체인은 데이터 블록의 연결 리스트다. 블록체인 데이터 구조의 두
(genesis block)은 블록 0으로 표시한다. 블록체인 창조자가 제네시스 블록을 생성한다. 하나의 블
록이 체인에 추가될 때마다 블록은 값의 쌍(이전 블록에 대한 포인터, 이전 블록의 해시)을 포함한
—h(block 0)
data data
block 0 block 1
genesis block
의 과반수를 제어하기 어렵게 만드는 것처럼 동작한다. 그러나 이러한 제어는 중앙 제어가 없다는
트코인이 대표적인 예시인데, 악의적인 목적으로 누구나 노드를 설정하고 참여할 수 있다. 이런 경
동작하지만 적대적으로 행동하는 경우도 있음을 의미한다. 대부분의 기업 환경에서 허가형 블록체
기 위해, (수학) 문제는 의도적으로 어렵게 만들어졌고, 많은 계산 노력을 필요로 한다. 따라서
과는 달리, 합의를 방해하거나 잘못된 합의에 도달하•도록 시도하는 식으로 악의적 인 행동을 수
노트 26.1 블록체인포크예
을 수용할 수 있다. 재배치된 목격자 데이터는 트랜잭션 검증에만 필요하다. 2017년 8월의 소
프트 포크를 통해 세그윗을 도입했다. 이전 블록을 유효한 것으로 인식하고 아직 업그레이드되
지 않은 노드는 높은 수준의 호환성을 유지할 수 있었기 때문에 이것은 소프트 포크다.
잭션과 관련된 그들의 개입을 차후에 부인하는 것을 방지한다. 이 후자의 속성을 논박 불가능성
(irrefutability)이라 한다.
트랜잭션은 블록체인에 참여하는 모든 노드로 방송 (broadcast)된다. 노드가 체인에 블록을 추가
할 때, 그 블록은 아직 체인에 추가되지 않은 수신한 모든 트랜잭션을 포함한다.
익명화가 가능하기 때문에 그 가치가 감소한다. 비익명화는 식별 가능한 사용자 ID를 지닌 트랜잭
션에 사용자가 참여할 때 발생할 수 있다. 또한 블록체인 데이터에 대한 데이터 마이닝을 통하거나
코딩할 수 있다. 블록체인은 스마트 계약에 사용되는 언어뿐만 아니라 사용되는 언어의 역량 면에
• 변조 저항: 블록체인 네트워크의 과반수에 대한 통제를 획득하지 못하면 블록의 내용을 변경하
는 것은 불가능하다.
• 논박 불가능성: 사용자는 블록체인에 수행한 작업을 암호화 방식으로 서명한다. 이러한 서명은
2 이 속성들은 블록체인과 관련이 있지만. 대부분의 암호 화폐 거래소에는 해당되지 않는다. 대부분의 거래소는 고객의 데이
터뿐만 아니라 그들의 키도 가지고 있는데, 이로 인해 거래소의 데이터베이스에 대한 해킹은 사용자 개인 키의 도난을 초래
한다.
Chapter 26 블록체인 데이터베이스 1159
견하는 것은 불가능하며, 따라서 블록을 변조하려는 시도는 체인의 모든 새로운 블록을 변경해야
한다.
3 2块은 to"보다 크다. 컴퓨터가 한 사이클당 하나의 추측을 할 수 있다면, 정확히 추측할 확률이 50%가 되는 데 1(严초 이상
이 걸린다. 이것은 1(产년 이상으로 해석된다. 크기에 대한 감을 잡기 위해 언급하자면, 천문학자들은 10'°년 이내에 태양이
지구를 감쌀 정도의 크기가 된다고 예측한다.
1160 PART 9 고급주제
이다.
그 값을 계산할수 없지만, 누구나 ■의 공개 키(즉 4)를 사용하여 암호를 해독하여 서명을 검증할
26.3.3 간단한블록체인트랜잭션
이러한 비유를 적용할 수 없다. 우리가 설명하는 모델은 간단한 비트코인 트랜잭션에 해당한다.
4 이 속성은 오랫동안 암호를 저장하는 데 사용되었다. 사용자 암호를 일반 평문(clear text)으로 저장하여 유출이 쉽게 하지 않
고. 대신 해시를 보관한다. 그러면 사용자가 로그인하면서 암호를 입력하면 해당 암호의 해시를 계산하고 저장된 값과 비교
한다. 공격자가 해시를 훔쳤더라도 그는 여전히 실제 암호가 없고. 만약 사용하는 해시 함수가 비가역성 속성을 가지고 있다
면, 그 해커가 사용자 암호를 역공학(reverse engineering)하는 것도 불가능하다.
Chapter 26 블록체인 데이터베이스 1161
조한다. 사용자는 사용자 ID로 참조된다. 사용자 A는 과거 이력에서 A에게 총 10단위 이상의 통
• 입력트랜잭션 心ら...,7.
• 지불받을 사용자의 집합과 각 사용자에게 지불할 금액. 위 예제에서 10단위는 B에게, 나머지는
4게게 지불함5
정된다.
여기에 설명된 트랜잭션 모델은 다음과 같은 다양한 측면에서 기존 데이터베이스 시스템의 모델과
5 26.4절에서 논의한 바와 같이 실제 시스템에서 블록을 블록체인에 추가하는 노드(즉 트랜잭션의 채굴자)에 대한 지불금도
있을 수 있다.
1162 PART 9 고급주제
매우 다르다.
• 기존 데이터 항목은 수정하지 않는다. 대신, 트랜잭션은 새로운 정보를 추가한다. 따라서 현재
션은 영구적이며 공유된 블록체인의 부분이 된다. 이것은 사실상 지연된 트랜잭션 커밋의 한 형
태다.
이 비트코인 기반 예제는 블록체인 시스템이 트랜잭션 순서를 관리하는 유일한 방법은 아니다.
26.4 합의
합의해야 한다.
의 두 범주로 나눌 수 있다.
확인한다.
한 작업을 수행하는 이유에 대한 질문을 고려한다. 채굴은 블록체인 네트워크 전체에 대한 서비스
의 보상이 있다.
함하도록 장려한다.
26.4.1 작업 증명
저비용 컴퓨터를 노드로 설정하는 공격자가 과반수 기반 접근법을 압도할 수 있다. 앞서 언급했듯
학 문제를 노드가 풀도록 요구한다. 공격자는 단순히 저렴한 노드를 추가하는 것만으로 블록체인
이 많이 든다.
네트워크 전체에 새로운 블록을 전파하는 데 걸리는 시간보다 더 빠른 속도로 채굴할 경우 포크와
スト. 목표치보다 작은 해시로 계산되는 논스를 찾는 효율적인 알고리즘이 있다면 채굴자는 논스를
한 동기가 발생했다.
를 필요로 하는 기법에 대한 관심으로도 이어졌다. 메모리 집약적 기법은 에너지 낭비를 줄이면서
실제로 사용자 그룹이 연합하여 채굴장(mining pool)을 형성할 수 있는데, 이는 블록을 채굴하
기 위해 함께 협 력한 후 수익금을 회원들 간에 공유하는 컨소시 엄이다.
26.4.2 지분 증명
지분 증명의 개념은 블록을 추가하기 위해 블록체인 통화에서 큰 지분을 보유한 노드를 우선적으
다양한 지분 증명 기법이 있다. 전체 지분뿐만 아니라 지분을 보유한 총시간도 측정에 포함할 수
26.4.3 비잔틴 합의
작업 또는 지분 기반 합의의 중요한 대안은 메시지 기반 합의다. 메시지 기반 합의는 분산 데이터
메시지 기반 시스템은 과반수 투표로 합의를 달성하는 것을 목표로 한다. 이러한 시스템은 시빌
공격에 취약하다. 사용자가 참여하려면 허가를 얻어야 하는 기업용 허가형 블록체인에서, 악의적인
가능성은 없더라도 적대적인 행동의 가능성은 여전히 존재한다. 가능한 모든 형태의 적대적인 행
동을 예상하는 것은 어렵다.
1166 PART 9 고급주제
이러한 이유로, 비잔틴 장애 (Byzantine failure) 개념을 사용하여 이 상황을 모델링한다. 비잔틴
장애는 “장애” 노드가 임의의 방식으로 동작할 수 있고, 비장애 노드의 네크워크는 (네트워크를 방
해하기 위해 정확히 필요한 일련의 조치를 취하는 잘못된 행동을 포함하여) 모든 잘못된 행동에 대
다르다. 합의에서 가정한 유일한 유형의 장애는 기능의 부재, 즉 노드나 네트워크 링크가 작동을 중
로 2PC는 만장일치를 필요로 한다). 비잔틴 합의를 위해서, 우리는 소수 노드의 장애뿐만 아니라
그 소수의 악의적 행동도 극복하는 과반수 규칙을 규정해야 한다. 예를 들어, 악의적인 노드 %은
알린다. 예상할 수 있듯이, 그러한 악의적인 노드에 직면하여 합의를 달성하려면, 합의를 달성하기
의적인 노드의 비율과 관련하여 많은 이론적 연구가 진행되었다. 초기 연구는 메시지 전달에 걸리
정을 했다. 현대의 비잔틴 합의 알고리즘은 현실 세계를 기반으로 하고, 위조된 메시지를 방지하기
용 여부를 확인할 수 있지만, 체인의 (마지막 블록부터) 첫 번째 블록까지 역방향 검색을 포함하므
해야 한다.
것이다.
이전에 나타나지 않았음을 확인해야 한다. 따라서 각 노드가 모든 미사용 트랜잭션에 대한 인덱스
이다.
26.5.2 블록체인상태관리
기” 절에 있는 참고문헌을 참조한다.
오6.6 스마트 계약
26.6.1 언어 및 트랜잭션
득하는 인센티브 시스템으로 이어진다. 이더리움의 해결책은 자동차 연료에 대한 비유를 제공하기
지 않는다.
또 다른 어려운 선택은 가스 한도의 설정이다. 계약에서 사용할 가스의 정확한 양으로 한도를 정
운 문제다.
력 트랜잭션에 대한 명확한 개념이 없다. 그러나 스마트 계약이 트랜잭션 순서를 강요하기를 원하
이며, 한 계정의 트랜잭션의 집합은 연속적인 시퀀스 번호를 가져야 한다. 한 계정의 두 트랜잭션은
동일한 시퀀스 번호를 가질 수 없으며, 이전 시퀀스 번호를 가진 트랜잭션이 승인된 후에만 트랜잭
노드는 채굴된 블록의 모든 트랜잭션의 코드를 실행해야 한다는 사실은 보안에 대한 우려로 이어
진다. 코드는 일반적으로 スト바 가상 머신의 스타일로 설계된 가상 머신상에서 안전한 방식으로 실
된 오라클에 동의할 필요가 있다는 점에서 심각한 타협이 아니며, 일단 합의가 이루어지면 그 합의
운영 중인 스마트 계약에 오라클이 코딩된 이후, 오라클의 손상은 심각한 문제다. 이 문제는 법
를 작성할 수 있다.
6 이 용어는 고대 그리스 문화에 뿌리를 두고 있으며 같은 이름의 회사와 아무런 관련이 없다.
Chapter 26 블록체인 데이터베이스 1171
리움은 스마트 계약이 블록체인에 기록된 이벤트를 방출하도록 허용함으로써 이를 다룬다. 블록체
26.6.3 자율 스마트 계약
이더리움을 포함한 많은 블록체인에서 스마트 계약을 독립 개체로 배포할 수 있다. 이러한 스마트
계약이 제공하는 서비스를 사용할 수 있고, 스마트 계약에서 통화를 송수신할 수 있다.
하여 스마트 계약을 제어할 수 있다. 스마트 계약을 무한정 자율적으로 작동하도록 코딩할 수 있
립적으로 비즈니스를 수행하는 이러한 개체를 생성하는 기능은 블록체인 개념의 가장 강력한 기
작동한다.
통화 단위를 토큰이라고 하며, 이러한 통화를 만드는 과정을 가상 통화 공개 (initial coin offering,
ICO)라고 한다. 기존 블록체인을 토큰의 기반으로 사용할 경우 중요한 추가 이점은 사용スト 인프라
의 핵심 요소를 재사용 가능하다는 것인데, 무엇보다 가장 중요한 것은 토큰을 저장하는 지갑 소프
트웨어를 재사용 가능하다는 점이다. 토큰을 위한 ERC-20 이더리움 표준이 널리 사용된다. ERC-
223, ERC-621, ERC-721, ERC-777 및 ERC-827을 포함한 보다 최신 표준은 장 끝에 있는 “더
읽어보기” 절의 참고문헌에서 논의된다.
상대적으로 쉽게 ICO를 생성할 수 있어서 ICO는 새로운 벤처기업에 자금을 지원하는 중요한
방법이 되었다. 하지만 몇 가지 사기가 발생했고, 정부는 이 기금 조성 방법론을 규제하게 되었다.
자금 조달을 넘어, 스마트 계약의 중요한 응용은 인간이 아닌 (종종 오픈 소스와 같은) 소스 코
사용자가 어떤 사용자나 조직을 신뢰할 필요가 없는 무신뢰 서비스를 생성할 수 있다. 앞에서 언급
충분한 이더를 번다면) 그 계약은 계속될 수 있다. 이러한 위험은 계약 생성자에게 계약에 자체 파
7 DAO의 일반적인 사용은“The DAO”라고 하는 특정 분산 자율 조직과는 다르다. The DAO는 자금의 대규모 도난을 가능하
게 한 버그 때문에 실패한크라우드 펀딩 벤처 캐피탈 기업이다(앞의 노트 26.1 참고).
1172 PART 9 고급 주제
26.64 교차 체인 트랜잭션
문제가 있다.
사한 시장을 구현하는 스마트 계약을 만드는 것이다. 그러한 계약은 명목화폐에 사용되는 것처럼
26.7 성능 향상
높은 수준에서 블록체인 시스템은 세 가지 주요 구성요소를 포함하는 것으로 볼 수 있다.
시간은 1 시간이다. 이러한 응답 시간은 대화식 실시간 트랜잭션 처리에는 허용되지 않는다. 이와
대조적으로, 전통적인 데이터베이스 시스템은 개별 트랜잭션을 커밋하며 밀리초 단위의 응답 시간
을 쉽게 달성할 수 있다.
26.7.1 합의 성능 향상
8 출판 당시, 이더리움 설계자는 보다 빠르고 낮은 오버헤드 채굴을 가능하게 하는 포크를 웅호하는 것을 고려하고 있다.
1174 PART 9 고급주제
규모 채굴자 집합이 되는데, 소규모 채굴자 집합을 공격하는 비용이 적기 때문에 이 공격 취약성으
26.7.2 질의 성능 향상
있다.
행하는 것을 허용한다. 이러한 이점은 진정한 블록체인의 엄격한 암호화 보호가 결여된 데이터베
26.7.3 장애허용과확장성
장애 발생 시 성능은 블록체인 시스템의 중요한 측면이다. 기존 데이터베이스 시스템은 복구 관리
지 측정해야 한다.
모두에 당면 과제를 제시한다. 2PC와 비잔틴 합의의 상대적인 확장성을 고려하여 차이점을 설명한
헌을 제공한다.
프로그램 도메인의 목록을 제공한다. 어떤 경우에 블록체인이 추가하는 가치는 참신한 기능이다.
있는 능력이다.
레코드에 대한 접근을 승인할 수 있다. 결과적으로, 학생은 이후의 학업이나 장래의 고용주를 위
디지털 분산 원장의 암호화 서명된 블록체인 항목에서 유사한 이점을 얻을 수 있다. 특히 블록체
조되지 않도록 할 수 있다. 또한 기업의 감사인이 참여자인 경우, 감사인이 원장 입력을 즉각적
• 자산 관리: 블록체인의 소유권 기록을 추적하면 소유권 기록에 대한 검증 가능한 접근과 안전하
루어져야 한다. 주식이나 채권과 같은 금융 자산의 소유에도 유사한 접근법을 적용할 수 있다.
1
용된 재료의 출처가 잘 문서화되지 않을 수 있다 아래의 공급망에 대한 설명을 보라). 통합된 블
록체인은 분산 갱신에 적합하며, 환자의 개인 키로 잠금 해제 가능한 암호화된 데이터 보호는 응
할을 한다.
• 보험 청구: 보험금 청구 처리는 청구 현장, 수리와 관련된 다양한 계약자, 증인의 진술 등으로부
수에도 동일한 개념을 적용할 수 있다. 판매회사가 이러한 시스템을 유지하고 프로그램의 협력
Chapter 26 블록체인 데이터베이스 1177
트랜잭션 처리 시스템을 실행할 필요가 없다. 2이。년대 후반, 이러한 개념에 대한 비즈니스 전
략을 시험하고 있었다.
파악할 수 있다. 품질 문제로 인해 리콜이 발생할 경우, 일부 공급망 구성원은 자신의 역할을 은
26.9 요약
를 제공한다.
선택한다.
1178 PART 9 고급주제
• 주요블록체인속성은논박불가능성과 변조저항성이다.
가진 개체로 운용될 수 있다. 스마트 계약은 복잡한 비즈니스 계약을 인코딩할 수 있으며, 블록
을 받는다.
• 상태를 유지하는 블록체인은 데이터베이스 시스템과 유사한 방식으로 작동할 수 있다. 그래서
을둘수 있다.
용어정리
• 라이트노드와풀노드 • 블록검증
• 작업증명 • 머클트리
• 지분증명 • 패트리샤트리
• 비잔틴합의 • 비트코인
• 변조저항 • 이더리움
• 충돌저항 • 가스
• 비가역성 • 스마트 계약
♦ 공개 키 암호화 • 오라클
• 디지털서명 • 교차체인트랜잭션
• 논박 불가능성 • 샤딩
• 하드포크와소프트포크 • 오프체인 처리
Chapter 26 블록체인 데이터베이스 1179
실전문제
a. 충돌 저항인가?
b. 비가역적인가?
c. 퍼즐친화적 인가?
그렇다면 혹은 그렇지 않다면 이유는 무엇인가?
26.3 새로운 퍼블릭 블록체인을 설계하는 경우, 작업 증명보다는 지분 증명을 선택해야 하는 이유는
무엇인가?
26.4 새로운 퍼블릭 블록체인을 설계하는 경우, 지분 증명보다는 작업 증명을 선택해야 하는 이유는
무엇인가?
26.5 퍼블릭 블록체인과 허가형 블록체인의 차이점과 각각이 더 바람직한 경우를 설명하라.
26.7 퍼블릭 블록체인에서 주어진 사용자 ID에 해당하는 실제 신원을 어떻게 결정할 수 있는가?
26.9 사용자가 악의적이지 않다고 추정할 수 있는 환경에 있다고 가정하자. 이 경우 비잔틴 합의가
2PC보다 나은 이 점은 무엇인가?
26.10 샤딩의 이점과 잠재적 위험을 설명하라.
연습문제
26.13 블록체인은 불변이므로, 불변성을 위반하지 않도록 어떻게 트랜잭션 취소를 구현하는가?
26.14 블록체인의 포인터는 이전 블록의 암호화 해시를 포함하고 있는데, 불변성을 보장하기 위해 블
록체인 복제가 추가로 필요한 이유는 무엇인가?
26.18 오프체인 트랜잭션 처리가 어떻게 처리량을 향상할 수 있는지 설명하라. 이 혜택에 대한 상반관
계는 무엇인가?
26.19 개인적으로 관심을 가진 기업을 선택하고, 어떻게 그 사업에 블록체인 기술을 유용하게 사용할
수 있는지 설명하라.
관련도구
화하고 있다. 급격한 변화 및 개발 속도로 인해 238년 말 현재 위에서 언급한 몇 가지를 넘어서 추천할
수 있는 최상의 도구 집합을 고를 수 없다. 최신 도구에 대한 웹 검색을 권장한다.
더 읽어보기
된다. 이러한 참고문헌의 URL은 자주 변경될 수 있다. 따라서 주요 주제에 대한 웹 검색은 더 읽어보기
를 위한 매우 중요한 소스다. 여기에서 몇 가지 고전적인 참고문헌과 발행일 현재 접근 가능한 URL을
인용한다.
원래의 비트코인 논문 [Nakamoto (2008)]은 필명으로 저술되었으며 저자의 신원은 여전히 추측의 대
상이다. 이더리움 원래 논문 [Buterin (2013)]은 최신 이더리움 백서(ethereum.org 참조)로 대체되었
지만, 이더리움의 창시자인 Vitalik Buterin의 원래 논문은 여전히 흥미롭다. 이더리움 스마트 계약의 기
본 프로그래밍 언어인 솔리디티(Solidity)는 5。「<加"6a<卅(0&"冶/。에서 논의된다. ERC-20 표준은
[Vogelsteller and Buterin (2013)]에 설명되어 있으며, 이 책의 발행일 현재 이더리움 합의 기법 성능에
대한 Casper 업그레이드 제안은 [Buterin and Griffith (2이 7)]에 나와 있다. 지분 증명을 사용하는 또 다
른 접근법을 Cardano 블록체인(www.cardano.org)이 이용한다.
개 키 암호화의 개념은 [Diffie and Hellman (1976)]과 [Rivest et al. (1978)]에 소개되었다. [Katz and
Lindell (2014)]는 암호화에 대한 좋은 참고문헌이다. [Narayanan et al. (2016)]은 주로 비트코인에 초점
을 맞추고 있지만 암호 화폐의 기본에 대한 훌륭한 참고 자료다. 비잔틴 합의에 관한 많은 문헌이 있다.
이 연구의 기초를 마련한 초기 논문에 [Pease et al. (1980)]과 [Lamport et al. (1982)]이 포함된다. 실용
적인 비잔틴 장애 허용<[Castro and Liskov (1999)])은 현재 블록체인 비잔틴 합의 알고리즘의 기반이다.
[Mazieres (2이6)]는 합의 그룹에서 허가가 아닌 공개 멤버십을 허용하도록 특별히 설계된 합의 프로토
콜을 자세히 설명한다. 머클 트리와 관련된 참고문헌은 23장에 나와 있다. 패트리샤 트리는 [Morrison
(1968)]에서 소개되었다.
허가형 블록체인에 대한 벤치마크 프레임워크는 [Dinh et al. (2017)]에 나타난다. [Dinh et al. (2018)]
는 블록체인 시스템의 자세한 비교를 제시한다. [Wang et al. (2018)]는 블록체인 성능 향상을 위해 설계
한 저장 시스템 ForkBase를 설명한다.
라이트닝 네트워크(lightning.network)는 비트.크인 거래를 가속화하고 어느 정도의 교차 체인 거래
참고문헌
[Buterin (2013)] V. Buterin, uEthereum: The Ultimate Smart Contract and Decentralized
Application Platform , Technical report (2013).
[Buterin and Griffith (2017)] V. Buterin and V. Griffith, "Casper the Friendly Finality Gadget
Technical report (2이 7).
[Castro and Liskov (1999)] M. Castro and B. Liskov, "Practical Byzantine Fault Tolerance',, In
Symp. on Operating Systems Design and Implementation (OSDI), USENIX (1999).
[Diffie and Hellman (1976)] W. Diffie and M. E. Hellman, “New Directions in Cryptography
**,
IEEE Transactions on Information Theory, Volume 22, Number 6 (1976).
[Dinh et al. (2017)] T. T. A. Dinh, J. Wang, G. Chen, R. Liu, B. C. Ooi, and K.-L. Tan,
"BLOCKBENCH: A Framework for Analyzing Private Blockchains ', In Proc, of the ACM
SIGMOD Conf on Management of Data (2017), pages 1085-11(X).
[Dinh et al. (2018)] T. T. A. Dinh, R. Liu, M. H. Zhang, G. Chen, B. C. Ooi, and J. Wang,
"Untangling Blockchain: A Data Processing View of Blockchain Systems'', volume 30 (2018),
pages 1366-1385.
[Katz and Lindell (2014)] J. Katz and Y. Lindell, Introduction to Modern Cryptography, 3rd
edition, Chapman and Hall/CRC (2014).
*',
[Lamport et al. (1982)] L. Lamport, R. Shostak, and M. Pease, ,The Byzantine Generals Problem
1182 PART 9 고급주제
ACM Transactions on Programming Languages and Systems, Volume 4, Number 3 (1982), pages
382-401.
[Mazieres (2016)] D. Mazieres, “The Stellar Consensus Protocol ', Technical report (2016).
[Morrison (1968)] D. Morrison, “Practical Algorithm To Retrieve Information Coded in
Alphanumeric', Journal of the ACM, Volume 15, Number 4 (1968), pages 514-534.
[Nakamoto (2008)] S. Nakamoto, "Bitcoin: A Peer-to-Peer Electronic Cash System', Technical
report, Bitcoin.org (2008).
[Narayanan et al. (2016)] A. Narayanan, J. Bonneau, E. Felten, A. Miller, and S. Goldfeder,
Bitcoin and Cryptocurrency Technologies, Princeton University Press (2016).
[Pease et al. (1980)] M. Pease, R. Shostak, and L. Lamport, "'Reaching Agreement in the Presence
of Faults ', Journal of the ACM, Volume 27, Number 2 (1980), pages 228-234.
[Rivest et al. (1978)] R. L. Rivest, A. Shamir, and L. Adleman, “A Method for Obtaining Digital
Signatures and Public-Key Cryptosystems",Communications of the ACM, Volume 21, Number 2
(1978), pages 120-126.
[Vogelsteller and Buterin (2013)] F. Vogelsteller and V. Buterin, “ERC-20 Token Standard ,,
Technical report (2013).
[Wang et al. (2018)] S. Wang, T. T. A. Dihn, Q. Lin, Z. Xie, M. Zhang, Q. Cai, G. Chen, B. C. Ooi,
and P. Ruan, Fork Base: An Efficient Storage Engine for Blockchain and Forkable Applications'',
In Proc, of the International Conf on Very Large Databases (2018), pages 1085-1100.
크레딧
부록 A
1183
APPENDIX A
조건에 대해서도 나열하고 있다. 마지막으로 A.3절에서 스키마에 부합하는 예제 데이터를 살펴본
A.1 전체 스키마
1185
1186 PART 10 부록 A
A. 오 DDL
i」D를 null로 설정하는 것을 허용하지만, 참조된 학생이 삭제되면 advisor 튜플을 삭제한다.
create ta비e teaches
(ID varchar (5),
coursedd varchar (8),
sec-id varchar (8),
semester varchar (6),
year numeric (4,0),
primary key (ID, course-id, secdd, semester, year),
foreign key (coursedd, secdd, semester, year) references section
on delete cascade,
1188 PART 10 부록 A
time_slot 테이블을 생성하는 다음의 create table 명령문은 대부분의 데이터베이스 시스템에서
SQL에서 시간을 명시할 때 ,08:30', '13:55', '5:30P\T과 같이 나타낼 수 있다. Ora이e에서 time
자료형을 지원하지 않기 때문에 다음의 스키마를 대신 사용한다.
직하지 못하다. 첫 번째 대안은 varchar 자료형을 사용하는 것인데 이는 유효성 제약을 강제하기가
힘들고, 시간에 대한 비교도 힘들다. 두 번째 대안은 시간을 자정부터 경과한 분(또는 초)을 표현하
을 선택했다.
A.3 예제 데이터
그림 A.7 릴레이션
1192 PART 10 부록 A
sJd Ud
00128 45565
12345 1 이이
23121 76543
44553 22222
45678 22222
76543 45565
76653 98345
98765 98345
98988 76766
A M 8:00 8:50
A W 8:00 8:50
A F 8:00 8:50
B M 9:00 9:50
B W 9:00 9:50
B F 9:00 9:50
C M 11:00 11:50
C W 11:00 11:50
C F 11:00 11:50
D M 13:00 13:50
D W 13:00 13:50
D F 13:00 13:50
E T 10:30 11:45
E R 10:30 11:45
F T 14:30 15:45
F R 14:30 15:45
G M 16:00 16:50
G W 16:00 16:50
G F 16:00 16:50
H W 10:00 12:30
courseJd prereqdd
BIO-301 BIO-101
BIO-399 BIO-101
CS-190 CS-101
CS-315 CS-1 이
CS-319 CS-101
CS-347 CS-101
EE-181 PHY-1 이
크레딧