KR102085132B1 - 버킷 내부에서 해시 함수의 분류를 이용한 효율적인 쿠쿠 해시 방법 - Google Patents

버킷 내부에서 해시 함수의 분류를 이용한 효율적인 쿠쿠 해시 방법 Download PDF

Info

Publication number
KR102085132B1
KR102085132B1 KR1020180138765A KR20180138765A KR102085132B1 KR 102085132 B1 KR102085132 B1 KR 102085132B1 KR 1020180138765 A KR1020180138765 A KR 1020180138765A KR 20180138765 A KR20180138765 A KR 20180138765A KR 102085132 B1 KR102085132 B1 KR 102085132B1
Authority
KR
South Korea
Prior art keywords
data
slot
month
hash function
bucket
Prior art date
Application number
KR1020180138765A
Other languages
English (en)
Inventor
양대헌
문성광
민대홍
장룡호
정창훈
Original Assignee
인하대학교 산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인하대학교 산학협력단 filed Critical 인하대학교 산학협력단
Priority to KR1020180138765A priority Critical patent/KR102085132B1/ko
Application granted granted Critical
Publication of KR102085132B1 publication Critical patent/KR102085132B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9014Indexing; Data structures therefor; Storage structures hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • G06F16/316Indexing structures
    • G06F16/325Hash tables

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

버킷 내부에서 해시 함수의 분류를 이용한 효율적인 쿠쿠 해시 방법이 개시된다. 일 실시예에 따른 데이터 탐색 방법은, 복수 개의 버킷 각각에 해시 함수간의 경계점을 저장하는 월(Wall)을 설정하는 단계; 상기 복수 개의 버킷 각각에 설정된 월을 기준으로 빈 슬롯을 탐색하는 단계; 및 상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계를 포함할 수 있다.

Description

