3. External Merge Sort
• Sorting Phase
• 메인메모리 단위의 작은 청크 데이터를 각각 정렬하고 다시 디스크
에 작성한다.
• Merge Phase
• 정렬된 메인메모리 크기 단위의 서브파일들을 하나의 단일 파일로
병합시킨다.
4. 2-Way External Merge Sort
• 파일은 N 페이지, DBMS 메모리 버퍼는 B 사이즈
• Pass #0
• 테이블의 매 B 페이지마다 read & sort & write
• 각 페이지에 대한 위 작업에 대한 결과를 ‘run’ 이라 정의
• Pass #1
• 재귀적으로 ‘run’ 의 쌍을 두배의 ‘run’ 으로 병합
• 위 작업은 총 3개의 버퍼 페이지를 사용하게 됨(2 inputs, 1 output)
7. General External MergeSort
• Pass #0
• B 버퍼 페이지를 사용한다
• N / B 개수로 B 크기의 정렬된 run 을 만든다.
• Pass #1, 2, 3, …
• B - 1 개수의 run 들을 병합시킨다.
8. General External MergeSort
• Example: N=108, B=5
• Pass #0: N=108 / B=5 = 하나당 5페이지 분량 22개의 run 들이 만들어진다. (마지막 run 은 3페이지만)
• Pass #1: N'=22 / B-1=4 = 하나당 20페이지 분량 6개의 run 들이 만들어진다. (마지막 run 은 8페이지만)
• Pass #2: N''=6 / B-1=4 = 각각 80페이지와 28페이지 분량 2개의 run 들이 만들어진다.
• Pass #3: 정렬된 108페이지의 단일 파일
• Number pf passes = 1 + (logB-1(N / B))
• Total I/O Cost = 2N * (# of passes)
10. Sorting Aggregation
• 만약 데이터가 정렬될 필요가 없다면?
• GROUP BY 로 Aggregation 시
• DISTINCT 로 중복 제거시
• 위 경우 해싱이 더 좋은 대안이다
• 연산 코스트가 정렬보다 더 저렴하다.
11. Hashing Aggregate
• DBMS 가 테이블을 스캔할 때, 일시적으로 해시 테이블을 채운다.
• 각 레코드의 해시가 이미 해시 테이블에 들어있는지 확인한다:
• DISTINCT: 중복 제거를 수행한다.
• GROUP BY: aggregation 을 진행한다.
• 만약 데이터가 메모리에 맞는 사이즈면 쉽지만 아니라면…