해쉬 클러스터링
해쉬 클러스터링은 어떤 의미에서는 클러스터링이라고 하기보다는 일종의 인덱스를 대신하는 개념으로 볼 수 있다.
테이블에 데이터를 정해진 위치에 저장한다는 입장에서 보면 클러스터링 개념이고, 원하는 값을 찾아간다는 입장에서
보면 일종의 인덱스 개념이라 할 수 있다.
개념은 매우 단순하다. 정의한 해쉬함수를 어떤 값이 저장된 위치를 찾을 수 있도록 저장하는 기법이다.
해쉬 클러스터링 특징
- SIZE, HASHKEYS, HASH IS 파라메터는 변경할 수 없다.
- '='로마 ㄴ엑세스해야 한다.
- 클러스터가 생성되면서 저장공간이 미리 할당된다.
- 지정된 단위 클러스터 보다 많은 로우가 들어오면 오버플로우(Overflow) 영역에 저장된다.
- 컬럼의 값이 고르게 분포되어 있지 않으면 해쉬키 값은 충돌(Collishion)이 발생한다.
- 인덱스를 경유하지 않고 해쉬 함수로 계산된 값으로 직접 테이블을 액세스 하므로 인덱스 보다 효율적인 액세스를 할 수 있다.
- 나머지 특징은 인덱스 클러스터와 거의 동일하다.
해쉬 클러스터링의 활용 범위
- 지속적으로 대량의 데이터가 증가하는 테이블에서는 적용하지 않는 것이 좋다. 클러스터키 칼럼의 분포가 일정하지 않은 편이기 때문이다. 해쉬키의 개수가 사전에 정의되어야 하면서도 변경이 불가능하며, 생성할 때 이미 저장공간을 확보하기 때문에 미리 대량의 HASHKEYS를 지정하는 것은 큰 부담이 된다.
- 내용적으로 항상 '='을 사용하는 경우에만 적용할 수 있다는 의미가 된다.
- 클러스터키 컬럼의 값이 균등한 분포를 하고 있는 경우가 아니라면 오버플로우가 발생하거나 키값의 충돌이 발생할 수 있다는 것은 해쉬 클러스터의 활용범위를 제한하는 또 하나의 중요한 특징이다.
- 각종코드를 관리하는 소형 테이블이나 우편번호, 시스템 사용자 정보를 관리하는 테이블에서 활용할 수 있다.
해쉬 클러스터의 정의
클러스터를 생성하는 방법
CREATE CLUSTER [schema.] cluster (column datatype -----------> 클러스터 명칭과 칼럼을 정의한다.
HASHKEYS integer ---------------------------------------------> 생성될 해쉬키 값의 개수
[HASH IS expression ] -------------------------------------------> 해쉬함수를 지정한다
[PCTFREE integer]
.........................
[SIZE integer [ K | M ] ] --------------------------------------------> 클러스터의 크기
해쉬 클러스터의 작동 원리
- 해시 함수 생성: 먼저, 데이터 클러스터링에 사용할 해시 함수를 정의합니다. 해시 함수는 입력 데이터를 고정된 길이의 해시 코드로 변환하는 함수이다.
- 데이터 클러스터링: 데이터 집합의 각 항목은 선택한 해시 함수를 사용하여 해시 코드로 변환되고 이 해시 코드를 기반으로 데이터는 서로 다른 클러스터로 분류된다 즉, 동일한 해시 코드를 가진 데이터 항목은 동일한 클러스터로 그룹화된다.
- 클러스터 검색: 클러스터링 후에는 원하는 데이터를 찾을 때 해당 데이터를 해시 함수를 사용하여 해시 코드로 변환한 후, 해당 해시 코드가 속한 클러스터로 바로 이동하여 검색을 수행할 수 있다. 이렇게 하면 데이터 검색 속도가 향상된다.
해쉬 클러스터링의 단점
- 해쉬충돌 : 해쉬 함수는 입력 데이터를 고정된 해시 코드로 매핑하기 때무에 두 개 이상의 다른 입력이 동일한 해쉬 코드로 매핑되는 경우가 발생할 수 있다. 해쉬 충돌이 발생하면 데이터가 정확하게 클러스터링 되지 않을 수 있다. 충돌이 잦은 경우에는 성능 저하가 발생한다.
- 데이터 분산 문제 : 입력 데이터의 분포에 따라 클러스터의 균형을 유지하기 어려울 수 있다.
- 데이터 변경 관리 : 데이터의 추가, 삭제 또는 수정에 대한 관리가 어려울 수 있다. 데이터가 변경될 때마다 클러스터링을 다시 수행해야 할 수도 있다.
- 고정된 클러스터 크기 : 일반적으로 클러스터 크기가 고정되어 있어야 한다. 데이터의 양이나 분포가 변하는 경우에는 클러스터 크기를 재조정해야 할 수 있다.
단일테이블 해쉬 클러스터(Singgle - table hash cluster)
해쉬 클러스터에서 말하는 단일 테이블 클러스터의 개념은 인덱스 클러스터에서 설명한 것과 유사하다. 원래 클러스터는 하나 이상의 테이블을 저장할 수 있는 개념으로 만들어졌으나 클러스터를 생성하면서 단 하나의 테이블만 정의하겠다는 약속을 한다면 여러 테이블이 존재할 수 있다는 가정을 제거할 수 있기 때문에 조금 더 효율적인 액세스가 가능하다.
'데이터베이스' 카테고리의 다른 글
함수기반 인덱스(FBI, Fuction-Baseed Index) (0) | 2023.09.21 |
---|---|
리버스 키 인덱스와 비트맵 인덱스 (1) | 2023.09.20 |
인덱스의 유형과 특징 (0) | 2023.09.20 |
클러스터링 테이블 (0) | 2023.09.17 |
log4j 보안 취약점 (0) | 2021.12.21 |