728x90
반응형
SMALL

데이터베이스는 혼자 쓰는 공간이 아니기 때문에 당연히 여러 사용자가 동시에
접근해서 읽기,수정하기,삭제하기 등의 Transaction을 마구잡이로 실행한다.
따라서 정확한 교통정리가 없으면 데이터베이스의 데이타는 정합성이 깨지면서
데이터는 엉망이 되고 말것이다.
그레서 데이터베이스에서는 Transaction 에 대한 4원칙 즉 ACID를 따르도록
되어 있으며 이 ACID를 보장하기 위해서는 Isolation Level (격리수준) 을 결정해서
적용해야 한다.

Transacton 이란?

데이터베이스에서 트랙잰션(Transaction) 이란 데이터에 대한 하나의 논리적 실행 단계를
말한다.  좀 어려운 용어정의인데.. 예를 들자면  계좌이체를 생각해 보면 계좌이체는
A라는 송신자 통장에서 돈을 빼서 B라는 수신자의 통장에 돈을 넣는 2가지 단계로 
이루어 지듯이 이 두단계에서 데이터에 대한 처리를 하는 논리적 행위를 트랜잭션
(Transaction) 이라고 한다.
그런데 만약 A송신자 통장에서 돈만 빠져나가고 B 수신자 통장에는 오류가 나서 돈이
안들어 왔다면 정말 큰일이다. 따라서 트랙잭션은 이 다음에 설명할 ACID 를 반드시
충족해야 한다.

ACID 란?

위 에에서 설명한 계좌이체 거래(트랜잭션,Transaction) 는 아래 4가지 원칙을 만족해야 한다.

종류 내용
Atomicity (원자성)

하나의 Transaction은 모두 수행되거나 모두 수행되지 말아야 한다. 
Commit ,Rollback 을 통해 모두 적용되거나 모두 취소되어야 한다.
수행 중간에 오류가 있으면 이미 한것도 모두 취소가 되어야 한다.
계좌이체 트랜잭션(Transaction) 에서 보면 A통장에서 돈인 인출되고
B통장에 돈이 입금되는 두 행위가 둘다 모두 성공하거나 아니면 둘다 모두
취소되어야 한다는 뜻이다.

Consitency (일관성)

트랜잭션(Transaction) 실행이 성공적으로 완료되었을 때에는 
이전의 상태와 실행후의 상태가 안정적이고 일관성(Consistency)이 있어야
한다는 뜻이다.
위 계좌이체에서 A통장에 3,000원이 있었고 B통장에는 2,000 원이 있었다면
총 합계는 5,000원이 된다.  이상태에서 500원을 A통장에서 B통장으로 이체
했을 경우 A통장은 2,500원이 되고 . B통장은 2,500원이 되고 총 합계는
트랜잭션 수행되기 이전인 5,000원과 동일해야 한다는 뜻이다.
(머 당연한 이야기이겠지만...) 

Isolation (고립성) 트랜잭션(Transaction) 간에는 서로 독립성이 있어야 한다는 뜻이다.
예를 들어 계좌이체에서 A통장에 5,000원이 있는 상태에서 B통장에 3,000원
을 이체하는 트랙잰션 도중에 A통장에서 4,000원을 인출해서 C통장에
이체하는 거래가 끼어드는 경우.. 어떻게 될까?? 이 고립성(Isolation)을 
만족시키지 못한다면 A통장에서 B통장으로 3,000원 , C통장으로 4,000원이
나가는 ...자기 통장잔액 5,000원 보다 더 많은 7,000원이 나가는 사태가 
발생할 것이다. 그러면 총합계도 틀어지면서 일관성(Consistency) 도 충족하지
못하게 되는 것이다. 
그러면 이때에는 어떻게 해야할까??. 첫번째 트랜잭션이 Commit 이나 Rollback 이 되기전까지는 두번째 트랜잭션은 기다려야 한다..

Durability (영속성/지속성) 성공적으로 수행이 완료된 트랜잭션의 결과는 영원해야 한다는 뜻이다.
즉 시스템에 장애가 발생해도 그 결과는 유지되어야 한다는 뜻이다.
이러한 것을 해주는 것이 데이터베이스의 복구 기능이다.


ACID와 데이터베이스 관계

구분 관계
Atomicity (원자성) Commit / Rollback
회복성의 보장

트랜잭션은 분해가 불가능한 논리적  최소 단위로 실행 전체가 승인되거나 취소 되어야 함. (All or Nothing)

Consitency (일관성) 무결성 조건 
동시성 제어