버킷 내부에서 해시 함수의 분류를 이용한 효율적인 쿠쿠 해시 방법{EFFICIENT CUCKOO HASHING USING HASH FUNCTION CATEGORIZATION IN INSIDE OF BUCKET}
아래의 설명은 해시 알고리즘에 관한 것으로, 해시 알고리즘 중 쿠쿠 해시 방식에 관한 것이다.
해시 테이블(hash table)은 해시 함수(hash function)를 이용하여 자료의 저장할 위치를 정하는 구조이다. 일반적으로 저장하고자 하는 값의 해시 함수에 의한 해시 값이 키(key)가 되며, 이 키에 따라 저장할 위치가 정해진다. 서로 다른 데이터가 같은 위치에 대응되는 경우가 생기게 되는데, 이것을 해시 충돌(hash collision)이라고 한다. 이 해시 충돌을 해결하기 위한 많은 해싱 알고리즘들이 제시되었는데, 기존의 선형 탐색(linear probing), 제곱 탐색(quadratic probing), 이중 해싱(double hashing)과 같은 해싱 알고리즘은 검색 시간의 최악의 경우(worst case)가 상수 시간보다 크다.
해시 테이블은 주로 빠른 검색 시간을 위하여 사용되는 구조인데, 그 점에 주목하여 탐색을 상수 시간 내에 완료하도록 보장하는 쿠쿠 해시 알고리즘(cuckoo hash algorithm)이 개발되었다. 쿠쿠 해시는 위치를 정하는 해시를 두 개를 사용하여 저장할 위치를 두 곳으로 하고, 반드시 그 두 곳 중 한 곳에 데이터가 존재하도록 한다. 그러므로 최악의 경우에도 상수 시간에 탐색이 완료된다. 하지만 입력 시 두 버킷이 이미 다른 데이터에 의해 비어있지 않으면 두 버킷에 있는 데이터 중 하나를 밀어내고 그 자리를 차지하는데, 밀려난 데이터는 그 버킷을 제외한 다른 버킷에서 빈 공간을 발견할 때까지 같은 과정을 반복하게 되므로 평균 입력 시간이 증가한다는 문제점이 있다. 그리고 이 밀어내는 연산이 반복되는 문제로 인해 전체 해시 테이블에서 유효하게 데이터를 저장할 수 있는 비율은 50%정도에 불과했다.
쿠쿠 해싱의 이러한 단점을 해결하기 위하여 여러 가지 방법이 제시되었는데, 그 중 간단한 구조의 변형으로 문제점을 개선한 방식이 버킷화 쿠쿠 해싱(bucketized cuckoo hashing, BCH)이다. 기존 쿠쿠 해싱 기법은 해시 함수가 가리키는 위치의 버킷 하나 당 데이터가 저장되는 슬롯(slot)이 하나라고 가정했다. 하지만 버킷화 쿠쿠 해싱에서는 버킷 하나 당 둘 이상의 슬롯이 있다고 설정한다. 버킷 하나 당 슬롯이 많을수록 밀어내기 연산이 덜 일어나게 되므로 해시 테이블 최대 사용률(load factor)이 올라가게 된다(버킷 당 슬롯이 4개일 경우 약 90% 이상). 평균 탐색 시간은 여전히 최악의 경우에도 상수 시간이긴 하지만 버킷에서 확인해야 할 슬롯의 개수가 증가하였으므로 원래의 쿠쿠 해시 방법보다는 늘어난다.
참고자료: KR10-2015-0045073
버킷화 쿠쿠 해싱 알고리즘의 평균 탐색 및 입력 시간을 단축시키기 위한 방법을 제공할 수 있다.
데이터 탐색 방법은, 복수 개의 버킷 각각에 해시 함수간의 경계점을 저장하는 월(Wall)을 설정하는 단계; 상기 복수 개의 버킷 각각에 설정된 월을 기준으로 빈 슬롯을 탐색하는 단계; 및 상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계를 포함할 수 있다.
상기 복수 개의 버킷 각각에 설정된 월을 기준으로 빈 슬롯을 탐색하는 단계는, 상기 복수 개의 버킷 중 하나의 버킷에 월(Wall)을 기준으로 월의 앞부분을 탐색하여 첫 번째 해시 함수로 해시하여 접근된 슬롯에 데이터가 존재하는지 탐색하고, 상기 하나의 버킷에 첫 번째 해시 함수로 접근된 슬롯에 데이터가 존재하지 않을 경우, 상기 복수 개의 버킷 중 다른 하나의 버킷을 탐색하고, 상기 다른 하나의 버킷에 월을 기준으로 월의 뒷부분을 탐색하여 상기 다른 하나의 버킷에 두 번째 해시 함수로 접근된 슬롯에 데이터가 존재하는지 탐색하는 단계를 포함할 수 있다.
상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계는, 상기 월을 기준으로 월의 뒷부분에서부터 복수 개의 버킷 각각에 존재하는 빈 슬롯을 탐색하는 삽입 연산을 수행하는 단계를 포함할 수 있다.
상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계는, 상기 삽입 연산을 수행할 때 첫 번째 해시 함수에 의하여 접근된 버킷에 빈 슬롯이 존재할 경우, 두 번째 해시 함수에 의한 다른 데이터가 접근된 버킷의 슬롯에 다른 데이터가 이미 입력되어 있는지 여부를 판단하고, 상기 두 번째 해시 함수에 의한 다른 데이터가 접근된 버킷의 슬롯이 존재하지 않거나 또는 첫 번째 해시 함수에 의한 해시 값으로 이루어져 있을 경우, 빈 슬롯 중에 가장 앞에 위치한 슬롯에 상기 첫 번째 해시 함수에 의한 데이터를 삽입하고, 상기 새로운 데이터가 삽입된 슬롯의 뒤로 상기 월의 위치를 이동시키고, 상기 두 번째 해시 함수에 의한 다른 데이터가 접근된 버킷의 슬롯에 두 번째 해시 함수에 의한 다른 데이터가 이미 입력되어 있을 경우, 월을 기준으로 월과 뒤로 인접한 위치의 데이터 값을 빈 슬롯 중 가장 앞에 위치한 슬롯으로 이동시키고, 상기 월과 뒤로 인접한 위치의 슬롯에 상기 새로운 데이터를 삽입하고, 상기 새로운 데이터가 삽입된 슬롯의 뒤로 상기 월의 위치를 이동시키고, 상기 삽입 연산을 수행할 때 두 번째 해시 함수에 의하여 접근된 버킷이 빈 슬롯이 존재할 경우, 상기 두 번째 해시 함수에 의한 다른 데이터가 접근된 버킷의 빈 슬롯 중 가장 앞에 위치한 빈 슬롯에 상기 새로운 데이터를 삽입하는 단계를 포함할 수 있다.
상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계는, 상기 복수 개의 버킷 각각에 데이터의 입력이 가능한 빈 슬롯이 존재하지 않을 경우, 새로운 데이터를 삽입하기 위한 밀어내기 연산을 수행하는 단계를 포함하고, 상기 새로운 데이터에 의하여 상기 복수 개의 버킷 각각에 존재하는 슬롯 중 어느 하나의 슬롯이 랜덤적으로 밀어내기 대상으로 선택될 수 있다.
상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계는, 상기 새로운 데이터에 의하여 선택된 슬롯에 존재하는 데이터가 제 N(N은 자연수) 해시 함수에 의한 위치의 버킷일 경우, 제 N+1 해시 함수에 의한 위치의 버킷으로 밀려나는 단계를 포함할 수 있다.
상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계는, 상기 새로운 데이터에 의하여 밀어내기 대상으로 선택된 슬롯이 상기 월을 기준으로 상기 월의 앞부분에 존재할 경우, 상기 밀어내기 대상으로 선택된 슬롯의 데이터를 밀어내고, 상기 새로운 데이터를 삽입하고, 상기 밀어내기 대상으로 선택된 슬롯이 상기 월을 기준으로 상기 월의 뒷부분에 존재할 경우, 상기 월과 뒤로 인접한 슬롯의 데이터를 상기 밀어내기 대상으로 선택된 슬롯으로 이동시키고, 상기 새로운 데이터를 상기 월과 뒤로 인접한 슬롯으로 이동시키고, 상기 월을 상기 새로운 데이터의 뒤로 조정하는 단계를 포함하고, 상기 새로운 데이터는 첫 번째 해시 함수에 의한 데이터일 수 있다.
상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계는, 상기 새로운 데이터에 의하여 밀어내기 대상으로 선택된 슬롯이 상기 월을 기준으로 상기 월의 뒷부분에 존재할 경우, 상기 월과 앞으로 인접한 슬롯의 데이터를 상기 밀어내기 대상으로 선택된 슬롯으로 이동시키고, 상기 새로운 데이터를 상기 월과 앞으로 인접한 슬롯에 이동시키고, 상기 월을 상기 새로운 데이터의 앞으로 조정하는 단계를 포함하고, 상기 새로운 데이터는 두 번째 해시 함수에 의한 데이터일 수 있다.
버킷화 쿠쿠 해시에서 탐색해야 하는 범위를 변수를 이용하여 줄임으로써 탐색 연산에서 걸리는 시간을 줄일 수 있고, 이를 통해 삽입 연산에서도 시간을 단축시킬 수 있다.
도 1은 일 실시예에 따른 쿠쿠 해시에서 BCH와 월 쿠쿠(Wall Cuckoo)의 탐색 범위를 비교한 것을 설명하기 위한 도면이다.
도 2는 일 실시예에 따른 월 쿠쿠 해시에서 삽입 연산을 설명하기 위한 도면이다.
도 3은 일 실시예에 따른 월 쿠쿠 해시에서 밀어내기 과정이 필요할 때의 삽입 과정을 설명하기 위한 도면이다.
도 4는 일 실시예에 따른 월 쿠쿠 해시 알고리즘에서 탐색 연산을 설명하기 위한 도면이다.
도 5는 일 실시예에 따른 월 쿠쿠 해시 알고리즘에서 삽입 연산을 설명하기 위한 도면이다.
도 6은 일 실시예에 따른 데이터 탐색 장치의 구성을 설명하기 위한 블록도이다.
도 7은 일 실시예에 따른 데이터 탐색 장치의 데이터 탐색 방법을 설명하기 위한 흐름도이다.
이하, 실시예를 첨부한 도면을 참조하여 상세히 설명한다.
도 1은 일 실시예에 따른 쿠쿠 해시에서 BCH와 월 쿠쿠(Wall Cuckoo)의 탐색 범위를 비교한 것을 설명하기 위한 도면이다.
버킷화 쿠쿠 해싱에서 버킷별로 해시 함수간의 경계점을 저장하는 월(Wall) 변수를 추가로 유지한다. 일반적인 쿠쿠 해시의 경우대로 두 개의 해시 함수를 사용할 경우 경계점은 하나이므로 하나의 변수만이 필요하며, 세 개 이상일 경우에는 그 경계점의 수만큼의 추가 변수가 필요하다. 실시예에서 이를 월 쿠쿠(Wall Cuckoo)라고 명명하기로 한다.
월 쿠쿠에서 사용되는 해시 함수는 적어도 세 개 이상이 될 수 있으며, 그 경우 월 변수도 복수 개가 되어 각각의 해시 함수에 의한 값들이 버킷 내부에서 구분되어 저장되는 것이 유지되는 성질을 유지하면 상기 방법을 동일하게 사용 가능하다. 또한, 버킷 당 슬롯의 개수는 도 1에 도시된 바와 같이, 네 개보다 많을 수도, 적을 수도 있게 유동적으로 설정할 수 있다. 다시 말해서, 버킷 당 슬롯은 개수는 적어도 하나 이상일 수 있다.
도 1을 참고하면, 두 개의 해시 함수를 사용하고 버킷 당 슬롯의 수가 네 개인 경우를 예로 들어 설명하기로 한다. 월 쿠쿠는 각각의 버킷마다 월(Wall)을 기준으로 월 변수의 앞부분에 위치한 슬롯에는 첫 번째 해시 함수에 의하여 위치한 데이터를 저장하고, 월 변수의 뒷부분에 위치한 슬롯에는 두 번째 해시 함수에 의한 데이터를 저장한 후 그 경계점을 월 변수에 저장할 수 있다. 그리고 월의 초기 값을 0, 다시 말해서, 첫 슬롯보다 앞으로 설정하여 데이터가 저장되지 않은 빈 슬롯도 월의 뒷부분에 위치하도록 한다. 해시 함수에 따른 데이터의 슬롯 위치 정보를 저장해서 버킷을 탐색할 때 월과 관련된 정보를 이용하여 접근해야 하는 슬롯의 범위를 줄인다.
도 1은 (a)BCH의 탐색 과정과 (b)Wall Cuckoo의 탐색 과정의 한 예를 나타낸 것이다. 두 버킷을 모두 참조해야 하는 상황일 경우에 BCH는 도 1(a)와 같이 모든 슬롯에 접근해야 하지만, 월 쿠쿠는 버킷 내부의 원소가 월로 구분되어있기 때문에 도 1(b)와 같이 월을 기준으로 탐색 범위를 좁힘으로써 슬롯 접근 횟수를 줄일 수 있다.
도 1(b)를 참고하면, 첫 번째 버킷에는 첫 번째 해시 함수로 접근하므로 첫 번째 해시 함수로 접근된 첫 번째 버킷의 슬롯에 데이터가 존재한다면 월을 기준으로 월의 앞부분에서 빈 슬롯을 탐색을 수행할 수 있다. 첫 번째 버킷에서는 처음부터 월을 기준으로 월의 앞부분만 탐색한 후, 첫 번째 해시 함수에 의한 데이터로 접근된 슬롯과 일치하는 슬롯이 없을 경우 두 번째 버킷을 탐색할 수 있다. 두 번째 버킷에서는 두 번째 해시 함수에 의한 데이터로 접근하므로, 데이터가 존재한다면 월의 뒷부분에 저장되어 있다. 두 번째 버킷에서 월의 뒤에서 끝까지 탐색하였을 때에도 일치하는 슬롯이 없거나, 비어있는 슬롯(빈 슬롯)이 먼저 발견되는 경우 찾는 데이터가 존재하지 않는 네가티브(negative) 탐색이다.
동일한 키를 가지는 데이터가 중복해서 삽입되는 것을 방지하기 위하여 데이터를 삽입하기 전에 상기 데이터가 이미 테이블에 존재하는지 우선적으로 탐색될 수 있다. 탐색 결과가 존재할 경우, 새로 삽입하는 대신 값을 갱신하고, 탐색 결과가 존재하지 않을 경우, 해당 버킷들에 삽입할 빈 슬롯이 있는지 탐색할 수 있다.
실시예에 따른 월 쿠쿠에서는 빈 슬롯이 항상 월을 기준으로 월의 뒷부분에만 존재할 수 있기 때문에, 빈 슬롯을 탐색하는 연산을 버킷 내의 맨 처음 슬롯부터가 아닌 월을 기준으로 월의 뒤부터 빈 슬롯을 탐색할 수 있다. 이러한 빈 슬롯을 탐색함에 있어서, 슬롯 접근 횟수에 대한 이득이 크기 때문에 월 쿠쿠는 삽입 연산에서도 성능이 향상될 수 있다.
도 2는 일 실시예에 따른 월 쿠쿠 해시에서 삽입 연산을 설명하기 위한 도면이다.
삽입 연산을 수행할 때 접근한 버킷에 빈 슬롯이 존재할 경우의 예를 설명하기 위한 것이다. 새로 삽입되는 데이터(이하, '새로운 데이터'로 기재하기로 함)를 첫 번째 해시 함수에 의한 데이터이면 NEW(A), 두 번째 해시 함수에 의한 데이터이면 NEW(B)라고 표기하기로 한다. 이때, 첫 번째 해시 함수에 의한 데이터는 데이터에 제1 해시 함수를 해시함에 따라 획득된 값을 의미할 수 있고, 두 번째 해시 함수에 의한 데이터는 데이터에 제2 해시 함수를 해시함에 따라 획득된 값을 의미할 수 있다.
첫 번째 해시 함수에 의한 데이터가 접근된 하여 첫 번째 버킷에 새로운 데이터(NEW(A))를 삽입할 때는 월을 기준으로 월의 앞부분에 삽입해야 하는데, 두 번째 해시 함수에 의한 다른 데이터가 이미 입력되어있는지 아닌지 여부에 따라 도2 (a)와 도 2(b)로 구분될 수 있다.
도 2(a)를 참고하면, 첫 번째 해시 함수에 의한 데이터가 접근된 버킷이 빈 상태이거나 첫 번째 해시 값(첫 번째 해시 함수에 의한 데이터)으로만 이루어져 있을 경우, 빈 슬롯 중 가장 앞에 위치한 슬롯에 새로운 데이터(NEW(A))를 삽입한 후, 월의 위치를 뒤로 이동시킬 수 있다. 예를 들면, 새로운 데이터를 삽입한 슬롯의 뒤로 월의 위치를 이동시킬 수 잇다.
도 2(b)를 참고하면, 첫 번째 해시 함수에 의한 데이터가 접근된 버킷에 두 번째 해시 함수에 의한 다른 데이터가 이미 입력되어 있다면, 월의 바로 뒤에 위치한 K1(B)를 빈 슬롯 중 버킷의 가장 앞 또는 뒤에 위치한 슬롯으로 이동시킨 후, 월의 바로 뒤에 위치한 슬롯에 새로운 데이터(NEW(A))를 삽입하고, 새로운 데이터(NEW(A)가 삽입된 슬롯의 뒤로 월의 위치를 이동시킬 수 있다.
도 2(c)를 참고하면, 두 번째 해시 함수에 의한 데이터가 접근된 다른 버킷의 빈 슬롯 중 가장 앞에 위치한 슬롯에 새로운 데이터(NEW(B))를 삽입할 수 있다. 이때, 두 번째 해시 함수에 의한 데이터를 월의 뒷부분에 넣는 것이기 때문에 월의 변화가 일어나지 않는다.
도 3은 일 실시예에 따른 월 쿠쿠 해시에서 밀어내기 과정이 필요할 때의 삽입 과정을 설명하기 위한 도면이다.
복수 개의 버킷에 데이터의 입력이 가능한 빈 슬롯이 존재하지 않을 경우, 새 데이터를 삽입하기 위하여 기존 데이터의 밀어내기 연산이 수행될 수 있다. 새로운 데이터는 복수 개의 버킷의 슬롯 중 어디에나 위치할 수 있으므로 도 3에 도시된 바와 같이, 복수 개의 슬롯(예를 들면, 여덟 개의 슬롯) 중 임의의 한 슬롯을 밀어내기 대상으로 선택할 수 있다. 밀어내기로 인하여 밀려난 슬롯의 데이터는 다른 버킷으로 이동해야만 하므로 첫 번째 해시 함수에 의한 위치의 버킷이었다면 두 번째 해시 함수에 의한 위치의 버킷으로 밀려나고, 두 번째 해시 함수에 의한 위치의 버킷이었다면 첫 번째 해시 함수에 의한 위치의 버킷으로 밀려나게 된다. 접근한 버킷에서 슬롯의 데이터를 밀어내야 하는 경우에 따른 월의 변화와 슬롯의 변화에 대하여 도 3을 참고하기로 한다.
도 3에서도 새로운 데이터가 첫 번째 해시 함수에 의한 데이터이면 NEW(A), 두 번째 해시 함수에 의한 데이터이면 NEW(B)라고 표기하기로 한다. 도 3에서 음영으로 표시된 슬롯은 기존 데이터 중 밀려날 대상으로 선택된 슬롯을 의미한다.
도 3(a)와 도 3(b)는 삽입할 데이터인 새로운 데이터(NEW(A))가 월을 기준으로 월의 앞부분에 위치하는 경우의 예다. 도 3(a)의 경우, 밀어내기 대상이 월의 앞부분에 존재하는 데이터인 K1(A)이기 때문에 월의 변화가 없으므로 추가 조치 없이 밀어내고 새로운 데이터(NEW(A))를 삽입할 수 있다.
도 3(b)의 경우, 밀어내기 대상이 월의 뒷부분에 있던 데이터인 K4(B)이기 때문에 월의 바로 뒤의 데이터인 K3(B)를 밀어내기 대상으로 선택된 K4(B) 슬롯으로 이동시킬 후, 새로운 데이터(NEW(A))를 월의 바로 뒤에 삽입하고 월을 한 칸 뒤로 조정시킬 수 있다.
도 3(c)와 도3(d)는 삽입할 데이터인 새로운 데이터(NEW(B))가 월의 뒷부분에 위치하는 경우의 예이다. 도 3(c)를 참고하면, 밀어내기 대상이 월의 앞부분에 존재하는 데이터인 K1(A)이기 때문에 월을 기준으로 월의 바로 앞의 데이터인 K2(A)를 밀어내기 대상으로 선택된 K1(A) 슬롯으로 이동시킨 후, 새로운 데이터(NEW(B))를 월을 기준으로 월의 바로 앞에 삽입하고, 월을 한 칸 앞으로 조정할 수 있다.
도 3(d)를 참고하면, 밀어내기 대상이 월을 기준으로 월의 뒷부분에 존재하는 데이터인 K3(B)이기 때문에 월의 변화가 없으므로 추가 조치 없이 밀어내고 새로운 데이터(NEW(B))를 삽입할 수 있다.
밀어내기로 인하여 밀려난 데이터의 다른 버킷에 빈 슬롯이 존재하면 삽입이 완료되지만, 빈 슬롯이 없으면 다시 해당 버킷에서 밀어낼 대상을 임의로 정하여 밀어내는 과정이 반복될 수 있다. 이 과정을 더 이상 밀려나는 데이터가 없이 빈 슬롯에 입력이 성공할 때까지 혹은 정해진 최대 수만큼 반복하며, 빈 슬롯을 찾지 못하면 삽입은 정해진 정책에 따라 처리된다.
도 4 및 도 5에서는 해시 함수가 두 개일 경우의 탐색 및 삽입 알고리즘의 수도 코드를 나타낸 것이다.
도 4는 일 실시예에 따른 월 쿠쿠 해시 알고리즘에서 탐색 연산을 설명하기 위한 도면이다.
탐색 알고리즘은 해시 함수(h1, h2)를 사용하여 해당 데이터가 어느 버킷에 저장되어있을지 버킷 위치(H1, H2)를 계산한 후, BucketSearch(H1, K, 0, Wall-1) 함수를 호출하여 첫 번째 버킷을 탐색할 수 있다. 첫 번째 버킷에서는 월의 앞부분만 찾는다. 주어진 범위 내에 찾는 키가 존재하면 그에 대한 값(V)를 반환하고, 존재하지 않으면 다음 버킷에서 탐색 연산을 수행할 수 있다.
두 번째 버킷에서는 BucketSearch(H2, K, Wall, last) 함수를 호출하여 월의 뒤부터 끝까지 탐색할 수 있다. 버킷 내에 키가 존재하면 그에 대한 값을 반환하고, 존재하지 않으면 null을 반환한다.
도 5는 일 실시예에 따른 월 쿠쿠 해시 알고리즘에서 삽입 연산을 설명하기 위한 도면이다.
삽입 알고리즘은 해시 함수(h1, h2)를 사용하여 해당 데이터를 어느 위치(H1, H2)의 버킷에 저장할지를 계산한 후, 앞서 설명한 탐색 연산을 수행하여 이미 데이터가 존재하는지 확인한다. 존재한다면 값을 갱신하고, 존재하지 않는다면 새로운 데이터이므로 H1 위치의 버킷에서 BucketInsert(H1, K, V) 함수를 수행할 수 있다.
BucketInsert(H1, K, V)는 월의 뒤 슬롯부터 차례대로 접근하여 빈 슬롯이 있다면 데이터를 입력한다. H1 버킷에 빈 슬롯이 없다면 H2 버킷에서 빈 슬롯을 찾아 삽입을 시도한다. H2 버킷에도 빈 슬롯이 없다면 Kickout(H1, H2, K, V)를 호출하여 밀어내기 연산을 수행할 수 있다. 이때, 밀어내기 대상(밀어낼 대상)은 두 버킷의 모든 슬롯 중 하나를 임의로 선택하며, 현재 넣을 데이터(K, V)로 선택된 슬롯 (T[H][R])에 삽입하고, 밀려난 데이터를 해당 데이터의 다른 쪽 버킷 위치에서 삽입을 시도할 수 있다. 성공하면 입력이 완료되며, 빈 슬롯이 존재하지 않아 실패하면 해당 버킷에서 다시 밀어내기 대상을 임의로 설정할 수 있다. 밀려나는 데이터의 입력이 완료되거나 정해진 최대 반복 횟수가 될 때까지 삽입 시도를 반복하며, 입력하지 못하였을 경우 삽입은 정해진 정책에 따라 처리된다.
해시 테이블은 컴퓨터에서 자료 처리를 할 때 널리 쓰이는 구조이다. 특히, Redis나 Memcached 같은 메모리를 캐시처럼 이용하는 구조에서 데이터를 저장할 때 기존의 기초적인 구조의 해시 테이블이 아닌 실시예에서 제안된 쿠쿠 해시 알고리즘과 같이 개선된 알고리즘을 사용할 수 있다.
도 6은 일 실시예에 따른 데이터 탐색 장치의 구성을 설명하기 위한 블록도이고, 도 7은 일 실시예에 따른 데이터 탐색 장치의 데이터 탐색 방법을 설명하기 위한 흐름도이다.
데이터 탐색 장치(100)는 설정부(610), 탐색부(620) 및 삽입부(630)를 포함할 수 있다. 이러한 구성요소들은 데이터 탐색 장치(100)에 저장된 프로그램 코드가 제공하는 제어 명령에 따라 프로세서에 의해 수행되는 서로 다른 기능들(different functions)의 표현들일 수 있다. 구성요소들은 도 7의 데이터 탐색 방법이 포함하는 단계들(710 내지 730)을 수행하도록 데이터 탐색 장치(100)를 제어할 수 있다. 이때, 구성요소들은 메모리가 포함하는 운영체제의 코드와 적어도 하나의 프로그램의 코드에 따른 명령(instruction)을 실행하도록 구현될 수 있다.
프로세서는 데이터 탐색 방법을 위한 프로그램의 파일에 저장된 프로그램 코드를 메모리에 로딩할 수 있다. 예를 들면, 데이터 탐색 장치(100)에서 프로그램이 실행되면, 프로세서는 운영체제의 제어에 따라 프로그램의 파일로부터 프로그램 코드를 메모리에 로딩하도록 데이터 탐색 장치를 제어할 수 있다. 이때, 프로세서 및 프로세서가 포함하는 설정부(610), 탐색부(620) 및 삽입부(630) 각각은 메모리에 로딩된 프로그램 코드 중 대응하는 부분의 명령을 실행하여 이후 단계들(710 내지 730)을 실행하기 위한 프로세서의 서로 다른 기능적 표현들일 수 있다.
단계(710)에서 설정부(610)는 복수 개의 버킷 각각에 해시 함수간의 경계점을 저장하는 월(Wall)을 설정할 수 있다.
단계(720)에서 탐색부(620)는 복수 개의 버킷 각각에 설정된 월을 기준으로 빈 슬롯을 탐색할 수 있다. 탐색부(620)는 복수 개의 버킷 중 하나의 버킷에 월(Wall)을 기준으로 월의 앞부분을 탐색하여 첫 번째 해시 함수로 해시하여 접근된 슬롯에 데이터가 존재하는지 탐색할 수 있다. 탐색부(620)는 하나의 버킷에 첫 번째 해시 함수로 접근된 슬롯에 데이터가 존재하지 않을 경우, 복수 개의 버킷 중 다른 하나의 버킷을 탐색할 수 있다. 탐색부(620)는 다른 하나의 버킷에 월을 기준으로 월의 뒷부분을 탐색하여 다른 하나의 버킷에 두 번째 해시 함수로 접근된 슬롯에 데이터가 존재하는지 탐색할 수 있다.
단계(730)에서 삽입부(630)는 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입할 수 있다. 삽입부(630)는 월을 기준으로 월의 뒷부분에서부터 복수 개의 버킷 각각에 존재하는 빈 슬롯을 탐색하는 삽입 연산을 수행할 수 있다. 삽입부(630)는 삽입 연산을 수행할 때 첫 번째 해시 함수에 의하여 접근된 버킷에 빈 슬롯이 존재할 경우, 두 번째 해시 함수에 의한 다른 데이터가 접근된 버킷의 슬롯에 다른 데이터가 이미 입력되어 있는지 여부를 판단할 수 있다. 삽입부(630)는 두 번째 해시 함수에 의한 다른 데이터가 접근된 버킷의 슬롯이 존재하지 않거나 또는 첫 번째 해시 함수에 의한 해시 값으로 이루어져 있을 경우, 빈 슬롯 중에 가장 앞에 위치한 슬롯에 첫 번째 해시 함수에 의한 데이터를 삽입하고, 새로운 데이터가 삽입된 슬롯의 뒤로 월의 위치를 이동시킬 수 있다. 삽입부(630)는 두 번째 해시 함수에 의한 다른 데이터가 접근된 버킷의 슬롯에 두 번째 해시 함수에 의한 다른 데이터가 이미 입력되어 있을 경우, 월을 기준으로 월과 뒤로 인접한 위치의 데이터 값을 빈 슬롯 중 가장 앞에 위치한 슬롯으로 이동시키고, 월과 뒤로 인접한 위치의 슬롯에 새로운 데이터를 삽입하고, 새로운 데이터가 삽입된 슬롯의 뒤로 월의 위치를 이동시킬 수 있다. 삽입부(630)는 삽입 연산을 수행할 때 두 번째 해시 함수에 의하여 접근된 버킷에 빈 슬롯이 존재할 경우, 두 번째 해시 함수에 의한 다른 데이터가 접근된 버킷의 빈 슬롯 중 가장 앞에 위치한 빈 슬롯에 새로운 데이터를 삽입할 수 있다.
삽입부(630)는 복수 개의 버킷 각각에 데이터의 입력이 가능한 빈 슬롯이 존재하지 않을 경우, 새로운 데이터를 삽입하기 위한 밀어내기 연산을 수행할 수 있다. 이때, 새로운 데이터에 의하여 복수 개의 버킷 각각에 존재하는 슬롯 중 어느 하나의 슬롯이 랜덤적으로 밀어내기 대상으로 선택될 수 있다. 삽입부(630)는 새로운 데이터에 의하여 선택된 슬롯에 존재하는 데이터가 제 N(N은 자연수) 해시 함수에 의한 위치의 버킷일 경우, 제 N+1 해시에 의한 위치의 버킷으로 밀려날 수 있다.
삽입부(630)는 새로운 데이터에 의하여 밀어내기 대상으로 선택된 슬롯이 월을 기준으로 월의 앞부분에 존재할 경우, 밀어내기 대상으로 선택된 슬롯의 데이터를 밀어내고, 새로운 데이터를 삽입할 수 있다. 삽입부(630)는 밀어내기 대상으로 선택된 슬롯이 월을 기준으로 월의 뒷부분에 존재할 경우, 월과 뒤로 인접한 슬롯의 데이터를 밀어내기 대상으로 선택된 슬롯으로 이동시키고, 새로운 데이터를 월과 뒤로 인접한 슬롯으로 이동시키고, 월을 상기 새로운 데이터의 뒤로 조정할 수 있다.
삽입부(630)는 새로운 데이터에 의하여 밀어내기 대상으로 선택된 슬롯이 월을 기준으로 월의 뒷부분에 존재할 경우, 월과 앞으로 인접한 슬롯의 데이터를 밀어내기 대상으로 선택된 슬롯으로 이동시키고, 새로운 데이터를 월과 앞으로 인접한 슬롯에 이동시키고, 월을 새로운 데이터의 앞으로 조정할 수 있다.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치에 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (8)

  1. 데이터 탐색 장치에서 수행되는 데이터 탐색 방법에 있어서,
    상기 데이터 탐색 장치에서, 복수 개의 버킷 각각에 해시 함수간의 경계점을 저장하는 월(Wall)을 설정하는 단계;
    상기 데이터 탐색 장치에서, 상기 복수 개의 버킷 각각에 설정된 월을 기준으로 빈 슬롯을 탐색하는 단계; 및
    상기 데이터 탐색 장치에서, 상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계
    를 포함하고,
    상기 데이터 탐색 장치에서, 상기 복수 개의 버킷 각각에 설정된 월을 기준으로 빈 슬롯을 탐색하는 단계는,
    상기 복수 개의 버킷 중 하나의 버킷에 월(Wall)을 기준으로 월의 앞부분을 탐색하여 첫 번째 해시 함수로 해시하여 접근된 슬롯에 데이터가 존재하는지 탐색하고, 상기 하나의 버킷에 첫 번째 해시 함수로 접근된 슬롯에 데이터가 존재하지 않을 경우, 상기 복수 개의 버킷 중 다른 하나의 버킷을 탐색하고, 상기 다른 하나의 버킷에 월을 기준으로 월의 뒷부분을 탐색하여 상기 다른 하나의 버킷에 두 번째 해시 함수로 접근된 슬롯에 데이터가 존재하는지 탐색하는 단계
    를 포함하는 데이터 탐색 방법.
  2. 삭제
  3. 제1항에 있어서,
    상기 데이터 탐색 장치에서, 상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계는,
    상기 월을 기준으로 월의 뒷부분에서부터 복수 개의 버킷 각각에 존재하는 빈 슬롯을 탐색하는 삽입 연산을 수행하는 단계
    를 포함하는 데이터 탐색 방법.
  4. 제3항에 있어서,
    상기 데이터 탐색 장치에서, 상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계는,
    상기 삽입 연산을 수행할 때 첫 번째 해시 함수에 의하여 접근된 버킷에 빈 슬롯이 존재할 경우, 두 번째 해시에 의한 다른 데이터가 접근된 버킷의 슬롯에 다른 데이터가 이미 입력되어 있는지 여부를 판단하고,
    상기 두 번째 해시에 의한 다른 데이터가 접근된 버킷의 슬롯이 존재하지 않거나 또는 첫 번째 해시 함수에 의한 해시 값으로 이루어져 있을 경우, 빈 슬롯 중에 가장 앞에 위치한 슬롯에 상기 첫 번째 해시 함수에 의한 데이터를 삽입하고, 새로운 데이터가 삽입된 슬롯의 뒤로 상기 월의 위치를 이동시키고,
    상기 두 번째 해시 함수에 의한 다른 데이터가 접근된 버킷의 슬롯에 두 번째 해시 함수에 의한 다른 데이터가 이미 입력되어 있을 경우, 월을 기준으로 월과 뒤로 인접한 위치의 데이터 값을 빈 슬롯 중 가장 앞에 위치한 슬롯으로 이동시키고, 상기 월과 뒤로 인접한 위치의 슬롯에 상기 새로운 데이터를 삽입하고, 새로운 데이터가 삽입된 슬롯의 뒤로 상기 월의 위치를 이동시키고,
    상기 삽입 연산을 수행할 때 두 번째 해시 함수에 의하여 접근된 버킷에 빈 슬롯이 존재할 경우, 상기 두 번째 해시 함수에 의한 다른 데이터가 접근된 버킷의 빈 슬롯 중 가장 앞에 위치한 빈 슬롯에 상기 새로운 데이터를 삽입하는 단계
    를 포함하는 데이터 탐색 방법.
  5. 데이터 탐색 장치에서 수행되는 데이터 탐색 방법에 있어서,
    상기 데이터 탐색 장치에서, 복수 개의 버킷 각각에 해시 함수간의 경계점을 저장하는 월(Wall)을 설정하는 단계;
    상기 데이터 탐색 장치에서, 상기 복수 개의 버킷 각각에 설정된 월을 기준으로 빈 슬롯을 탐색하는 단계; 및
    상기 데이터 탐색 장치에서, 상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계
    를 포함하고,
    상기 데이터 탐색 장치에서, 상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계는,
    상기 복수 개의 버킷 각각에 데이터의 입력이 가능한 빈 슬롯이 존재하지 않을 경우, 새로운 데이터를 삽입하기 위한 밀어내기 연산을 수행하는 단계
    를 포함하고,
    상기 새로운 데이터에 의하여 상기 복수 개의 버킷 각각에 존재하는 슬롯 중 어느 하나의 슬롯이 랜덤적으로 밀어내기 대상으로 선택되는
    데이터 탐색 방법.
  6. 제5항에 있어서,
    상기 데이터 탐색 장치에서, 상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계는,
    상기 새로운 데이터에 의하여 선택된 슬롯에 존재하는 데이터가 제 N(N은 자연수) 해시 함수에 의한 위치의 버킷일 경우, 제 N+1 해시 함수에 의한 위치의 버킷으로 밀려나는 단계
    를 포함하는 데이터 탐색 방법.
  7. 제5항에 있어서,
    상기 데이터 탐색 장치에서, 상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계는,
    상기 새로운 데이터에 의하여 밀어내기 대상으로 선택된 슬롯이 상기 월을 기준으로 상기 월의 앞부분에 존재할 경우, 상기 밀어내기 대상으로 선택된 슬롯의 데이터를 밀어내고, 상기 새로운 데이터를 삽입하고,
    상기 밀어내기 대상으로 선택된 슬롯이 상기 월을 기준으로 상기 월의 뒷부분에 존재할 경우, 상기 월과 뒤로 인접한 슬롯의 데이터를 상기 밀어내기 대상으로 선택된 슬롯으로 이동시키고, 상기 새로운 데이터를 상기 월과 뒤로 인접한 슬롯으로 이동시키고, 상기 월을 상기 새로운 데이터의 뒤로 조정하는 단계
    를 포함하고,
    상기 새로운 데이터는 첫 번째 해시 함수에 의한 데이터인,
    데이터 탐색 방법.
  8. 제5항에 있어서,
    상기 데이터 탐색 장치에서, 상기 탐색된 빈 슬롯에 해시 함수에 의한 데이터를 삽입하는 단계는,
    상기 새로운 데이터에 의하여 밀어내기 대상으로 선택된 슬롯이 상기 월을 기준으로 상기 월의 뒷부분에 존재할 경우, 상기 월과 앞으로 인접한 슬롯의 데이터를 상기 밀어내기 대상으로 선택된 슬롯으로 이동시키고, 상기 새로운 데이터를 상기 월과 앞으로 인접한 슬롯에 이동시키고, 상기 월을 상기 새로운 데이터의 앞으로 조정하는 단계
    를 포함하고,
    상기 새로운 데이터는 두 번째 해시 함수에 의한 데이터인,
    데이터 탐색 방법.
KR1020180138765A 2018-11-13 2018-11-13 버킷 내부에서 해시 함수의 분류를 이용한 효율적인 쿠쿠 해시 방법 KR102085132B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180138765A KR102085132B1 (ko) 2018-11-13 2018-11-13 버킷 내부에서 해시 함수의 분류를 이용한 효율적인 쿠쿠 해시 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180138765A KR102085132B1 (ko) 2018-11-13 2018-11-13 버킷 내부에서 해시 함수의 분류를 이용한 효율적인 쿠쿠 해시 방법

Publications (1)

Publication Number Publication Date
KR102085132B1 true KR102085132B1 (ko) 2020-04-20

Family

ID=70467452

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180138765A KR102085132B1 (ko) 2018-11-13 2018-11-13 버킷 내부에서 해시 함수의 분류를 이용한 효율적인 쿠쿠 해시 방법

Country Status (1)

Country Link
KR (1) KR102085132B1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220064859A (ko) 2020-11-12 2022-05-19 숭실대학교산학협력단 이기종 분산 기계학습 플랫폼 환경을 위한 로드 밸런싱 방법, 이를 수행하기 위한 기록 매체 및 장치
CN116401258A (zh) * 2023-06-06 2023-07-07 支付宝(杭州)信息技术有限公司 数据索引方法、数据查询方法及对应装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080046023A (ko) * 2006-11-21 2008-05-26 한양대학교 산학협력단 플래시 메모리의 공간정보 관리장치 및 그 방법
JP2009253433A (ja) * 2008-04-02 2009-10-29 Mitsubishi Electric Corp 連想メモリ装置
KR20150045073A (ko) * 2013-10-18 2015-04-28 ㈜윈웨이시스템 데이터 운용 방법 및 이를 지원하는 시스템
KR20180121202A (ko) * 2017-04-28 2018-11-07 한양대학교 에리카산학협력단 비휘발성 메모리 저장 장치를 위한 하이브리드 해시 인덱스

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080046023A (ko) * 2006-11-21 2008-05-26 한양대학교 산학협력단 플래시 메모리의 공간정보 관리장치 및 그 방법
JP2009253433A (ja) * 2008-04-02 2009-10-29 Mitsubishi Electric Corp 連想メモリ装置
KR20150045073A (ko) * 2013-10-18 2015-04-28 ㈜윈웨이시스템 데이터 운용 방법 및 이를 지원하는 시스템
KR20180121202A (ko) * 2017-04-28 2018-11-07 한양대학교 에리카산학협력단 비휘발성 메모리 저장 장치를 위한 하이브리드 해시 인덱스

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220064859A (ko) 2020-11-12 2022-05-19 숭실대학교산학협력단 이기종 분산 기계학습 플랫폼 환경을 위한 로드 밸런싱 방법, 이를 수행하기 위한 기록 매체 및 장치
CN116401258A (zh) * 2023-06-06 2023-07-07 支付宝(杭州)信息技术有限公司 数据索引方法、数据查询方法及对应装置
CN116401258B (zh) * 2023-06-06 2023-09-22 支付宝(杭州)信息技术有限公司 数据索引方法、数据查询方法及对应装置

Similar Documents

Publication Publication Date Title
US9626374B2 (en) Optimizing a partition in data deduplication
US9442694B1 (en) Method for storing a dataset
JP2007122302A (ja) 情報検索システムとインデクス管理方法およびプログラム
US11573793B2 (en) Lazy push strategies for vectorized D-Heaps
US20090007116A1 (en) Adjacent data parallel and streaming operator fusion
KR102085132B1 (ko) 버킷 내부에서 해시 함수의 분류를 이용한 효율적인 쿠쿠 해시 방법
Lang et al. Make the most out of your SIMD investments: counter control flow divergence in compiled query pipelines
US20210232402A1 (en) Method for vectorizing heapsort using horizontal aggregation simd instructions
US20170103068A1 (en) Data deduplication using a small hash table
US11514010B2 (en) Deduplication-adapted CaseDB for edge computing
KR20180137521A (ko) 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법
CN115335823A (zh) 用于最短路径图搜索的向量化的队列
US10380111B2 (en) System and method for searching data
CN111159490B (zh) 一种模式字符串的处理方法、装置及设备
US8407187B2 (en) Validating files using a sliding window to access and correlate records in an arbitrarily large dataset
JP6160232B2 (ja) コンパイルプログラムおよびコンパイル方法
KR102142767B1 (ko) 데이터간 상대적 거리 비율 및 클러스터의 중심 데이터 간의 거리를 고려한 데이터 클러스터링 방법 및 시스템
JP2865831B2 (ja) 並列ストリング・サーチ装置
KR102023274B1 (ko) 슬롯별 n-비트 카운터를 이용한 변형 쿠쿠 해시 알고리즘
KR102244450B1 (ko) 다수의 이벤트 시퀀스 데이터에서 최신 효과를 기반으로 한 패턴 마이닝 방법
KR101993555B1 (ko) Rcc와 쿠쿠 해시 테이블을 이용한 lrfu 기반의 캐시 교체 방법 및 시스템
KR102190285B1 (ko) 공간효율적인 순위다중패턴매칭 알고리즘
US11294566B2 (en) Method, electronic device and computer program product for managing disks
KR102158317B1 (ko) 2차 q-그램에 대한 핑거프린트를 이용한 순위패턴매칭 알고리즘
KR101543841B1 (ko) 멀티셋의 개별 원소의 개수를 카운팅하는 방법 및 시스템

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant