728x90
✍ Posted by Immersive Builder Seong
데이터베이스 규모 확장
데이터가 지속적으로 쌓이면 데이터베이스에 대한 부하가 증가하므로 데이터베이스의 규모를 확장해야 합니다. 데이터베이스의 규모를 확장하기 위한 방안으로 두 가지를 고려해볼 수 있습니다. 첫 번째는 스케일 업을 이용한 수직적 규모 확장 방안이고, 두 번째는 샤딩을 이용한 수평적 규모 확장 방안입니다.
스케일 업은 데이터베이스의 리소스를 증설하여 더 많은 양의 데이터를 저장하고 처리할 수 있습니다. 그러나 하드웨어의 한계가 존재하고 검색 요청에 대한 처리 속도가 느려지는 문제점이 발생합니다. 이러한 문제점을 해결하고자 모색한 접근 방법이 바로 샤딩입니다.
샤딩(Sharding)
샤딩은 대규모 데이터베이스를 샤드라고 하는 작은 단위로 분할하는 기술을 의미합니다. 모든 샤드는 동일한 스키마를 사용하지만 샤드에는 데이터가 중복되어 저장되지 않습니다. 위 그림은 샤드에 데이터가 어떻게 저장되는지 보여주는 예시입니다. 샤딩 키를 기준으로 3으로 나눈 나머지 값에 따라 각 샤드 노드로 데이터가 분산되어 저장됩니다. 결과 값이 0이면 0번 샤드에, 1이면 1번 샤드에, 2이면 2번 샤드에 저장되는 방식입니다.
이렇게 데이터를 분산하면 개별 노드의 부하가 줄어들어 처리 속도가 향상되고 확장성이 높아집니다. 각 샤드 노드는 독립된 데이터베이스처럼 관리되고 필요에 따라 다른 데이터베이스에 저장될 수 있습니다.
설계 고려사항
- 샤딩을 도입할 때 고려해야 할 가장 중요한 요소는 샤딩 키(Sharding Key)입니다. 적절한 샤딩 키를 선정하여야 데이터를 각 샤드 노드로 고르게 분산하여 저장할 수 있습니다.
- 특정 샤드에 데이터가 집중되는 경우 데이터의 재샤딩(Resharding) 작업이 필요할 수 있습니다. 재샤딩이란 샤드 노드 간 데이터를 재배치하는 것을 말합니다.
- 특정 샤드에 질의가 집중되는 경우 과부하를 피하기 위해 키워드마다 샤드를 할당해야 할 수 있습니다.
- 샤드가 많아질수록 데이터가 복잡해지고 샤드 간 데이터를 조인하기 어려워집니다. 따라서 데이터베이스를 비정규화하여 질의를 처리하는 방안도 구상할 필요가 있습니다.
728x90
'SA > Architecting' 카테고리의 다른 글
메시지 큐 (0) | 2024.11.10 |
---|---|
콘텐츠 전송 네트워크 설계 (1) | 2024.11.09 |
캐싱 전략 (0) | 2024.11.08 |
확장성을 고려한 시스템 설계 방안 (0) | 2024.11.07 |