본 발명은 다양한 변환을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 상세한 설명에 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변환, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 본 발명을 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 본 발명의 요지를 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다.
제1, 제2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것 으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
이하, 본 발명의 실시예를 첨부한 도면들을 참조하여 상세히 설명하기로 한다.
본 발명의 실시예에 따른 모바일 센싱 로봇은 한정된 저장 공간을 구비하며, 한정된 저장 공간을 데이터 특성에 맞춰 복수의 영역으로 분할한 후 확장 해싱을 기반으로 데이터를 관리(예를 들어, 저장, 삭제, 검색 등)할 수 있다.
본 발명의 실시예에 따른 데이터 레코드들은 별도의 데이터 영역에 저장되고, 해시 버킷에는 데이터 레코드에 대한 엔트리(즉, 시각 정보, 데이터 블록 아이디(ID)및 블록내 위치(offset))가 저장된다. 즉, 전술한 바와 같이 저장 공간은 인덱스 영역과 데이터 영역으로 구분된다. 여기서, 인덱스 영역은 해시 디렉토리와 해시 버킷이 저장되는 공간이며, 데이터 영역은 데이터 레코드들이 저장되는 공간이다.
본 발명의 실시예에서는전체 저장 공간의 블록 수가 미리 설정되며, 이로부터 해시 디렉토리(directory)의 블록 수, 해시 버킷(bucket)의 블록 수 및 데이터 영역의 블록 수를 계산한다. 그리고, 이에 따라 데이터는 정해진 공간에 맞추어 저장된다. 정해진 저장 공간이 모두 사용되면, 신규 저장 공간의 확보를 위해 데이터를 삭제하지 않고, 오래된 데이터부터 신규 데이터로 덮어쓰는 방식을 통해 신규 데이터를 저장한다. 이를 위해, 본 발명의 실시예에 따른 데이터 영역의 데이터 블록들은 환형 리스트(circular list) 구조로 연결된다. 즉, 환형으로 연결된(처음 블록을 마지막 블록의 다음 블록으로 간주함) 데이터 블록들에 대하여 데이터 레코드들을 순차적으로 저장하며, 데이터 블록들의 저장 공간을 모두 사용하게 되면 가장 오래된 데이터 레코드를 새로운 데이터 레코드로 대체하는 방식으로 환형 리스트를 이동하며 새로운 데이터를 저장할 수 있다.
한편 본 명세서에서의블록(block)은 저장 공간의 기본 단위로 일정 크기의 저장 공간(예를 들어 1 Kbyte, 4 Kbytes, 16 Kbytes 등)을 나타내며, 저장 장치에 따라 페이지(page) 등의 용어를 사용하기도 한다. 따라서 본 명세서의 블록은 경우에 따라 페이지 등의 용어로 대체하여 사용하여도 무방하다.
환형 리스트를 구현하는 방법은 이미 공지되어 있으며, 다양하다. 따라서, 환형 리스트의 구현은 공지된 방법 중 어느 하나가 사용될 수 있다. 예를 들면, 환형 리스트를 연결하기 위해 포인터가 사용될 수도 있으며, 블록의 번호(아이디)들로 환형 리스트가 만들어질 수도 있다. 만일 저장 공간의 연속된 블록들이 사용된다면, 어느 블록이든지 다음 블록의 번호(아이디)는 모듈로(modulo) 연산에 의해 알 수 있다.
또한, 해시 버킷의 엔트리들도 환경 리스트 구조로 유지되고(처음 엔트리 공 간을 마지막 엔트리 공간의 다음 엔트리 공간으로 간주함), 버킷의 엔트리 공간을 모두 사용하게 되면 오래된 엔트리는 신규 엔트리로 대체된다. 해시 버킷의 엔트리는 해당 엔트리가 인덱싱하는 데이터 레코드에 대한 시각 정보(timestamp)와 위치(블록 아이디, 블록내 위치)를 저장한다. 따라서, 해시 버킷의 엔트리에 저장된 시각 정보를 이용하여 해당 데이터 레코드가 획득된 시각을 알 수 있다. 또한, 데이터 레코드가 획득된 순서대로 시각 정보가 증가하므로 해시 버킷에는 엔트리들이 시각 정보 순으로 순차적으로 저장될 수 있으며, 저장 공간을 모두 사용하게 되면 가장 오래된 엔트리에 덮어 쓰는 방식으로 환형 리스트를 이동하며 저장할 수 있다.
또한 각 버킷은 다음에 엔트리가 저장될 위치를 가리키는 포인터를 가질 수 있다. 여기서 해당 버킷의 엔트리 저장 위치에 대한 포인터는 해당 버킷에 빈 공간이 존재할 경우는 다음에 엔트리가 저장될 빈 공간의 위치를 나타내고, 만일 빈 공간이 존재하지 않을 경우(버킷의 엔트리 공간이 모두 사용된 경우)에는 해당 버킷에서 가장 오래된 엔트리에 대한 포인터일 수 있다. 그리고, 환형 리스트는 배열 형태이므로 환형 리스트를 위한 포인터는 필요하지 않다.
[도 1 설명]
도 1은 본 발명의 실시예에 따른 데이터 영역의 블록 및 인덱스 영역의 디렉토리 블록과 해시 버킷의 블록을 예시한 도면이다.
도 1의 (a)는 데이터 영역의 블록을 예시한 것으로, 데이터 블록은 각각 블 록 아이디(식별번호)를 가지며, 전술한 바와 같이, 처음 데이터 블록과 마지막 데이터 블록이 환형 리스트로 연결된 구조이다. 도 1의 (a)는 리스트의 연속된 데이터 블록들(어느 블록과 그 다음 블록)을 저장 공간 상에서 인접한 것으로 도시하였으나, 연속된 블록들은 저장 공간에서 인접될 수도 있고, 인접되지 않을 수도 있다. 즉, 리스트의 연속된 블록들은 논리적으로는 연속되지만 물리적으로는 구현 방법에 따라 인접될 수도 있고 인접되지 않을 수도 있다.
도 1의 (b) 내지 (d)는 디렉토리가 확장되는 과정을 도시한 것이다.
도 1의 (b)는 해시 버킷과 디렉토리 블록의 자료 구조를 예시한 것으로, 해시 버킷은 데이터 블록의 레코드에 대한 엔트리(미도시, 즉, 시각 정보, 데이터 블록 아이디 및 블록내 위치)들을 갖는다. 여기서, 데이터 블록 아이디는 데이터 블록의 식별번호이고, 블록내 위치는 해당 블록에서의 데이터 레코드의 위치(offset)를 나타낸다.
또한, 도 1의 (b)에는 도시되어 있지 않으나, 해시 버킷의 엔트리들은 환형 리스트 구조로써 연결된다. 이에 따라 해시 버킷의 오래된 엔트리는 새로운 엔트리로 대체될 수 있다(즉, 덮어 쓰여질 수 있다). 여기서, 환형 리스트는 배열의 형태로 구성되므로 환형 리스트를 위한 포인터는 필요하지 않다.
[도 2 설명]
도 2는 본 발명의 실시예에 따른 해싱 기반의 데이터를 저장하는 방법을 나타낸 순서도이다. 이하에서 설명되는 각각의 단계는 저장 장치의 내부 구성 요소에 의해 수행되나 이해와 설명의 편의를 도모하기 위해 저장 장치로 통칭하여 설명하기로 한다. 여기서, 저장 장치는 한정된 저장 공간을 구비한 장치일 수 있다.
단계 210에서 저장 장치는 저장 공간을 복수의 영역으로 분할한다.
보다 상세하게, 저장 장치는 저장 공간을 데이터 영역과 인덱스 영역으로 분할할 수 있다. 이하에서 저장 공간의 데이터 영역의 크기 및 인덱스 영역의 크기를 계산하는 방법에 대해 상세히 설명하기로 한다.
이하에서는 사용할 수 있는 저장 공간의 블록들의 수가 일정한 크기(예를 들어, 1,024, 2,048 등)로 정해져 있는 경우 데이터 영역 및 인덱스 영역의 크기를 결정하는 방법에 대해 설명하기로 한다.
또한, 최대 저장 공간은 전체 블록의 수로 주어지며, 저장 공간은 전술한 바와 같이, 데이터 영역과 인덱스 영역으로 구분된다.
일반적으로 해시 버킷의 크기, 디렉토리 블록의 크기, 데이터 블록의 크기는 모두 동일하게 설정된다(예를 들어, 해시 버킷의 크기, 디렉토리 블록의 크기, 데이터 블록의 크기는 1 Kbyte, 4 Kbytes, 16 Kbytes 등으로 설정될 수 있다). 이에 따라, 본 명세서에서도 해시 버킷의 크기, 디렉토리 블록의 크기, 데이터 블록의 크기가 모두 동일하게 설정되는 것을 가정하여 설명하기로 한다. 물론, 시스템에 따라 해시 버킷의 크기, 디렉토리 블록의 크기, 데이터 블록의 크기는 각각 상이하게 설정될 수도 있음은 당연하다. 또한 본 명세서에서는 하나의 버킷은 하나의 블록으로 구성되는 것으로 가정하여 설명한다. 물론 하나의 버킷은 여러 개여 블록들로 구성될 수도 있음은 당연하다.
전체 블록의 수는 전술한 바와 같이 미리 주어진다. 전체 블록의 수는 하기 수학식 1과 같이 데이터 영역의 블록의 수와 인덱스 영역의 블록 수의 합일 수 있다.
여기서, Bf는 데이터 영역의 크기(즉, 데이터 영역의 블록 수)를 나타내고, Bh는 인덱스 영역의 크기(즉, 인덱스 영역의 블록 수)를 나타낸다.
확장 해싱의 공간은 해시 버킷 공간과 해시 디렉토리 공간으로 구분되므로, 인덱스 영역의 블록 수는 하기 수학식 2와 같이 표현될 수 있다.
여기서, Bb는 해시 버킷의 블록 수를 나타내고, Bd는 해시 디렉토리 블록 수를 나타낸다.
디렉토리 블록의 수는 해시 버킷의 블록의 수와 디렉토리 블록의 수의 관계를 이용하여 표현될 수 있다. 예를 들어, 확장 해싱의 경우, 해시 버킷에 오버플로가 발생할 경우, 해싱 버킷이 추가되는 과정에서 디렉토리 엔트리 수가 20일 때, 해시 버킷의 수는 최소 1개이다.
그리고, 도 1의 (b) 내지 (d)에 도시된 것처럼 디렉토리 엔트리 수가 21인 경우, 해시 버킷의 수는 최소 2개이고, 디렉토리 엔트리 수가 22일 때, 해시 버킷의 수는 최소 3개이며, 디렉토리 엔트리 수가 2j일 때, 해시 버킷의 수는 최소 (j+1)개이다.
확장 해싱에서 해시 버킷에 오버플로가 발생할 경우, 해시 버킷이 추가되는 과정에서 디렉토리 엔트리 수와의 관계를 순환 관계식(recursive relation)으로 표현하면, 다음과 같다.
n(2j)은 디렉토리 엔트리 수가 2j일 때, 필요한 최소의 해시 버킷의 수를 나타낸다.
n(20) = 1
n(21) = n(20) + 1 = 2
n(22) = n(21) + 1 = 3
n(23) = n(22) + 1 = 4
…
n(2j-1) = n(2j-2) + 1 = j
n(2j) = n(2j-1) + 1 = j + 1
즉, n(2j) = j + 1이 됨을 알 수 있다.
결과적으로, 디렉토리 엔트리 수가 2j 인 경우, 최소 필요한 버킷의 수가 (j + 1)개임을 알 수 있다.
이와 같은 예가 도 1의 (b) 내지 (d)에 도시되어 있다. 도 1의 (b) 내지 (d)에서 디렉토리 옆에 표시된 괄호 안의 숫자는 해당 디렉토리에서 사용되는 비트 수를 나타내고, 버킷의 옆에 표시된 괄호 안의 숫자는 해당 버킷을 식별하기 위해 사용되는 비트 수를 나타낸다.
이를 통해 해시 버킷의 수가 (j + 1)일 때, 최대 디렉토리 엔트리 수는 2j이고, 이때 필요한 해시 키의 비트 수는 j임을 알 수 있다.
이에 따라, 디렉토리 블록의 수는 하기 수학식 3과 같이 표현될 수 있다.
여기서,
는 버킷의 블록의 수가 Bb개일 때 필요한 최대 디렉토리 엔트리의 수를 나타내고, Nd는 블록당 최대 디렉토리 엔트리의 수를 나타낸다.
또한,
이다. 여기서, Ed는 디렉토리 엔트리의 크기를 나타내고, B는 블록의 크기를 나타낸다. 각각의 단위는 바이트이다.
수학식 3은 디렉토리 블록의 수(Bd)와 버킷 블록의 수(Bb)의 관계를 나타내며, B와 Ed는 사전에 설정되는 값이다.
이어, 해시 버킷의 블록 수는 하기 수학식 4와 같이 표현될 수 있다.
여기서, Nr은 블록당 최대 데이터 레코드의 수를 나타내고, Nb는 블록당 최대버킷 엔트리의 수를 나타낸다. 그리고, Bf는 데이터 영역의 블록의 수를 나타낸다.
또한,
이다. 여기서, R은 데이터 레코드의 크기(바이트)를 나타낸다.
또한,
이다. 여기서, Eb는 버킷 엔트리의 크기(바이트)를 나타낸다.
최대 버킷 엔트리의 수는 최대 데이터 레코드의 수(Bf X Nr)와 같음을 알 수 있다. 또한, loadfactor(f)는 버킷에 엔트리들을 평균적으로 채우는 비율(즉, 평균 적재 비율)을 나타낸다.
예를 들어, 평균적으로 버킷의 블록당 최대 엔트리 수(Nb)의 80%를 적재한다고 가장하면, loadfactor(f)는 0.8이 된다.
수학식 3은 버킷 블록의 수(Bb)와 데이터 영역의 블록 수(Bf)의 관계를 나타내며, B, R, Eb, loadfactor(f)는 사전에 설정되는 값이다.
따라서, 전체 블록의 수가 주어지면, 데이터 영역의 블록 수, 해시 버킷의 블록 수, 디렉토리 블록 수는 수학식 1 내지 4를 이용하여 산출될 수 있다.
따라서, 데이터 영역과 인덱스 영역의 크기가 결정될 수 있다.
즉, 저장 장치는 결정된 데이터 영역과 인덱스 영역의 크기에 따라 저장 공간을 데이터 영역과 인덱스 영역으로 분할할 수 있다.
단계 215에서 저장 장치는 저장할 데이터에 대한 데이터 레코드를 데이터 영역의 블록에 저장한다. 여기서, 데이터 레코드는 저장할 데이터가 획득된 시각정보 및 저장할 데이터(즉, 필드들의 값)일 수 있다.
예를 들어, 저장 장치가 모바일 센싱 로봇이라고 가정 할 경우, 저장할 데이터는 센싱 로봇에 의해 센싱된 센싱 데이터일 수 있다. 이에 따라, 데이터 레코드는 해당 센싱 데이터가 획득된 시각정보와 센싱 데이터(예를 들어, 온도, 습도, 조도 등의 값)로 구성될 수 있다.
단계 220에서 저장 장치는 데이터 영역의 저장 위치 포인터를 갱신한다.
여기서, 저장 위치 포인터는 다음 데이터 레코드가 저장될 저장 위치를 표시한다. 저장 위치 포인터는 (블록 아이디, 블록내 위치(offset), 대체 후보 시각 정보) 필드들로 구성된다. 즉, 저장 위치 포인터는 다음 레코드가 저장되는 위치를 표시하며, 블록 아이디(식별 번호)에 해당되는 블록의 블록내 위치(offset)를 나타낸다. 대체 후보 시각 정보는 데이터 영역의 블록들에 저장된 가장 오래된 레코드의 시각 정보이며, 저장 공간을 모두 사용한 경우에 가장 오래된 레코드를 새로운 레코드로 대체하기 위해 사용된다. 만일, 저장 공간을 모두 사용하여 새로운 데이터 레코드를 저장할 여유 공간이 없는 경우, 대체 후보 시각 정보는 데이터 블록 아이디에 해당되는 블록에 저장된 가장 오래된 데이터 레코드의 시각 정보이며, 데이터 영역의 블록에 데이터가 모두 기록되어 빈 공간이 없는 경우, 대체할 데이터 레코드에 해당되는 시각 정보를 나타낸다. 물론, 저장 공간에 빈 공간이 남아있을 때도 대체 후보 시각 정보는 데이터 영역에서 가장 오래된 레코드의 시각 정보를 나타낸다.
전술한 바와 같이, 데이터 영역의 블록은 첫번째 데이터 블록과 마지막 데이터 블록이 환형 리스트 구조로 순차적(sequential)으로 연결되어 있다. 또한 블록 내에서도 데이터 레코드들이 순차적(sequential)으로 저장된다. 이에 따라, 마지막 데이터 블록까지 데이터 레코드가 모두 기록된 경우, 다시 처음 데이터 블록부터 데이터 레코드가 기록될 수 있다. 즉, 저장 장치는 가장 오래된 데이터 레코드를 신규 데이터 레코드로 덮어써서 대체할 수 있다. 이때, 대체 후보 시각 정보는 데이터 영역의 블록에서 가장 오래된 데이터 레코드의 시각정보로 다음에 덮어쓸 레코드를 표시한다.
즉, 저장 장치는 데이터 블록에 빈 공간이 없으면, 저장 위치 포인터의 대체 후보 시각 정보에 상응하는 레코드를 신규 레코드로 대체한 후 대체 후보 시각 정 보를 데이터 블록에서 가장 오래된(즉, 삭제된 레코드 다음으로 오래된) 데이터 레코드의 시각 정보로 갱신한다. 이어, 저장 장치는 갱신된 대체 후보 시각 정보에 상응하는 데이터 레코드가 속해있는 데이터 블록이 변경된 경우 데이터 블록 아이디를 갱신한다. 또한, 저장 장치는 블록내 위치를 대체 후보 시각 정보에 상응하는 해당 레코드의 위치(offset)로 갱신한다.
한편, 데이터 블록에 빈 공간이 존재하는 경우, 저장 장치는 저장 위치 포인터가 가리키는 블록의 해당 위치에 신규 데이터 레코드를 저장한다. 그리고, 저장 장치는 저장 위치 포인터의 블록 아이디와 블록내 위치를 데이터 레코드가 다음에 저장될 블록의 위치에 상응하여 변경한다. 이와 같이, 신규 데이터 레코드가 빈 공간에 저장되는 경우에는 대체 후보 시각 정보는 변경되지 않는다. 즉, 가장 오래된 데이터 레코드가 변경되지 않는다.
단계 225에서 저장 장치는 미리 설정된 해시 함수를 이용하여 삽입한 데이터 레코드에 대한 유사키를 생성한다. 즉, 데이터 레코드에서 인덱스 구성을 위해 키로 설정된 하나 이상의 필드의 키값을 해싱 함수의 입력으로 하여 유사키(해싱 함수의 출력)를 생성한다. 여기서, 저장 장치는 생성된 유사키의 처음 비트부터(또는 마지막 비트부터 역순으로) 디렉토리가 사용하는 비트 수만큼의 비트 위치까지의 비트들을 이용하여 디렉토리에서 버킷 주소를 탐색한다. 확장 해싱에서 유사키를 이용하여 디렉토리로부터 해당 버킷을 검색하는 것은 공지의 기술이므로 이를 사용할 수 있다. 또한 해시 함수는 일반적으로 사용되는 해시 함수들을 이용할 수 있다. 즉, 이미 공지된 해시 함수들 중에서 성능이 좋은 해시 함수를 선택하여 이용 할 수 있다.
단계 230에서 저장 장치는 검색된 해시 버킷에 빈 공간이 있는지 여부를 판단한다.
만일 검색된 해시 버킷에 빈 공간이 있으면, 단계 235에서 저장 장치는 최근의 시각 정보를 갖는(즉, 가장 최근에 저장된) 엔트리의 다음 엔트리로 데이터 레코드에 대한 엔트리(즉, 시각 정보, 데이터 블록 아이디, 블록내 위치)를 저장한다.
그러나, 만일 검색된 해시 버킷에 빈 공간이 없는 경우, 단계 240에서 저장 장치는 미사용된 버킷이 존재하는지를 판단한다.
만일 미사용된 버킷이 존재하는 경우, 단계 245에서 저장 장치는 미사용된 버킷을 하나 할당받아 기존의 버킷을 2개로 분할하고, 해당 버킷(분할된 버킷들 중에서 신규 레코드의 엔트리가 저장될 버킷)에 신규 데이터 레코드에 대한 엔트리를 저장한다.
이로 인해, 결과적으로 해시 디렉토리가 확장될 수 있다. 해시 버킷 분할 및 해시 디렉토리를 확장하는 방법은 확장 해싱의 일반적인 방법으로 당업자에게는 자명하므로 별도의 설명은 생략하기로 한다.
그러나 만일 미사용된 버킷이 존재하지 않는 경우에는 단계 250에서 저장 장치는 오버플로 처리를 수행한다. 이에 대해서는 도 5에서 설명하기로 한다.
[도 3 설명]
도 3은 본 발명의 실시예에 따른 데이터를 대량 반납하는 방법을 나타낸 순서도이다.
단계 310에서 저장 장치는 반납이 필요한 데이터 블록의 수를 결정한다.
예를 들어, 저장 장치는 외부로부터 반납이 필요한 데이터 블록의 수를 입력받아 결정할 수 있다. 이하에서는 반납이 필요한 데이터 블록의 수를 반납 블록 개수라 칭하여 설명하기로 한다.
단계 315에서 저장 장치는 가장 오래된 순으로 반납 블록 개수에 상응하는 개수의 블록들의 다음 블록의 가장 오래된 시각 정보로 저장 위치 포인터의 대체 후보 시각 정보를 변경한다. 즉, 저장 장치는 가장 오래된 순으로 반납 블록 개수만큼의 블록들을 반납한다.
이어, 단계 320에서 저장 장치는 저장 위치 포인터의 데이터 블록 아이디를 변경된 대체 후보 시각 정보에 상응하는 데이터 블록 아이디로 변경한다. 또한, 저장 장치는 변경된 대체 후보 시각 정보에 상응하는 데이터 레코드의 블록내 위치(offset)로 저장 위치 포인터의 블록내 위치를 갱신한다.
단계 325에서 저장 장치는 대체 후보 시각 정보보다 오래된 시각 정보를 포함하는 데이터 레코드들을 저장한 반납 블록 개수의 데이터 블록들에 대해 반환 처리한다.
이에 따라, 데이터 레코드들은 삭제 연산 없이, 가장 오래된 데이터 블록으로부터 반납 블록 개수만큼 반납된다.
물론, 백업이 필요한 경우, 반납되는 데이터 블록의 데이터 레코드들이 백업 될 수도 있음은 당연하다.
이 과정에서 인덱스 영역(해시 디렉토리 블록, 해시 버킷 블록)은 전혀 수정이 가해지지 않는다. 데이터 블록의 대체 후보 시각 정보보다 오래된 시각 정보에 상응하는 버킷 엔트리는 반납된 데이터 레코드를 가리키므로 무시된다. 즉, 대체 후보 시각 정보 이후의 시각 정보에 상응하는 버킷 엔트리들만 적합한 엔트리로 인식된다. 여기서, 대체 후보 시각 정보보다 오래된 시각 정보에 상응하는 엔트리의 경우, 신규 엔트리들이 덮어쓰게 된다.
물론, 구현 방법에 따라 저장 장치는 버킷의 적합하지 않은 엔트리들을 정리할 수도 있다. 이로 인해, 일정 크기 이하의 버킷들은 통합될 수도 있다. 이는 해당 저장 장치에 로드가 적은 시간에 처리될 수 있다.
이와 같이, 데이터 블록이 반납된 경우, 저장 장치는 새로운 데이터 블록의 수에 따라 인덱스 영역의 크기를 다시 설정할 수도 있다. 이와 같은 경우, 도 1에서 설명한 방법에 의해 인덱스 영역의 크기를 다시 설정할 수 있으며, 이에 따라 확장 해싱 인덱스를 새로 구성할 수 있다. 이미 전술한 바와 동일하므로 중복되는 설명은 생략하기로 한다.
[도 4 설명]
도 4는 본 발명의 실시예에 따른 데이터 레코드를 검색하는 방법을 나타낸 순서도이다.
단계 410에서 저장 장치는 레코드 검색 명령과 검색할 레코드를 위한 키 값 (이하에서는 검색 키 값이라 칭함)을 제공받는다. 여기서, 검색 키는 확장 해싱 인덱스의 유사키를 생성하기 위해 설정된 하나 이상의 필드의 데이터 레코드의 키와 동일한 키이다.
단계 415에서 저장 장치는 미리 설정된 해시 함수를 이용하여 검색 키 값으로부터 유사키를 생성한다. 여기서, 해시 함수는 도 2의 데이터 저장을 위해 사용된 해시 함수와 동일하다.
단계 420에서 저장 장치는 유사키를 이용하여 검색 비트를 추출한다.
예를 들어, 저장 장치는 디렉토리에 설정된 비트 수만큼의 비트를 유사키의 처음 비트부터(또는 마지막 비트부터) 추출한다.
단계 425에서 저장 장치는 추출된 검색 비트를 이용하여 디렉토리를 검색하여 버킷 주소를 찾는다.
단계 430에서 저장 장치는 검색된 버킷 주소에 상응하는 버킷내에서 엔트리들을 탐색하여 검색할 데이터 레코드의 엔트리를 찾는다.
그리고, 이를 이용하여 단계 435에서 저장 장치는 검색할 데이터 레코드에 상응하는 데이터 블록의 아이디 및 블록내 위치를 인식하여 해당 데이터 레코드를 검색할 수 있다. 전술한 바와 같이 검색 과정에서 저장 위치 포인터의 대체 후보 시각 정보보다 오래된 시각 정보를 갖는 데이터 레코드에 대한 엔트리들은 무시된다. 즉, 저장 위치 포인트의 대체 후보 시각 정보보다 오래된 시각 정보를 갖는 데이터 레코드에 대한 엔트리들은 삭제된 것처럼 취급된다.
한편, 버킷 내에서 오버플로가 발생한 경우에 저장 장치는 오버플로 처리 방 법에 따라 검색한다. 즉, 해당 버킷에 검색하는 레코드의 엔트리가 존재하지 않는 경우, 저장 장치는 오버플로 처리 방법에 따라 해당 버킷에 오버플로 표시(오버플로 플래그(flag))가 되어 있는 경우에는 오버플로 블록을 검색하고, 리해싱 표시(리해싱 플래그(flag))가 되어 있는 경우에는 리해싱을 이용하여 검색할 수 있다.
[도 5 설명]
도 5는 본 발명의 실시예에 따른 데이터 레코드에 대한 엔트리 저장 중에 해시 버킷의 오버플로를 처리하는 하는 방법을 나타낸 순서도이다.
단계 510에서 저장 장치는 해시 버킷에 오버플로가 발생했는지 여부를 판단한다.
만일 오버플로가 발생한 경우, 단계 515에서 저장 장치는 오버플로 블록에 공간이 있는지를 판단한다.
판단 결과 오버플로 블록에 공간에 있는 경우, 단계 520에서 저장 장치는 해당 버킷에 오버플로 표시(오버플로 플래그(flag) 설정)를 한 후 미리 할당해 둔 오버플로 블록에 데이터 레코드를 위한 엔트리를 기록한다. 오버플로 표시는 오버플로 블록에 해당 버킷의 엔트리가 저장되어 있다는 표시로 검색시에 활용된다.
오버플로 블록에는 데이터 레코드를 위한 엔트리가 순차적으로 기록되거나 체인(chain)의 형태로 기록될 수 있다. 오버플로 블록은 해시 버킷과는 별도로 할당된다. 이는 당업자에게는자명한 사항이므로 별도의 설명을 생략하기로 한다.
그러나, 판단 결과 오버플로 블록에 공간이 없는 경우, 단계 525에서 저장 장치는 오버플로가 발생한 블록의 오버플로를 발생시킨 데이터 레코드를 미리 설정된 해싱 함수를 이용하여 리해싱(rehasing)한다. 이 과정에서 사용되는 해싱 함수는 최초 해싱 함수와는 다른 것이 이용된다. 여기서, 리해싱을 위한 데이터 레코드의 키(해상 함수의 입력)는 하나 이상의 필드로 최초 해싱과 동일할(즉, 동일한 필드) 수도 있고, 상이할(상이한 필드) 수도 있다. 즉, 저장 장치는 리해싱에 의해 데이터 레코드에 대한 엔트리를 저장할 버킷을 다시 찾는다. 이때는 최초 해싱 함수와 다른 해싱 함수를 이용하므로, 빈 공간이 존재하는 버킷으로 리해싱 될 수가 있다.
그리고, 단계 530에서 저장 장치는 리해싱에 의해 선택된 해당 버킷에 공간이 있는지를 판단한다.
만일 리해싱에 의해 선택된 해당 버킷에 데이터 레코드의 엔트리를 저장할 수 있는 공간이 있는 경우, 단계 535에서 저장 장치는 최초의 해싱에 의해 선택된 버킷에 엔트리가 리해싱된 것을 나타내는 리해싱 표시(리해싱 플래그(flag) 설정)를 한 후에 해당 엔트리를 리해싱된 버킷에 저장한다.
그러나, 만일 리해싱에 의해 선택된 버킷에 공간이 없는 경우, 단계 540에서 저장 장치는 최초 해싱에 의해 선택된 해시 버킷의 가장 오래된 엔트리를 덮어쓴다. 오버플로 처리 방법에 의해서도 오버플로가 해결되지 못하는 경우(예를 들어, 오버플로 블록에서도 오버플로가 발생하고, 리해싱에서도 오버플로가 발생하는 경우), 저장 장치는 해시 버킷의 데이터 엔트리들을 오래된 순으로 순차적으로 덮어쓸 수 있다. 즉, 저장 장치는 해시 버킷의 가장 오래된 엔트리부터 덮어쓸 수 있 다.
본 실시예에서는단계 520, 525 및 540이 함께 수행되는 것을 가정하여 설명하였으나 구현 방법에 따라 단계 520, 525 및 540중 어느 하나가 단독으로 수행될 수도 있고, 이 중에서 두 가지 이상이 함께 사용될 수도 있다.
[도 6 설명]
도 6은 본 발명의 실시예에 따른 확장 해싱에 의해 데이터를 관리하는 저장 장치의 내부 구성을 개략적으로 도시한 블록도이다.
도 6을 참조하면, 본 발명의 실시예에 따른 저장 장치는 입력부(610), 분할부(615), 메모리(620), 삽입부(625), 검색부(630), 반납부(635), 해시 계산부(640) 및 제어부(645)를 포함하여 구성된다.
입력부(610)는 본 발명의 실시예에 따른 저장 장치를 제어하기 위한 제어 명령을 입력받는다. 예를 들어, 입력부(610)는 저장 공간의 크기, 블록의 크기와 레코드의 크기를 비롯하여 사전에 설정되는 값, 데이터 저장 명령, 데이터 반납 명령, 데이터 검색 명령 등을 입력받을 수 있다.
분할부(615)는 메모리(620)를 복수의 영역으로 분할한다. 예를 들어, 분할부(615)는 메모리(620)를 데이터 영역 및 인덱스 영역으로 분할한다.
분할부(615)는 도 2에서 설명한 방식에 따라 데이터 영역 및 인덱스 영역의 크기를 계산하여 이에 상응하도록 메모리(620)의 저장 공간을 복수의 영역으로 분할할 수 있다. 이는 도 2를 참조하여 설명한 바와 동일하므로 중복되는 설명은 생 략하기로 한다.
메모리(620)는 저장 공간으로, 다양한 데이터가 기록된다. 전술한 바와 같이, 메모리는 분할부(615)에 의해 복수의 영역으로 분할될 수 있다. 이는 이미 설명한 바와 동일하므로 중복되는 설명은 생략하기로 한다.
삽입부(625)는 신규 데이터를 메모리(620)의 데이터 영역에 기록하고, 데이터 검색을 위한 인덱스를 인덱스 영역에 기록하는 기능을 수행한다.
이는 이미 도 2를 참조하여 상세히 설명하였으므로 중복되는 설명은 생략하기로 한다.
검색부(630)는 입력부(610)를 통해 입력된 검색 명령에 상응하는 데이터를 검색하는 기능을 수행한다. 이는 도 4를 참조하여 설명한 바와 동일하므로 중복되는 설명은 생략하기로 한다.
반납부(635)는 입력부(610)를 통해 결정된 필요 개수에 상응하는 데이터 블록을 반납 처리하는 기능을 수행한다. 이는 도 3을 참조하여 설명한 바와 동일하므로 중복되는 설명은 생략하기로 한다.
해시 계산부(640)는 제어부(645)의 제어에 따라 미리 설정된 해시 함수를 이용하여 유사키를 생성하여 삽입부(625) 및 검색부(630)로 출력하는 기능을 수행한다.
제어부(645)는 본 발명의 실시예에 따른 저장 장치의 내부 구성 요소들(예를 들어, 입력부(610), 분할부(615), 메모리(620), 삽입부(625), 검색부(630), 반납부(635), 해시 계산부(640) 등)을 제어하는 기능을 수행한다.
상기에서는 본 발명의 바람직한 실시예를 참조하여 설명하였지만, 해당 기술 분야에서 통상의 지식을 가진 자라면 하기의 특허 청구의 범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을것이다.