KR101416586B1 - 해쉬를 이용한 전문 기반 논리 연산 수행 방법 - Google Patents

해쉬를 이용한 전문 기반 논리 연산 수행 방법 Download PDF

Info

Publication number
KR101416586B1
KR101416586B1 KR1020120115454A KR20120115454A KR101416586B1 KR 101416586 B1 KR101416586 B1 KR 101416586B1 KR 1020120115454 A KR1020120115454 A KR 1020120115454A KR 20120115454 A KR20120115454 A KR 20120115454A KR 101416586 B1 KR101416586 B1 KR 101416586B1
Authority
KR
South Korea
Prior art keywords
hash
data structure
bucket
logic
hash data
Prior art date
Application number
KR1020120115454A
Other languages
English (en)
Other versions
KR20140049328A (ko
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 KR1020120115454A priority Critical patent/KR101416586B1/ko
Priority to CN201280025701.XA priority patent/CN103874996B/zh
Priority to US14/116,834 priority patent/US9396223B2/en
Priority to PCT/KR2012/008715 priority patent/WO2014003249A1/ko
Priority to JP2015538003A priority patent/JP6078652B2/ja
Publication of KR20140049328A publication Critical patent/KR20140049328A/ko
Application granted granted Critical
Publication of KR101416586B1 publication Critical patent/KR101416586B1/ko

Links

Images

Classifications

    • 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
    • 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/33Querying
    • G06F16/3331Query processing
    • G06F16/334Query execution
    • G06F16/3341Query execution using boolean model
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT

Landscapes

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

Abstract

본 발명은 해쉬를 이용한 전문 기반 논리 연산 수행 방법에 관한 것으로, 그 방법은, 로직 오퍼레이터 종류에 따라 로직 상태를 달리하는 해쉬 자료구조를 현재의 로직 오퍼레이터의 종류에 맞추어 생성하는 단계; 첫 번째 오퍼랜드 자료에 해당하는 해쉬 노드들을 상기 해쉬 자료구조에서 차례로 할당받은 버킷에 삽입하는 단계; 및 현재의 로직 오퍼레이터 종류가 AND인 경우 상기 해쉬 자료구조에서 상기 삽입된 버킷들 또는 이전 연산의 결과값으로 선정된 버킷들 중에서 두 번째 오퍼랜드 자료에 해당하는 해쉬 노드들과 일치하는 버킷들만의 결과값으로 선정하고, OR인 경우 두 번째 오퍼랜드 자료에 해당하는 해쉬 노드들 중에서 상기 해쉬 자료구조에서 검색되지 않는 해쉬 노드들에 대하여 상기 해쉬 자료구조에서 버킷을 차례로 할당받아 삽입하여 상기 해쉬 자료구조 내의 유효한 모든 버킷들을 결과값으로 선정하는 단계;를 포함하여 이루어진다.

Description

해쉬를 이용한 전문 기반 논리 연산 수행 방법{Method for operating full-text based logical predicates with hash}
본 발명은 전문(Full-Text) 기반 데이터베이스에서 키워드 검색 시 사용되는 논리 연산을 효율적으로 수행하기 위한 방법에 관한 것으로, 특히 시스템 자원이 제한적인 모바일 단말기 상에서 최소한의 자원을 사용하여 효율적으로 로직 연산을 수행할 수 있는 방법에 관한 것이다.
정보 검색 시스템은 사용자가 필요하다고 예측되는 정보나 데이터를 미리 수집, 가공, 처리하여 찾기 쉬운 형태로 축적해 놓은 데이터베이스로부터 사용자의 요구에 적합한 정보를 신속하게 찾아내어 사용자에게 제공하는 시스템을 말한다.
데이터베이스에 축적되어 있는 정보의 종류에 따라 정보 검색 시스템은 참조 검색, 사실 검색, 전문(full-text) 검색으로 구분된다. 참조 검색은 사용자가 알고자 하는 주제를 핵심적으로 다루고 있는 문헌의 서지사항을 검색하는 것으로, DIRLOG, BRS 등의 온라인 정보검색 시스템이 여기에 해당한다. 사실 검색은 일반 데이터나 수치 데이터 및 사실 데이터를 검색할 수 있는 것으로, 화학물질을 검색하는 CAS(Chemical Abstracts Service On-line), 반도체 재료의 데이터를 검색하는 EMIS(Electronic Information Service) 등이 이 범주에 속한다. 전문 검색은 문헌의 전문(full-text)을 축적해 놓은 데이터베이스로부터 서지적 데이터뿐만 아니라 해당 문장이나 원문 전부를 필요에 따라 검색해서 볼 수 있는 것으로 법률 정보를 검색할 수 있는 렉시스(LEXIS)나 웨스트로(WESTLAW), 신문 기사를 검색할 수 있는 넥시스(NEXIS), 다우존스 리트리벌(Dow Jones/Retrieval) 등이 있다.
전문(Full-Text) 기반 데이터베이스에서 키워드 검색 시 사용되는 논리 연산에는 대용량의 컴퓨팅 자원이 요구된다. 그런데, 모바일 환경에서 사용할 수 있는 컴퓨팅 자원은 한정될 수밖에 없어, 논리 연산 수행 시 검색 속도가 늦어진다.
따라서 모바일 단말기 상의 전문(Full-Text) 기반 검색 시스템에서는 제공하는 논리 연산자 사용 개수가 극히 제한적이어서, 효과적인 키워드 검색이 이루어지지 않는다는 문제점이 있다.
본 발명은 상기의 문제점을 해결하기 위하여 안출된 것으로, 해쉬를 이용한 풀텍스트(Full-Text) 기반 논리 연산자 평가방법을 제안함으로써, 시스템 자원이 제한적인 모바일 단말기 상에서 최소한의 자원을 활용하여 최적의 AND/OR 로직 연산을 수행할 수 있도록 하며, 로직 연산 후 외부에서 로직 연산 결과 데이터를 획득할 수 있도록 하는 해쉬를 이용한 전문 기반 논리 연산 수행 방법을 제공함을 그 목적으로 한다.
상기의 목적들을 달성하기 위하여, 본 발명에 의한 해쉬를 이용한 전문 기반 논리 연산 수행 방법은, 로직 오퍼레이터 종류에 따라 로직 상태를 달리하는 해쉬 자료구조를 현재의 로직 오퍼레이터에 대응하여 생성하는 단계; 첫 번째 오퍼랜드 자료에 해당하는 해쉬 노드들을 상기 해쉬 자료구조에서 차례로 할당받은 버킷에 삽입하는 단계; 및 현재의 로직 오퍼레이터 종류가 AND인 경우 상기 해쉬 자료구조에서 상기 단계에서 삽입된 버킷들 또는 이전 연산의 결과값으로 선정된 버킷들 중에서 두 번째 오퍼랜드 자료에 해당하는 해쉬 노드들과 일치하는 버킷들만의 결과값으로 선정하고, OR인 경우 두 번째 오퍼랜드 자료에 해당하는 해쉬 노드들 중에서 상기 해쉬 자료구조에서 검색되지 않는 해쉬 노드들에 대하여 상기 해쉬 자료구조에서 버킷을 차례로 할당받아 삽입하여 상기 해쉬 자료구조 내의 유효한 모든 버킷들을 결과값으로 선정하는 단계;를 포함하여 이루어진다.
또, 상기의 목적들을 달성하기 위하여, 본 발명에 의한 컴퓨터가 읽을 수 있는 기록매체는, 입력값으로 해쉬 ID가 사용되는 MOD 연산으로 이루어진 해쉬 함수와, 해쉬키에 대응하는 버킷의 시작 위치를 지정하는 해쉬 노드들의 리스트 집합인 해쉬 테이블과, 해쉬 ID와 해쉬 체인용 포인터를 버킷의 구성요소로 하는 버킷 블록을 구비하는 해쉬 자료구조; 및 로직 오퍼레이터 종류에 따라 로직 상태를 달리하는 해쉬 자료구조를 현재의 로직 오퍼레이터에 대응하여 생성하여 메모리를 할당하고 초기화하는 StartUp 모듈과, 첫 번째 오퍼랜드 자료에 해당하는 해쉬 노드를 상기 해쉬 자료구조에서 할당받은 버킷에 삽입하는 Insert 모듈과, 현재의 로직 오퍼레이터 종류가 AND인 경우 상기 해쉬 자료구조에서 상기 Insert 모듈에서 삽입된 버킷들 또는 이전 연산의 결과값으로 선정된 버킷들 중에서 두 번째 오퍼랜드 자료에 해당하는 해쉬 노드와 일치하는 버킷을 결과값으로 선정하고, OR인 경우 두 번째 오퍼랜드 자료에 해당하는 해쉬 노드가 상기 해쉬 자료구조에서 검색되지 않으면 상기 해쉬 자료구조에서 할당받은 버킷에 삽입하는 Logic 모듈을 구비하는 해쉬를 이용한 전문 기반 논리 연산 수행을 위한 사용자 인터페이스;를 기록한 것을 특징으로 한다.
이상 설명한 바와 같이 본 발명에 따르면, 해쉬를 이용하여 전체적인 리소스를 줄임으로써 제한된 시스템 자원을 효과적으로 활용할 수 있고, 메모리 단편화를 억제하여 가용한 시스템 자원을 증가시킬 수 있으며, 따라서 원할한 서비스의 제공이 가능하며 성능상의 이득도 확보할 수 있다.
특히, 메모리 컴팩션 기능이 일반 PC 보다 단순한 모바일 단말기상에서는 그 기대 효과가 더욱 크다.
도 1은 본 발명에 의한 해쉬를 이용한 전문 기반 논리 연산 수행 방법에서 사용하는 해쉬 자료구조를 도시한 것이고,
도 2는 본 발명에 사용되는 사용자 인터페이스 중 StartUp 모듈의 수행 동작을 나타낸 도면이고,
도 3은 본 발명에 사용되는 사용자 인터페이스 중 CleanUp 모듈의 수행 동작을 나타낸 도면이고,
도 4는 본 발명에 사용되는 사용자 인터페이스 중 Insert 모듈의 수행 동작을 나타낸 도면이고,
도 5는 본 발명에 사용되는 사용자 인터페이스 중 Logic 모듈의 수행 동작을 나타낸 도면이고,
도 6은 본 발명에 사용되는 사용자 인터페이스 중 ChangeLogic 모듈의 수행 동작을 나타낸 도면이고,
도 7은 본 발명에 사용되는 사용자 인터페이스 중 Size 모듈의 수행 동작을 나타낸 도면이고,
도 8은 본 발명에 사용되는 사용자 인터페이스 중 Next 모듈의 수행 동작을 나타낸 도면이고,
도 9A 내지 도 9C는 본 발명에 따른 예시를 위한 테이블 및 각 색인을 나타낸 것이고,
도 10A 내지 도 14E는 본 발명에 따른 각 예시의 삽입 연산, 로직 연산, 검색 결과를 각각 설명하는 도면이다.
이하에서는 첨부도면을 참조하여 본 발명에 대해 상세히 설명한다.
본 발명에 의한 해쉬를 이용한 전문 기반 논리 연산 수행 방법에서 사용하는 해쉬 자료구조를 도 1을 참조하여 설명하기로 한다.
본 발명에서 사용되는 해쉬 자료구조에는 해쉬 함수(도시되지 않음), 해쉬 테이블(10), 버킷 블록(20), 커서(40), AND 카운터(50), OR 카운터(51) 등이 포함될 수 있다.
해쉬 함수는 해쉬 ID를 입력으로 하여 해쉬키를 생성하는 함수로, MOD 연산으로 이루어짐이 바람직하다. 또한, 전문(Full-Text) 데이터베이스의 레코드 식별자(ID)가 해쉬 ID로 사용된다.
해쉬 테이블(10)은 해쉬키에 대응하는 버킷(30)의 시작 위치를 지정하는 해쉬 노드들의 리스트 집합이다. 해쉬 테이블(10)의 크기는 사용자에 의해 입력되는 PreCount를 이용하여 결정되는데, 버킷(30)의 고른 분포를 위하여 버킷 블록(20)의 크기보다 약간 큰 소수(a prime number)로 정하여짐이 바람직하다.
버킷(30)은 해쉬에 삽입되는 자료구조로서, 해쉬 충돌시 해당 버킷을 검색할 수 있도록 해쉬 ID와 해쉬 체인(32)용 포인터를 포함한다. 버킷(30)에는 로직 연산의 결과값을 결정하기 위한 카운터와 사용자가 해쉬 노드에 입력하는 데이터(사용자 데이터1, 사용자 데이터2 등)가 포함될 수 있다.
버킷 블록(20)은 해쉬에 삽입될 버킷(30)의 예상 개수인 PreCount를 이용하여 미리 생성되는 메모리 버퍼이다.
커서(40)는 버킷 볼록(20)에서 버킷(30)의 위치를 지정한 것으로, 로직 연산의 결과를 외부에서 용이하게 획득할 수 있도록 지원하기 위한 것이다.
AND 카운터(50)는 AND 로직 연산의 결과값의 개수를 카운트하기 위한 것이고, OR 카운터(51)는 OR 로직 연산의 결과값의 개수를 카운트하기 위한 것이다.
본 발명에서는 메모리 관리자(60)라는 모듈을 설정하여, 해쉬 내에서 사용하는 메모리를 관리하며, 특히 버킷 블록(20)의 자동추가 기능 및 현재의 버킷이 삽입될 위치 정보를 관리하도록 한다. 메모리 관리자(60)는 일정 범위별로 버킷 블록의 크기를 미리 정해두고, 사용자로부터 입력받는 PreCount 값이 어떤 범위에 속하는가에 따라 대응하는 값을 생성하고자 하는 버킷 블록의 크기로 결정한다. 여기서 버킷 블록의 크기는 메모리 관리를 용이하게 하기 위하여 2n(여기서, n은 정수) 값으로 결정되는 것이 바람직하다. 사용자에 의해 입력되는 PreCount는 해쉬 체인(32) 내에 버킷이 2~3개가 되도록 정해지는 것이 바람직한데, 색인을 통해 로직 연산의 첫 번째 오퍼랜드 자료에 해당하는 집합에서의 해쉬 노드의 개수를 사용하면 효과적이다.
버킷 블록의 크기보다 실제로 삽입되는 버킷의 개수가 많을 경우, 메모리 관리자(60)는 자동으로 새로운 버킷 블록(20)을 생성한다. 따라서, 종래의 해쉬 자료구조에 의하면 해쉬 충돌시 버킷을 매번 새롭게 메모리 공간을 할당받아 생성하여 연결 리스트 형태로 구성하여야 하지만, 본 발명에 의하면 버킷 블록(20) 내에 이미 생성된 버킷(30)들 중에서 차례로 할당받아 연결 리스트 형태로 구성하여 사용할 수 있다.
본 발명에서 사용되는 사용자 인터페이스에는 StartUp, CleanUp, Insert, Logic, ChangeLogic, Size, Next가 포함된다.
(1) StartUp 모듈
도 2에 도시된 바와 같이 StartUp 모듈은 해쉬를 사용하기 위해서 초기화 및 자원 할당을 수행한다.
입력값은 로직 오퍼레이터, 오퍼레이터 개수, 예상 버킷 개수(PreCount)로 구성된다.
로직 오퍼레이터는 AND 또는 OR이다.
오퍼레이터 개수는 AND 또는 OR 로직 오퍼레이터가 연속적으로 나타나는 개수이다. 예를들어, 집합 A, B, C에 대해서 "A AND B AND C"라는 논리 연산이 있을 경우 오퍼레이터 개수는 2가 된다.
예상 버킷 개수(PreCount)는 해쉬 테이블 및 버킷 블럭의 크기를 결정하는데 중요한 입력값으로 사용된다.
StartUp 모듈이 수행하는 동작은 다음과 같다.
논리 연산 Hash가 가지는 모든 멤버 변수를 초기화한다(S100).
사용자가 입력한 값(PreCount)을 이용하여 버킷 블록 및 해쉬 테이블의 크기를 결정한다(S110). 메모리 관리자(60)는 일정 범위별로 버킷 블록의 크기를 미리 정해두고, PreCount 값이 어떤 범위에 속하는가에 따라 대응하는 값을 버킷 블록의 크기로 결정한다. 여기서 버킷 블록의 크기는 메모리 관리를 용이하게 하기 위하여 2n(여기서, n은 정수) 값으로 결정되는 것이 바람직하다. 또한, 해쉬 테이블의 크기는 버킷 블록의 크기보다 약간 큰 소수로 정하여진다.
결정된 해쉬 테이블의 크기를 이용하여 해쉬 테이블(10)에 메모리를 할당하고 초기화한다(S120).
이후, 입력된 로직 오퍼레이터의 종류(AND 또는 OR)에 따라 로직 상태를 달리하는 해쉬 자료구조를 생성한다(S130, S140). 즉, 버킷의 종류는 AND 로직용(30a)과 OR 로직용(30b)으로 구분되어 있으며, AND 로직용 버킷(30a)에는 추가적으로 카운터가 포함되어 있다. 이 카운터는 AND 로직연산 시 사용된다. AND 로직 상태의 해쉬 자료구조에서는 AND 로직 연산만이 가능하고, OR 로직 상태의 해쉬 자료구조에서는 OR 로직 연산만이 가능하지만, 로직 오퍼레이터의 종류가 다른 것으로 바뀌게 되면 아래에서 설명하게 되는 ChangeLogic 모듈에 의해 해쉬 자료구조의 로직 상태를 변경할 수 있다.
(2) CleanUp 모듈
도 3에 도시된 바와 같이 CleanUp 모듈은 모든 로직 연산을 마치고 해쉬 내 자원을 해제하는 기능을 수행한다.
입력값은 없다.
CleanUp 모듈이 수행하는 동작은 다음과 같다.
버킷 블록(20)의 메모리를 반환하고(S200), 해쉬 테이블(10)의 메모리를 반환하고(S210), 모든 멤버 변수를 초기화한다(S220).
(3) Insert 모듈
도 4에 도시된 바와 같이, Insert 모듈은 초기화된 해쉬 자료구조에 로직 연산을 수행하기 위해서 첫 번째 오퍼랜드 자료를 삽입한다. 만약 집합 A와 B에 대하여 "A AND B"와 같은 연산이 있을 때, 집합 A의 원소들 중 하나를 해쉬에 삽입하는 기능을 수행한다.
입력값은 해쉬 노드로서 입력할 사용자 데이터 자료이다.
해쉬노드(데이터자료) : 해쉬 함수에 사용될 해쉬 ID와 기타 사용자가 입력한 자료 등으로 구성된다.
Insert 모듈이 수행하는 동작은 다음과 같다.
먼저 해쉬 내에 입력할 자료가 이미 존재하는지 검색을 수행한다(S300). 즉, 해쉬 내에 입력된 해쉬 노드의 해쉬 ID와 동일한 해쉬 ID를 갖는 버킷이 존재하는지를 검색한다.
만약, 검색 결과 이미 존재하면 아무것도 수행하지 않는다.
만약, 검색 결과 존재하지 않으면, 메모리 관리자(60)로부터 하나의 버킷을 할당받고(S310), 해쉬 함수를 이용하여 해쉬키를 생성한 후(S320), 해쉬키에 해당하는 해쉬 체인에 할당받은 버킷을 연결하고(S330), 입력 자료를 기록한다(S340).
OR 카운터를 증가시킨다(S350).
(4) Logic 모듈
도 5에 도시된 바와 같이, Logic 모듈은 로직 오퍼레이터 뒤에 나오는 오퍼랜드를 입력하여 로직 연산을 수행한다. 만약 집합 A와 B에 대하여 "A AND B"와 같은 연산이 있을 때, 집합 B의 원소들 중 하나에 대하여 해쉬에 AND 연산 기능을 수행하고, 만약 집합 A와 B에 대하여 "A OR B"와 같은 연산이 있을 때, 집합 B의 원소들 중 하나에 대하여 해쉬에 OR 연산 기능을 수행한다.
입력값은 오페레이터 번호와 해쉬노드(데이터자료) 로 구성된다.
오퍼레이터 번호 : 연속적인 동일한 로직 연산에서 몇 번째 로직 오퍼레이터인지를 의미하는 값이다. 예를들어 "A AND B AND C AND D"라는 로직 연산이 있을때 오퍼레이터 개수는 3이며, 첫 번째 로직 연산(A AND B) 시의 오퍼레이터 번호는 1이며, 두 번째 로직 연산((첫 번째 로직 연산 결과) AND C) 시의 오퍼레이터 번호는 2이며, 세 번째 로직 연산((두 번째 로직 연산 결과) AND D) 시의 오퍼레이터 번호는 3이 된다.
해쉬노드(데이터자료) : 해쉬 함수에 사용될 해쉬 ID와 기타 사용자가 입력한 자료 등으로 구성된다.
Logic 모듈에서는 현재의 로직 오퍼레이터 종류가 AND인 경우 해쉬 자료구조에서 Insert 모듈에서 삽입된 버킷들 또는 이전 연산의 결과값으로 선정된 버킷들 중에서 두 번째 오퍼랜드 자료에 해당하는 해쉬 노드와 일치하는 버킷을 결과값으로 선정한다. 반면에, OR인 경우 두 번째 오퍼랜드 자료에 해당하는 해쉬 노드가 해쉬 자료구조에서 검색되지 않으면 해쉬 자료구조에서 할당받은 버킷에 삽입하는 동작을 수행한다. 구체적인 동작은 다음과 같다.
먼저 해쉬 내에 입력할 자료가 이미 존재하는지 검색을 수행한다(S400). 즉, 해쉬 내에 입력된 해쉬 노드의 해쉬 ID와 동일한 해쉬 ID를 갖는 버킷이 존재하는지를 검색한다.
S400 단계의 검색 결과가 이미 존재하면 현재의 로직 오퍼레이터가 AND인지 OR인지를 확인한다(S410). 현재의 로직 오퍼레이터는 StartUp 모듈에서 입력받은 로직 오퍼레이터로 설정되었다가, ChangeLogic 모듈이 수행되면 새로이 입력받은 로직 오퍼레이터로 변경된다.
만약 검색 결과가 이미 존재하고, 현재의 로직 오퍼레이터가 OR이면, 아무것도 수행하지 않는다.
만약 검색 결과가 이미 존재하고, 현재의 로직 오퍼레이터가 AND이면, 검색된 버킷의 카운터가 입력받은 오퍼레이터 번호에서 1을 뺀 값과 같은 경우(이전 연산까지 AND 로직의 결과값이 되는 버킷)(S420) 검색된 버킷의 카운트를 1 증가시키고(현재 연산의 결과값)(S430), 검색된 버킷의 증가된 카운터가 StartUp 모듈 또는 ChangeLogic 모듈에서 입력받은 오퍼레이터 개수와 일치하면(AND 연산의 최종 결과값)(S440) AND 카운터를 1 증가시킨다(S450). 이에 비하여, 검색된 버킷의 카운터가 입력받은 오퍼레이터 번호에서 1을 뺀 값과 다르거나, 검색된 버킷의 증가된 카운터가 StartUp 모듈 또는 ChangeLogic 모듈에서 입력받은 오퍼레이터 개수와 다른 경우에는 아무것도 수행하지 않는다.
S400 단계의 검색 결과가 존재하지 않으면 현재의 로직 오퍼레이터가 AND인지 OR인지를 확인한다(S460).
만약 검색 결과가 존재하지 않고, 현재의 로직 오퍼레이터가 AND이면, 아무것도 수행하지 않는다.
만약 검색 결과가 존재하지 않고, 현재의 로직 오퍼레이터가 OR이면, 메모리 관리자(60)로부터 하나의 버킷을 할당받고(S470), 해쉬 함수를 이용하여 해쉬키를 생성한 후(S480), 해쉬키에 해당하는 해쉬 체인에 할당받은 버킷을 연결하고(S490), 입력 자료를 기록한 후(S500), OR 카운터를 증가시킨다(S510).
(5) ChangeLogic 모듈
ChangeLogic 모듈은 로직 오퍼레이터가 변화될 때 사용하며, 해쉬 내부의 로직 상태를 변경시키는 기능을 수행한다. 만약 집합 A, B, C에 대해서 "(A AND B) OR C"와 같은 연산이 있을 때, AND 로직 연산 후 해쉬의 로직 상태를 AND에서 OR로 변경하는 기능을 수행한다.
입력값은 로직 오퍼레이터, 오퍼레이터 개수로 구성된다.
로직 오퍼레이터 : AND 또는 OR
오퍼레이터 개수 : AND 또는 OR 오퍼레이터가 연속적으로 나타나는 개수
ChangeLogic 모듈 중 AND에서 OR로 변경하는 동작은 도 6에 도시된 바와 같다.
먼저 입력값인 로직 오퍼레이터, 오퍼레이터 개수와 현재의 해쉬 자료구조에 설정되어 있는 예상 버킷 개수((PreCount)를 사용하여 내부적으로 새로운 해쉬 자료구조를 생성한다. 이 경우, 상기한 StartUp 모듈이 이용된다.
이후, 아래에서 설명할 Next 모듈을 이용하여 현재의 해쉬 자료구조에서 결과값만을 획득하여 새로운 해쉬 자료구조에 삽입하고, 현재의 해쉬 자료구조에 있는 멤버 변수들을 새로운 해쉬 자료구조의 멤버 변수에 매핑시킨다.
이후, 현재의 해쉬 자료구조에 대하여 CleanUp 모듈을 이용하여 메모리 자원을 해제시킨다.
이후, 내부적으로 생성한 새로운 해쉬 자료구조의 멤버 변수 및 포인터 등을 현재의 해쉬 자료구조에 매핑시키고, 내부적으로 생성한 새로운 해쉬 자료구조의 객체 자료만을 소멸시킨다. 이 경우, 새로운 해쉬 자료구조를 CleanUp 하지는 않는다.
ChangeLogic 모듈의 구현을 위해서는, 해쉬 내부의 멤버들 중 사용자의 입력 데이터를 저장하는 버퍼(해쉬 테이블, 버킷 블럭)는 반드시 포인터를 사용하여 Heap으로부터 할당받아야 하며, 이로써 현재 해쉬 자료구조의 로직 상태를 새로운 로직 상태로 변경하는 것이 가능하다.
이상과 같은 동작에 의해 로직 오퍼레이터가 AND에서 OR로 변경될 때, 해쉬 자료구조에 할당되는 메모리의 크기를 대폭 줄일 수 있다.
한편, ChangeLogic 모듈 중 OR에서 AND로 변경하는 과정에서는 할당되는 메모리가 줄어들지 않기 때문에, 단순히 현재의 해쉬 자료구조의 로직 상태를 변경시켜준다. 이때, 현재의 해쉬 자료구조의 버킷은 AND 로직용 버킷(30a)으로 변경된다.
(6) Size 모듈
도 7을 참조하면, Size 모듈은 로직연산의 결과 갯수를 사용자에게 반환하는 기능을 수행한다.
입력값은 없다.
현재의 로직 오퍼레이터가 AND인지 OR인지를 확인하여(S700), 해쉬 자료구조의 로직 상태가 AND 로직 상태이면 AND 카운터 값을 반환하고(S710), 해쉬 자료구조의 로직 상태가 OR 로직 상태이면 OR 카운터 값을 반환한다(S720).
(7) Next 모듈
도 8을 참조하면, Next 모듈은 로직 연산 후 로직 연산의 결과를 사용자에게 반환하는 기능을 수행한다.
입력값은 없다.
Next 모듈의 경우, 현재의 로직 오퍼레이터 종류가 AND인 경우(현재의 해쉬 자료구조가 AND 로직 연산을 수행한 후인 경우) 해쉬 자료구조에서 버킷의 카운터가 AND 로직 오퍼레이터의 개수와 동일한 버킷만을 찾아 최종 결과값으로 하여 커서가 위치한 버킷 내의 사용자 자료를 하나씩 출력하고, OR인 경우(현재의 해쉬 자료구조가 OR 로직 연산을 수행한 후인 경우) 해쉬 자료구조 내의 유효한 모든 버킷들을 최종 결과값으로 하여 커서가 위치한 버킷 내의 사용자 자료를 하나씩 출력한다. 구체적인 동작은 다음과 같다.
현재의 로직 오퍼레이터가 AND인지 OR인지를 확인하여(S800), 해쉬 자료구조의 로직 상태가 AND 로직 상태이면 커서를 1 증가시키고, 커서의 위치에서 버킷을 획득한다(S810).
획득된 버킷이 유효하지 않을 경우, 해쉬 자료구조 내 모든 버킷 블럭을 순회한 것이므로 사용자에게 'No Data'를 반환하게 된다(S820).
획득된 버킷이 유효한 경우, 버킷 내에 있는 카운터 값과 오퍼레이터 개수를 비교하여 같은 경우 버킷 내의 사용자 자료를 반환하고(S830), 같지 않은 경우 S810 단계로 다시 돌아간다.
해쉬 자료구조의 로직 상태가 OR 로직 상태이면 커서를 1 증가시키고, 커서의 위치에서 버킷을 획득한다(S840).
획득된 버킷이 유효한 경우 버킷 내의 사용자 자료를 반환하고(S850), 유효하지 않을 경우 해쉬 자료구조 내 모든 버킷 블럭을 순회한 것이므로 사용자에게 'No Data'를 반환하게 된다.
이하에서, 본 발명에 의한 해쉬를 이용한 전문 기반 논리 연산 수행 과정을 예를 들어 설명하기로 한다.
도 9A에 도시된 "테이블A"에 대한 "명칭B + 색인" 및 "지역B + 색인"이 각각 도 9B 및 도 9C에 도시된 바와 같다고 가정한다.
(예제 1) "명칭"에 대하여 "현대"와 "자동차"를 포함하는 레코드를 검색하라.
검색 질의를 논리식으로 표현하면 다음과 같다.
명칭("현대" AND "자동차")
먼저, 도 10A에 도시된 바와 같이, "현대" 키워드로 색인에서 검색하여 해쉬에 삽입 연산을 수행한다.
다음, 도 10B에 도시된 바와 같이, "자동차" 키워드로 색인에서 검색하여 해쉬에 AND 로직 연산을 수행한다.
그러면, 검색 결과는 도 10C에 도시된 바와 같다.
예제 1에 대한 프로그램 코드는 다음과 같이 기술될 수 있다.
LogicHash hash; //해쉬 객체
hash.StartUp( LOGIC_AND, 1, 100 ); //로직 오퍼레이터, 오퍼레이터 개수, 예상 버킷 개수
hash.Insert( {1 사용자데이터} ); //삽입 연산
hash.Insert( {2 사용자데이터} );
hash.Insert( {4 사용자데이터} );
hash.Logic( 1, {1 사용자데이터} ); //AND 로직 연산
hash.Logic( 1, {4 사용자데이터} );
hash.Logic( 1, {5 사용자데이터} );
int size = hash.Size(); //결과 개수 획득
for(int i=0; i<size; i++) { //검색 결과 확인
{버킷} = hash.Next();
}
hash.CleanUp(); //해쉬 자원 해제
(예제 2) "명칭"에 대하여 "현대" 또는 "자동차"를 포함하는 레코드를 검색하라.
검색 질의를 논리식으로 표현하면 다음과 같다.
명칭("현대" OR "자동차")
먼저, 도 11A에 도시된 바와 같이, "현대" 키워드로 색인에서 검색하여 해쉬에 삽입 연산을 수행한다.
다음, 도 11B에 도시된 바와 같이, "자동차" 키워드로 색인에서 검색하여 해쉬에 OR 로직 연산을 수행한다.
그러면, 검색 결과는 도 11C에 도시된 바와 같다.
예제 2에 대한 프로그램 코드는 다음과 같이 기술될 수 있다.
LogicHash hash; //해쉬 객체
hash.StartUp( LOGIC_OR, 1, 100 ); //로직 오퍼레이터, 오퍼레이터 개수, 예상 버킷 개수
hash.Insert( {1 사용자데이터} ); //삽입 연산
hash.Insert( {2 사용자데이터} );
hash.Insert( {4 사용자데이터} );
hash.Logic( 1, {1 사용자데이터} ); //OR 로직 연산
hash.Logic( 1, {4 사용자데이터} );
hash.Logic( 1, {5 사용자데이터} );
int size = hash.Size(); //결과 개수 획득
for(int i=0; i<size; i++) { //검색 결과 확인
{버킷} = hash.Next();
}
hash.CleanUp(); //해쉬 자원 해제
(예제 3) "명칭"에 대하여 "현대"를 포함하고, "지역"이 "서울"인 레코드를 검색하라.
검색 질의를 논리식으로 표현하면 다음과 같다.
명칭("현대") AND 지역("서울")
먼저, 도 12A에 도시된 바와 같이, "현대" 키워드로 색인에서 검색하여 해쉬에 삽입 연산을 수행한다.
다음, 도 12B에 도시된 바와 같이, "서울" 키워드로 색인에서 검색하여 해쉬에 AND 로직 연산을 수행한다.
그러면, 검색 결과는 도 12C에 도시된 바와 같다.
예제 3에 대한 프로그램 코드는 다음과 같이 기술될 수 있다.
LogicHash hash; //해쉬 객체
hash.StartUp( LOGIC_AND, 1, 100 ); //로직 오퍼레이터, 오퍼레이터 개수, 예상 버킷 개수
hash.Insert( {1 사용자데이터} ); //삽입 연산
hash.Insert( {2 사용자데이터} );
hash.Insert( {4 사용자데이터} );
hash.Logic( 1, {1 사용자데이터} ); //AND 로직 연산
hash.Logic( 1, {2 사용자데이터} );
int size = hash.Size(); //결과 개수 획득
for(int i=0; i<size; i++) { //검색 결과 확인
{버킷} = hash.Next();
}
hash.CleanUp(); //해쉬 자원 해제
(예제 4) "명칭"에 대하여 "현대"와 "자동차"와 "세차장"을 포함하는 레코드를 검색하라.
검색 질의를 논리식으로 표현하면 다음과 같다.
명칭("현대"AND "자동차"AND "세차장")
먼저, 도 13A에 도시된 바와 같이, "현대" 키워드로 색인에서 검색하여 해쉬에 삽입 연산을 수행한다.
다음, 도 13B에 도시된 바와 같이, "자동차" 키워드로 색인에서 검색하여 해쉬에 1차 AND 로직 연산을 수행한다.
다음, 도 13C에 도시된 바와 같이, "세차장" 키워드로 색인에서 검색하여 해쉬에 2차 AND 로직 연산을 수행한다.
그러면, 검색 결과는 도 13D에 도시된 바와 같다.
예제 4에 대한 프로그램 코드는 다음과 같이 기술될 수 있다.
LogicHash hash; //해쉬 객체
hash.StartUp( LOGIC_AND, 2, 100 ); //로직 오퍼레이터, 오퍼레이터 개수, 예상 버킷 개수
hash.Insert( {1 사용자데이터} ); //삽입 연산
hash.Insert( {2 사용자데이터} );
hash.Insert( {4 사용자데이터} );
hash.Logic( 1, {1 사용자데이터} ); //1차 AND 로직 연산
hash.Logic( 1, {4 사용자데이터} );
hash.Logic( 1, {5 사용자데이터} );
hash.Logic( 2, {4 사용자데이터} ); //2차 AND 로직 연산
int size = hash.Size(); //결과 개수 획득
for(int i=0; i<size; i++) { //검색 결과 확인
{버킷} = hash.Next();
}
hash.CleanUp(); //해쉬 자원 해제
(예제 5) "명칭"에 대하여 "현대" 또는 "천국"을 포함하고, "지역"이 "대전"인 레코드를 검색하라.
검색 질의를 논리식으로 표현하면 다음과 같다.
명칭("현대"OR "천국") AND 지역("대전")
먼저, 도 14A에 도시된 바와 같이, "현대" 키워드로 색인에서 검색하여 해쉬에 삽입 연산을 수행한다.
다음, 도 14B에 도시된 바와 같이, "천국" 키워드로 색인에서 검색하여 해쉬에 OR 로직 연산을 수행한다.
다음, 도 14C에 도시된 바와 같이, 로직 오퍼레이터가 OR에서 AND로 변경되므로 해쉬 자료구조에 로직 상태를 변경한다.
다음, 도 14D에 도시된 바와 같이, "대전" 키워드로 색인에서 검색하여 해쉬에 AND 로직 연산을 수행한다.
그러면, 검색 결과는 도 14E에 도시된 바와 같다.
예제 5에 대한 프로그램 코드는 다음과 같이 기술될 수 있다.
LogicHash hash; //해쉬 객체
hash.StartUp( LOGIC_OR, 1, 100 ); //로직 오퍼레이터, 오퍼레이터 개수, 예상 버킷 개수
hash.Insert( {1 사용자데이터} ); //삽입 연산
hash.Insert( {2 사용자데이터} );
hash.Insert( {4 사용자데이터} );
hash.Logic( 1, {3 사용자데이터} ); //OR 로직 연산
hash.ChangeLogic( LOGIC_AND, 1 ); //해쉬 자료구조의 로직 상태 변경
hash.Logic( 1, {3 사용자데이터} ); //AND 로직 연산
hash.Logic( 1, {4 사용자데이터} );
int size = hash.Size(); //결과 개수 획득
for(int i=0; i<size; i++) { //검색 결과 확인
{버켓} = hash.Next();
}
hash.CleanUp(); //해쉬 자원 해제
한편, 상술한 본 발명의 실시예는 개인용 컴퓨터를 포함한 범용 컴퓨터에서 사용되는 매체에 기록될 수 있다. 상기 매체는 마그네틱 기록매체(예를 들면, 롬, 플로피 디스크, 하드 디스크 등), 광학적 판독매체(예를 들면, 씨디롬, 디브이디 등), 전기적 기록매체(예를 들면, 플레쉬 메모리, 메모리 스틱 등) 및 캐리어 웨이브(예를 들면, 인터넷을 통한 전송)와 같은 기록매체를 포함한다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.
10 : 해쉬 테이블 20 : 버킷 블록
30 : 버킷 40 : 커서
50 : AND 카운터 51 : OR 카운터
60 : 메모리 관리자

Claims (15)

  1. (a) 로직 오퍼레이터 종류에 따라 로직 상태를 달리하는 해쉬 자료구조를 현재의 로직 오퍼레이터의 종류에 맞추어 생성하는 단계;
    (b) 첫 번째 오퍼랜드 자료에 해당하는 해쉬 노드들을 상기 해쉬 자료구조에서 차례로 할당받은 버킷에 삽입하는 단계; 및
    (c) 현재의 로직 오퍼레이터 종류가 AND인 경우 상기 해쉬 자료구조에서 상기 (b) 단계에서 삽입된 버킷들 또는 이전 연산의 결과값으로 선정된 버킷들 중에서 두 번째 오퍼랜드 자료에 해당하는 해쉬 노드들과 일치하는 버킷들만의 결과값으로 선정하고, OR인 경우 두 번째 오퍼랜드 자료에 해당하는 해쉬 노드들 중에서 상기 해쉬 자료구조에서 검색되지 않는 해쉬 노드들에 대하여 상기 해쉬 자료구조에서 버킷을 차례로 할당받아 삽입하여 상기 해쉬 자료구조 내의 유효한 모든 버킷들을 결과값으로 선정하는 단계;를 포함함을 특징으로 하는 해쉬를 이용한 전문 기반 논리 연산 수행 방법.
  2. 제1항에 있어서,
    (d) 현재의 로직 오퍼레이터가 상기 해쉬 자료구조의 로직 상태와 다른 경우, 현재의 로직 오퍼레이터의 종류에 맞추어 상기 해쉬 자료구조의 로직 상태를 변경하는 단계;를 더 포함함을 특징으로 하는 해쉬를 이용한 전문 기반 논리 연산 수행 방법.
  3. 제1항에 있어서, 상기 해쉬 자료구조는
    입력값으로 해쉬 ID가 사용되는 MOD 연산으로 이루어진 해쉬 함수와,
    해쉬키에 대응하는 버킷의 시작 위치를 지정하는 해쉬 노드들의 리스트 집합인 해쉬 테이블과,
    해쉬 ID와 해쉬 체인용 포인터를 버킷의 구성요소로 하는 버킷 블록을 구비하는 것을 특징으로 하는 해쉬를 이용한 전문 기반 논리 연산 수행 방법.
  4. 제3항에 있어서, 로직 상태가 AND인 해쉬 자료구조의 버킷은
    로직 연산의 결과값을 결정하기 위한 카운터를 더 구비하는 것을 특징으로 하는 해쉬를 이용한 전문 기반 논리 연산 수행 방법.
  5. 제3항에 있어서, 상기 (b) 단계 또는 상기 (c) 단계에서의 버킷의 할당은
    미리 설정된 버킷 블록 내의 버킷들 중 사용되지 않은 버킷을 순서대로 할당받되, 버킷 블록 내에 사용되지 않은 버킷이 존재하지 않은 경우 새로운 버킷 블록을 생성한 후 생성된 새로운 버킷 블록 내의 사용되지 않은 버킷을 할당받는 것을 특징으로 하는 해쉬를 이용한 전문 기반 논리 연산 수행 방법.
  6. 제3항에 있어서, 상기 버킷 블록의 크기는
    2n(여기서, n은 정수) 값으로 결정되는 것을 특징으로 하는 해쉬를 이용한 전문 기반 논리 연산 수행 방법.
  7. 제6항에 있어서, 상기 해쉬 테이블의 크기는
    상기 버킷 블록의 크기보다 큰 솟수 중 하나로 정해짐을 특징으로 하는 해쉬를 이용한 전문 기반 논리 연산 수행 방법.
  8. 제3항에 있어서, 상기 해쉬 자료구조는
    AND 로직 연산의 결과값의 개수를 카운트하는 AND 카운터와,
    OR 로직 연산의 결과값의 개수를 카운트하는 OR 카운터를 더 구비함을 특징으로 하는 해쉬를 이용한 전문 기반 논리 연산 수행 방법.
  9. 제2항에 있어서, 상기 (d) 단계에서
    상기 해쉬 자료구조의 로직 상태를 AND에서 OR로 변경하는 경우, 새로운 해쉬 자료구조를 생성하여 기존 해쉬 자료구조의 결과값에 해당하는 버킷들을 새로운 해쉬 자료구조에 삽입하고, 기존의 해쉬 자료구조의 모든 자원을 해제하고, 새로운 해쉬 자료구조를 기존의 해쉬 자료구조에 매핑하는 것임을 특징으로 하는 해쉬를 이용한 전문 기반 논리 연산 수행 방법.
  10. 제4항에 있어서,
    (e) 현재의 로직 오퍼레이터 종류가 AND인 경우 상기 해쉬 자료구조에서 버킷의 카운터가 AND 로직 오퍼레이터의 개수와 동일한 버킷만을 최종 결과값으로 출력하고, OR인 경우 상기 해쉬 자료구조 내의 유효한 모든 버킷들을 최종 결과값으로 출력하는 단계;를 포함함을 특징으로 하는 해쉬를 이용한 전문 기반 논리 연산 수행 방법.
  11. 입력값으로 해쉬 ID가 사용되는 MOD 연산으로 이루어진 해쉬 함수와,
    해쉬키에 대응하는 버킷의 시작 위치를 지정하는 해쉬 노드들의 리스트 집합인 해쉬 테이블과,
    해쉬 ID와 해쉬 체인용 포인터를 버킷의 구성요소로 하는 버킷 블록을 구비하는 해쉬 자료구조; 및
    로직 오퍼레이터 종류에 따라 로직 상태를 달리하는 해쉬 자료구조를 현재의 로직 오퍼레이터의 종류에 맞추어 생성하여 메모리를 할당하고 초기화하는 StartUp 모듈과,
    첫 번째 오퍼랜드 자료에 해당하는 해쉬 노드를 상기 해쉬 자료구조에서 할당받은 버킷에 삽입하는 Insert 모듈과,
    현재의 로직 오퍼레이터 종류가 AND인 경우 상기 해쉬 자료구조에서 상기 Insert 모듈에서 삽입된 버킷들 또는 이전 연산의 결과값으로 선정된 버킷들 중에서 두 번째 오퍼랜드 자료에 해당하는 해쉬 노드와 일치하는 버킷을 결과값으로 선정하고, OR인 경우 두 번째 오퍼랜드 자료에 해당하는 해쉬 노드가 상기 해쉬 자료구조에서 검색되지 않으면 상기 해쉬 자료구조에서 할당받은 버킷에 삽입하는 Logic 모듈을 구비하는 해쉬를 이용한 전문 기반 논리 연산 수행을 위한 사용자 인터페이스 프로그램;을 기록한 컴퓨터가 읽을 수 있는 기록매체.
  12. 제11항에 있어서, 상기 사용자 인터페이스 프로그램은
    현재의 로직 오퍼레이터가 상기 해쉬 자료구조의 로직 상태와 다른 경우, 현재의 로직 오퍼레이터의 종류에 맞추어 상기 해쉬 자료구조의 로직 상태를 변경하는 ChangeLogic 모듈을 더 구비하는 것을 특징으로 하는 컴퓨터가 읽을 수 있는 기록매체.
  13. 제12항에 있어서, 로직 상태가 AND인 해쉬 자료구조의 버킷은
    로직 연산의 결과값을 결정하기 위한 카운터를 더 구비하고,
    상기 ChangeLogic 모듈은
    상기 해쉬 자료구조의 로직 상태를 AND에서 OR로 변경하는 경우, 새로운 해쉬 자료구조를 생성하여 기존 해쉬 자료구조의 결과값에 해당하는 버킷들을 새로운 해쉬 자료구조에 삽입하고, 기존의 해쉬 자료구조의 모든 자원을 해제하고, 새로운 해쉬 자료구조를 기존의 해쉬 자료구조에 매핑하는 것을 특징으로 하는 컴퓨터가 읽을 수 있는 기록매체.
  14. 제11항에 있어서, 상기 해쉬 자료구조는
    AND 로직 연산의 결과값의 개수를 카운트하는 AND 카운터와,
    OR 로직 연산의 결과값의 개수를 카운트하는 OR 카운터를 더 구비하고,
    상기 사용자 인터페이스 프로그램은
    상기 현재의 로직 오퍼레이터 종류에 따라 AND 카운터 또는 OR 카운터의 값을 출력하는 Size 모듈을 더 구비하는 것을 특징으로 하는 컴퓨터가 읽을 수 있는 기록매체.
  15. 제11항에 있어서, 상기 사용자 인터페이스 프로그램은
    현재의 로직 오퍼레이터 종류가 AND인 경우 상기 해쉬 자료구조에서 버킷의 카운터가 AND 로직 오퍼레이터의 개수와 동일한 버킷만을 찾아 최종 결과값으로 하나씩 출력하고, OR인 경우 상기 해쉬 자료구조 내의 유효한 모든 버킷들을 최종 결과값으로 하나씩 출력하는 Next 모듈을 더 구비하는 것을 특징으로 하는 컴퓨터가 읽을 수 있는 기록매체.
KR1020120115454A 2012-10-17 2012-10-17 해쉬를 이용한 전문 기반 논리 연산 수행 방법 KR101416586B1 (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020120115454A KR101416586B1 (ko) 2012-10-17 2012-10-17 해쉬를 이용한 전문 기반 논리 연산 수행 방법
CN201280025701.XA CN103874996B (zh) 2012-10-17 2012-10-23 用于利用散列来执行基于全文的逻辑运算的方法
US14/116,834 US9396223B2 (en) 2012-10-17 2012-10-23 Method for performing full-text-based logic operation using hash
PCT/KR2012/008715 WO2014003249A1 (ko) 2012-10-17 2012-10-23 해쉬를 이용한 전문 기반 논리 연산 수행 방법
JP2015538003A JP6078652B2 (ja) 2012-10-17 2012-10-23 ハッシュを利用した全文基盤データベースでの論理演算遂行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020120115454A KR101416586B1 (ko) 2012-10-17 2012-10-17 해쉬를 이용한 전문 기반 논리 연산 수행 방법

Publications (2)

Publication Number Publication Date
KR20140049328A KR20140049328A (ko) 2014-04-25
KR101416586B1 true KR101416586B1 (ko) 2014-07-08

Family

ID=49783366

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120115454A KR101416586B1 (ko) 2012-10-17 2012-10-17 해쉬를 이용한 전문 기반 논리 연산 수행 방법

Country Status (5)

Country Link
US (1) US9396223B2 (ko)
JP (1) JP6078652B2 (ko)
KR (1) KR101416586B1 (ko)
CN (1) CN103874996B (ko)
WO (1) WO2014003249A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9405643B2 (en) * 2013-11-26 2016-08-02 Dropbox, Inc. Multi-level lookup architecture to facilitate failure recovery
US10372695B2 (en) * 2014-12-27 2019-08-06 Intel Corporation Technologies for computing rolling hashes
US10496543B2 (en) * 2016-03-31 2019-12-03 Samsung Electronics Co., Ltd. Virtual bucket multiple hash tables for efficient memory in-line deduplication application
US11698929B2 (en) * 2018-11-30 2023-07-11 Intel Corporation Offload of data lookup operations
CN113297224B (zh) * 2021-05-31 2022-06-28 上海艾麒信息科技股份有限公司 一种基于Redis的海量数据分类存储方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007328736A (ja) 2006-06-09 2007-12-20 Mitsubishi Electric Corp リソース検索システム
KR20090108849A (ko) * 2008-04-14 2009-10-19 삼성전자주식회사 파일 저장/검색 장치 및 방법
JP2010050600A (ja) 2008-08-20 2010-03-04 Fujitsu Ltd 情報検索装置
KR20110077934A (ko) * 2009-12-30 2011-07-07 동국대학교 산학협력단 해싱 기반의 데이터 관리 방법 및 장치

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2973944B2 (ja) * 1996-06-26 1999-11-08 富士ゼロックス株式会社 文書処理装置および文書処理方法
US6681217B1 (en) * 1998-10-27 2004-01-20 Jerzy Lewak Boolean text search combined with extended regular expression search
US6381594B1 (en) * 1999-07-12 2002-04-30 Yahoo! Inc. System and method for personalized information filtering and alert generation
US7076494B1 (en) * 2000-01-21 2006-07-11 International Business Machines Corporation Providing a functional layer for facilitating creation and manipulation of compilations of content
US7043488B1 (en) * 2000-01-21 2006-05-09 International Business Machines Corporation Method and system for storing hierarchical content objects in a data repository
CA2384185A1 (en) * 2002-04-29 2003-10-29 Ibm Canada Limited-Ibm Canada Limitee Resizable cache sensitive hash table
US7599914B2 (en) * 2004-07-26 2009-10-06 Google Inc. Phrase-based searching in an information retrieval system
JP2011215835A (ja) * 2010-03-31 2011-10-27 Toshiba Corp 全文検索機能を備えるストレージ装置
US8782435B1 (en) * 2010-07-15 2014-07-15 The Research Foundation For The State University Of New York System and method for validating program execution at run-time using control flow signatures
US8539006B2 (en) * 2010-11-01 2013-09-17 Microsoft Corporation Logical chart of accounts with hashing
JP5524144B2 (ja) * 2011-08-08 2014-06-18 株式会社東芝 key−valueストア方式を有するメモリシステム
JP6011618B2 (ja) * 2012-05-24 2016-10-19 富士通株式会社 検索プログラム、検索方法、検索装置、記憶プログラム、記憶方法及び記憶装置
US9940359B2 (en) * 2014-05-23 2018-04-10 International Business Machines Corporation Data-partitioned secondary index (DPSI) partition level join

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007328736A (ja) 2006-06-09 2007-12-20 Mitsubishi Electric Corp リソース検索システム
KR20090108849A (ko) * 2008-04-14 2009-10-19 삼성전자주식회사 파일 저장/검색 장치 및 방법
JP2010050600A (ja) 2008-08-20 2010-03-04 Fujitsu Ltd 情報検索装置
KR20110077934A (ko) * 2009-12-30 2011-07-07 동국대학교 산학협력단 해싱 기반의 데이터 관리 방법 및 장치

Also Published As

Publication number Publication date
KR20140049328A (ko) 2014-04-25
JP6078652B2 (ja) 2017-02-08
US20150213016A1 (en) 2015-07-30
CN103874996B (zh) 2017-02-08
WO2014003249A1 (ko) 2014-01-03
US9396223B2 (en) 2016-07-19
JP2015532498A (ja) 2015-11-09
CN103874996A (zh) 2014-06-18

Similar Documents

Publication Publication Date Title
US10042911B2 (en) Discovery of related entities in a master data management system
RU2501078C2 (ru) Ранжирование результатов поиска с использованием расстояния редактирования и информации о документе
Treude et al. Difference computation of large models
KR101311022B1 (ko) 클릭 간격 결정
US7664927B2 (en) Hash tables
KR101416586B1 (ko) 해쉬를 이용한 전문 기반 논리 연산 수행 방법
US20120096008A1 (en) Hyperspace index
US8812492B2 (en) Automatic and dynamic design of cache groups
CN112968917A (zh) 一种用于网络设备的渗透测试方法和系统
CN110807028B (zh) 用于管理存储系统的方法、设备和计算机程序产品
US20100250522A1 (en) Using ontology to order records by relevance
Li et al. A new closed frequent itemset mining algorithm based on GPU and improved vertical structure
CN106484815A (zh) 一种基于海量数据类sql检索场景的自动识别优化方法
US20090006354A1 (en) System and method for knowledge based search system
SE1051394A1 (sv) A system and method for evaluating a reverse query
KR100899930B1 (ko) 연관 데이터 클래스 생성 방법 및 시스템
CN111488490B (zh) 视频聚类方法、装置、服务器及存储介质
CN112307272B (zh) 确定对象之间关系信息的方法、装置、计算设备及存储介质
CN105447020A (zh) 一种确定业务对象关键词的方法及装置
JP2002342403A (ja) フォールスパス検出装置、フォールスパス検出方法およびそのプログラム
Zhu et al. Customized organization of social media contents using focused topic hierarchy
CN114443699A (zh) 信息查询方法、装置、计算机设备及计算机可读存储介质
CN114117192A (zh) 一种对象查询方法、装置、服务器和存储介质
CN104915408A (zh) 一种社交化搜索结果展示的方法及装置
CN112084141A (zh) 一种全文检索系统扩容方法、装置、设备及介质

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180702

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190702

Year of fee payment: 6