1. 초기화 시 고정적으로 번호가 매겨진 문자열은 세그먼트 수 x 링 컷 수 n 으로 생성됩니다 (예: SHARD- 1-NODE- 1). 모든 x x n 개 문자열의 모든 해시 값을 계산합니다
2. 계산된 모든 해시 값을 정렬 맵에 배치하고 그 안의 모든 요소를 정렬합니다.
3. 문자열을 입력할 때 입력 문자열의 해시 값을 계산하고, 해시 값이 어느 두 요소 사이에 있는지 확인하고, 해시 값보다 작은 요소에 해당하는 조각을 데이터 조각으로 선택합니다.
점프법 원리는 1 입니다. 공식에 따라 다음을 수행합니다.
데이터가 각 노드에 떨어질 확률은 균등하게 분산됩니다.
2. 입력 문자열의 해시 값을 계산하여 생성된 의사 무작위 값이 현재 결정된 노드 1/x 보다 작은지 확인하고 마지막으로 번호가 가장 큰 캡처 노드를 데이터 폐기 지점으로 사용합니다. 3. 실제 사용에서는 역쉬운 방법을 사용하여 최대 노드 값에서 역판단을 하고, 생성된 의사 무작위 값이 X 보다 크면 이 노드 X 를 데이터 낙점으로 판단합니다.
데이터 비교
다음은 링과 점프법의 성능과 균형을 실험해 보고, 왜 DBLE 가 링 대신 점프법을 사용하는지 설명하겠습니다.
출처: 350595 개의 현장 데이터.
테스트 후:
1. 자체 테스트 방법을 통해 테스트 데이터를 슬라이스하는 작업을 수행합니다.
테스트 방법: 분할 결과의 분산을 기록하십시오. 슬라이스 시작부터 슬라이스 끝까지의 시간을 기록합니다. 분할 결과와 평균 간의 최대 차이를 기록합니다.
3. PartitionByString 메서드에서는 조각 수가 1024 인 요소가 필요하기 때문에 테스트 프로세스는 2 의 지수로만 테스트할 수 있으며 PartitionByString 방법을 테스트할 때 MAC 주소를 자르지 않고 전체 길이를 사용하여 테스트할 수 있습니다.