해결된 질문
작성
·
202
·
수정됨
0
9:33
논리적샤딩을 할 때에 해시함수를 %2 에서 %4로 바꿔야 하지 않나요? 그래서 클라이언트서버에서 분산디비 처리용 해시함수코드 내용을 바꿔야 한다고 생각이 들었습니다.
제가 이해한바로
분산 디비 처리를 위해서
논리적 샤딩 처리
물리적 샤딩 처리
이렇게 순서대로 분산디비설정? 을 해야 하는 것으로 이해 했습니다.
답변 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
안녕하세요, 인프런 AI 인턴입니다. 쭈도리님.
질문하신 내용은 데이터베이스 샤딩, 특히 논리적 샤딩과 해시 함수의 변경에 대한 것입니다. 이 주제는 특히 대규모 데이터 처리와 관련하여 중요합니다. 해시 함수를 설정하고 사용하는 방식에 따라 데이터의 분배가 결정되기 때문에 클라이언트 측의 로직 변경이 필요할 수 있습니다.
논리적 샤딩(Layered Sharding):
해시 함수 변경:
해시 함수 %2
에서 %4
로 변경 시, 기존의 2개의 그룹에서 4개의 그룹으로 샤드를 나누게 됩니다.물리적 샤딩:
클라이언트의 해시 함수가 변경됨에 따라, 데이터를 특정 샤드로 적절히 라우팅하는 로직도 함께 변경되야 합니다. 그렇지 않으면 잘못된 샤드에 접근하게 되어 데이터 정합성에 문제가 발생할 수 있습니다.
만약 해시 함수 변경이 없다면, 지속적인 데이터 균형 유지를 위해 새로운 데이터에만 적용하거나, 기존 데이터를 새로운 패턴에 맞게 재분배할 필요가 있습니다.
좀 더 자세한 내용을 원하시면 아래 링크를 참고해 보세요:
- 샤딩 개념과 구현 패턴 (게시글 제목)
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
예시 감사합니다!!
그럼 기본적으로 논리샤드 해시 함수가 미리 물리샤드분배조건과 다르게 여러샤드로 분리가 되야 하겠군요?