inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

Distributed Relational Database

논리적 샤드를 구분 할 때 클라이언트의 해시 함수변경에 대하여

해결된 질문

245

쭈도리

작성한 질문수 17

0

9:33
논리적샤딩을 할 때에 해시함수를 %2 에서 %4로 바꿔야 하지 않나요? 그래서 클라이언트서버에서 분산디비 처리용 해시함수코드 내용을 바꿔야 한다고 생각이 들었습니다.

제가 이해한바로

분산 디비 처리를 위해서

  1. 논리적 샤딩 처리

  2. 물리적 샤딩 처리

이렇게 순서대로 분산디비설정? 을 해야 하는 것으로 이해 했습니다.

샤딩

답변 2

1

쿠케

쭈도리님, 안녕하세요!

 

질문을 제대로 이해하지 못하였는데, 어느 단계에서 어떤 부분의 해시 함수를 바꿔야하는 것인지 말씀하신걸까요!?

 

논리적 샤드의 해시 함수와 물리적 샤드의 해시 함수는 독립적으로 동작할 수 있습니다.

논리적 샤드 개념이 물리적 샤드의 변경이 있더라도 클라이언트의 변경을 없애고자 하는거라,

물리적 샤드가 확장된다고 해도 논리적 샤드는 변경될 필요가 없습니다.

 

아래 예시로 이해가 되실지 싶어서 남겨봅니다!

 

  • 논리적 샤드가 4개라면, 논리적 샤드를 위한 해시 함수는 %4이고, 이 작업은 Client에 의해 처리

  • 물리적 샤드가 2개라면, 물리적 샤드를 위한 해시 함수는 %2이고, 이 작업은 Shard Router에 의해 처리

  • 데이터가 8개 있다고 가정하자.

 

Client 관점에서의 데이터는 아래와 같다. (논리적 샤드 해시 함수 적용)

논리샤드1 = [0, 4]

논리샤드2 = [1, 5]

논리샤드3 = [2, 6]

논리샤드4 = [3, 7]

 

Shard Router 관점에서의 데이터는 아래와 같다. (물리적 샤드 해시 함수 적용)

물리샤드1 = [0, 2, 4, 6] // 논리샤드 1, 3 매핑

물리샤드2 = [1, 3, 5, 7] // 논리샤드 2, 4 매핑

 

Client가 5번 데이터를 넣는다면, Client 관점에서는 논리샤드2번(%4)에 데이터가 들어가있지만,

Shard Router 관점에서는 물리샤드1번(%2)으로 데이터가 들어가 있다.

Client는 물리샤드가 무엇인지도 모르고, 알 필요도 없다. 논리샤드만 바라본다.

물리샤드는 Shard Router가 결정해준다.

 

이후에 물리적 샤드를 4개로 변경한다면?

 

Client 관점에서의 데이터는 아래와 같다. (이전과 동일)

논리샤드1 = [0, 4]

논리샤드2 = [1, 5]

논리샤드3 = [2, 6]

논리샤드4 = [3, 7]

 

Shard Router 관점에서의 데이터는 아래와 같다.

물리샤드1 = [0, 4] // 논리샤드 1 매핑

물리샤드2 = [1, 5] // 논리샤드 2 매핑

물리샤드3 = [2, 6] // 논리샤드 3 매핑

물리샤드4 = [3, 7] // 논리샤드 4 매핑

 

논리적 샤드 개수는 변화가 없었기 때문에 Client 관점에서는 여전히 논리적 샤드 해시 함수 %4 연산을 수행한다.

물리적 샤드가 확장되었는지 알지도 못하고, 알 필요도 없다.

물리적 샤드 개수는 변화가 생겼기 때문에 %2에서 %4 연산을 수행해야 한다.

물리적 샤딩을 처리하는 Shard Router의 해시 함수는 %4로 바뀌고, 논리적 샤딩을 처리하는 Client의 해시 함수는 여전히 %4다.

이 라우팅은 Shard Router에 의해 처리된다.

물리적 샤드의 확장으로 데이터는 균등하게 분산되었지만, Client가 바라보는 논리적 샤드의 변화는 없었다.

 

혹시 이해 안되는 점 있으시면 편히 문의 주세요!

0

쭈도리

예시 감사합니다!!
그럼 기본적으로 논리샤드 해시 함수가 미리 물리샤드분배조건과 다르게 여러샤드로 분리가 되야 하겠군요?

1

쿠케

네, 맞습니다!

논리 샤드는 물리 샤드보다 더 많은 개수를 잡아둬야 확장이 유연해지므로,

"1개의 물리 샤드"는 "1개 이상의 논리 샤드"와 매핑될 수 있습니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 쭈도리님.

질문하신 내용은 데이터베이스 샤딩, 특히 논리적 샤딩과 해시 함수의 변경에 대한 것입니다. 이 주제는 특히 대규모 데이터 처리와 관련하여 중요합니다. 해시 함수를 설정하고 사용하는 방식에 따라 데이터의 분배가 결정되기 때문에 클라이언트 측의 로직 변경이 필요할 수 있습니다.

논리적 샤딩과 해시 함수

  1. 논리적 샤딩(Layered Sharding):

    • 데이터를 여러 논리적 그룹으로 나누고, 각 그룹을 특정 조건에 따라 물리적 샤드로 보내는 기법입니다.
    • 해시 함수는 이러한 논리적 그룹을 나누는 기준으로 사용될 수 있습니다.
  2. 해시 함수 변경:

    • 해시 함수 %2 에서 %4 로 변경 시, 기존의 2개의 그룹에서 4개의 그룹으로 샤드를 나누게 됩니다.
    • 이로 인해 데이터의 분배 방법이 달라지기 때문에, 클라이언트 내에서 이 함수를 사용하는 코드를 반드시 업데이트해야 합니다.
    • 해시 함수는 클라이언트 또는 미들웨어에서 데이터 요청 시, 올바른 샤드로 요청을 보내기 위해 사용됩니다.
  3. 물리적 샤딩:

    • 논리적 샤드가 결정된 후, 이들 논리적 샤드를 실제 물리적 서버에 매핑합니다.
    • 이는 데이터의 물리적 저장소를 관리하고, 논리적 샤드의 확장 가능성을 제공하는 역할을 합니다.

클라이언트의 해시 함수 변경 이유

  • 클라이언트의 해시 함수가 변경됨에 따라, 데이터를 특정 샤드로 적절히 라우팅하는 로직도 함께 변경되야 합니다. 그렇지 않으면 잘못된 샤드에 접근하게 되어 데이터 정합성에 문제가 발생할 수 있습니다.

  • 만약 해시 함수 변경이 없다면, 지속적인 데이터 균형 유지를 위해 새로운 데이터에만 적용하거나, 기존 데이터를 새로운 패턴에 맞게 재분배할 필요가 있습니다.

좀 더 자세한 내용을 원하시면 아래 링크를 참고해 보세요:
- 샤딩 개념과 구현 패턴 (게시글 제목)

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

실행과정 질문입니다.

2

36

1

수업 잘 들었습니다.

2

30

2

환경설정 문

2

27

2

맥유저 입장의 고려해주세요

2

88

1