ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Question : DB
    Computer Science/DB 2021. 4. 6. 16:56
    728x90

    partitioning과 sharding을 비교해주세요.

     

    1.

    대용량 데이터를 다룰 경우, 하나의 DB에 모두 저장한다면 제대로 된 응답성을 기대하기는 어렵다.

    때문에, Master-Slave 구조를 활용하여 DB 부하를 분산하는 방법을 떠올리게 된다.

    Master-Slave 구조는 read 연산의 경우 부하를 줄일 수 있지만, write 연산의 경우 그렇지 못하다.

    따라서, 여러 개의 DB에 동일한 데이터를 저장하는 것이 아닌, 전체 데이터를 분할하여 저장하도록 구성하는 방법을 떠올릴  수 있고, 이러한 기법을 partitioning이라고 한다.

     

    2.

    partitioning은 '단편화', '분할'이라고 해석되고, 방식에 따라 '수평 단편화', '수직 단편화'로 구분된다.

     

    3.

    수평 단편화는, 말 그대로 수평을 기준으로 분할한다.

    어떤 record가 어느 DB에 있는지 파악되어야 하고, 때문에 key 값 설정이 중요하다.

     

    4.

    수직 단편화는 말 그대로 수직을 기준으로 분할한다.

    특정 컬럼이 빈번하게 참조된다면, 추천되는 방식이다.  왜냐하면, 빈번하게 참조되는 컬럼은 cache에 항상 올라가 있을 것이고, hit rate가 올라갈 것이기 때문이다.

     

    5.

    수평 단편화는, 일반적으로 동일한 DB 안에서 특정 테이블을 2개 이상으로 수평 분할하는 것을 의미한다.

    >> DB-A의 table-A를 수평 단편화 -> DB-A의 table-B, DB-A의 table-C

    sharding은, 물리적으로 다른 DB들의 테이블에 대해 수평 분할하는 것을 의미한다.

    >> DB-A의 table-A를 sharding => DB-B의 table-B, DB-C의 table-C

     


     

     

    DB의 정규화에 대해 설명해주세요

     

    1.

    정규화는, 불필요한 데이터를 제거하고, 데이터의 중복을 최소화하고, 각종 이상 현상을 방지하기 위해 DB를 재디자인하는 것이다.

     

     

     


     

     

    table full scan과 index range scan을 비교해주세요.

     

    1.

    table full scan은 포멧된 디스크의 경계선까지 모두 조회(scan)하는 방법이다.

    index가 없거나, full 힌트를 사용하거나, index를 생성하고자 할 때 table full scan이 동작된다.

     

    2.

    index range scan은 index의 일정 범위만의 data를 조회(scan)하는 방법이다.

     

     


     

     

    트랜잭션을 '성질'과 함께 설명해주세요

     

    1.

    트랜잭션이란, 여러 작업들을 하나로 묶은 단위이다.

    다시 말해, 하나로 묶인 여러 작업들은 모두 실행이 되거나, 모두 실행이 되지 않거나 둘 중 하나가 수행된다.

     

    2.

    트랜잭션의 성질은 4가지로 앞글자를 따서 'ACID'라고 한다.

    A는 atomicity, 원자성을 의미하고, 즉 트랜잭션의 작업은 부분적으로 실행되거나 부분적으로 중단되지 않음을 의미한다.

    C는 cosistency이고, int 타입에 varchar 타입이 저장되는 등의 오류가 발생하지 않음을 의미한다.

    I는 isolation이고, 트랜잭션 수행 중에는 다른 트랜잭션이 끼어들지 않도록 보장함을 의미한다.

    D는 durablility이고, 트랜잭션이 반영된다면 영구적으로 반영되어야 함을 의미한다.

     

     

     


     

     

    트랜잭션의 격리 수준과, 각 수준에서 발생 가능한 문제에 대해 설명해주세요

     

    1.

    트랜잭션의 ACID 성질로 인해 트랜잭션 간 개입이 제한되고, 이를 'locking'이라고 한다.

    locking 개념으로 인해 이점을 보기도 하지만, 강력한 locking은 오히려 DB 성능은 떨어지게 된다.

    따라서 적절하고 효율적인 locking을 유지하는 것이 중요하고, 이를 '트랜잭션의 격리 수준'이라고 한다.

     

    2.

    트랜잭션의 격리 수준은 총 4단계로 단계가 올라갈 수록 강력한 locking을 보인다.

    0단계 : read uncommitted : 각 트랜잭션의 변경 내용이 commit과 rollback의 관계 없이, 다른 트랜잭션에서 읽을 수 있다.

    1단계 : read committed : 대부분의 DB에서 사용되고, 실제 영역의 data를 가져오는 것이 아니라 undo 영역의 백업 data를 가져온다.

    2단계 : repeatable committed

    3단계 : serialize

     

    3.

    격리 수준으로 인해 발생될 수 있는 문제점은 크게 3가지이다.

    dirty read : 트랜잭션이 완료되지 않았는데, 다른 트랜잭션에서 볼 수 있는 현상

    non-repeatable read : 하나의 트랜잭션을 두 번 실행했을 때, 결과가 서로 다른 현상

    phantom read : 하나의 트랜잭션을 두 번 실행했을 때, 두 번째 결과에서 새로운 결과가 보이는 현상

     

    4.

    단계 별 발생 가능한 문제는 다음과 같다.

    0단계 : dirty read, non-repeatable read, phantom read

    1단계 : non-repeatable read, phantom read

    2단계 : phantom read

    3단계 : x

     

     

     


     

     

     

    DB에서의 교착상태에 대해 설명하고 해결 방법 또한 설명해주세요

     

    1.

    DB에서의 교착상태는 process에서의 교착상태와 마찬가지로, 두 개의 트랜잭션이 서로 완료될 때까지 기다리며 결국 아무 작업도 하지 못하는 상태를 말한다.

     

    2.

    해결 방법으로는 세 가지가 있다.

    첫 번째, 트랜잭션의 진행 방향을 같은 방향으로 처리한다.

    두 번째, 트랜잭션의 작업 속도를 최소화한다.

    세 번째, SET LOCK_TIMEOUT문을 활용하여 잠금해제 시간을 설정한다.

     

     

     


     

     

     

     

    728x90

    댓글

kxmjhwn@gmail.com