트랜잭션의 수행 이후 데이터는 무결성이 유지되고 모순되지 않아야 함.

Isolation (고립성) Isolation Level (고립수준)
분산 트랜잭션
Lock

다수의 트랜잭션이 동시에 수행되더라고 개별 트랜잭션의 결과에 영향을 미쳐서는 안됨.

Durability (영속성/지속성) 회복기법 (Redo/Undo)

성공적으로 수행된 트랜잭션은  해당 요인에 의해 변경 및 손실되지 않아야 함.

 

728x90
반응형
LIST
728x90
반응형
SMALL

샤드(shard) 의 정의

샤드(shard) 란 데이터베이스를 물리적으로 분할하는 기법 중에서 수평분할 즉 수평 파티셔닝(partitioning) 
을 했을 때 그 분할된 파티셔닝을 가리키는 말이다.
데이터베이스를 분할 하는 이유는 다 아시겠지만 데이터의 양이 많아지면 그 만큼 성능이나 퍼포먼스가
떨어지게 마련이기 때문에 가용성,확장성,성능향상을 위해 물리적으로 데이터베이스를 분할하는 것이다.

샤드(shard) 분할 기준

샤드(shard) 단위의 결정은 분할 즉 샤딩(sharding) 을 어떤 기준으로, 어떤것을 Key로해서 분할(샤딩)
하느냐에 달려있다. 

< 출처 : 118회 정보관리기술사 두드림 모임>

위 그림에서 보는 봐와 같이 하나의 물리적 데이터베이스에 통으로 들어있는 대용량 DB를
어떤 분리 기준에 의한 분할 알고리즘을 통해서 Shard Key를 생성하고 이 Key값을 기준으로
해당 샤드(shard) DB에 저장하고 있다.
이 때 shard key를 정하는 방법에 따라 다음과 같이 분류할 수 있다.

구분 내용 특징 사례
vertical
partitioning
테이블 컬럼증가에 따른 수직으로 분할 -구현간단
-각 서버의 데이터가 커지
 면 추가 샤딩(sharding)이
 필요
회원마스터의 컬럼들을
기준으로 분리
- 회원 개인정보 shard
 
- 회원 가족 shard 
- 회원 학력 shard
range based partitioning 테이블 레코드의 증가에
따른 날짜나 지역 등으로
수평 분할
데이터를 분할하는 방법
이 예측 가능해야 함.
년도별로 테이블을 생성하거나 지역별로 테이블을 생성해서 저장
Key or Hash Based Partition 엔터티값을 hash 함수에 넣어서 나온 hash 값을  기준으로 어느 서버에 저할지를 결정  균등분할  사용자ID가 숫자로만 구성된 경우 이 ID를 일정한 숫자로 나눈 나머지값을 기준으로 저장할 서버 결정

 

DB 확장성 확보 방안

<출처 : 118회 정보관리기술사 모임 두드림 >


샤드(shard) 와 파티셔닝(partitioning) 의 차이점

파티셔닝(partitioning)이란 성능(performance), 가용성(availability) 또는 유지보수용이성(maintainability)를
목적으로 논리적인 데이터 엘리먼트들을 다수의 엔티티(table)로 쪼개는 행위를 뜻하는 일반적인
데이터베이스 용어이다.
샤딩(sharding)은 수평 파티셔닝(horizontal partitioning)과 동일하다.
데이터베이스를 샤딩하게 되면 기존에 하나로 구성될 스키마를 다수의 복제본으로 구성하고 각각의 샤드에
어떤 데이터가 저장될지를  shard key를 기준으로 분리한다. 
예를 들면, 나는 고객의 데이터베이스를 CustomerId를 샤드키로 사용하여 샤딩하기로 하였다.
0 ~ 10000 번 고객의 정보는 하나의 샤드(shard)에 저장하고 10001 ~ 20000 번 고객의 정보는
다른 샤드(shard)에 저장하기로 하였다.
요약하면 파티셔닝은 퍼포먼스, 가용성, 정비용이성등의 목적을 위해 논리적인 엔티티들을 다른 물리적인
엔티티들로 나누는것을 의미하는 일반적인 용어이다. 수평 파티셔닝 또는 샤딩은 스키마 복제 후
샤드키를 기준으로 데이터를 나누는것을 말한다. 수직 파티셔닝(vertical partitioning)은 스키마를 나누고
데이터가 따라 옮겨가는것을 말한다. (발췌: 아이군의 블로그 http://theeye.pe.kr/archives/1917)

728x90
반응형
LIST

+ Recent posts