application level
에서도 가능하지만 database level
에서도 가능하다.Horizontal Partitioning
이라고 볼 수 있다.복잡도는 더 높아지는 단점
이 있다.가능하면 Sharding을 피하거나 지연시킬 수 있는 방법을 찾는 것이 우선되어야 한다.
Hardware Spec이 더 좋은 컴퓨터를 사용한다.
Cache나 Database의 Replication을 적용하는 것도 하나의 방법입니다.
Vertically Partition도 하나의 방법입니다.
Data를 Hot, Warm, Cold Data로 분리하는 것입니다.
1. 분산된 Database에서 Data를 어떻게 Read할 것인가?
2. 분산된 Database에 Data를 어떻게 잘 분산시켜서 저장할 것인가?
균일하게 분산하는 것이 중요한 목표
입니다.Shard Key를 어떻게 정의하느냐에 따라 데이터를 효율적으로 분산시키는 것이 결정됩니다.
- Shard Key: Database id를 Hashing 하여 결정한다.
Hash 크기는 Cluster안에 있는 Node 개수로 정하게 된다.- 아주 간단한 Sharding 기법이다.
- Hash 크기가 변하게 되고 Hash Key 또한 변하게 된다.
- 그러면 기존에 있던 Hash Key에 따라 분배된 Data 분산 Rule이 다 어긋나게 되고, 결국엔 ReSharding이 필요하게 된다.
- Naming 그대로 Dynamic으로 바꿀 수 있다.
- Locator Service를 통해 Shard Key를 얻습니다.
Cluster가 포함하는 Node 개수를 늘려본다면 ?
- Locator Service에 Shard Key를 추가만 하면 됩니다.
- 기존의 Data의 Shard Key는 변경이 없습니다.
- 확장에 유연한 구조입니다.
Data Relocation을 하게 된다면 ?
Locator Service의 Shard Key Table도 일치시켜줘야 합니다.
Locator가 성능을 위해 Cache하거나 Replication을 하면 어떨까요 ?
- 잘못된 Routing을 통해 Data를 찾지 못하고 Error가 발생합니다.
- Locator에 의존할 수 밖에 없는 단점이 있습니다.