DevSprout / data-oriented-architecture

데이터 중심 애플리케이션 설계
4 stars 0 forks source link

06장: 파티셔닝 #6

Open minkukjo opened 7 months ago

minkukjo commented 7 months ago

스으윽

파티셔닝과 샤딩의 차이

파티셔닝

샤딩

출처 : https://www.baeldung.com/cs/database-sharding-vs-partitioning

데이터 파티셔닝의 이점과 문제점

키 범위 기준 파티셔닝

키의 해시값 기준 파티셔닝

핫스팟 완화

보조색인

문서 기준 보조 색인

용어 기준 보조 색인

파티션 재균형화

image

운영 관점에서 자동 재균형 VS 수동 재균형

요청 라우팅

image

image

병렬 질의 실행

MinJunKweon commented 7 months ago

정리

정리 - 파티셔닝(샤딩) : 데이터 셋 크기가 큰 경우 데이터를 파티션 단위로 나눔 - 하나의 논리적인 테이블을 물리적으로 데이터를 나누어서 저장 ## 파티셔닝을 하는 이유 - 확장성 - 대용량 데이터셋이 여러 디스크에 분산될 수 있고 질의 부하를 여러 프로세서 분산 - 크고 복작한 질의는 훨씬 더 어렵기는 하지만 여러 노드에서 병렬 실행이 가능 - 이력 데이터 효율적인 관리 - 불필요한 데이터 삭제 작업은 단순히 파티션을 추가하거나 삭제하는 방식으로 간단하고 빠르게 해결 가능 - ex) 로그 데이터 - 단기간에 대량으로 누적되며 일정 기간이 지나면 쓸모가 없어지는 데이터이며 삭제하며 백업할 때 고부하 작업 ## 키-값 파티셔닝 - skewed : 파티셔닝이 고르게 이뤄지지 않아서 한쪽 파티션에 데이터가 몰려서 질의를 많이 받는 파티션이 존재하는 경우 - hotspot : 불균형하게 부하가 높은 파티션을 지칭하는 용어 ### 키 범위 기준 파티셔닝 - 파티션에 연속된 범위의 키를 할당하는 것 - 장점 - 파티션 내 키를 정렬된 순서로 저장할 수 있음 (범위 스캔 용이) - 단점 - 특정한 접근 패턴이 핫스팟을 유발할 수 있음 ### 키 해시값 기준 파티셔닝 - 특정 해시 함수 결과를 가지고 파티션을 선택하는 것 - 복잡한 해시함수를 사용할 필요가 없어서 MD5 같은 해시함수를 써도 무방함 - 장점 - 쏠림과 핫스팟의 위험을 줄여 쏠린 데이터를 입력으로 받아 균일하게 분산 - 단점 - 범위 질의를 효율적으로 실행할 수 있는 키 범위 파티셔닝의 좋은 속성을 잃음 - 모든 파티션에 흩어지기 때문에 정렬 순서가 유지되지 않음 - 몇몇 DBMS는 범위질의를 지원하지 않음 - ❗카산드라 DB - 복합 키를 해시값 기준 파티셔닝을 사용할 때, 첫번째 키만 해싱하기 때문에 첫번째 키가 고정되어 있는 질의는 나머지 컬럼은 범위 스캔을 사용할 수 있음 ### 쏠린 작업부하와 핫스팟 완화 - 핫스팟 이슈를 100% 예방할 수는 없음 (극단적인 상황이 발생할 수 있기 때문에) - 유명인 문제(Celebrity Problem) - 유명인을 팔로우하고있는 사용자 모두에게 데이터 변경이 일어나야해서 핫스팟이 생길 수 있음 - 해결책 - 각 키의 시작이나 끝에 임의 숫자를 붙임 ⇒ 임의 숫자로 인해 키가 균등하게 배분될 수 있음 - 그러나 다른 키에 쪼개서 쓰면 읽기를 실행할 때 추가작업이 필요해짐 - 추가적으로 저장해야하는 정보가 생김 - 쓰기 요청이 자주 일어나는 소수의 키에만 적용하는 것이 타당함 ## 보조색인 - 보조 색인은 파티션에 깔끔하게 대응되지 않음 ### 문서 기준 보조 색인 파티셔닝 - 각 파티션에 속하는 문서만 담당하여 독립적으로 동작하는 색인 방법 ⇒ Local Index - DB에 문서 추가, 삭제, 갱신 등 쓰기 작업을 할 때, 문서 ID를 포함하는 파티션만 다루면 됨 ### 용어 기준 보조 색인 파티셔닝 - 모든 파티션의 데이터를 담당하는 색인 방법 ⇒ Global Index - 특정 노드에 병목이 발생할 수 있어서 인덱스를 여러 노드에 나누어서 저장함 - 찾으려는 용어에 따라 인덱스가 있는 파티션을 결정하므로 term-partitioned 라고함 - 특이사항 - 색인을 파티셔닝할 때 용어 자체를 쓸 수도 있고 용어의 해시값을 쓸 수 있다 - 용어 자체로 파티셔닝하면 범위 스캔에 유용한 반면 용어의 해시값을 사용해 파티셔닝하면 부하가 좀 더 고르게 분산됨 - 장점 - 문서 파티셔닝 색인에 비해 읽기가 효율적이다 - 클라이언트는 모든 파티션에 scatter/gather를 실행할 필요 없이 원하는 용어를 포함하는 파티션으로만 요청을 보내면 됨 - 단점 - 단일 문서를 쓸 때 해당 색인의 여러 파티션에 영향을 줄 수 있으며 쓰기가 느리고 복잡함 ### Local Index vs Global Index - 특정 파티션에 추가 삭제를 많이 하기 때문에 작업 대상 파티션의 인덱스만 영향을 받는 로컬 인덱스를 많이 사용함 - 글로벌 인덱스는 파티션에 해당하는 작업을 하는 경우 전체적으로 다시 재조정 작업을 해줘야해서 부하가 많아짐 ## 파티션 리밸런싱 - 상황 : 물리 장비에 대한 변화 발생 - CPU, RAM, Disk 추가 - 새로운 노드 추가 등 - 클러스터에서 한 노드가 담당하던 부하를 다른 노드로 옮기는 과정 - 리밸런싱 요구사항 - 부하 균등 - 순단 X - 데이터 이동 최소화 ### 해시값에 mod N(노드 개수) 연산 - 단점 - 노드 개수 N이 바뀌면 대부분의 키가 노드 사이에 옮겨져야함 ⇒ 리밸런싱 비용 상승 ### 정적 파티셔닝 (파티션 개수 고정) - 전체 데이터셋 크기 변동이 심하다면 적절한 파티션 개수를 정하기 어려움 - 파티션이 너무 커지면 리밸런싱 및 장애 복구 비용이 큼 - 적절한 크기를 정하는 것이 제일 좋지만 어려움 ### 동적 파티셔닝 - 파티션 개수가 전체 데이터 용량에 맞춰 조정됨 - 빈 데이터베이스의 경우 파티션 경계 설정 값에 도달하기 전에는 파티션이 1개임
LOG-INFO commented 7 months ago

끄적끄적

2rohyun commented 7 months ago

파티셔닝과 복제

키-값 데이터 파티셔닝

키 범위 기준 파티셔닝

키의 해시값 기준 파티셔닝

쏠린 작업부하와 핫스팟 완화


파티셔닝과 보조 색인

문서 기준 보조 색인 파티셔닝

용어 기준 보조 색인 파티셔닝

리밸런싱 전략