[Database] Distributed Database
REF: fundamentals of database systems 7th edition
DDB Concept
- Centralized Database가 network로 연결된 예시
- 각 site마다 DB가 존재하고, 각 site가 network로 연결된 예시
DDB 구성요소
⭐️computer network 통한
Database node 연결- site, node로 불리는 여러대의 컴퓨터가 network로 연결되어있다.
- 연결된 DB간
⭐️상관 관계성
- 연결된 DB에 저장된 정보는 서로 논리적으로 관련있어야한다.
- 연결된 노드간
⭐️비동일성
- 각 node의 하드웨어, 소프트웨어, 데이터가 모두 같을 필요는 없다.
목적
- 중앙화 DBMS의 외형을 지키면서 아래와같은 장점을 가진다.
⭐️Accessibility
local view와 global view가 각 site마다 존재
하는 장점.
⭐️sharability
- 물리적으로 떨어진 분산 DB를 모든 site가 공유
⭐️performance
- data를 필요로하는 곳에 가까이 둔다.
- 분산된 DB는 쿼리를 작게 나누어 작은 크기의 transaction으로 변환되고,
- 각 site에 쿼리 처리 요청을 보내면
parallel하게 수행
되기에 더 좋은 성능을 가지게된다.
장점
- low-level 구현 이슈와 high-level semantic의
⭐️분리
.- global user는 Centralized DB를 보는 것같다.
- data-independence의 확장
- external view 위에
local view가 하나 더 있음
- external view 위에
Fragmentation, Replication
- 예시 데이터
Fragmentation
- DDB를 사용할때는 데이터베이스의 어떤 부분을 어느 site에 둘 지에 대한 의사결정을 해야한다.
- 이 portion을 결정할때, 가장 작은 logical unit을 식별해야하는데 relation을 더 잘게 쪼개어 식별한다.
- 이렇게 relation을 쪼개는 방식에 대해 설명하고자한다.
⭐️Horizontal Fragmentation
Horizontal, 수평 분할
방식은 relation의⭐️tuple들의 부분집합
으로 나누는 방식을 의미한다.- 각각의 subset은
⭐️Logical한 의미
를 담고 있다. - 이렇게 나누어진 fragments는 DDBMS의 각각의 node(site)에 할당될 수 있다.
⭐️Vertical Fragmentation
Vertical, 수직 분할
방식은 relation의⭐️column을 기준으로
나누는 방식을 의미한다.- 각 site가 relation의 모든 attribute가 필요하지 않을때, Vertical Fragmentation으로 나눌 수 있다.
⭐️Hybrid Fragmentation
- 위의
⭐️Horizontal, Vertical Fragmentation을 합친
방법. -
실세계의 경우, 1가지 방법만 사용하기보다는 2가지 방법을 혼용함으로써 더욱 높은 성능을 기대할 수 있다.
Replication
- replication은 data의 availability를 향상시킨다.
fully replicated
- 장점
- 극단적인 예시로는,
분산 시스템에서 전체 DB를 모든 site에 복사
해⭐️fully replicated distributed database
를 만드는 것. - 이때는 적어도 1개의 site가 작동되는 한, 시스템이 유지되므로 availability가 크게 향상된다.
- 또한, global query는 각 site마다 fragmentation되어 나누어진 site에 local query화 되는데, 모든 site가 fully replicated되면 네트워크를 통해 query의 결과를 받을 필요가 없기때문에, local로만 처리되어 성능적으로 높은 이득을 가져갈 수 있다.
- 극단적인 예시로는,
- 단점
- update가 느리다(전체 site에 대한 update를 수행해야하므로)
- concurrency, recovery control 비용이 비싸진다.
no replication
각 fragmentation이 site를 통틀어 1개만 존재
하는 것.- 모든 fragment는 서로 상호배제적이며,
nonredundant allocation
이라고 불린다.
partial replication
- fully replication과 no replication의 중간,
- 몇몇 fragment는 replication을 하지만, 일부는 1개만 유지한다.
- fragment를 어디에 위치시키고, 어디서 replicate할지 결정하는 프로세스를
data distribution
이라고한다. - 이 프로세스는 해당 fragment가 어느 site에서 많이 쓰이는지에따라 위치시키고,
- 얼마나 많은 site가 해당 fragment를 사용하는지에따라 replicate해 최적화한다.
DDBMS의 ISSUE들
⭐️Global Transaction
global transactions
- 1개의 DB에서 모두 처리될 수 있는 트랜젝션은 Local Transaction으로 불린다.
여러개의 DB에서 처리되어야 하는 (global)distributed transaction
을 위해서global transaction manager
라는 컴포넌트가 존재한다.⭐️복수의 site에 행해지는 DB operation의 실행을 조율
한다.- global transaction manager의 기능은 application program에 인터페이스로 제공되는데,
- BEGIN_TRANSACTION
- READ_TRANSACTION
- WRITE_TRANSACTION
- END_TRANSACTION
- COMMIT_TRANSACTION
- ROLLBACK 이 있다.
-
COMMIT, ROLLBACK은 two-phase commit protocol을 사용한다.
- transaction manager는 위 기능들이 수행되면 operation과 관련 정보를 병행성 제어기(concurrency controller)에 전달한다.
- 이때부터, concurrency controller가 관련된 lock을 획득하고 해제하는 책임을 가지게된다.
- transaction이 만약 이미 locked된 리소스에 접근하려하면 lock이 해제될때까지 블락된다.(semaphore생각하면된다.)
- lock이 획득되면, operation은 runtime-processor에 전달되어 실제 operation이 수행된다.
- operation의 수행이 종료되면 lock을 해제하고, operation의 결과를 업데이트한다.
⭐️Global Commit Control
- 22.6장 참고.
- DB의 트랜잭션은
⭐️원자성
을 지켜야한다. 원자성이란, 트랜잭션은모두 성공하거나, 모두 실패
해야한다는 특성이다.- 원자성이 지켜지지 않으면, 데이터베이스의 부분갱신으로 인해 데이터가 불일치하는 문제점이 발생한다.
- 이러한 원자성을 지키기위해서, 2단계의 recovery mechanism을 가지는 것이 필수적이다.
global recovery manager(coordinator)
는 유지해야하는정보
와local recovery manager
와 더불어 필요로되어진다.
Two-phase commit protocol
- coordinator는
two-phase commit protocol
이라고 불리는 프로토콜을 사용한다.
phase 1
- 참여하는 데이터베이스들이 트랜젝션의 일부분이 완료되었다고 coordinator에게 signal을 보내면, coordinator는 transaction commit을 위해 준비하라는 message를 참여하는 데이터베이스들에게 전송한다.
- message를 전송받은 데이터베이스들은 모든 log record와 recovery에 필요한 정보를 disk에
강제로 작성
하고, coordinator에게ready to commit message
를 전송한다. - disk 작성이 실패했거나, local transaction이 모종의 사유로 실패하면 cannot commit, not OK signal이 coordinator에 전달한다.
- phase 1은 전송 phase이다.
phase 2
- 만약 모든 참여 DB가 OK를 보내고, coordinator또한 OK라면, coordinator는 참여 DB들에게 commit signal을 전송한다.
- local recovery가 가능하다.
- 참여 DB 중 최소 1개나 coordinator가 not OK response이거나, transaction이 실패하면 coordinator는 roll back 또는 UNDO를 하도록 각 참여 DB에 알린다.
- local transaction 연산을 취소할때는 log를 사용한다.
-
phase 2 는 확인 phase이다.
- 따라서, phase1 도중이나 이전에 failure가 발생하면, transaction이 일반적으로 roll back되어야만하나,
- phase2의 failure는 transaction을 성공적으로 recover하거나, commit할 수 있다.
three-phase commit
- two-phase commit, 2PC의 가장 큰 단점은
blocking protocol
이라는 것이다.- coordinator 단에서 failure가 발생하면, coordinator가 복구할때까지 모든 참여 site를 blocking한다.
- 만약 특정 참여 site에서 공유자원을 lock하고있다면, 성능저하로 이어지게된다.
- 이러한 2PC의 단점을 해결하기위해 나온게 3PC protocol이다.
-
2PC의
2phase를 prepare-to-commit과 commit으로 구분
한다. prepare-to-commit
- 모든 참여자의 vote phase의 결과를 통신하기위해 사용된다.
- 모든 참여자가 yes에 투표하면, coordinator는 모든 참가자를
prepare-to-commit state
로 변경한다.
commit
- 2PC의 commit phase와 동일하다.
- 3PC의 핵심은 commit 준비단계에서 coordinator로부터 global commit, 혹은 abort를 기다리는 참가자의 대기시간을 한정하기위함이다.
⭐️Global Locking
OS의 transaction 관리
- 일반적으로 DBMS는
semaphore를 통해 공유자원 접근을 배제
한다. - semaphore는 DBMS 소프트웨어의 user space에 구현되어 있기에, OS에서는 이에대해 알 수 없다.
- 그러므로, 만약 OS가 lock을 들고있는 DBMS 프로세스를 비활성화한다면, 이 lock을 획득해야하는 다른 DBMS 프로세스들은 block될 것이다.
- 이런상황은 성능에 매우 악영향을 미친다.
- 이러한 문제는 kernel의 일부분으로 protocol을 구현함으로써 해결가능하다.
⭐️Global Query Optimization
- 목적
DDBMS에서는 각 DB가 떨어진 site에 존재한다.
- 각 site에는 Hybrid Fragmentation된 Data가 존재하는데, 쿼리 최적화의 목적은
⭐️network로 전달되는 양의 최소화
이다.
- Query Mapping
- 분산 데이터에 대한 입력쿼리는 쿼리 질의어를 통해 정의된다.
- 이는
global relation에 대한 쿼리로 번역
되고, global conceptual schema를 참조
한다.
- Localization
- 분산 DB에서, fragmentation은 relation이 분리된 site에 저장되거나, 복사되는데,
분산 복사된 정보를 이용해 쿼리를 local query로 분리
한다.
- Global Query Optimization
- Optimization은 최적에 가까운 후보 목록에서 최적의 전략을 선택한다.
- 후보 쿼리 목록은 이전 단계에서 생성된 fragment query의 연산 순서 순열을 통해 얻을 수 있다.
- 비용은
CPU처리비용, I/O비용, 그리고 통신비용으로 구성
된다. - DDB는 네트워크로 연결되어있기때문에,
통신비용이 가장 중요
하다.
- Local Query Optimization
- Centralized system에서 사용되는 것과 똑같다.
Global Recovery
- 분산 transaction 도중에 failure되어 restore되어야하는 이슈가 생겼을때.
Parallel DBMS issue
정의
- large task를 small task로 작게 쪼개어 처리한다.
- 데이터를 병렬화해 여러개의 프로세서가 처리할 수 있게한다.
- 단일 프로세서로 처리할때보다 빠른 속도로 처리할 수 있다.
SQL
- 서버 프로세스들에 SQL code를 배분한다.
- 속도를 높이고, 확장성을 확보할 수 있다.
PARTITION BY RANGE(<attr_name>)
(
PARTITION <partition_name> VALUES LESS THAN
<기준값> TABLESPACE TS0,
...
PARTITION <last_partition_name> VALUES LESS THAN
<MAXVALUE> TABLESPACE MV
);
- 기준값을 통해 테이블을 파티셔닝할 수 있고,
- 마지막은
MAXVALUE
로 정의된다.
댓글남기기