Database

대규모 데이터를 다루기 위한 기초지식 - 국소성, 파티셔닝

집사킴 2022. 8. 19. 20:35
728x90

본 포스팅은 웹 개발자를 위한 대규모 서비스를 지탱하는 기술 책에서 발췌한 내용입니다.

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788994506128#N 

 

대규모 서비스를 지탱하는 기술 - 교보문고

데이터 구조 메모리 OS DB 서버 인프라 | 베스트셀러 『(24시간 365일)서버/인프라를 지탱하는 기술』의 핵심 저자들이 또 한 권의 역작을 펴냈다. 서버 1대부터 시작하여 1,000대의 호스트를 운영하

www.kyobobook.co.kr


국소성(Locality)을 고려한 분산

🔠 Locality : a particular area
  • 액세스 패턴(데이터의 용도)을 고려한 분산
  • 캐싱할 수 없는 부분이 사라진다

예를 들어, 상품 목록 조회를 요청하면 메모리에 상품 목록 데이터가 캐싱됩니다. 상품 데이터로 캐시가 꽉 찼을 때 유저 정보조회 요청이 들어올 경우 상품 데이터 캐시를 일부 지우고 유저 데이터가 다시 캐싱됩니다. 이때 또다시 상품 조회 요청이 들어온다면 또 입출력 작업이 필요해집니다.

이 상태에서 만약 상품DB와 유저 DB를 분산한다면 각각의 데이터는 늘 캐싱되어있으므로 IO부하 감소 효과를 볼 수 있습니다.


파티셔닝 (Partitioning)

한 대였던 DB서버를 여러 대의 서버로 분할하는 방법

테이블 단위 파티셔닝

entry테이블과 bookmark테이블은 같이 엑세스 하는 경우가 많아 같은 서버에 위치시킨 사례

테이블 데이터 파티셔닝

특정 테이블 하나를 여러 개의 작은 테이블로 분할하는 것입니다. 아래 그림은 id의 첫 문자의 알파벳에 따라 파티셔닝을 하고 있습니다.

💡 책에서는 파티셔닝의 범위를 단순하게 2가지로 나누었지만, 조사해보면 범위 파티셔닝, 리스트 파티셔닝, 인터벌 파티셔닝 등 다양한 파티셔닝 범위가 있습니다.

 

파티셔닝 방법

  • 수평 분할 (Horizontal Partitioning)
    • 스키마(schema)가 같은 데이터를 두 개 이상의 테이블에 나누어 저장하는 방법.
    • ex) 스키마가 같은 ‘서현동 주민 테이블'과 ‘정자동 주민 테이블'을 사용
  • 수직 분할 (Vertical Partitioning)
    • 테이블의 컬럼을 기준으로 데이터를 분할하는 방법
    • 이미 정규화된 데이터를 분리하는 과정으로 생각해야 함
    • 자주 사용하는 컬럼을 분리하여 성능 향상을 꾀할 수 있음
💡 파티셔닝과 샤딩(Sharding)의 차이 보통 수평 분할을 한다고 했을 때는 하나의 데이터베이스 안에서 이루어지는 경우를 칭합니다. 반면, 샤딩은 물리적으로 다른 데이터베이스에 데이터를 수평 분할 방식으로 분산 저장하고 조회하는 방법을 말합니다.

 

요청 패턴을 ‘섬'으로 분할

하테나에서는 ‘하테나 북마크' 서비스를 ‘요청 패턴'에 따라 DB를 섬으로 구분한다고 합니다

요청 패턴에 따라 엑세스 하는 데이터의 종류도 다를 것이고, 그에 따라 캐싱되는 데이터의 패턴도 달라질 것이기 때문에 캐싱이 어려운 요청, 쉬운 요청을 처리하는 섬으로 나누어서 관리한다고 합니다

728x90