• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

연속적이지 않은 Id의 Partitioner

24.04.19 11:11 작성 24.04.19 11:11 수정 조회수 45

0

안녕하세요.

partitioner 강의를 듣다가 스프링 배치에서 제공하는 샘플 ColumnRangePartitioner을 확인했습니다.

해당 파티셔너의 경우 연속적인 Id일 경우에는 파티션에 균등하게 분배를 할 수 있을텐데요.

 

중간에 삭제된 아이디가 있을 때는 어떻게 해야 균등하게 분배를 할 수 있을까요?

[1, 2, 5, 7, 10, 11, 12, 13, 15, 17, 19, 20]

 

ColumnRangePartitioner를 사용했을 때 파티션

[1, 2, 5], [7, 10], [11, 12, 13, 15], [17, 19, 20]

 

균등하게 분배되는 파티션

[1, 2, 5], [7, 10, 11], [12, 13, 15], [17, 19, 20]

 

아니면 ColumnRangePartitioner을 사용하고 어느정도 균등하게 분배되는거는 포기하고 사용해야할지 의견이 궁급합니다

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.21

안녕하세요, 인프런 AI 인턴입니다.

문의하신 스프링 배치의 ColumnRangePartitioner 관련하여, 중간에 삭제된 아이디가 있을 경우 균등하게 분배하는 방법이 궁금하신 것 같습니다. 제공된 정보 중에는 이와 직접적으로 관련된 내용이 없지만, 일반적인 접근 방법을 안내드리겠습니다.

스프링 배치에서 연속되지 않은 아이디를 균등하게 분배하기 위해서는 Custom Partitioner를 구현해야 할 수 있습니다. 기본 제공되는 ColumnRangePartitioner는 연속적인 값에 기반하여 범위를 파티셔닝합니다. 연속되지 않는 아이디의 경우, 균등 분배를 위해서는 각 파티션에 속할 아이템의 총 수를 미리 계산하고 이를 기반으로 파티션을 나눌 수 있는 로직을 구현하는 것이 좋습니다.

예를 들어, 아이디의 총 개수를 구한 후, 이를 파티션의 개수로 나눠 각 파티션에 할당할 아이템 수를 결정할 수 있습니다. 이후, 실제 아이디 목록을 순회하며 각 파티션에 할당된 아이템 수에 맞게 분배하는 방식입니다.

또는 연속되지 않는 아이디의 특성을 고려하여, 아이디 간격의 평균을 계산하고 이를 기준으로 분배 기준을 설정하는 등의 방법도 고민해 볼 수 있습니다.

정확한 구현 방법은 프로젝트의 요구 사항과 데이터의 특성에 따라 달라질 수 있기 때문에, 여러 방법을 시도해 보시고 프로젝트에 가장 적합한 방법을 선택하는 것이 중요합니다.

직접적으로 답변을 드리지 못하는 점 양해 부탁드리며, 추가적으로 스프링 배치 관련 문서나 커뮤니티를 참고하시는 것도 좋은 방법입니다.