• 현재까지의 화두
    • 분산할 때 고려할 점
      • 국소성
      • 데이터 규모에 맞게 탑재 메모리 조정
      • 메모리 증설로 대응할 수 없을 경우에는 분산
    • 메모리와 디스크 속도차와 그로 인한 I/O 분산의 어려움

  • 이번장의 핵심
    • DB 스케일 아웃 전략
      • 인덱스의 중요성
      • MySQL 분산
      • 스케일아웃과 파티셔닝

강의11 인덱스를 올바르게 운용하기 - 분산을 고려한 MySQL 운용의 대전제

  • 분산을 고려한 MySQL 운용 세가지 포인트
    • OS 캐시 활용
    • 인덱스
    • 확장을 전제로 시스템 설계(강의 12)

  • OS 캐시 활용
    • 전체 데이터 크기에 주의해서 데이터량이 물리 메모리보다 가능한 한 적어지도록 유지
    • 메모리가 부족할 경우에는 증설
    • 스키마 설계가 데이터 크기에 미치는 영향을 고려

  • 인덱스의 중요성
    • 인덱스는 주로 탐색을 빠르게 하기 위해 사용
    • 내부 데이터 구조로 트리 사용(MySQL의 경우 B+트리, 계산량을 O(log n))
    • 이분트리와 달리 노드의 크기를 적당한 사이즈로 정할 수 있음
    • b+트리는 노드를 블록단위로 저장하여 탐색 시에 seek를 최소화 한다.

  • 인덱스의 효과
    • 계산량 측면에서도 개선될 뿐만 아니라 디스크 seek 횟수면에서도 개선됨

강의12 MySQL의 분산 - 확장을 전제로 한 시스템 설계

리플리케이션

  • MySQL의 레플리케이션 기능
    • 마스터를 정하고 마스터를 뒤따르는 서버를 정해두면 마스터에 쓴 내용을 슬레이브가 polling하여 동일한 내용으로 자신을 갱신하는 기능
    • 참조 쿼리는 슬레이브로, 갱신 쿼리는 마스터로
    • 참조계열 쿼리는 확장
      • 서버를 늘리기만 하면 됨
      • 대수를 늘리기보다도 메모리에 맞추는것이 중요
    • 마스터는 확장할 수 없음
      • 갱신계열 쿼리가 늘어나면 험난해짐
      • 웹 어플리케이션은 대부분의 경우 90% 이상이 참조쿼리
      • 마스터 부하는 테이블 분할이나 다른 구현 등으로 연구

강의 13 MySQL의 스케일아웃과 파티셔닝

  • MySQL의 스케일아웃 전략
    • 데이터가 메모리에 올라가는 크기?
      • YES -> 메모리에 올린다
      • NO -> 메모리 증설 or 파티셔닝

  • 파티셔닝은 테이블 A와 테이블 B를 서로 다른 서버에 놓아서 분산하는 방법
    • 국소성을 활용해서 분산할 수 있으므로 캐시가 유효하여 효과적임

  • 파티셔닝의 상반관계
    • 운용이 복잡해짐
      • 용도가 다른 서버가 분산되어 구분이 어려워짐
    • 고장률이 높아짐
      • 대수가 늘어나는 만큼 고장 확률이 높아짐

+ Recent posts