728x90
반응형

오늘 푼 알고리즘 문제는 답이 틀려서…ㅜㅜㅜ 낼 다시 풀어야 된다..

오늘 소설 퇴고하고 포폴 만든다고 새벽에 잠을 못 잤다.. 피곤… 저녁에 결국 자버렷구~

RDBMS랑 NoSQL도 공부했는데 아직 지식들이 머리에 산재해있는 느낌!

내일 한 번 더 공부해서 요약 정리하고 올려야겠다 싶더라

요약은 총 두 번 한다. 공부용 요약 하나, 대답용 요약 하나… 그리고 막상 면젖ㅂ 보면 머리가 새하얘져서 대답을 못하지…^^

스키마


  • 정의 : 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조로, 데이터베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한다.
  • 잘 설계된 스키마는 데이터 중복을 최소화하고, 테이블이 되지 않는 것을 방지한다.

인덱스


  • 추가적인 쓰기 작업과 저장 공간을 활용해 데이터베이스 테이블에 대한 검색 속도를 높여주는 자료 구조
  • 데이터와 데이터의 위치를 포함한 자료구조를 생성해 데이터를 빠르게 조회할 수 있다.
  • 데이터들에게 인덱스를 지정하면 지정한 인덱스 번호로 빠르게 데이터를 찾을 수 있도록 되어 있다.
  • 인덱스를 활용하면 데이터를 조회하는 SELECT 외에도 UPDATE나 DELETE의 성능이 함께 향상된다. ← 수정이나 삭제를 하려면 먼저 조회를 해야 하니까.
  • 관리
    1. INSERT : 새로운 데이터에 대한 인덱스를 추가
    2. DELETE: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행
    3. UPDATE: 기존의 인덱스를 사용안함 처리하고, 갱신된 데이터에 대해 인덱스를 추가
  • 장점
    1. 테이블을 조회하는 속도와 그에 따른 성능 향상
    2. 전반적인 시스템 부하 감소
  • 단점
    1. 인덱스 관리를 위해 DB의 약 10%에 해당하는 저장공간 필요
    2. 인덱스를 관리하기 위해 추가 작업 필요
    3. 잘못 사용할 경우 오히려 성능 저하
    4. → CREATE, DELETE, UPDATE가 빈번한 속성에 인덱스를 걸게 되면 인덱스의 크기가 비대해져서 성능이 오히려 저하되는 역효과가 발생할 수 있다. UPDATE와 DELETE는 기존의 인덱스를 삭제하지 않고 '사용하지 않음' 처리를 해준다고 하였다. 만약 어떤 테이블에 UPDATE와 DELETE가 빈번하게 발생된다면 실제 데이터는 10만건이지만 인덱스는 100만 건이 넘어가게 되어, SQL문 처리 시 비대해진 인덱스에 의해 오히려 성능이 떨어지게 될 것이다.
  • 모든 요소에 인덱스를 걸지 않는 이유
  • → 인덱스 테이블이 생성되므로 메모리를 많이 소모하게 되고 Select를 제외한 Insert, Update, Delete에 대한 성능 저하 가능성이 있기 때문에 PK같은 컬럼들을 인덱싱 하도록 하는 것이 좋다.

수직적 확장과 수평적 확장


  • I/O란?
    • 입력(Input)/출력(Output)의 약자로, 컴퓨터 및 주변장치에 대하여 데이터를 전송하는 프로그램, 운영 혹은 장치를 일컫는 말
  • 데이터베이스에 데이터 요청시 문제점
    • CPU가 RAM 메모리에 데이터를 요청할 때 RAM에 적재되어 있는 데이터를 가져올 경우 I/O가 발생하지 않지만 하드디스크에서 데이터를 가져와야할 경우 I/O가 발생한다. 이를 페이지 교체가 일어난다고 하는데 속도가 현저히 떨어진다.
    • 해결방법 : 수직적 확장과 수평적 확장
  • 수직적 확장 : 서버 성능 향상
    • 장점
      1. 하나의 컴퓨터에서 데이터를 관리하기 때문에 데이터 쓰기(추가, 수정, 삭제)를 할 때 한번에 할 수 있다.
      2. 컴퓨터가 분산되어 있지 않아 동기화가 필요없어 데이터의 일관성이 유지된다.
    • 단점
      1. 하나의 컴퓨터에서 데이터를 관리하게 되면 RAM의 공간에 한계가 있으므로 결국에는 하드웨어에서 데이터를 가져오게 되는데 이 과정에서 I/O가 일어나기 때문에 데이터 읽기에서 성능이 떨어질 수 밖에 없다.
    • 활용
      1. 데이터 테이블이 서로 연계되어 있어 데이터 쓰기를 할 때 한번에 할 수 있는 RDB 방식의 데이터 모델에 적합하다.
      2. 주로 데이터 쓰기가 자주 일어나고 데이터의 정확성이 요구되는 정형화된 프로그램에서 도입된다.
  • 수평적 확장 : 서버 분산
    • 분산이란 데이터를 나누어 가지는 것이 아니라 같은 데이터를 복제하는 것을 의미한다.
    • 라우터에서는 각각의 레플리카의 가동 상태를 확인하여 최소한의 시간으로 데이터를 요청받을 수 있는 곳으로 보낸다.
    • 단점 : 은 데이터를 공유하고 있는 레플리카에서 데이터 쓰기가 일어날 경우 레플리카 간의 동기화로 데이터를 업데이트하는데 이는 동기화하는 과정에서 여러번 쓰기를 해야하고 동기화되는 시점에 따라 딜레이가 생겨 일관성이 유지되기 어려워진다.
    • 장점 : 하지만 동일한 데이터를 각각의 레플리카가 가지고 있기 때문에 읽기 속도는 매우 빨라진다.
    • 활용
      1. 데이터 테이블이 서로 연계되어 있는 RDB에서는 적합하지 않지만 컬렉션 사이의 관계가 없고 중복된 데이터를 가질 수 있는 NoSQL 방식의 데이터 모델에 적합하다.
      2. 주로 데이터의 정확성 보다 읽기 속도가 요구되고 쓰기보다 읽기가 자주 읽어나는 소셜 네트워크 서비스(SNS) 등에 도입된다.
반응형

+ Recent posts