Sharding
- 단일의 데이터를 다수의 데이터 베이스로 쪼개어 나누는 것을 의미
- 단일의 데이터 베이스에서 저장하기 너무 클 때 사용
- 데이터를 구간별로 쪼개어 나눔으로써 노드에 무겁게 가지고 있던 데이터를 빠르게 검증할 수 있어 빠른 트랜잭션 속드를 가질 수 있게 됨
- 샤드란 샤딩을 통해 나누어진 블록들의 구간을 샤드라 함 (각각의 샤드는 데이터의 복사본이 아니라 데이터 그 자체)
- Elasticsearch는 분산 데이터베이스(분산 검색엔진)이기때문에 이렇게 데이터를 나누어 저장하는 방식으로 대용량 데이터에 대한 분산처리를 가능하게 함
샤딩의 종류
네트워크 샤딩
- 임의로 네트워크가 무작위로 노드를 샘플링하여 블록 단위로 샤드를 형성
- 하지만 네트워크가 샤드의 구성원에 대한 동의를 구하지 않아 구성원들이 원하는 방향으로 가지 않는 경우, 구성원들의 불만을 해결하지 못하는 단점을 가지고 있음
트랜잭션 샤딩
- 트랙잭션 해시의 마지막 몇 비트를 기반으로 샤드를 결정하고 트랙잭션의 유효성을 확인
- 하지만 사용자가 악의적인 경우 동일한 두 입력이지만 출력이 다른 트랜잭션을 생성할 수 있음
- 또한 이중 지출을 방지하기 위해 유효기간이 진행되는 동안에 샤딩이 된 조각의 노드들은 서로간에 통신이 필요 (통신 비용 발생)
스테이트 샤딩
- Account-Based Model로 상태가 지정된 블록체인에서 이 특정 샤드는 상태의 일부만을 유지
- 하지만 교차분할 트랜잭션을 수행하지 못하도록 제한이 되어 있음
- 또한 시스템의 상태가 모든 샤드에 복제되어 있지 않기 때문에 네트워크는 더 이상 오프라인 샤드에 대한 트랙재션의 유효성을 검사하지 못함
- 오프라인 샤드를 유지하기 위해 백업 노드를 갖게된다면 중앙집중식이 되어 보안성에 위협
- 네트워크가 한 번씩 재편성될 때 한번에 네트워크를 전환하게 되면 일부 동기화가 완료될때 까지 전체 시스템을 사용할 수 없게 될 수도 있음
샤딩의 문제점
- 중앙화의 문제와 보안성의 문제를 가지게 됨
- 보안의 문제는 1% Attack의 문제가 생길 수 있음
- 100개의 샤드 시스템에서는 오직 1%의 Hash Rate로 샤드를 지배할 수 있음
- 샤드간의 커뮤니케이션이 너무 빈번하게 일어난다면 커뮤니케이션으로 인한 지연시간의 문제가 발생
샤드와 파티셔닝의 차이 (트랜잭션 샤딩)
- 파티셔닝이란 퍼포먼스(Performance), 가용성(Availability), 또는 정비용이성(Maintainability)를 목적으로 논리적인 데이터 엘리먼트들을 다수의 엔티티(Table)로 쪼개는 행위를 의미
샤딩
- 수평 파티셔닝과 동일
- 데이터 베이스를 샤딩하게되면 기존에 하나로 구성될 스키마를 다수의 복제본으로 구성하고 각각의 샤드에 어떤 데이터가 저장될지를 샤드키를 기준으로 분리
- 예를 들어 0~10번 고객의 정보는 하나의 샤드에 저장하고 11~20번 고객의 정보는 다른 샤드에 저장하고 하였을때 DBA는 데이터 엑세스 패턴과 저장 공간 이슈(로드의 적절한 분산, 데이터의 균등한 저장)를 고려하여 적절한 샤드키를 결정
파티셔닝
- 수직 파티셔닝과 동일
- 하나의 엔티티에 저장된 데이터들을 다수의 엔티티들로 분리하는 것을 의미
- 예를 들어 한 고객은 하나의 청구 주소를 가지고 있을 수 있는데 DBA는 데이터의 유연성을 위해 다른 데이터베이스로 정보를 이동하거나 보안의 이슈등을 이유로 Customerld를 참조하도록 하고 청구 주소 정보를 다른 테이블로 분리할 수 있음 (퍼포먼스나 공간적인 이유로 인해)
정리
- 파티셔닝은 퍼포먼스, 가용성, 정비용이성등의 목적을 위해 논리적인 엔티티들을 다른 물리적인 엔티티들로 나누는 것을 의미
- 수평 파티셔닝 또는 샤딩은 스키마 복제 후 샤드키를 기준으로 데이터키를 나누는 것을 의미
- 수직 파티셔닝은 스키마를 나누고 데이터가 따라 옮겨가는 것을 의미
Replica
- 또 다른 형태의 샤드
- Elasticsearch에서 Replica의 기본값은 1인데 이때 값이 1이라는 것은 Primary Shard가 1개라는 것을 의미하지 않고 Primary Shard와 동일한 복제복이 1개 있다는 것을 의미
- Replica의 개수는 Primary Shard를 제외한 복제본의 개수
- Replica가 필요한 이유는 검색성능과 장애복구
참조 URL