KR20080024237A - 데이터 베이스 - Google Patents

데이터 베이스 Download PDF

Info

Publication number
KR20080024237A
KR20080024237A KR1020087004578A KR20087004578A KR20080024237A KR 20080024237 A KR20080024237 A KR 20080024237A KR 1020087004578 A KR1020087004578 A KR 1020087004578A KR 20087004578 A KR20087004578 A KR 20087004578A KR 20080024237 A KR20080024237 A KR 20080024237A
Authority
KR
South Korea
Prior art keywords
key
decision
index
node
database
Prior art date
Application number
KR1020087004578A
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 코퍼아이 리미티드
Publication of KR20080024237A publication Critical patent/KR20080024237A/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/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/2246Trees, e.g. B+trees
    • 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/2272Management thereof

Abstract

본 발명은 데이터 베이스에 관한 것으로, 데이터 베이스(2)의 인덱스는 결론 세트에 도달할 때까지의 검색 중에 네비게이션 되는 노드들의 계층적 구조로서 제공되며, 그 구조는 노드와 관련이 있는 키 정보가 그 구조에서 노드 위치로부터 추론된다.
인덱스 구조, 데이터 베이스, 네비게이션, 노드, 키 정보, 계층적 구조, 검색, 결론 세트

Description

데이터 베이스{DATABASE}
본 발명은 데이터 베이스의 인덱싱(indexing) 방법, 데이터 베이스에서의 정보 배열 방법 및 데이터 베이스의 질의(querying) 방법에 관한 것이다. 특히 본 발명은 데이터 스토리지 시스템 내의 스칼라 데이터(scalar data)의 효율적인 검색을 가능하게 한다.
스칼라 데이터 형태는, 예컨대 논리 데이터, 텍스트 스트링(열), 수치 데이터 및 일자-시간 데이터를 포함한다.
데이터 프로세서가 고속의 프로세서일지라도, 지정된 속성 또는 속성 범위를 갖는 특정 항목을 찾기 위해 스토리지 시스템에 저장된 모든 데이터를 완전히 검색하는 것은 비효율적이고 시간 소모적인 일이다. 또한, 데이터는 대용량의 스토리지 매체에 저장될 것이고, 이것은 거의 불가피 CPU 속도에 비해 느린 디스크 엑세스 및 반도체 메모리로의 엑세스로 인해 지연을 발생할 것이다. 검색 키(search key)를 이용하여 항목(item)들을 검색할 수 있도록 인덱스를 생성하는 것이 보다 효율적이다.
인덱스 메카니즘은 내부 인덱스 구조의 생성 및 유지를 필요로 한다. 이러한 구조의 네비게이션 및 유지는 그 자체의 권한에서 처리 오버헤드(processing overhead)를 초래한다. 오버헤드는 이용된 인덱싱 메카니즘의 함수로서 변화할 수 있다. 오버헤드는 또한, 예컨대 데이터 베이스의 데이터가 때때로 변화함에 따라 혹은 데이터 베이스의 크기가 변화함에 따라 변화할 수 있다.
간단한 예는 생일 등의 연대기적 정보를 저장하는 데이터 베이스에 있다. 예컨대 설계자는 서기 2000년 이전에 태어난 사람이 서기 2000년 이후에 태어난 사람과 분리된 데이터와 관련이 있는 데이터를 갖도록 데이터를 구성할 수 있다. 이러한 전략은 잠시 동안 작용할 수 있으나, 서기 2000년 이전에 태어난 사람의 수는 제한된 집합인 반면에 서기 2000년 이후에 태어난 사람의 수는 비제한적임을 알 수가 있다. 따라서, 시간이 경과함에 따라 이러한 인덱싱 키는 서기 2000년 이후에 태어난 사람과 관련이 있는 엔트리 부분이 증가할 때 여분(잉여)의 키가 될 수가 있다.
인덱싱 방법의 효율성을 다음과 같은 다수의 속성들에 의하여 판단할 수가 있다.
1) 인덱스의 크기. 대형 인덱스는 네비게이션 하는 데 많은 시간을 필요로 한다. 대형 인덱스는 또한 하드 디스크 드라이브 등의 대용량 스토리지 매체 및 반도체 메모리 등의 고속 메모리로부터의 전송을 포함하는 데이터 스왑(data swap) 또는 판독 동작 수의 증대를 필요로 한다.
2) 인덱스의 구조적인 제약(제한 조건). 매우 제한적인 구조는 초기 이점을 제공할 수 있으나, 데이터 베이스가 보다 많은 데이터를 수용하기 위해 증대할 때 인덱스를 재구축 하는 것을 필요로 한다면 증가된 계산 오버헤드를 겪는다.
3) 인덱스에 의해 부과된 키 데이터 제한. 따라서 키에 의해서 표현되는 범위 또는 키의 데이터 타입 또는 키의 최대 크기는 데이터 베이스가 증대할 때 혹은 데이터 베이스가 데이터로 집단화될 때 인덱스의 성능을 실행하기 시작할 수 있다.
4) 인덱스에 의해 부과된 키 검색 제한. 단지 일부 인덱스 만이 정확한 키매칭을 허용하며 다른 인덱스는 범위 매칭(range matching)을 허용한다.
5) 인덱스의 크기 증대 제한. 인덱스는 최대 크기만큼 제한될 수가 있다.
6) 동시 발생 제한. 인덱스는 키 데이터의 동시 삽입 및 검색을 허용하거나 금지할 수가 있다.
공지의 시스템은 통상 하나 이상의 키 데이터 항목을 포함하고 있는 노드를 가진 트리 그래프를 이용한다. 데이터 베이스에 문의하기 위해서 필요한 검색 키(search key)로 방문된 각 노드에서 키 값들을 비교함으로써 트리를 네비게이션한다. 그것은 각 노드가 노드의 생성과 관련된 키 전체를 포함함으로써 데이터 스토리지 항에서의 노드의 "크기"가 아주 커질 수 있는 설계에 있어서 고유한 것이다.
이러한 인덱스의 효율은 데이터가 인덱스에 가산되는 순서와 키 크기에 따른다.
또한, 일부 방법들은 적절히 동작하면 트리는 항상 "밸런스 유지된 상태"를 필요로 한다. 이러한 방법들은 고처리량 시스템(high throughput system)의 경우 이들 방법을 부적합하게 하는 키 삽입 및 삭제에 대한 현저한 유지 오버헤드를 초 래할 수가 있다.
본 발명은 데이터 스토리지 시스템 내의 스칼라 데이터(scalar data)의 효율적인 검색이 가능한 데이터 베이스의 인덱싱(indexing) 방법, 데이터 베이스에서의 정보 배열 방법 및 데이터 베이스의 질의(querying) 방법을 제공하는데 있다.
네비게이션
본 발명의 제1 형태에 따르면, 인덱스 및 데이터를 가진 데이터 베이스를 구성하기 위한 방법이 제공되며, 검색 기준에 부합하는 데이터를 찾기 위해 복수의 비트로 표현되는 적어도 하나의 심볼을 포함하는 검색키를 이용하여 인덱스를 질의하며, 인덱스는 판정 노드의 계층적 구조이며, 노드의 구조는 결론 세트(집합)(conclusion set)에 도달할 때까지의 검색 동안에 네비게이션 되며, 그 구조는 키 심볼들이 그 구조에 노드에 기억되지 않고 각 노드가 3 개 미만의 출구 경로를 갖도록 구성된다.
따라서 데이터 베이스의 효율적인 검색 및 갱신을 가능하게 하는 효율적인 인덱스 구조를 제공하는 것이 가능하다. 그 인덱스 구조는 종래의 인덱스 보다 훨씬 작은데 그 이유는 노드들이 노드와 관련된 키 전체를 저장하지 않기 때문이다. 노드는 그와 관련된 어떠한 키도 저장할 필요가 없다. 더욱이 노드들은 노드의 문의와 관련한 판정 규칙들을 저장하지 않는다. 이것은 규칙들이 특정 노드 이외의 모든 노드에 의해서 공유된다는 점에서 규칙들은 전역의 규칙이기 때문이다.
각 판정 노드는 2진 판정을 행한다. 즉, 각 노드는 최대 2 개의 출구 경로 만을 가진다.
각 노드에서 적용된 판정은 간단한 질의인 것이 좋다. 질의는 키 또는 키의 일부분과 한 노드에서의 판정 기준을 비교하고, 2진 항(term)으로 시험에 적용된 키 또는 키의 일부가 통상적으로(반드시 배타적인 것은 아님) 판정 기준 보다 크거나 판정 기준 보다 작은 지에 관한 것이다. 이것은 인덱스 자체의 구조 내에 검색키의 특징을 기억할 필요성을 배제한다.
한 노드로부터의 각 출구는 추가 판정 노드, 결론 세트(집합) 또는 널 결과(null result)를 지정할 수가 있다.
한 노드로부터의 출구가 또 다른 노드를 지정하면, 검색은 계속된다. 그러나 노드로부터의 출구가 결론 세트를 지정하면, 인덱스의 네비게이션은 일반적으로 종결된다.
검색 용어에 부합하는 결과가 없을 가능성이 있으며, 이 경우 검색은 널 결과에서 종료한다.
데이터 베이스에서의 모든 "레코드"는 결론 세트에 속한다. 결론 세트 자체는 지정 검색 기준을 만족하는 데이터를 지정하거나 혹은 일부 상황에서는 데이터 자체를 저장할 수가 있다.
판정 노드의 계층적 구조는 판정 그래프로서 고려될 수가 있다. 판정 그래프는 어느 임의의 크기 및 내부 구조일 수 있다. 그러나, 판정 그래프는 일반적으로 프로세서의 메모리에서 그의 크기를 고려했을 때 작은 엔티티(a small entity)이 다.
판정 그래프는 사용 시 데이터 프로세서의 전자적 메모리 내에 저장되는 것이 좋다. 비교적 소형의 판정 그래프를 RAM에 저장함으로써, 데이터 프로세서는 질의 결과를 신속히 찾을 수가 있다. 특히 판정 그래프의 해석은 자기적 또는 다른 물리적 스토리지 매체로의 엑세스를 필요로 하지 않기 때문에, 이러한 매체와 관련된 엑세스 시간은 배제되어 성능이 향상된다.
각 결론 세트에는 단지 판정 그래프를 통해 오직 하나의 루트에 의해 도달할 수 있는 것이 좋다. 이것은 확실히 결론 세트의 모든 키가 공유된 유일의 판정 세트에 부합하게 한다.
데이터 베이스 인덱스는 시간이 경과함에 따라 변화될 수 있고 이는 데이터 베이스가 증대할 때 성능의 저하를 가져올 수가 있다. 따라서 결론 세트 내에서 데이터의 삽입 및 삭제와, 새로운 결론 세트의 생성을 허용하는 것이 필요하다.
각 결론 세트는 최대 크기를 갖는 것이 좋다. 최대 크기는 유저 또는 설계자가 제어하는 파라미터이다. 그러나, 그 크기는 하나 이상의 하드 디스크를 포함할 수 있는 자기 기억 장치 등의 스토리지 장치가 이용하는 데이터 또는 어드레싱 블록의 크기와 양호하게 관련이 있을 수 있다. 그러나, 광학 스토리지 장치 등의 어느 랜덤 엑세스 데이터 스토리지를 사용할 수 있다.
결론 세트가 소정 크기에 접근하거나 도달하면, 새로운 판정 노드가 판정 트리로 삽입되며 결론 세트에 있던 데이터는 새로운 판정 노드의 출구 경로를 통해 도달된 새로운 결론 세트로 다시 인덱싱된다. 새로운 판정 노드는 그의 최대 크기 이상으로 성장한 결론 세트를 지정한 노드의 출구 경로에 삽입된다.
이처럼 결론 세트는 잘 행동하도록 구성된다.
판정 그래프는 자체적으로 어떠한 검색키 데이터도 포함하고 있지 않다. 모든 키 데이터는 판정 그래프의 구조로부터 추론되거나 함축된다. 이것이 판정 그래프를 컴팩트하게 유지시킨다. 또한 이것은 판정 그래프의 크기가 키 크기와 무관하다는 것을 의미한다.
본 발명의 또 다른 이점은 판정 그래프의 구조에 대한 변화들이 행해질 수 있고 이러한 변화들이 국부적이라는 것에 있다. 즉 오직 하나 또는 소수의 판정 노드는 그 변화에 의해 영향을 받는다. 이것은 구조의 재조직화가 현저한 계산 오버헤드가 아니라는 것을 의미한다.
판정 노드가 일부분과 관련이 있는 것이 바람직하고 보다 바람직한 것은 키의 비교적 작은 부분들과 관련이 있다는 것이다. 이것은 결론적으로 판정 그래프가 대부분 키의 구조와 무관하다는 것이다. 이것은 또한 있다면 판정 그래프가 키 구조에 거의 제한 사항을 두지 않는 이점을 가진다. 더욱이, 노드와 관련이 있는 키 부분은 판정 그래프가 네비게이션될 때의 구조화 순서를 따라야 할 필요는 없다. 따라서 문의 키 부분은 판정 그래프를 네비게이션 할 때 단조로운 형태로 키를 따라 진행할 필요가 없다.
판정 그래프는 키 시퀀스의 시만틱 순서(semantic order)가 보존되도록 구성되는 것이 좋다. 따라서, 예컨대 판정 그래프는 제1 노드 또는 노드 세트가 검색키로 제1 비트 또는 제1 비트 그룹을 테스트하고, 판정 그래프를 결론 세트쪽으로 네 비게이션할 때 이어지는 노드에서 테스트되는 키의 비트는 점점 덜 중요하게 구성될 수가 있다. 이처럼 판정 그래프를 네비게이션하여 정확한 매칭 또는 범위 매칭에 의해 키들을 찾을 수가 있다. 그 범위는 검색 중에 부분적으로 혹은 완전하게 경계지어 질 수가 있다.
판정 그래프의 구조, 특히 구조에 대한 변화가 전체적이라기 보다는 하나의 노드 또는 2 개의 노드에 영향을 미친다는 점에서 국부적이라는 사실은 판정 그래프를 유지하는 계산 작업이 일반적으로 낮다는 것을 의미한다. 재조직화의 국부적인 특성은 인덱스를 이용한 데이터의 삽입, 삭제 및 검색을 용이하게 한다. 사실상 2 개 이상의 이러한 사건이 동시에 일어날 수 있다.
판정 그래프의 크기에 대한 기능적인 제한이 없는 것이 바람직하다. 인덱스 구조는 판정 그래프가 증대된 데이터량을 수용하도록 증대할 때 그에 따른 검색 시간의 증가를 초래한다.
본 발명의 제2 형태에 따르면, 인덱스를 가지며 검색 키를 이용하여 인덱스를 질의함으로써 데이터를 찾는 것이 가능하고 데이터를 저장하도록 정렬된 데이터 베이스가 제공되며, 검색 키는 적어도 하나의 심볼을 포함하며, 각 심볼은 복수의 비트로 표현되고, 인덱스는 판정 노드의 계층적 구조이며, 노드의 구조는 한 결론에 도달할 때까지의 검색 중에 네비게이션 되고, 각 노드의 검색 기준은 인덱스 내의 노드의 위치에 의해 인코딩되며, 각 노드는 2 개의 출구 경로를 가지고 있다.
인덱스의 국부 구조 변화는 인덱스 내에서 동시에 일어나는 삽입, 삭제 및 검색 사건들을 용이하게 한다.
데이터 베이스내의 데이터의 각 항목은 오직 하나의 결론 세트에 속하는 것이 바람직하다.
판정 그래프 분할
판정 그래프는 반도체 메모리 내에서 전체적으로 상주하여야 한다는 강한 선호에도 불구하고 이것이 항상 가능하지 않을 수 있다. 이것은 인덱스가 너무 크게 되거나 혹은 호스트 데이터 프로세서가 다작업이 가능하도록 데이터 베이스에 대한 "가상 머신" 환경을 구현하고 운영 체제는 데이터 베이스에 충분한 메모리 자원을 할당하지 않기 때문일 수가 있다.
이러한 환경하에서 판정 그래프는 컴퓨터 시스템의 대용량 스토리지 장치의 메모리 블록 내에 저장될 수 있다. 디스크 제어기는 데이터의 이산 블록을 고려하여 디스크를 관리한다. 따라서, 예컨대 디스크 제어기가 이용하는 최소 블록 크기가 64Kbyte이면, 40K 인덱스 및 60K 인덱스 둘 다는 디스크 상에서 동일한 스토리지 공간, 즉 1 블록을 점유할 수 있고, 마찬가지로 65K 인덱스 및 130K 인덱스 또한 동일한 스토리지 공간, 즉 2 블록을 점유할 수가 있다.
이러한 시스템 제한 사항을 수용하고 이러한 시스템 제한 사항과 함께 작업하기 위해서는 인덱스의 수정이 제어될 필요가 있는데 이는 인덱스의 크기가 인덱스 내의 키 집단이 증가함에 따라 증가하기 때문이다. 따라서 인덱스를 증대하기 위해서는 더 많은 메모리 블록을 필요로 한다.
새로운 판정 노드를 삽입하는 것을 필요로 하고 메모리 블록이 충만할 때 인덱스를 증대하기 위한 제1 방법에 있어서, 새로운 블록을 생성하고 새로운 노드를 그 새로운 블록에 위치시킨다. 그 블록이 반도체 메모리에 미리 상주하고 있지 않으면 새로운 노드를 지정하는 노드에 의해 새로운 블록이 자기 기억 장치로부터 인출되도록 판정 그래프를 보정한다. 다음에 계속해서 새로운 노드에서 네비게이션을 속행한다.
이러한 방법은 간단하나 각 페어런트 충만 블록으로부터 다수, 가능하게는 수백의 거의 빈 메모리 블록의 생성을 가져올 것이라고 예상될 때는 비효율적이다. 이는 디스크 드라이브가 거대한 데이터량을 저장할 수 있을 때 취해지는 공간을 고려하여 문제라고 고려될 수 없으나, 인덱스를 네비게이션하기 위해 보다 많은 디스크 I/O 동작을 필요로 할 때 인덱스 성능을 절충할 수 있다.
양호한 방법은 새로운 블록을 생성한 다음에 두 블록 사이에서 실질적으로 동등하게 페어런트 블록(parent block)(즉, 충만 블록)을 분할하는 것이다. 이러한 방법은 원래의 블록을 2개의 블록으로 최적으로 나눈 노드를 찾기 위해 원래의 블록이 문의되는 것을 필요로 한다. 이것은 특성상 보다 통계적인 접근 방법에 의해 혹은 블록의 노드를 순이론적 해석(ab-initio analysis)의해 행해질 수 있다. 따라서, 예컨대 분할을 위한 시험 노드를 반복해서 고르고, 노드의 선택에 따른 인덱스의 분할을 계산하며 그 결과에 기초해서 대략 균일한 분배가 달성될 때까지 시험 노드의 선택을 수정하는 순환적 알고리즘을 사용할 수 있다.
이 제2 방법은 각 인덱스 블록이 노드의 실질적 모집단을 포함하는 이점을 가진다. 이것이 메모리의 보다 효율적인 사용을 이끈다.
패턴 매칭
전술한 바와 같이, 종래 기술의 시스템은 어느 소정 모드와 관련된 검색 키 전체를 저장한다.
본 발명의 제1 및 제2 형태는 노드가 검색 키를 저장하지 않으나 키 데이터가 트리 구조에 고유한 트리 구조를 개시하고 있다.
본 발명의 제3 형태에 따르면, 인덱스 및 데이터를 가진 데이터 베이스를 문의하기 위한 방법이 제공되며, 검색 기준에 부합하는 데이터를 찾기 위해 검색 키를 이용하여 인덱스를 질의하며, 인덱스는 판정 노드의 계층적 구조이며, 그 구조는 결론 세트에 도달할 때까지 네비게이션 되고, 노드는 키의 서브 시퀀스를 포함하며, 후보키가 취해질 조치를 결정하기 위해 비교될 수 있으며, 인덱스의 N+1번째 층의 노드에 기억된 키 부분이 N번째 층의 이전 노드에 기억된 부분과는 관련이 없다는 것을 특징으로 한다.
여기서 사용된 바와 같이, (N+1)번째 노드에서 키 부분은 그 키 부분이 명목적으로 변화하는 방식으로 키의 연속 부분을 선택함으로써 계산되지 않는다는 의미에서 N번째 모드의 키부분과는 관련이 없다.
따라서, 각 노드가 키 전체가 아니라 키의 서브 시퀀스 만을 기억할 수 있기 때문에 판정 노드를 비교적 "소형"으로 유지할 수 있는 데이터 베이스를 제공하는 것이 가능하다. 이러한 구조는 패턴 매칭에 의한 데이터 베이스 네비게이션, 삽입 및 검색을 용이하게 한다.
본 발명의 제4 형태에 따르면, 인덱스 및 데이터를 가진 데이터 베이스가 제공되며, 검색 기준에 부합하는 데이터를 찾기 위해 검색 키를 이용하여 인덱스를 질의하며, 인덱스는 판정 노드의 계층적 구조이며, 그 구조는 결론 세트에 도달할 때까지 네비게이션 되고, 한 노드는 키의 서브 시퀀스를 포함하며, 취해질 조치를 결정하기 위해 한 후보키가 비교될 수 있는 것을 특징으로 한다.
개선된 패턴 매칭
패턴 매칭의 프로세스내에서, 패턴 매칭에서의 계산 부하는 매칭될 패턴 길이의 함수가 분명하며, 특히 짧은 문자 또는 심볼 스트링에 대해 매칭을 시험하는 것이 긴 스트링을 매칭 하는 것 보다 덜 계산 소모적이다.
또한, 데이터 베이스/인덱스 효율은 또한 각 노드에서 키 모집단이 어떻게 잘 분할되고 질의 내에서 시퀀스가 어떻게 나타날 것인 지에 달려 있다.
이것은 2 개의 극단 예를 고려함으로서 최적으로 설명된다. 인덱스는 한 비지니스가 통신하길 원하는 다른 엔티티와 클라이언트의 이름으로 구성된다고 상정한다.
종종 나타나는 패턴 매칭 시퀀스는 인덱스 질의 동안에 스캔되는 키의 모집단을 충분히 감소하지 않을 것이다. 따라서, 예컨대 패턴 매칭에 이용된 시퀀스가 "E"이면, 이것이 대부분의 키에서 나타날 것이고, 키 모집단을 분할하는데 있어서 거의 도움을 주지 않는다.
또 다른 극단예로서, 가끔 발생하는 시퀀스 또한 대부분의 질의에서 스캔될 키들의 모집단을 감소하지 않을 것이다. 따라서, 예컨대 "ZZ"는 질의에서 나타나지 않을 것이며 패턴 매칭 질의에 대한 양호한 후보도 아니다.
전술한 바와 같이, 시퀀스에 더 많은 문자들이 포함되면 될수록 더 적은 시 퀀스가 키에 나타날 것이다. 이처럼 하나의 문자가 많은 문자를 가진 키에 나타나고 4 개 문자의 특정 시퀀스는 훨씬 적게 나타난다.
이상적인 경우에 있어서, 질의 스트링은 실질적으로 균등하게 노드로부터 도달된 키의 모집단을 분할한다.
ASCII(아스키) 문자 세트가 갖는 문제점은 많은 문자가 있으나 일부 문자가 나타날 가능성이 문자들 중 많은 다른 문자의 것 보다 훨씬 클 때 문자 세트의 완전 255 문자를 이용하여 적절한 시퀀스를 찾기란 종종 어렵다는 것이다.
그러나 이중 문자의 조합은 드물 수가 있다.
본 발명의 제5 형태에 따르면, 데이터 베이스의 인덱스에 키 또는 키의 일부를 저장하는 방법이 제공되며, 키의 요소들이 제1 세트 보다 작은 제2 세트로 취할 수 있는 값들의 적어도 일부의 리스트를 구성하는 제1 세트에 의해 키의 요소들이 매핑된다.
따라서, 키에서 발생할 수 있는 상이한 문자의 수는 감소된다. 매핑은 유일하지 않고 매핑이 적절하게 선택된다면, 발생할 제2 세트의 어느 단일 문자의 확률은 알맞게 높으며 2 개 이상의 문자의 조합이 시퀀스에 대해 사용 가능하다.
삽입, 삭제 또는 질의 동작을 위한 판정 그래프를 네비게이션하기 전에 매핑이 키에 적용되는 것이 좋다.
원래의 키값 또는 변환된 키값(키값을 기억하기 위해 필요한 공간에 비해 작은)이 결론 세트에 기억될 수 있는 것이 좋다.
본 발명의 제6 형태에 따르면, 인덱스 네비게이션 전 키들을 감소된 범위의 값으로 매핑한 데이터 베이스가 제공된다.
키 압축
전술한 바와 같이, 일부 종래 기술의 데이터 베이스는 각 판정 노드에서 완전 판정/검색 키를 기억한다. 이것은 키 자체가 클 수 있다면 비교적 큰 인덱스 구조를 생성할 수 있다. 본 발명의 일실시예를 구성하는 데이터 베이스에 있어서, 검색 키는 판정 노드에서 검색 키의 일부분을 기억하는 것이 바람직할 지라도 각 판정 노드에 저장될 필요는 없다. 검색키의 일부를 저장하기 위한 옵션에 의해 신속히 네비게이션될 수 있는 비교적 컴팩트한 데이터 베이스 판정 트리가 된다. 그러나 본 발명자는 키가 그의 고유의 형태로 인덱스에 저장될 필요가 없게 하였다. 따라서 키는 감소된 공간을 차지하는 형태로 인코딩 될 수 있다.
본 발명의 제7 형태에 따르면, 데이터 베이스 내의 키를 인코딩하기 위한 방법이 제공되며, 키들의 기억 공간 요건을 줄이기 위해 인코딩 형태로 적어도 하나의 결론 세트에 키 데이터가 저장된다.
따라서, 보다 컴팩트한 결론 세트를 제공하는 것이 가능하다. 데이터 베이스는 정확한 매칭(exact matching)을 지원한다.
매핑 함수가 잘 동작되는 것이 중요하다. 즉 매핑 함수가 특별 키에 적용될 때는 항상 동일 결과를 가져온다.
그러나, 반드시 매핑이 유일한 것을 필요로 하지는 않는다. 매핑 알고리즘이 고압축 정도를 제공하는 경우, 매핑이 유일할 것이라는 확률은 그다지 높지 않다.
적어도 2 개의 다른 매핑 알고리즘을 이용하는 것이 좋다. 다른 매핑의 사용 은 결론 세트에서의 사용으로 제한될 수 있다.
예컨대 CRC32 및 Adler32 등의 공지의 매핑 알고리즘을 이용하여 매핑 함수를 구현할 수 있다.
매핑 함수를 정렬하여 양의 정수(0을 포함) 범위에서 한 값을 반환하며 양의 정수 범위의 크기는 적어도 인덱스 내에 저장된 구별 키의 모집단과의 크기와 같다. 따라서 각 키는 다른 값에 대한 알고리즘에 의해 매핑될 가능성이 있으며 키들은 너무 길지 않다.
예컨대, 다음의 함수를 이용하여 N 바이트 길이의 스칼라로부터 매핑을 계산할 수가 있다.
Figure 112008014062926-PAT00001
여기서, KN 은 키 K의 n번째 바이트 값(0..255)이다.
R는 인덱스에 저장된 구별 키들의 모집단의 크기 보다 큰 2의 가장 작은 멱(power)이다.
제안된 R의 값은 다음과 같다.
65000키 보다 작은 키를 포함하는 인덱스의 경우는 216
4 ×109키 보다 작은 키를 포함하는 인덱스의 경우는 232
1.8 ×1019키 보다 작은 키를 포함하는 인덱스의 경우는 264
결론 세트에 저장된 키 정보는 종래 기술의 시스템에 저장된 바와 같이 통상 의 키일 수가 있거나 적용된 매핑 함수가 판정 그래프에서 키들을 인코딩하기 위해 사용된 기능과 다른 경우 키의 또 다른 인코딩 변형 형태인 것이 바람직하다.
한정자( Qualifier )
인덱스 질의는 많은 키 히트(hit)를 도출할 수가 있다. 그 질의로부터 반환된 각 결과는 대용량의 데이터 스토리지 장치로부터 관련 데이터의 검색이 된다. 대용량의 데이터 스토리지 장치는 통상 하드 디스크이므로, 디스크 I/O 동작이 질의로부터 반환된 각 결과에 대해서 필요할 수 있다.
인출된 모든 데이터가 필요한 것은 아니다.
런던에 거주하는 특정 봉급 범위의 피고용인의 수를 판단하기 위해 개인적인 데이터 베이스를 질의하기 원하는 다국적 조직의 경우를 일례로 고려한다. 위치 또는 봉급에 기초한 인덱스는 소정 질의에 대해 많은 피고용인을 반환할 수 있다. 그것은 질의 크기를 줄이는 AND 연결 질의의 결과가 된다.
인덱스에 하나 이상의 키를 저장함으로써 이러한 형태의 질의에 대해 데이터 베이스 인덱스를 수정하는 것은 공지되어 있다. 따라서 키는 복합 또는 합성 키로서 고려될 수가 있다. 2 개의 키와 부합하는 후보(즉, 데이터 베이스의 엔트리)의 변화들과는 하나의 키와 부합하는 후보의 변화들과 비교할 때 훨씬 감소되며, 질의에 의해서 반환된 히트 수는 감소되며 보다 적은 디스크 I/O 동작이 필요하다.
키들을 함께 연결함으로써 복합 키를 만드는 것은 공지되어 있다. 간단하게 인덱스 생성 시 제2 검색 기준이 제1 검색 기준에 가산된다. 그러나, 개별 키의 길이는 충분히 길 수 있으며 연결된 키의 인덱스를 생성하면 인덱스는 매우 커지게 된다.
본 출원인은 키 데이터가 그의 원래의 형태로 저장될 필요는 없으나 사실상 현저히 줄어든 길이의 워드 또는 비트 시퀀스로 인코딩 되거나 표현될 수 있게 실현하였다. 인덱스의 제1 키 및 연결된 키에서의 모든 연속키는 이러한 변형된 형태로 표현 가능하다.
본 발명의 제8 형태에 따르면, 데이터 베이스를 구성하기 위한 방법이 제공되며, 인덱스 키는 적어도 하나의 키를 포함하는 복합키이며, 하나 이상의 키가 압축된 형태로 표현된다.
복수의 키는 압축된 형태로 제공되는 것이 바람직하다.
키들은 그들을 압축되지 않은 형태에서 압축된 형태로 매핑 함으로써 압축되는 것이 바람직하다. 그 매핑은 특별할 필요는 없으나 잘 동작해야 만 한다. 해싱 알고리즘을 이용하여 적절한 매핑이 수행될 수가 있다.
상이한 키들이 동일하게 감소된 표현으로 표현될 수 있다는 바로 그 사실에 의해서 질의에 부합하지 않는 어떤 결과와 질의에 부합하는 결과를 한 질의가 반환 할 리스크가 있다. 그러나, 양호한 랜덤화 해시 인코딩을 이용한다고 가정하면, 하나의 키에 대한 미스 매치의 확률은 1/255이나, N 한정자에 대한 미스 매치의 확률은 (1/255)N이다.
따라서, 에러 율은 일반적으로 작다.
일자를 확인하여 어느 오류의 반환 된 결과를 제거하기 위해 반환된 모든 히 트를 검사하는 것이 좋다.
삽입, 삭제 또는 검색을 수행할 때, 인덱스를 구축하기 위해 사용되는 것과 동일한 변환 프로세스를 이용하여 새로운 키를 압축하여야 한다.
연결된 키의 제1 요소 다음에 각 부가 요소가 "한정자"로서 표현될 수 있는 것이 좋다. 각 한정자는 단지 1 바이트 길이인 것이 좋다.
따라서, 종래 기술과 본 발명을 비교하면, 각각 8 바이트인 8개의 키 요소를 포함하는 종래 기술의 연결키는 64 비트를 점유한다. 본 발명에 있어서, 주(主) 키는 압축되지 않은 포맷으로 표현될 수 있어 8 바이트를 점유하며, 7개의 추가키가 1 바이트 한정자로서 각각 표현될 수 있다. 따라서 총 키 길이는 단지 15 바이트이다.
한정자 키는 옵션 키이며, 모든 키, 일부 키 또는 아무 키가 인덱스 질의 동안에 제공될 수 있는데 이는 이들이 인덱스 구조의 네비게이션에 영향을 미치지 않기 때문이다. 한정자키에 대한 히트의 시험은 결론 세트를 스캐닝 할 때 수행된다.
따라서, 본 발명의 형태가 B-트리 등의 통상의 데이터 베이스 구조 또는 본 출원에서 개시된 구조들과 함께 이용 가능함을 알 것이다.
부가적으로, 한정자는 노드에 관한 정보를 노드 자체에 의해서 명시적으로 정의되거나 혹은 노드 자체 내에 포함되지 않은 노드의 위치로부터 추론되는 인덱스(본 발명의 제1 형태의 일실시예를 구성하는 인덱스와 같은)와 연계하여 사용 가능하다.
본 발명의 제9 형태에 따르면, 인덱스가 적어도 하나의 키를 포함하고 하나 이상의 키가 압축된 형태로 표현되는 데이터 베이스가 제공된다.
한계 키( Bounded Key )
전술한 바와 같이, 데이터 베이스 인덱스의 효율은 함께 사용된 키 문자에 주로 좌우될 수 있으며, 그에 따라 키 값이 계속해서 증가 또는 감소하는 경우 있을 수 있는 비효율적인 인덱싱 시스템을 가져온다. 이러한 비한계 키(unbounded key)의 일례가 현재 시간과 함께 계속해서 증가하는 일자/시간이다. 이러한 키들이 인덱스에 가산될 때, 그들에 의해 인덱스의 새로운 영역이 생성되게 되고 구(old) 키들은 인덱스의 쓸모 없는 영역들이 새로운 키 값으로 재사용 불가능한 경우 단편화(fragmentation)를 초래할 수 있는 인덱스로부터 삭제된다. 비한계 키를 사용하여 인덱스를 언밸런스 상태가 되지 않게 하는 방식으로 인덱스 구조를 구성하는 것이 매우 좋다.
본 발명의 제10 형태에 따르면, 범위의 한계를 나타내는 제1 키와 제2 키 사이의 키들의 범위로 데이터 베이스를 네비게이션 하는 방법이 제공되며, 키들은 감소된 범위로 매핑되며, 키들의 순서가 매핑 동안에 보존되지 않으면 대형 키보다는 큰 매핑 공간과 소형 키보다는 작은 매핑 공간에 대해서 검색이 행해진다.
키들이 데이터 베이스에 걸쳐서 실질적으로 균등하게 분배되도록 해싱 또는 모듈로 함수로 동작되는 것이 좋다. 따라서, 예컨대 비한계 일자/시간(K)(예컨대 1970년 1월 1일 이후 밀리 초의 수일 수 있음)이 (K 모듈로 N)로 변환되며, 여기서 N은 인덱스에 대해 선택된 모듈로이다. 따라서, 변환기 키 값은 항상 0 내지 (N-1)의 범위에 속할 것이다.
키에 적용된 모듈로 값은 인덱스 내에 저장되는 구별 키 값의 최대 수 이상이다. 그러나 이러한 조건이 필수적은 아니다.
결론 세트(트리 인덱스의 끝에 있는 노드)는 매핑되지 않은 형태의 키를 포함하는 것이 좋다. 이것이 에러의 가능성을 줄이는 데 그 이유는 검색 키가 원래의 형태로 결론 세트의 키 데이터와 비교될 수 있어 매핑 에러가 회피될 수 있기 때문이다.
본 발명은 통상의 B-트리 또는 다른 인덱스에 적용 가능하다.
본 발명의 제11 형태에 따르면, 데이터 베이스 내에서 사용하기 위한 비한계 키를 코딩하기 위한 방법을 포함하는 데이터 베이스가 제공되며, 오퍼레이터에 의해 각각의 키를 처리하며 오퍼페이터는 그 키를 한계 범위로 매핑하는 것을 특징으로 한다.
천이 키( Transient Key )
때때로 어느 시간 범위 또는 다른 값의 범위로 유효성(validity) 또는 유용성이 제한되는 데이터를 다룰 필요가 있다. 종래 기술의 데이터 베이스에 있어서, 이러한 "천이" 데이터는 정상 데이터처럼 다루어지며 따라서 쓸모 없는 키 데이터가 상주하는 경우 인덱스 부분을 제거하거나 쓸모 없는 천이 키 데이터를 명시적으로 삭제하는 것은 보통 필요하다. 이러한 동작은 바로 프로세서에 과도한 부담을 줄 수 있으며 데이터 베이스내에서 과도한 성능 오버헤드를 초래하거나 설계 제한을 부과할 수가 있다.
본 발명의 제12 형태에 따르면, 데이터 베이스 내의 키를 관리하는 방법이 제공되며, 키는 그 키와 그와 관련된 데이터가 데이터 베이스 내에서 유지되어야 하는 지속 기간을 나타내는 데이터 필드를 포함하는 것을 특징으로 한다.
따라서 일부 또는 모든 결론 세트는 키와 그와 관련된 속성들이 유효하게 고려될 수 있는 지속 기간을 나타내는 데이터를 포함하도록 수정 가능하다.
만료된 키들은 결론 세트에서 능동적으로 제거되지 않고, 이들 키는 일단 만료된 다음 새로운 데이터에 의해서 겹쳐 쓰기가 가능하게 된다. 따라서, 천이 키를 명시적으로 삭제할 필요는 없고 그에 따라 삭제 프로세스에는 성능 오버헤드가 포함되지 않는다. 오히려 일단 데이터가 더 이상 유효하지 않음을 마커가 표시하면, 마커가 점유하는 공간은 재사용을 위해 유용하게 만들어진다.
비록 정보가 결론 세트 내에서 더 이상 검출되지 않는 데이터에 대한 명시적 일자와 시간 마커를 제공하는 것이 가능할 지라도, 이러한 인코딩의 형태는 불가피 큰 공간 크기를 차지할 수가 있다. 본 발명의 양호한 실시예에서, 키는 수명 유니트(age unit)와 관련이 있고 이 유니트는 그의 현재의 수명 및 데이터와 키가 더 이상 유효하지 않으며 겹쳐 쓰기가 가용하게 되는 수명을 나타내는 수명 한계의 척도를 제공한다.
수명 유니트는 변수이며, 그의 길이는 단일 수명 유니트에서 초의 갯수를 표시하는 것이 좋다. 수명 한계는 키가 인덱스에서 제거된 다음의 수명 유니트의 수를 나타낸다.
각 결론 세트는 그 결론 세트에서 가장 최근에 삽입된/갱신된 엔트리의 일자/시간 스탬프인 수명 베이스를 포함하는 것이 좋다. 결론 세트에 엑세스할 때, 각 엔트리의 수명이 계산되고, 그 계산 결과가 엔트리 수명 필드에 저장되는 것이 좋다. 언제 엔트리가 겹쳐 쓰기 가능한지를 판단하기 위해 엔트리 수명 및 수명 한계간의 비교가 행해진다.
스칼라 데이터의 중복성 결정하기
전술한 바와 같이, 종래 기술(B-트리)의 판정 그래프는 키값과 포인터 정보를 저장하고 있는 리프 블록(leaf block)으로 하향 네비게이션 된다. 판정 인덱스를 네비게이션 하는 것은 선택 키를 찾기 위해 하나 이상의 디스크 입력/출력 동작을 필요로 할 수 있다. 중복 조합이 빈번한 경우 특별키 조합의 존재를 레코드하기 위해 인덱스를 이용하면, 인덱스의 디스크 구조는 고성능 시스템에 대해서는 부적절할 수 있다.
본 발명의 제13 형태에 따르면, 판정 인덱스와 키 인덱스를 갖도록 데이터 베이스를 구성하기 위한 방법이 제공되며, 키 인덱스의 키들은 압축된 형태로 저장되며, 그 키를 이용하여 판정 인덱스를 심문하기 전에 키가 존재하는 지를 알기 위해 키 인덱스에 대한 체크가 이루어질 수가 있다.
따라서, 인덱스로 키의 존재를 판단하기 위한 효율적인 메모리 기준 방법을 제공함으로써 키에 대해서 직접 인덱스 자체를 검색할 필요성이 배제될 수 있다.
따라서, 본 발명은 반도체 메모리에 인코딩된 키값을 저장함으로써 표준 인덱스 구조를 효율적으로 제공한다. 인덱스를 검색하기 전에 메모리에 키가 존재하는 지를 체크한다. 메모리에서 매칭 엔트리를 발견하면, 그 키는 중복키로서 리젝트되고, 인덱스로 엔트리를 삽입하기 위한 시도가 행해진다.
효율적이고 컴팩트한 구조를 제공하기 위해, 키 인덱스는 해시 함수와 같은 원웨이 매핑 함수(one way mapping function)을 이용한다. 해시 함수 또는 다른 매핑 함수의 특징은 다음과 같다.
한번 이상 동일 키에 대해 매핑 함수가 호출될 때마다, 매핑 함수는 키 내에 어떠한 정보도 수정되지 않는다면 동일값을 계속해서 반환하여야 한다.
2개의 키가 동일하다고 간주되면 2개의 키 각각에 대한 매핑 함수의 호출은 동일한 결과를 산출하여야 한다.
동등하지 않은 키에 대한 구별 결과가 인덱스의 효율을 개선한다면 2 개의 동등하지 않은 키는 다른 값으로 매핑될 필요가 없다.
CRC 32 및 Adler 32 등의 공개된 해시 코드 알고리즘은 이들이 적절한 기능성을 제공할 때 이용 가능하다.
키 인덱스의 구현에 있어서, 4 개의 바이트 요소의 동질 어레이로서 메모리를 정렬할 수 있다. 이러한 어레이는 일치 어레이(identity array)로서 알려져 있다. 일치 어레이에서 요소들의 수는 인덱스 구조 내에 보유된 키 요소 수의 1.1 배 이상이다. 그러나, 일치 어레이는 적어도 인덱스 만큼이면 단지 충분하다. 2 개의 해시 함수 A 및 B는 일치 어레이와 관련하여 이용된다. 그 함수들은 다음과 같이 선택된다.
임의의 2 개의 동일하지 않은 키 K 및 L에 대해, A(K)=A(L)인 경우, B(K)=B(L)일 것 같지는 않다.
임의의 2 개의 동일하지 않은 키 K 및 L에 대해, B(K)=B(L)인 경우, A(K)=A(L)일 것 같지는 않다.
해시 함수 A를 이용하여 다음의 수학식을 이용하여 키 K의 일치 어레이에서 오프셋 요소(0 ... N)를 계산한다.
요소 수 = ABS(A(K))modulo N
여기서, ABS(...)는 수의 부호 없는 크기(unsigned magnitude)이고, N은 일치 어레이에 있는 요소들의 수이다.
이러한 함수는 요소 함수 E(K)로서 알려져 있다.
일치 어레이의 각 요소는 B(K)를 저장하며 요소 오프셋은 E(K)로 주어진다. 키(K)는 오프셋 E(K)에서 요소가 E(K)를 포함하고 있다면 중복키라고 간주된다. 요소가 어느 다른 키를 포함하고 있다면, 인덱스 구조는 그의 중복성을 판정하기 위해 검색되어야 만 한다.
키 K를 인덱스에 삽입하기 위한 시도를 위해 다음과 같은 사건 순서가 발생한다. 첫째 E(K)가 계산된다. 다음에 B(K)가 계산된다. 일치 어레이의 E(K)에 있는 요소가 B(K)를 포함하고 있다면, 그 삽입은 중복 K로서 리젝트된다. 그러나, 일치 어레이의 E(K)에 있는 요소가 B(K)를 포함하고 있지 않다면 요소는 B(K)로 겹쳐 쓰여지며 그 키가 중복키인지를 판정하기 위해 인덱스에 대한 검색이 행해진다.
일치 어레이를 이용하면 키의 리스트를 유지하는데 필요한 스토리지 영역을 상당히 줄인다. 데이터 베이스가 백만 엔트리를 가지고 있고 각 키가 32 바이트의 길이이면, 메모리에 인덱스를 캐시하기 위해 32Mb 이상의 메모리를 필요로 한다. 그러나, 등가 일치 어레이는 4.4Mb 메모리 만을 점유할 것이다.
계층에 의한 인덱스 구성
전술한 바와 같이, 종래 기술의 인덱스는 통상 하나 이상의 4 개의 키 데이터 항목을 포함하는 노드를 가진 트리 그래프를 이용한다. 트리 그래프(판정 그래프)는 저장된 데이터 구조에 대한 키값과 포인터 정보를 보유하고 있는 리프 블록(leaf block)(결론 세트)으로 하향 네비게이션된다. 인덱스를 네비게이션 하는 것은 선택 키를 찾기 위해 하나 이상의 디스크 입력/출력 동작을 필요로 할 수 있다. 일반적으로 디스크 엑세스는 디스크 메모리 엑세스에 비해 느리고 데이터 병목 현상이 발생할 수 있기 때문에 디스크 엑세스 동작은 일반적으로 인덱스의 최고의 성능 오버헤드를 나타낸다. 이러한 오버헤드를 완화하기 위해 인덱스는 상이한 물리적 디스크에 할당된 각 파티션으로 분할됨으로써, 인덱스의 전반적인 처리량을 증대하는 인덱스 연산 동안에 디스크 I-O를 오버랩하게 한다. 인덱스를 부분할 하는 방법은 인덱스 분할의 플랫한 1차원 뷰를 나타낸다.
본 발명의 제14 형태에 따르면, 인덱스가 그의 작업 부하의 일부를 하나 이상의 다른 인덱스에 위임할 수 있는 계층적 구조로 분할된 데이터 베이스 인덱스를 제공한다.
위임 인덱스는 그 자체가 그의 작업의 일부를 하나 이상의 다른 인덱스에 위임할 수 있으면 좋다.
인덱스의 계층에 참여하는 인덱스는 서브 키 범위를 담당한다. 이러한 인덱스가 또 다른 인덱스를 대신하여 키의 부분 범위를 다루고 있는 경우를 위임 인덱스라고 하고 그의 키 부분 범위는 키 매니페스트(key manifest)라고 알려져 있다.
인덱스의 키 매니페스트는 가능한 값의 인접 범위로 키내의 바이트의 연속 세트를 제한함으로써 정의되는 것이 좋다. 인덱스 키 매니페스트에 부합하지 않는 키에 대한 삽입, 삭제 또는 갱신 혹은 검색 시도는 인덱스에 의해 리젝트되고, 그렇지않으면 키 동작은 위임 인덱스들 중 하나 또는 인덱스에 의해서 다루어진다. 각 인덱스가 제로, 하나 이상의 위임 인덱스를 가질 수 있도록 계층이 정렬될 수 있으나, 각 인덱스는 하나의 다른 인덱스에 대한 위임자일 수 있다.
인덱스가 하나 이상의 위임 인덱스를 갖는 경우, 키의 삽입, 갱신 또는 삭제 동작이 적절한 키 매니페스트와 함께 대리 인덱스에 제시된다. 대리 인덱스가 적절한 키 매니페스트를 가지고 있지 않다면, 인덱스 자체에 의해 그 동작이 다루어져야 한다.
인덱스가 하나 이상의 위임 인덱스를 가지고 있는 경우, 키 범위에 대한 검색 동작은 적절한 키 매니페스트와 함께 모든 위임 인덱스로 제시되고 인덱스 자체에 의한 검색이 행해진다. 검색 위임 인덱스로부터의 질의 결과는 인덱스 자체의 검색으로부터의 결과와 결합된다. 모든 질의는 동시에 수행 가능하다. 따라서 각종 서브 인덱스에 걸쳐서 작업이 부분할 될 수 있도록 인덱스 구조를 수정하는 것이 가능하다. 각 서브 인덱스는 관련된 물리적 스토리지 장치를 지정함으로서 일어나는 동시 발생 다중 디스크 접속을 가능하게 한다. 이것은 디스크 병목 현상을 줄여 전체로서 데이터 베이스의 고속 동작을 가능하게 한다.
본 발명에 따른 데이터 베이스의 인덱싱(indexing) 방법, 데이터 베이스에서 의 정보 배열 방법 및 데이터 베이스의 질의(querying) 방법에 의해 데이터 스토리지 시스템 내의 스칼라 데이터(scalar data)의 효율적인 검색이 가능하다.
도 1은 본 발명의 일실시예를 구성하는 인덱스를 포함하는 데이터 베이스와 데이터 기억 장치를 개략적으로 도시한다. 인덱스(2)는 판정 그래프(4)와 복수의 결론 세트(6,8,10,12,14)를 포함한다. 각 결론 세트는 판정 그래프를 통해 하나의 경로 및 오직 하나의 경로에 의해서 도달된다. 그러나 각 결론 세트는 데이터 저장 장치(16) 내의 관련 엔트리를 지정한다.
도 2는 일반적으로 (20)으로 표시된 판정 그래프의 구조를 개략적으로 도시한다. 판정 그래프는 원점(22)에서 시작한다. 판정 그래프를 통한 모든 네비게이션은 원점에서 시작하여야 한다. 원점은 판정 그래프 내의 또 다른 노드 또는 결론 세트를 지정하는 0(예컨대 데이터 베이스가 새로운 데이터 베이스인 경우), 하나 또는 2 개의 판정 포인터를 가질 수 있다. 각각의 다른 판정 노드는 0, 1 또는 2 개의 판정 포인터를 포함할 수 있으며, 각각의 판정 포인터는 또 다른 판정 노드 또는 결론 세트를 지정한다. 판정 노드에서 판정 포인터는 "로우 포인터(low pointer)" 및 "하이 포인터(high pointer)"로서 지칭될 것이다.
판정 그래프에서 임의의 판정 노드의 판정 포인터는 동일 판정 그래프의 하나의 다른 판정 노드 또는 하나의 결론 세트 중 어느 하나를 지정할 수 있다. 임의의 판정 그래프 노드는 동일한 판정 그래프 내의 하나의 다른 판정 노드에 의해 혹은 원점에 의해서 정확하게 지정되어야 한다. 마찬가지로, 임의의 결론 세트는 판 정 그래프 내의 오직 하나의 판정 노드에 의해서 정확하게 지정되어야 한다. 마찬가지로 임의의 결론 세트는 판정 그래프 내의 오직 하나의 판정 노드에 의해서 정확하게 지정되어야 한다. 따라서 임의의 판정 세트에는 원점에서 판정 그래프를 거쳐 단일 및 유일 경로를 따름으로써 도달될 수가 있다. 이러한 유일 경로는 네비게이션 경로로서 알려져 있다.
도 3은 상세히 설명될 일반적으로 (40)으로 표시된 판정 노드의 논리적 구조를 개략적으로 도시한다. 판정 노드는 로우 포인터 타입, 로우 포인터, 하이 포인터 타입 및 하이 포인터를 포함한다. 로우 포인터 타입(41)은 로우 포인터(42)의 의도를 표시한다. 로우 포인터 타입(41)은 로우 포인터(42)가 판정 노드 또는 결론 세트를 지정하는지 여부를 표시할 수 있다. 로우 포인터(42)는 그것이 지정하는 결론 세트 또는 판정 노드의 어드레스를 제공한다. 포인터가 존재하지 않음을 표시하도록 0 값이 삽입될 수 있다. 마찬가지로, 하이 포인터 타입(44)은 하이 포인터(45)가 판정 노드 또는 결론 세트를 지정하는지 여부를 표시한다. 하이 포인터는 그것이 지정하는 결론 세트 또는 판정 노드의 어드레스를 표시한다. 다시 0 값을 이용하여 포인터가 존재하지 않음을 표시한다. 이것에 의해 판정 그래프의 "트리"형 구조가 데이터 프로세서와 그의 메모리로 표현되고 저장 가능하다.
도 4는 결론 세트의 구조를 개략적으로 도시한다. 결론 세트는 복수의 키 및 속성 엔트리(60,62,64,66,68)를 포함하며, 각 엔트리는 결론 세트에서 다음 엔트리의 어드레스를 부여하는 직결형 링크에 의해서 함께 링크된다. 도 5는 결론 세트 내의 각 엔트리의 논리적 구조를 개략적으로 도시한다. 엔트리는 3개의 필드, 즉 링크 필드(80), 키 필드(82), 속성 필드(84)로 이루어져 있다. 링크 필드는 다음 결론 세트 엔트리를 지정한다. 0 값은 더 이상의 엔트리가 없음을 표시한다. 키 필드(82)는 정확한 키값을 보유하고 있고 속성 필드(84)는 예컨대 키 필드(82)에 대응하는 데이터의 어드레스인 키와 관련된 속성들을 보유하고 있다. 인덱스의 구성 요소가 정의되면, 인덱스의 이용 방법과 네비게이션 방법에 대한 설명이 이어진다.
인덱스를 따라 네비게이션하기 위해 네비게이션 경로를 따라 방문된 각 판정 노드는 키 내의 하나의 비트 또는 비트 그룹을 참조한다. 이러한 비트 그룹은 "판정 그룹(decision group)"이라고 알려져 있고 그 판정 그룹의 비트수는 키의 단일 비트와 모든 비트 사이에서 임의의 비트수를 포함하도록 설정 가능하다.
판정 그룹에 의해서 취해진 가능한 값의 범위는 "판정 범위(decision range)"라고 알려져 있고 판정 범위 최소값과 판정 범위 최대값에 의해서 한계가 정해진다. 판정 범위 최소값은 판정 그룹의 모든 비트 세트 보다 작은 임의의 값일 수가 있으며, 마찬가지로 판정 범위 최대값은 판정 범위 최소값 보다 큰 임의의 값일 수가 있다. 편의상 최소값과 최대값은 부호 없는 크기 표기 시스템으로 표현 가능하다.
각 판정 노드는 관련 판정값을 가진다. 판정값은 판정 노드를 통해 네비게이션 할 때 로우 포인터 또는 하이 포인터가 추종되는지 여부를 결정한다. 키에서 검사된 판정 비트 그룹이 판정값 보다 큰 경우 하이 포인터를 사용하고 그렇지 않은 경우에는 로우 포인터를 사용한다.
판정값의 비교는 부호 없는 크기 표기를 이용하여 양호하게 수행된다. 판정 값은 시스템 관리자, 설계자 또는 오퍼레이터가 선택한 임의의 값으로 설정될 수 있으나 다음 중 하나에서 선택하는 것이 좋다.
1. 판정 그룹의 모든 가능한 값의 수학적 중간값
2. 판정 그룹의 모든 예측값의 수학적 중간값
3. 판정 그룹의 모든 예측값의 수학적 평균값
4. 인덱스 생성 시 규정된 임의값
5. 현재 판정값의 중간값(즉, 가장 최근에 사용된 판정값) 및 그 이전의 판정값
방문된 판정 노드에서의 판정 그룹의 선택은 반드시 필요한 것은 아니나 다음 중 하나 이상에 기초하여 행하는 것이 좋다.
i. 판정 그룹은 모든 판정 노드에 대해서 동일할 수 있다.
ⅱ. 판정 그룹은 판정 노드에 대한 모든 방문에 대해 변경될 수 있다.
ⅲ. 판정 그룹은 이전 판정 노드로부터의 판정값이 현재의 판정 그룹의 최소 판정 범위 또는 최대 판정 범위에 이르거나 도달할 때 변경될 수 있다.
ⅳ. 판정 그룹은 연속 노드들 사이의 판정값이 일부 다른 소정의 임계 보다 작게 혹은 하나의 유니트 보다 작게 변경될 때 변경될 수 있다.
판정 노드에서의 판정 그룹의 크기는 하나 이상의 파라미터에 기초해서 결정될 수 있다. 판정 그룹의 크기는, 예컨대 모든 판정 노드에 대해서 고정될 수 있다. 그러나 그 크기는 새로운 판정 그룹이 선택될 때 이전 판정 그룹으로부터 증대될 수 있거나 이와는 달리 새로운 판정 그룹이 선택될 때 그 크기는 이전 판정 그 룹으로부터 감소될 수 있다.
판정 노드에서 키에 비례해서 판정 그룹의 위치는 다음 중 하나 이상에 기초할 수 있다. 판정 그룹의 위치는 모든 판정 노드에 대해서 고정될 수 있다. 부가적으로 및/또는 이와는 달리 판정 그룹의 위치는 새로운 판정 그룹을 선택할 때 이전 판정 그룹으로부터 고정된 오프셋일 수 있다.
인덱스가 범위 매칭에 의한 키 검색을 지원하는 것이면 추가 제한 사항이 부가될 수 있는 것이 좋다. 특히, 최상위 비트는 원점 등의 계층적으로 상위 노드내에 포함되어야 한다. 다음에 전체 키내의 판정 그룹의 중요도는 중요도를 단조롭게 감소하는 방식으로 변경되어야 한다.
인덱스가 네비게이션 될 수 있는 방법의 일부 예를 고려하는 것이 좋다. 도 6은 4 바이트 키가 어떻게 정확한 매칭 검색으로 네비게이션 될 수 있는 지를 도시한다. 이 예에서 키들은 ASCII 코딩으로 기억되며 각 키에 대해서 도시한 수는 16진법 표기로 그 값을 보여준다. 이 예에서 각 판정 그룹은 4 비트의 고정된 크기를 가진다. 판정 그룹은 방문된 각각의 새로운 노드에서 다음의 4개의 하위 비트로 순차적으로 하향 이동된다. 이 예에서, 최상위 비트는 0으로 지정되고 다음 최상위 비트는 1이며, 다음 최상위 비트는 2이다. 더욱이, 단순화를 위해 모든 노드에 적용된 판정값은 4이다. 따라서, 판정 그룹이 0, 1, 2, 3 또는 4값을 가지면, 그래프는 좌로 움직인다. 그러나 판정 그룹이 5 내지 15 범위의 값을 가지면, 그래프는 우로 움직인다.
도 6에 도시한 바와 같이, 다수의 이름이 데이터 베이스에 제공된다. 이러한 이름 및 키값은 Fred, John, Bill, Zoe, Eric, Pete이다. 각 키의 16진 등가는 이름과 인접하여 놓여진다. 기술될 네비게이션 프로세스는 삽입, 삭제 또는 매칭에 적절하다.
초기에 비트 0 내지 3이 시험되는 제1 판정 노드(100)에서 키들이 제시된다. 각 16진 워드가 1 바이트를 점유하기 때문에, 비트 0 내지 3은 키의 제1 문자에 대응함이 명확하다. 따라서 Fred, John, Bill, Eric 모두가 "4" 로 시작할 때 키들은 브랜치(102)를 따라 제2 레벨 노드(104)로 좌로 전달된다. 그러나 Zoe 및 Pete는 범위 0 내지 3 외부에 속하는 초기 4 비트를 가지며, 그에 따라서 그 키들은 하이 포인터 경로(106)를 따라 노드(108)로 전달된다.
노드(104,108)는 판정 그래프의 제2 레벨을 점유하고 그에 따라 그들의 판정은 키의 다음 4 비트에 기초한다. 이것은 16진수 표현으로 다음 문자를 찾는 것에 대응한다. 따라서 노드(104)에서 Bill은 키의 비트 4 내지 7이 값 2를 인코딩 할 때 연속 노드(도시 안됨)로 로우 레벨 포인터(110)를 따라 전달되고, Fred, John, Eric은 하이 레벨 포인터(112)를 따라 추가 노드(도시 안됨)로 전달되는데 이는 키의 비트 4 내지 7이 값 6, A 및 5를 각각 16진수 표기로 인코딩하기 때문이다. 마찬가지로 노드(108)에서 키 Pete는 비트 4 내지 7이 값 0을 인코딩할 때 로우 레벨 포인터(114)를 따라 전달되며, Zoe는 비트 4 내지 7이 값 "A"를 인코딩 할 때 하이 레벨 포인터(116)를 따라서 전달된다. 이러한 프로세스는 키가 충분히 검색되어 결론 세트에 도달할 때까지 반복 가능하다.
도 7은 4 바이트 키가 어떻게 범위 매칭 검색으로 네비게이션 될 수 있는 지 를 도시한다. 도 6과 같이 키들은 각 키에 대해서 ASCII 값들과 ASCII 코딩으로 기억되어 16진법 표기로 그의 값을 보여준다.
이 예에서, 판정 그룹은 8 비트의 고정된 크기를 가진다. 판정 그룹은 판정 범위가 고갈될 때만 다음 8개의 하위 비트로 하향 이동된다. 즉 판정값은 판정 범위의 양 경계에 도달한다. 이 예에서, 상위 비트는 비트 0으로 지정되고, 다음 상위 비트는 1로 지정되며 1은 도 6에 도시한 예의 경우와 같다. 모든 노드에서 판정 범위는 ASCII 포맷으로 표현된 대문자와 모든 숫자를 커버하기 위해 30 내지 50개의 16진수이다. 새로운 판정 그룹에 대해서 사용되는 모든 노드에서 판정값은 48개의 16진수이며 다음에 동일한 그룹에 대한 각각의 연속 노드에서 동일 판정 그룹의 이전 판정값의 평균이 되게 변경된다. 오직 하나의 이전 판정값 만을 알고 있는 경우, 판정값 범위의 최소 또는 최대 한계는 좌 또는 우로 네비게이션 하였는 지에 따라 이용된다.
이전 예에서와 같이 동일한 키를 이용하여, 제1의 8 비트, 즉 0 내지 7을 조사하는 제1 노드(118)로 키들이 제시하여 그들을 판정값 48(16진수)과 비교한다. 도시한 바와 같이 키로, Fred, Bill, Eric가 로우 포인터를 따라 노드(122)로 전해지고, John, Zoe, Pete가 하이 포인터(124)를 따라 노드(126)로 전해진다.
노드(122)에서, 판정값을 변경하는 것이 필요하다. 이러한 새로운 판정 그룹을 위해 사용된 판정값은 동일 경로를 따라 도달된 이전 판정 그룹의 중간값으로 변경된다. 오직 하나의 이전 판정값 만을 알고 있으므로, 이 경우에서와 같이 판정값 범위의 최소 또는 최대 한계를 이용한다. 로우 포인터(120)에 대해 4 개의 노 드(122)가 네비게이션 된다고 하면, 판정 범위의 하한을 이용한다.
따라서, 새로운 판정값을 계산하기 위해 범위 30(16진수) 내지 48(16진수)로 숫자의 중간값을 명시적으로 찾는 것이 필요하며, 이러한 숫자 그룹은 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 3A, 3B, 3C, 3D, 3E, 3F, 40, 41, 42, 43, 44, 45, 46, 47, 48이다. 이것으로부터 중간값이 3C임을 알 수가 있다. 이것을 판정값으로서 설정하면, Fred, Bill 및 Eric은 모두 하이 포인터(127)를 진해한다. 다음 노드(도시 안됨)에서 그의 판정값은 3C(16진수)에서 48(16진수)에 이르는 범위의 중간값이 될 것이다.
마찬가지로, 노드(118)에서 하이 포인트(124)를 따라 도달된 노드(126)는 이 예에서 4C(16진수)인 계산된 새로운 값을 가진다. 이 노드에서 키를 적용하면, John은 좌(로우 포인터)로 전달되는데 이는 John이 4C의 판정값 보다 작은 값 4A를 포함하기 때문이며, Zoe 및 Pete는 우측(하이 포인터)으로 전달되는데 이는 이들이 판정값 4C 보다 큰 값 5A 및 50을 각각 포함하고 있기 때문이다.
검색의 또 다른 예는 문자 검색의 맥락에서 찾을 수 있으며 검색은 다음의 기준에 따라서 수행된다.
8 비트를 점유하고 "A" 내지 "Z" 범위에 있는 각 문자를 갖는 ASCII 문자에 대한 정확 매칭 인덱스
8 비트의 고정된 판정 그룹
최상위 8 비트(제1 문자)의 판정 그래프 원점
판정 그룹은 각 판정 노드에 대해 8 비트(1 문자)씩 진행한다.
"A" 및 "Z" 에 대한 ASCII 코드는 각각 65 및 90이다. 따라서 이러한 그룹에 대한 감지 가능한 판정값은 중간값(즉, 78)이다.
이 예에서, 판정 그룹은 새로운 판정 노드가 도달될 때마다 1 문자(8 비트)씩 진행한다. 어느 포인터가 뒤따르는 지를 판단하기 위해 키 내의 판정 그룹의 비트값과 고정된 판정값(78)에 대한 비교가 행해진다.
보다 복잡한 접근 방법은 새로운 판정 노드로 각기 이동할 때 판정값을 변경하는 것을 포함한다. 따라서, 판정 그룹에 대한 판정 범위는 각각 65 내지 90인 최소 판정 범위 및 최대 판정 범위로 제한된다. 다음 판정 노드로 이동 시 오퍼레이터는 현재 판정값과 이전 판정값의 중간값을 이용하여 새로운 판정값을 선택하도록 고를 수 있다. 이것이 새로운 판정 그룹이고 이전 판정값이 이용 가능하지 않은 경우, 최소 판정 범위값과 최대 판정 범위값을 이용(로우 또는 하이 포인터가 각각 추종되는 지에 따라)할 수 있다. 새로운 판정 그룹의 선택은 판정값이 1 또는 어떤 다른 소정의 임계 보다 작게 변화할 때 행해질 수 있다. 판정값이 어떻게 주어지는 지에 대한 일례는 다음과 같다.
키의 판정 그룹은 82 값을 가진다. 새로운 그룹에 대한 시작 판정값은 78이다. 그 판정 범위는 65 내지 90이다. 판정값이 1 보다 작게 변화할 때 새로운 그룹이 선택되도록 판정 그룹이 설정되었다.
판정값 판정값의 변화 조치
78 - 하이 포인터를 따른다(82 > 78). 새로운 판정값=(78+90)/2
84 6 로우 포인터를 따른다(82 < 84). 새로운 판정값=(84+78)/2
81 3 하이 포인터를 따른다(82 > 81). 새로운 판정값=(81+84)/2
82.5 1.5 로우 포이터를 따른다(82 < 83). 새로운 판정값=(82.5+81)/2
81.75 0.75 판정 그룹 변경
범위 매칭에 의한 키 검색을 지원하기 위해 필요로 하지 않는 인덱스들은 필요로 하는 인덱스와 같이 과중하게 억제되지 않는다는 것에 주목해야 한다. 특히, 범위 매칭을 지원하는 것을 필요로 하지 않는 인덱스는 그의 원점에서 임의의 판정 그룹을 가질 수 있고 그 판정 그룹의 위치를 임의적으로 변경 가능한데, 판정값이 판정 범위의 최대값과 최소값인 판정 범위 한계에 근접(시스템 설계에 의해서 정의될 수 있는 바와 같이 혹은 유저 또는 일부 관리 기능에 의해서 선택될 수 있는 바와 같이)할 때 혹은 사전에 선택된 크기 보다 작게 판정값이 변화할 때 판정 그룹을 임의적으로 변화시킬 수 있다.
후보 키를 삽입, 삭제 또는 검색하기 위해 네비게이션 경로를 트래버스할 때 후보키의 판정 그룹은 방문한 각 판정 노드에서 판정 노드의 판정값과 비교되고 로우 포인터 또는 하이 포인터가 다음 판정 노드 또는 결론 세트로 추종된다. 일단 결론 세트에 도달한 다음에 네비게이션 경로를 따른 여정은 완결된다. 네비게이션 경로를 따르는 여정은 또한 판정 그룹값이 존재하지 않은 판정 포인터의 사용을 표시할 때 완결된다.
결론 세트는 일련의 키들과 관련 속성들로 이루어져 있다. 결론 세트 내에 포함된 키들의 수는 하나 이상의 다음의 조합으로 정해질 수 있는 상한으로 제한된다.
1. 고정된 한계
2. 인덱스 생성 시 규정된 한계
3. 인덱스의 수명에 걸쳐서 규정될 수 있는 한계
4. 인덱스 성장의 함수로서 변화하는 한계
도 8a, 도 8b는 속성(Q)을 갖는 키(K)를 삽입하기 위한 절차를 도시한다. 그 절차는 단계(150)에서 시작하며 이 단계에서 인덱스는 설계자가 설정한 바와 같이 디폴트 또는 초기 판정 그룹 DG과 함께 그의 원점에서 입력된다. 시작 판정값 DV0을 계산하기 위해 알고리즘을 구현한다. 다음에 제어 절차는 키의 판정 그룹이 판정값 보다 큰지 여부를 시험하는 단계(152)로 진행한다. 시험이 만족스러우면 제어 절차는 단계(154)로 진행하고 여기서 하이 포인터 HP가 검사되고 새로운 판정값 DV1이 생성된다.
단계(154)로부터 제어 절차는 단계(156)로 진행하고 여기서 포인터가 존재하는 지를 알기(이것이 하이 포인터 또는 로우 포인터인지)위해 검사가 수행된다. 마찬가지로, 단계(152)가 키의 판정 그룹이 판정값 보다 크지 않음을 표시하면, 제어 절차는 단계(158)로 진행하고 여기서 로우 포인터가 검사되며 새로운 판정값 DV1이 계산된다. 제어 절차는 단계(158)에서 단계(156)로 진행한다. 포인터가 존재하면 제어 절차는 단계(156)에서 단계(160)로 진행한다. 포인터가 추가 판정 노드를 지정하는 지를 알기 위한 판단이 단계(160)에서 행해진다. 포인터가 판정 노드를 지정하면 제어 절차는 단계(162)로 진행하며 여기서 다음 판정 노드로 시험(판단)을 진행한다. 이러한 판단에 대한 결과가 예이면 제어 절차는 지금까지 설명한 바와 같은 기준에 따라서 새로운 판정 그룹의 값을 계산하는 단계(166)로 제어 절차가 진행된다. 다음에 제어 절차는 단계(164) 또는 단계(166)에서 다시 단계(152)로 진행한다.
단계(156)에서 포인터가 존재하지 않으면, 제어 절차는 단계(170)로 진행함으로써 새로운 결론 세트가 생성되게 되며 다음에 단계(172)에서 새로운 결론 세트를 지정하는 포인터를 갱신한다. 다음에 제어 절차는 단계(174)로 진행하여 이 단계에서 키 및 그의 속성을 결론 세트에 가산한다.
더욱이, 단계(160)에서 판정 노드가 지정되지 않으면, 결론 세트가 지정되어야 하며 제어 절차는 단계(176)로 진행하여 이것에 의해 키 및 그의 속성이 결론 세트에 가산되도록 관련 결론 세트로의 점프가 행해지고 그때부터 단계(174)로 점프가 행해진다.
결론 세트가 그의 크기 한계를 초과하는 지를 알기 위해 단계(175)에서 시험(판단)이 행해진다. 결론 세트가 너무 커서 성장하지 않으면, 제어 절차는 단계(178)로 진행하며 이는 키 삽입 절차로부터 출구(빠져 나옴)를 나타내며, 결론 세트가 그의 크기 한계에 도달하면 제어 절차는 단계(180)로 진행하고 여기서 포인터없이 새로운 판정 노드를 생성한다. 단계(180)로부터 제어 절차는 단계(182)로 진행하고 여기서 구 결론 세트가 아닌 새로운 판정 노드를 지정하기 위해 이전 판정 노드의 포인터가 갱신된다. 다음에 제어 절차는 단계(184)로 진행하고 여기서 결론 세트가 비어있는 지를 알기 위해 구 결론 세트 CS(S)를 검사한다. 그렇지 않으면 제어 절차는 단계(186)로 진행하고 여기서 이 엔트리가 놓여져야 하는 새로운 결론 세트를 찾기 위해 인덱스를 다시 네비게이션하고 결론 세트 CS(S)의 제1 키 및 속성 엔트리로 진행한다. 일단 엔트리가 결론 세트에 재할당된 다음에, 단계(188)에서 그의 현재의 결론 세트 CS(S)로부터 제거된다. 다음에 제어 절차는 단계(184)로 되돌아가며 결론 세트 CS(S)가 비워질 때까지 프로세스가 반복된다.
이처럼 일반적으로 키 및 그의 관련 속성을 인덱스에 삽입하기 위한 절차는 삽입될 키에 대한 판정 경로를 따르는 네비게이션을 필요로 한다. 네비게이션 경로가 결론 세트에 도달하지 않고 종료하면, 새로운 결론 세트가 생성되어야 하고 새로운 결론 세트를 지정하도록 판정 포인터가 갱신되어야 한다. 새로운 판정 포인터는 판정 그래프의 트래버스가 종료하는 시점에 판정 그래프에 놓여져야 한다. 그러나 네비게이션 경로가 결론 세트에서 종료하면, 키 및 그의 속성은 이 결론 세트에 삽입된다. 결론 세트의 각 수정은 그 세트의 크기를 변화시킨다. 따라서, 새로운 키가 결론 세트에 삽입되면 이것에 의해 결론 세트는 그의 상한이 초과될 것이고 새로운 판정 노드는 생성되어야 한다. 새로운 판정 그룹 및/또는 판정값은 새로운 판정 노드와 관련이 있어야 하며 완전한 결론 세트를 사전에 지정한 결론 포인터는 새로운 판정 노드를 지정하도록 보정되어야 한다. 다음에 구(지금은 채워진) 결론 세트로부터의 모든 항목은 인덱스를 따라 네비게이션 경로를 추종하는 새로운 결론 세트(들)로 다시 삽입되어야 한다.
데이터 베이스의 데이터는 시간이 경과함에 따라 변화할 것이며 이러한 변화는 키 및 데이터의 삭제를 포함하는데 이는 데이터가 더 이상 데이터 베이스와 관련이 없고 데이터 베이스의 "라이브(live)" 버전이 관련이 없는 데이터 또는 쓸모없는 데이터와 함께 클러터되지 않는 순서로 목적물을 아카이브하기 위한 필요성이 제거될 필요가 있기 때문이다. 도 9a, 도 9b는 키를 삭제하기 위한 절차를 개략적으로 도시하고 있다. 일부 단계는 도 8a, 도 8b와 관련하여 설명된 것과 동일하며 그에 따라 이들 단계에 대해서는 동일한 참조 부호가 주어진다. 따라서 단계(150) 내지 단계(166)는 이미 기술한 단계들과 동일하며, 단계(156)에서 행해진 시험이 포인터가 존재하지 않음을 나타내면 제어 절차는 삭제 절차로부터의 출구(빠져나옴)를 나타내는 단계(200)로 진행하는 점은 다르다.
단계(160)에서 행한 시험(판단)이 포인터가 판정 노드를 지정하지 않는다(키를 삽입하기 위한 절차의 경우와 같이)고 판정하면 제어 절차는 단계(160)에서 단계(176)로 진행한다. 단계(176)로부터 제어 절차는 단계(202)로 진행되고 여기서 결론 세트 CS(S)가 비어있는 지를 알기 위해 시험이 행해진다. 결론 세트가 빈 세트이면 제어 절차는 제어 절차로부터의 출구를 표시하는 단계(204)로 진행하고, 그렇지 않으면 제어 절차는 단계(206)로 진행하며 여기서 결론 세트의 엔트리를 통해 스캔을 수행한다. 스캔은 결론 세트의 제1 키(L)로 시작하고 다음에 제어 절차는 단계(208)로 진행하며 여기서 키(L)가 삭제 키와 동일한 키인지를 알기 위한 시험(판단)이 행해진다. 키가 삭제 키와 동일하면, 제어 절차는 단계(210)로 진행되고 여기서 키(L) 및 그의 속성들이 결론 세트에서 삭제된다. 제어 절차는 단계(210)에서 단계(214)로 진행하고 여기서 키(L)가 결론 세트의 최종 키인지를 알기 위한 시험이 행해진다. 또한 키(L)가 삭제 최종 키와 동일하지 않으면 제어 절차는 단계(208)에서 단계(214)로 진행한다. 다음에 제어 절차는 단계(216)로 진행하고 여기서 다음 키가 선택된 다음에 제어 절차는 단계(208)로 진행한다. 그렇지 않으면 제어 절차는 단계(214)에서 이 절차를 출구(빠져나옴)를 표시하는 단계(218)로 진행한다.
이처럼 일반적인 항으로 인덱스에서 키 및 그의 관련 속성들을 삭제하는 것은 삭제될 키의 네비게이션 경로를 따르는 네비게이션을 필요로 한다. 네비게이션 경로가 결론 세트에 도달하지 않고 종료하면, 키가 인덱스에 존재하지 않는다고 간주된다. 그러나, 네비게이션 경로가 결론 세트에서 종료하면 삭제될 키와 정확하게 같은 모든 키에 대해 결론 세트를 통한 스캔이 시작되어야 한다. 다음에 이러한 키 및 관련 속성은 결론 세트에서 제거된다.
도 10a, 도 10b는 키의 정확한 질의에 대한 절차와 그 결과를 반환하는 절차를 도시한다. 그 절차는 도 9a, 도 9b를 참조하여 기술된 바와 같이 키를 삭제하기 위한 절차 및 단계(150-206)를 도시한다. 그러나 단계(150 및 152) 사이에는 추가 단계(151)가 삽입되고 여기서 결과 세트(R)는 빈 상태로 리세트된다. 단계(202)에서 결론 세트로 인덱스를 네비게이션 한 다음에, 제어 절차는 결론 세트를 통한 순차 스캔을 개시하는 단계(206)로 진행한다. 제어 절차는 단계(206)에서 단계(230)로 진행하고 여기서 현재 조사중인 키(L)가 검색 키와 동일한 지를 알기 위한 시험이 행해진다. 조사키가 검색 키와 동일한 키이면, 제어 절차는 단계(232)로 진행하고, 그렇지 않으면, 제어 절차는 단계(234)로 진행한다. 단계(232)에서 키 및 그의 속성들이 검색 질의 결과 리스트(R)에 부가되고 제어 절차는 단계(234)로 진행된다. 단계(234)에서는 현재 검사되는 키가 결론 세트의 최종 키인지를 알기 위한 시험이 행해진다. 현재 검사 키가 최종 키가 아니면 다음 키를 검사하고 제어 절차는 단계(230)로 진행한다. 그 키가 최종 키이면 제어 절차는 단계(234)에서 이 루틴의 출구(빠져 나옴)를 표시하는 단계(236)로 진행한다.
도 11은 최소 키값(I)과 최대 키값(A)을 가진 범위 질의를 수행하고 그 결과(R)를 반환하기 위한 절차를 개략적으로 도시하고 있다. 그 절차는 단계(300)에서 시작하며 여기서 결과 세트(R)는 널 또는 빈 상태로 리세트된다. 다음에 제어 절차는 단계(302)로 진행하고 여기서 판정 그룹과 판정값이 계산된 다음에 제어 절차는 단계(304)로 진행하며 여기서 범위 질의와 부합하는 결과를 찾기 위해 인덱스가 트래버스된다. 인덱스를 트래버스하기 위한 절차는 도 12a, 도 12b에 상세히 도시되고 있다. 그 절차는 단계(350)에서 시작하며 여기서 절차는 그의 시작 노드에서 시작된다. 다음에 제어 절차는 단계(352)로 진행하고 여기서 최소키가 판정값(또는 생략값) 보다 작거나 동일한 지 그리고 최대키가 그와 관련된 판정값(또는 생략값) 보다 큰지를 알기 위한 시험이 행해진다. 시험 결과가 두 조건을 만족하면 제어 절차는 단계(370)로 진행하고, 그렇지 않으면 제어 절차는 단계(354)로 진행한다. 단계(370)에서 로우 포인터가 설정되었는 지를 알기 위한 체크(검사)가 행해지며 로우 포인터가 설정되었다면 제어 절차는 단계(372)로 진행하고 여기서 로우 포인터가 결론 세트를 지정하는 지를 알기 위한 체크가 행해진다. 그렇다면, 제어 절차는 단계(400)로 진행하고. 그렇지 않다면, 제어 절차는 단계(374)로 진행하고 여기서 판정 그룹 및 판정값이 다시 계산되고 포인터를 통해 도달된 노드로부터 인덱스를 트래버스하기 위해 사용된다. 그 절차는 그 자체를 호출하기 위한 기능을 가지며 그 자체로 순환적이다. 다음에 제어 절차는 단계(376)로 진행하며 여기서 하이 포인터가 존재하는 지를 알기 위한 체크가 행해지며, 결과가 아니오 이면 제어 절차는 출구를 나타내는 단계(378)로 진행하고, 결과가 예이면 제어 절차는 단계(400)로 진행하며, 하이 포인터가 결론 세트를 지정하지 않으면, 제어 절차는 단계(392)로 진행하고 여기서 새로운 판정 그룹과 판정값이 계산되며 인덱스의 새로운 노드를 시작 노드로서 취하는 추가 트래버설이 수행된다.
절차의 시작부 근처로 돌아가서, 제어 절차는 단계(352)에서 단계(354)로 진행하고 단계(354)에서 최소 키값과 최대 키값이 판정값 보다 작거나 같은 지를 알기 위한 시험이 행해진다. 그렇다면 제어 절차는 단계(356)로 진행하며, 그렇지 않다면 제어 절차는 단계(358)로 진행한다. 단계(356)에서 로우 포인터가 존재하는 지를 알기 위한 시험이 수행되고 그렇지 않으면 제어 절차는 절차의 출구를 나타내는 단계(357)로 진행하며 그렇지 않으면 제어 절차는 단계(360)로 진행한다. 단계(360)에서 로우 포인터가 결론 세트를 지정하는 알기 위한 시험이 행해지며 그 결과가 예이면 제어 절차는 단계(400)로 진행하고 그렇지 않으면 제어 절차는 판정 그룹과 판정값을 다시 계산하고 트래버설 절차를 순환 방식으로 호출하는 단계(402)로 진행한다. 단계(358)로 돌아가서 하이 포인터가 존재하는 지를 알기 위한 시험이 수행되며 그 결과가 예이면 제어 절차는 단계(362)로 진행하며 그렇지 않으면 제어 절차는 절차로부터의 출구를 나타내는 단계(364)로 진행한다. 단계(362)에서 하이 포인터가 결론 세트를 지정하는 지를 알기 위한 시험이 행해지며 그 결과가 예이면 제어 절차는 단계(400)로 진행하고, 그렇지 않으면 제어 절차는 새로운 판정 그룹과 판정값을 계산하는 단계(364)로 진행함으로써 새로운 값에서 시작하는 인덱스의 추가 트래버설이 수행된다.
단계(400)에서 결론 세트(S)가 비어있는 지를 알기 위한 시험을 수행하며, 그 결과가 예이면 제어 절차는 절차로부터의 출구(빠져 나옴)를 나타내는 단계(404)로 진행한다. 결론 세트가 비어 있지 않으면, 결론 세트의 엔트리의 순차적인 스캔을 개시하여 결론 세트의 제1 키가 선택되는 단계(406)를 시작한다. 다음에 제어 절차는 단계(408)로 진행하고 여기서 키(L)가 최소 및 최대 키값으로 정의되는 범위 내에 있는 지를 알기 위한 시험이 수행된다. 시험 결과가 "예"이면, 키 및 그의 속성들은 단계(410)에서 결론 세트(S)에 부가되고 단계(408)에서의 시험 결과가 "아니오"이면, 제어 절차는 단계(412)로 진행하며 여기서 현재 고려중인 키가 결론 세트의 최종키인 지를 알기 위한 시험이 행해지고 그 결과가 예이면 제어 절차는 그 절차로부터의 출구(빠져 나옴)을 나타내는 단계(414)로 진행한다. 제어 절차는 또한 단계(410)에서 단계(412)로 진행한다. 단계(412)에서의 시험에 의해 고려 중인 키가 최종키가 아님을 판단하고, 결론 세트의 다음키가 단계(416)에서 선택되며 제어 절차는 단계(408)로 반환된다.
이처럼 일반적인 항으로 옵션의 최소 검색 키값과 옵션의 최대 검색 키값을 이용하는 범위 매칭에 의해 키 및 그의 범위 속성들을 검색하는 것은 각 판정 노드에서 판정값과 최소 및 최대 검색키의 판정 그룹 비트의 계속되는 비교와 더불어 원점으로부터 판정 그래프의 순환 트래버설을 필요로 한다. 판정 그룹에서의 최소 검색키 비트의 부호 없는 크기가 판정값 보다 작거나 같고 판정 그룹에서의 최대 검색키가 판정값 보다 크면, 우선 최소 검색키를 이용하고 최대 검색키를 생략하는 로우 포인터로부터 검색된 판정 그래프를 트래버스하기 위한 조치가 취해지고, 다음에는 최대 검색키를 이용하고 최소 검색키를 생략하는 하이 포인터로부터 도달된 판정 그래프를 트래버스 하기 위한 조치가 취해진다.
판정 그룹에서의 최소 검색키 및 최대 검색키 비트의 부호 없는 크기가 판정값 보다 작거나 같으면, 최소 검색키 및 최대 검색키를 이용하여 로우 포인터로부터 도달된 판정 그래프의 트래버설이 수행된다. 판정 그룹의 최소 검색키 및 최대 검색키 비트의 부호 없는 크기가 판정값 보다 크면, 최소 검색키 및 최대 검색키를 이용하여 하이 포인터로부터 도달된 판정 그래프의 트래버설이 수행된다.
판정 그래프의 다중 및 반복 트래버설을 필요로 함이 명백하다. 트래버설로 인한 모든 네비게이션 경로가 결론 세트에 도달하지 않고 종료하면, 인덱스에 매칭 키가 존재하지 않는다고 고려한다. 결론 세트에서 종료하는 네비게이션 경로에 대해 결론 세트의 모든 키를 통한 스캔이 수행되고 검색 범위 내의 필요한 속성과 부합하는 모든 키가 검색 결과로서 반환된다.
데이터 프로세서와 스토리지 시스템 내의 데이터 베이스의 구현의 일부로서, 강제적이진 않지만 결론 세트의 크기는 스토리지 장치 블록 전송 크기의 정수 배수이어야 좋고, 이것은 물리적 메모리의 최적 이용을 제공한다. 또한 강제적이진 않지만 판정 그래프는 스토리지 장치 블록 전송 크기의 정수배의 크기인 블록으로 분할되는 것이 좋다. 이것은 판정 블록이 충만하게 될 때, 새로운 블록이 생성될 수 있고 새로운 판정 포인터가 새로운 블록으로 적절히 지정할 수 있으면 좋다.
데이터 베이스의 빠른 동작을 달성하기 위해 판정 그래프는 사용 시 데이터 처리 시스템의 반도체 메모리 내에 전체적으로 혹은 부분적으로 저장됨으로써, 디스크 엑세스와 관련된 시간 오버헤드가 회피된다. 또 다른 개선예로서, 결론 세트가 반도체 메모리 내에 저장되거나 적어도 일단 결론 세트가 식별된 다음, 결론 세트의 순차적인 스캐닝이 신속하게 수행될 수 있도록 반도체 메모리로 스왑되는 것이 좋다.
모든 키 타입의 범위 매칭을 위한 최적의 구성은 0의 고정된 값으로 1 비트의 판정 비트 그룹을 사용하는 것이다. 원점에서 판정 그룹은 최상위 비트이고 판정 그룹은 방문한 모드 판정 노드에 대해서 1 비트씩 나아간다(최하위 비트쪽으로). 수치 또는 일자/시간의 정확한 키 매칭을 위한 최적의 비트 구성은 0의 고정된 판정값으로 1 비트의 판정 비트 그룹을 사용하는 것이다. 원점에서 판정 그룹은 최하위 비트이고 판정 그룹은 방문된 각 판정 노드에 대해서 1 비트씩 나아간다. ASCII 베이스 키의 검색을 위해, 정확한 매칭을 위한 최적의 비트 구성은 8 비트의 판정 그룹을 이용하는 것이다. 최적의 판정값은 예상 문자의 범위에 따를 것이다.
패턴 매칭
이전 도면들을 참조하여 설명한 데이터 구조는 판정 노드가 어느 키 데이터도 포함하지 않는 구조에 관한 것이다. 그러나, 하나 이상의 노드가 부분 키 시퀀스를 포함하도록 데이터 베이스 구조를 수정하는 것이 가능하다. 이것은 패턴 매칭에 의한 스칼라 데이터의 인덱싱 및 검색을 용이하게 한다. 트리 구조는 여전히 종래 기술의 데이터 베이스와 비해 소형인데 이는 각 판정 노드가 종래 기술의 시스템에서와 같이 전체 키가 아니라 비교적 적당한 데이터 크기를 포함하고 있기 때문 이다.
데이터 베이스 구조는 전술한 것과 다소 다른 변형예를 필요로 한다. 도 13은 여러 가지 방식으로 도 2에 도시한 것과 동일한 레이아웃을 유지하는 판정 그래프의 구조를 도시한다. 그러나, 원점 및 각 판정 노드는 이제 비트 시퀀스를 포함하고 있다. 비트 시퀀스는 후보 키가 비교되는 서브 키 부분을 나타낸다. 각 판정 노드의 논리적 구조가 도 14에 도시되고 있다. 그 구조는 도 3과 관련하여 기술된 것을 상기시키는 구조이다. (440)으로 표시된 노드는 판정 비트 시퀀스의 스토리지 영역(450)을 가진다. 판정 비트 시퀀스는 임의의 길이일 수 있다. 그러나, 일반적으로 판정 비트 시퀀스가 판정 트리에 제시된 키의 길이 보다 현저하게 짧을 것이라는 것에 특히 주목해야 한다. 노드는 관련 제외 포인터 또는 포함 포인터가 추가 판정 노드 또는 결정 세트를 지정하는 지를 표시하는 제외 포인터 타입(an exclusion pointer type)(452) 및 포함 포인터 타입(an inclusion pointer type)(456)을 포함한다. 따라서 이러한 포인터는 도 3과 관련하여 기술된 로우 포인터 타입(41) 및 하이 포인터 타입(44)과 동일한 기능을 수행한다. 제외 포인터(454) 및 포함 포인터(458)는 현재 노드를 따르는 결론 세트 또는 다음 노드의 어드레스를 지정한다. 따라서, 포인터(454) 및 포인터(458)는 전술한 로우 포인터(42) 및 하이 포인터(45)와 유사하다. 그러나, 단지 용어의 변경은 후보 키가 판정 비트 시퀀스를 포함하면 하나의 포인터가 추종되고 후보 키가 판정 비트 시퀀스를 포함하지 않으면 다른 포인터가 추종된다는 사실을 명확하게 한다.
도 15a, 도 15b는 트리 구조에 키를 삽입하는 절차를 도시한다. 이러한 절차 는 도 8a, 도 8b를 참조하여 기술한 것과 아주 유사하며 동일 참조 부호는 간결성을 위해 동일 부분에 대해서 사용된다. 그러나, 단계(152)는 단계(152')가 되도록 수정되며 이 단계(152')에서 판정 노드의 판정 비트 시퀀스가 키 내에 포함되는 지를 알기 위한 시험이 변경되고 이 단계에서의 결과가 예이면 제어 절차는 단계(154')로 진행하고 여기서 포함 포인터가 추종된다. 다음에 제어 절차는 단계(156)로 진행한다. 단계(152)에서 판정 비트 시퀀스가 후보 키에 없으면 제어 절차는 단계(158')로 진행하고 여기서 제외 포인터가 추종된다. 절차에 대한 추가 수정 사항은 단계(162)가 단계(152')의 입력을 바로 지정할 수 있어 단계(164,166)를 생략할 수가 있다는 것이다. 그러나 그렇지 않으면 키 삽입 절차는 전술한 바와 같다.
도 16a, 도 16b에 도시한 바와 같이 키를 삭제하는 절차는 전술한 것과 아주 유사하며 다시 한번 동일 참조 부호가 동일 부분에 대해서 사용된다. 키를 삽입하는 절차의 경우와 같이, 단계(152,154,158)는 도 13을 참조하여 기술된 바와 같이 단계(152',154',158')가 되도록 변형됨으로써, 단계(152)에서 후보키가 판정 비트 시퀀스를 포함하는 지를 알기 위한 시험이 행해지고 그 결과가 예이면 포함 포인터가 추종되고, 그렇지 않으면 제외 포인터가 추종된다. 부가적으로, 단계(162)는 이제 단계(152')의 입력을 바로 지정함으로써 단계(164,166)를 생략한다.
물론 인덱스는 키의 정확한 질의 매칭에 대해서 네비게이션 될 수 있다. 도 17a, 도 17b은 키의 정확한 질의를 반환하는 네비게이션 절차를 도시하고 있다. 그 절차는 도 10a, 도 10b와 관련하여 기술한 것과 아주 유사하며, 전과 같이 동일 참 조 부호는 설명의 반복을 피하기 위해 동일 스텝에 대해서 사용될 것이며, 단계(152')에서 이제 후보 키가 판정 비트 시퀀스와 비교되고 판정 비트 시퀀스가 후보 키내에 있다면 제어 절차는 단계(154')로 진행하고 여기서 포함 포인터가 추종되며, 그렇지 않다면 제어 절차는 단계(158')로 진행하고 여기서 포함 포인터가 추종되며, 그렇지 않으면 단계(158')로 진행하며 여기서 제외 포인터가 추종되도록 변형된다는 사실은 예외적이다. 부가적으로 이제 단계(162)에서 단계(152')의 입력을 직접 지정한다.
도 18a, 도 18b은 패턴 리스트(L)를 가진 노드로부터 트래버스하여 그 결과(R)를 반환하는 절차를 도시한다. 그 절차는 단계(500)에서 시작하고 여기서 시작 노드가 입력된다. 다음에 제어 절차는 단계(502)로 진행하고 여기서 판정 비트 시퀀스가 패턴 리스트(L) 내에 포함되는 지를 알기 위한 시험이 행해진다. 이 시험 결과가 아니오이면, 제어 절차는 단계(504)로 진행하고 여기서 제외 포인터가 판정 노드로부터 빠져 나오는지를 알기 위한 시험이 행해진다. 제외 포인터가 빠져나왔으면 제어 절차는 단계(506)로 진행하고 여기서 포인터가 또 다른 판정 노드를 지정하는 지를 알기 위한 시험이 행해지며, 그 결과가 예이면 제어 절차는 단계(508)로 진행하고 그렇지 않으면 제어 절차는 단계(510)로 진행한다. 단계(508)에 의해 다음 판정 노드가 선택되게 되고 트래버설 절차가 단계(512)에서 순환 방식으로 호출된다. 제어 절차는 단계(512)에서 단계(514)로 진행한다. 부가적으로 단계(502)에서의 시험이 패턴 리스트 내에 판정 비트 시퀀스를 포함하고 있다고 단정하면, 판정 비트 시퀀스는 패턴 리스트 내에 포함되며, 제어 절차는 단계(514)로 진행하 고, 마찬가지로 제어 절차는 또한 제외 포인터가 존재하지 않음을 단계(504)가 표시하면 단계(514)로 진행한다.
단계(510)로 되돌아감으로써, 단계(506)에서 검사된 포인터에 의해 지정되는 결론 세트로의 점프가 야기되며, 다음에 단계(516)에서 결론 세트를 통한 검색이 행해진다. 이후 검색 절차에 대해서는 도 19를 참조하여 설명하기로 한다. 제어 절차는 단계(516)에서 단계(514)로 진행한다. 단계(514)에서 포함 포인터가 존재하는 지를 알기 위한 시험이 수행되고 그렇다면 제어 절차는 단계(518)로 진행하며 그렇지 않다면 제어 절차는 절차로부터의 출구(빠져 나옴)를 표시하는 단계(520)로 진행한다. 단계(518)에서 포인터가 추가 판정 노드를 지정하는 지를 알기 위한 시험이 수행되고 그렇다면 제어 절차는 그 절차를 순환 방식으로 다시 호출하는 단계(522)로 진행하고 그렇지 않으면 제어 절차는 포인터에 의해 지정된 결론 세트로의 점프를 야기하는 단계(522)로 진행한다. 단계(524)로부터 단계(516)와 동일한 단계(526)에서 결론 세트에 대한 검색이 수행된다. 단계(516,522)는 둘 다 절차의 끝을 나타내는 출구 단계인 단계(528)를 지정한다.
도 19는 단계(516,526)의 검색 절차를 개략적으로 도시한다. 그 절차는 단계(530)에서 시작되며 그로부터 제어 절차는 단계(532)로 진행한다. 단계(532)에서 결론 세트가 비어있는 지를 알기 위한 시험이 수행되고 그렇다면 그 절차는 단계(534)에서 빠져 나오고, 그렇지 않으면 제어 절차는 단계(536)로 진행한다. 단계(536)에서 결론 세트의 제1 키를 선택한 다음에 제어 절차는 단계(538)로 진행하고 여기서 키가 패턴 리스트의 모든 패턴을 포함하는 지를 알기 위한 시험이 행해 진다. 그렇다면 제어 절차는 단계(540)로 진행하고 그렇지 않다면 제어 절차는 단계(542)로 진행한다. 단계(540)에서 결론 세트로부터의 키 및 그의 속성들을 결과 리스트에 부가한다. 다음에 제어 절차는 단계(542)로 진행한다. 단계(542)에서 현재의 키가 결론 세트의 최종 키인 지를 알기 위한 체크가 수행되고 그렇다면 그 절차는 단계(544)를 빠져 나오고 그렇지 않으면 제어 절차는 단계(546)로 진행한다. 단계(546)에서 결론 세트의 다음 키를 선택하고 제어 절차는 단계(538)로 반환한다.
도 20은 어떻게 범위 검색이 본 발명의 일실시예를 구성하는 데이터 베이스를 이용하여 수행 가능한지를 개략적으로 도시하고 있다. 노드(560)는 그 안에 저장된 비트 패턴 RE을 가지며 노드(562)는 비트 패턴 OH을 가진다고 가정한다. 워드 red, Fred, Bill 및 John으로 노드를 질의하면, 워드 red 및 Fred는 추가 노드(564)를 향한 포함 경로를 따르도록 지향되며, 워드 Bill 및 John은 제외 경로를 따라 노드(562)로 지향된다. 노드(562)는 제외 경로를 따라 워드 Bill를 지향하며 워드 John는 비트 패턴 "OH"을 포함하고 있으면 포함 경로를 따른다.
이제 와일드카드 검색, 예컨대 검색 스트링"*red*"을 이용하여 데이터 베이스에 질의하면(여기서, *는 다문자 와일드 카드를 표시), 노드(560)는 노드(562)를 향한 제외 경로가 검색될 필요가 없다고 판정 가능하며, 그에 따라 검색은 노드(564)를 포함하는 경로로 제한된다. 그러나, 검색 항 "*lap*"을 이용하여 인덱스를 질의하면, 노드(560)는 비트 패턴 RE이 검색 스트링에 있는(와일드 카드 위치 내에 포함될 수 있을 때) 지를 판정하는 것이 불가능하고 그에 따라 인덱스는 포함 경로 및 제외 경로를 따라 검색하여야 한다.
키의 비트 패턴의 위치가 데이터 베이스의 노드에서 노드로 네비게이션 할 때 키를 따라 순차적으로 이동할 필요가 없음에 주목해야 한다.
키 압축
통상의 데이터 베이스 시스템에서 키 전체는 각각의 판정 노드에 저장된다. 반면에 전술된 본 발명에서 키의 일부분이 각 판정 노드에 저장되며 그 부분의 길이는 제한되지 않는다. 본 출원인은 추가 공간 절약이 키 전체 또는 키의 보조 부분을 그의 본래의 형태로 저장하는 것이 아니라 매핑 프로세스의 결과에서 도출된 키의 표현을 저장함으로써 얻어질 수가 있음을 알았다. CRC32 및 Adler32 등의 해시 코드 알고리즘은 잘 알려져 있고 인코딩 키값을 매핑하는 기능을 제공한다. 이러한 알고리즘은 훨씬 짧은 비트 시퀀스를 도출하기 위해 긴 비트 시퀀스에 대해서 동작한다. 매핑 알고리즘은 입력 비트 시퀀스가 항상 동일하다면 도출된 비트 시퀀스도 항상 동일하다는 점에서 결정론적이다. 그러나, 그 매핑은 얻어진 고 압축으로 인해 유일할 수 없으며 그에 따라 수개의 입력 시퀀스는 훨씬 짧은 출력 시퀀스 상에서 매핑된다. 그럼에도 불구하고, 이러한 결과를 수용함으로써, 인덱스의 설계를 현저히 줄일 수가 있다. 따라서, 후보 키 K에 대한 그래프를 네비게이션하는 경우, K대신에 값 A(K)을 사용하는 점을 제외하곤, 통상의 트래버설 방법를 따른다.
2 개 이상의 키가 동일 함수를 매핑할 수 있기 때문에, 결론 세트는 매핑 함수를 사용하지 않은 도달되지 않은 정보를 포함할 수 있다.
따라서, 언매핑된 키에 대응하지 않은 것들을 배제하기 위해 결론 세트의 엔 트리를 검사할 필요가 있다. 이것은 결론 세트의 언매핑된 키를 보유하여 그와 매핑하지 않은 항(term)을 배제하기 위해 그 키를 언매핑된 검색키와 비교함으로써 행해진다. 그러나, 공간 절약은 제2 코딩 알고리즘 B으로 결론 세트의 키를 인코딩함으로써 달성될 수가 있으며, 여기서 B는 A와 동일하다. 매핑 알고리즘 하에서 2개의 동일한 맵값으로 틀린 검색키를 매핑할 가능성은 매우 작으며 그에 따라 허위의 맵을 구할 확률은 높지 않다. 허위의 매칭 가능성은 R2의 대략 1이며, 여기서 R은 함수맵의 범위 크기이다. 이것이 그의 최대 크기에 도달되면 결론 세트의 재매핑을 용이하게 할 때, 매핑된 키 A 및 B는 결론 세트에 저장된다.
키를 인덱스에 삽입하기 위해 그 키는 제1 해시 함수를 이용하여 인코딩된다. 다음에 인덱스는 결론 세트에 도달할 때까지 전술한 네비게이션 방법 또는 통상의 방법을 통해 인코딩된 키를 이용하여 네비게이션 된다. 다음에 키는 제2 해시 함수를 이용하여 인코딩되지 않은 형태 또는 인코딩된 형태의 결론 세트에 삽입 가능하다.
삭제는 삽입 절차와 유사하며, 키는 제2 해시 함수를 이용하여 키 상에서 운영한 결과로서 인코딩되지 않은 값을 이용하거나 혹은 그의 원래의 형태로 결론 세트에서 삭제된다.
따라서, 데이터 베이스의 키가 크게 감소되는 형태로 데이터 베이스 키를 인코딩하기 위한 효율적인 방법을 제공하는 것이 가능하며 상이한 함수를 이용하는 이중 인코딩을 이용하면 허위 매칭의 위험을 수용 가능한 적은 발생 빈도로 줄인 다.
한계 키( Bounded Key )
도 21은 본 발명의 일실시예를 구성하는 인덱스를 개략적으로 도시한다. 개념적으로 인덱스는 통상의 B 트리 인덱스의 것과 같다. 그러나 판정 트리의 각 노드 내에 포함되는 전체 고유의 키라기 보다는 키의 인코딩된 변형이 사용되며, 키는 모듈로 산술 함수를 이용하여 매핑된다. 키의 부분 만이 한계 정해지지 않는 경우, 키 부분 만이 본 발명에 따라 매핑될 필요가 있음이 분명하다. 따라서 검색, 삭제 또는 삽입을 위해 인덱스에 키를 제시하는 경우, 표준 모듈로 함수가 사용 전에 키에 적용된다. 모듈로를 문자 스트링 키타입에 적용하기 위해 정수값의 최상위 바이트가 되는 제1 문자를 가진 복수 바이트의 매우 큰 서명되지 않은 크기 정수로서 스트링이 취급될 필요가 있다.
따라서, 키를 인덱스에 삽입하기 위해 인덱스에 대해 선택된 모듈로를 이용하여 키가 인코딩된다. 표준 인덱스 방법 또는 여기서 제시된 방법을 통해 인코딩된 키값을 이용하여 결론 세트(리프 블록)를 전술한 바와 같이 인덱스 구조가 네비게이션된다. 다음에 키는 그의 고유의 형태 또는 인코딩된 형태로 결론 세트에 삽입된다. 삭제 및 검색이 유사한 방법으로 수행된다. 따라서, 검색에 있어서 일단 결론 세트가 도달한 다음에, 키는 고유 형태 또는 인코딩 형태로 결론 세트의 모든 키값과 비교된다.
도 22는 전술한 바와 같이 오퍼레이터가 정확한 매칭이 아니라 범위 매칭을 실행하길 원하는 경우 발생할 수 있는 가능성을 개략적으로 도시한다. 범위에 대한 최소 및 최대 검색키가 각각 L(하위) 및 U(상위)로서 표현된다. 이들 키는 도 22에 도시한 바와 같이 비한계 또는 언매핑된 검색 공간(580)에 존재한다. 다음에 키는 그를 인덱스의 한계 범위로 변환하기 위해 모듈로 프로세스(582)를 통해 매핑된다. 키의 순서가 매핑 프로세스 후 보존되리란 보장은 없다. 이것은 2개의 가능성을 산출한다. 첫째, 개략적으로 지시된 언매핑된 세트(584)로 도시한 바와 같이, 매핑된 하위 키는 매핑된 상위키 보다 작은 값을 가진다. 이경우, 인덱스는 표준 인덱스 네비게이션 방법을 이용하여 결론 세트로 네비게이션된다. 그러나, 맵세트(586)로 고려되고 개략적으로 도시된 바와 같이, 매핑된 하위 키 ML는 매핑된 상위 키 MU 보다 큰 값을 가질 수 있다. 이 예에서, 검색은 인코딩된 최소키 ML 보다 크거나 같은 인코딩된 값을 가진 모든 결론 세트로 이루어져야 한다. 이러한 검색은 표준 인덱스 네비게이션 방법을 이용하여 수행된다. 또한, 검색은 인코딩된 최대키 MU 보다 작거나 같은 인코딩된 값을 가진 모든 결론 세트에 대해서 행해져야 한다. 다시 한번, 이것은 표준 네비게이션 방법을 이용하여 수행된다.
키들간의 차이가 모듈로 인코딩 방법의 영역(domain) 보다 작은 경우 만 이러한 기술이 작용할 수 있음에 주목해야 한다. 따라서, 사소한 예로서 키들이 모듈로 10을 이용하여 매핑되면 검색 범위에 있어 하위 및 상위키간의 차이는 10 보다 작아야 한다.
천이 키
도 23은 본 발명의 일실시예를 구성하는 결론 세트/리프 블록(600)의 데이터 구조를 도시한다. 결론 세트는 결론 세트(600)에 대한 가장 최근의 갱신일과 일시 를 나타내는 수명 베이스(602)를 포함한다. 결론 세트는 또한 복수의 키 엔트리(604,606,608)를 포함한다. 간결성을 위해 단지 키 엔트리(608) 만을 고려하면, 이것은 3개의 경로, 즉 엔트리 수명(608A), 엔트리 키정보(608B) 및 엔트리 속성 정보(608C)로 추가 분할된다.
천이 엔트리가 만들어지면, 천이 엔트리는 그와 관련된 엔트리 수명 데이터(608A)를 가진다. 이러한 데이터를 전체로서 인덱스에 대해 설정될 수 있으나 개별 결론 세트에 대해 옵션으로 설정될 수 있는 수명 한계 및 수명 유니트라 한다. 수명 유니트는 단일 수명 유니트에서 초의 수를 규정한다. 따라서 예컨대 60 값은 1 분을 의미하며, 86400은 1일을 의미한다. 수명 한계는 키가 인덱스에서 소실될 수 있는 수명 유니트의 수를 나타낸다. 이것은 통상적으로 1 내지 254 범위에 있어, 수명 한계는 8 비트 워드 내에서 적합하다. 따라서 키가 31일이 지난 후 만료하도록 설정하면 수명 유니트는 86400 초로 설정되고 수명 한계는 31로 설정된다. 1일이 지난 후 키가 만료하도록 하기 위해 수명 유니트와 수명 한계는 3600초 및 24로 각각 설정될 수 있다.
각각의 엔트리는 효율성을 위해 1 바이트로 표현된 엔트리 수명을 포함하며 이는 다른 값의 범위가 적절히 선택 가능할지라도 이예에서는 값 0 내지 255 사이에서 설정될 수 있다. 0은 엔트리가 새로운 엔트리이거나 혹은 수명 베이스 보다 오래된 수명 유니트 보다 작음을 표시한다.
결론 세트에서의 갱신 및 삽입을 위해 다음과 같은 시퀀스가 추종된다. 처음에, 현재의 일자 및 시간이 표기된 다음에 현재의 일자 및 시간과 수명 베이스간의 경과된 수명 유니트의 수가 계산된다. 다음에 결론 세트의 모든 엔트리는 경과된 수명 유니트의 수 만큼 증가된 엔트리 수명을 가진다. 255 보다 크거나 같게 계산된 엔트리 수명을 가진 엔트리는 255로 설정된 엔트리 수명을 가진다.
다음에 이러한 엔트리는 재사용 가능하게 된다. 이 때 수명 베이스는 절차 개시 시 표기된 일자 및 시간으로 설정된다. 삽입될 임의의 키는 결론 세트의 가용한 슬롯에 놓여지고 0의 엔트리 수명으로 설정된다. 가용한 슬롯은 아직 할당되지 않은 슬롯이거나 혹은 쓸모없게 된 슬롯(그의 엔트리가 255에 도달하였기 때문에)일 수 있다. 또한 갱신된 엔트리는 0으로 리셋된 엔트리 수명을 가진다.
상기 실시예에서, 엔트리 수명은 단일 바이트로서 저장된다. 이것은 254 기간의 범위를 부여하는데 일자의 형태는 쓸모없게 된다. 보다 넓은 범위 수명 한계를 제공하도록 1 바이트 이상을 이용하는 것이 가능하나 스토리지 오버헤드는 증대된다. 이와는 달리, 1 바이트 미만을 엔트리 수명으로서 이용함으로써, 스토리지 오버헤드를 줄이고 개별적으로 정의될 수 있는 수명 한계의 범위를 줄인다.
따라서 개선된 데이터 베이스를 제공하는 것이 가능하다.
판정 그래프 분할
전술한 바와 같이, 판정 그래프(인덱스) 전체는 이것이 고속의 엑세스를 가능하게 할 때 반도체 메모리 내에 유지된다. 그러나, 데이터 베이스의 크기 또는 데이터 베이스를 실행하는 하드웨어 플래폼의 기능은 반도체 메모리 또는 머신내에서 인덱스 전체를 유지하는 것이 가능하지 않을 수가 있다. 이것은, 예컨대 머신은 다작업을 기대하고 다른 기능들을 수행하기 때문일 수 있다.
하드 디스크 드라이브 등의 대량 기억 장치는 소정 크기의 블록들로 분할된다고 공지되어 있으며 블록 크기 보다 작은 크기의 파일이 하나의 블록을 점유한다. 따라서 물리적 메모리는 복수개의 블록 크기로 이용된다. 이러한 메모리에 대한 판정 그래프를 판독 및 기록할 때, 판정 그래프는 그의 전체 또는 가능한 한 많이 단일 블록에 기록되는 방식으로 구성되는 것이 좋다. 따라서, 판정 그래프는 메모리의 블록 내에 상주할 것이다. 그러나, 인덱스가 점진적으로 집단화됨에 따라, 판정 그래프는 키 집단의 성장과 함께 성장한다. 따라서 단일 블록 내에 판정 그래프를 수용하는 것이 불가능하게 될 때가 있게 된다. 따라서 복수 블록에 걸쳐서 판정 그래프를 수용하기 위한 방법이 필요하다.
도 24와 관련하여, 메모리 블록(700)은 컴퓨터 시스템의 하드 디스크 상의 블록의 물리적 크기를 나타내고 그 블록은 판정 그래프 내의 관련 노드와 관련하여 데이터와 관련있는 개개의 부분(702,704,706,708)을 포함하도록 부분할 된다고 상정하며, 각각은 판정 그래프 내의 관련 노드를 고려한 데이터와 관련이 있다. 또한 블록(700)이 완전히 충만한 크기에 이제 인덱스가 도달하였다고 상정한다.
이제 데이터 베이스 연산의 결과로서, 추가 노드를 판정 그래프로 삽입하는 것이 필요하다고 상정한다. 노드 삽입은 임의의 시점에서 발생할 수가 있다. 전술한 바와 같이, 각 판정 노드(도 3)는 판정값, 그래프에서 다음 노드를 표시하는 로우 포인터 및 하이 포인터를 포함한다. 그 결과, 그래프에 대한 국부적인 보정은 새로운 노드가 어느 기존의 노드 다음에 삽입 가능하도록 행해질 수가 있다. 따라서, 삽입의 결과로서 데이터가 데이터 항목(706)에 의해서 표시되는 노드 다음에 새로운 노드를 삽입하는 것이 필요함을 상정한다. 우선, 새로운 노드가 삽입될 때, 노드(706)의 출력 포인터들 중 하나는 새로운 노드를 지정하기 위해 수정된다. 삽입 프로세스의 일부로서 새로운 노드의 출력 포인터는 또한 판정 그래프가 손상되지 않도록 정확하게 설정된다. 그러나, 메모리 블록(700)에서 새로운 노드(710)에 관한 데이터를 저장하는 것이 더 이상 가능하지 않으면, 새로운 노드(710)에 관한 디테일은 추가 블록(712)에 저장되어야 한다. 그 새로운 노드와 관련이 있는 추가 노드가 또한 생성될 수 있고 정보는 메모리 블록(712)에 저장될 수가 있다.
나중에 초기의 기존 노드(708)와 관련이 있는 새로운 노드를 삽입하는 것이 필요하다면, 다시 메모리 블록(700)은 채워지며 그에 따라 추가의 새로운 노드(714)의 디테일은 메모리 블록(700)의 외부에 저장되어야 한다. 이러한 프로세스에 의해 판정 그래프는 성장이 가능하나, 각 풀(페어런트) 블록으로부터의 대부분의 거의 빈 메모리 블록은 스포닝될 수가 있다.
도 25는 인덱스를 성장하기 위한 대안의 방법을 도시한다. 다시 메모리 블록(700)이 충만하고 이제 새로운 노드를 삽입하는 것이 필요하다고 가정한다. 전과 같이, 새로운 메모리 블록(700)이 생성된다. 이제 페어런트 판정 그래프는 동일한 부분으로 분할된다. 하나의 부분은 구(old) 블록에 놓여지고, 다른 부분은 새로운 블록(712)에 놓여진다.
도 25에 있어서, 초기에 인덱스(720)는 메모리 블록(700) 내에 저장되고 이제 블록(700)은 충만하다고 가정한다. 인덱스 삽입의 결과 새로운 노드(722)가 생성되며 이 프로세스에 의해 인덱스는 메모리 블록(700)의 크기를 초과한다고 가정 한다. 그러나, 인덱스 성장을 제어하기 위한 방법에 있어서, 인덱스의 구조는 인덱스 블록들 사이에서 실질적으로 균등하게 분할하도록 분석된다. 따라서 도 25에 도시한 인덱스 부분을 취하면, 노드(724)에서 시작된다. 즉, 파선으로 둘러싸인 10개의 노드는 노드(724)의 좌측으로 연장하는 경로에 의해서 도달될 수 있으며, 파선(728)으로 둘러싸인 12 개의 노드는 노드(724)의 우측으로 연장하는 경로에서 발견될 수 있음이 분명하다. 알고리즘에 의해 시험 노드를 선택하고 인덱스를 분할하는 적절한 후보 노드를 찾기 위해 그에 종속하는 노드를 계산함으로써 인덱스 구조가 순환적으로 스캔된다. 도 25에 도시한 예에서, 노드(724) 및 라인(726)으로 둘러싸인 노드들은 구(old) 메모리 블록(700)에 놓여질 것이고 파선(728)으로 둘러싸인 노드들은 새로운 메모리 블록(712)에 놓여질 것이다. 이러한 프로세스에 의해 각 메모리 블록은 최적으로 그리고 균등하게 이용되게 되며 실질적으로 빈 메모리 블록들의 확산은 중지된다.
한정자( Qualifiers )
빈번하게 인덱스에서의 검색 항은 2 개 이상의 검색 기준을 이용하여 수행되는 것이 바람직하다. 이러한 기준은 일반적으로 부울 대수의 원리와 결합된다.
질의는 개개의 파트들로 분할되는 것이 가능하며 각각의 파트는 다음 파트가 분할되기 전에 수행된 다음에 그 결과는 끝에서 결합된다. 그러나 이것은 매우 과도하게 계산 집약적일 수 있고 하드 디스크 등의 블록 데이터 저장 장치에서 많은 판독 기록 동작을 필요로 한다. 따라서, 예를 들면 100 히트를 반환한 질의는 인덱스 질의에 의해 데이터 포인터를 인출하도록 또 다른 100개의 느린 디스크 I/O 동 작을 필요로 할 것이다.
질의에 의해 인출된 모든 데이터가 필요한 것은 아니다. 따라서, 질의가 1997년에 등록된 모든 메르세데츠 자동차를 찾기 위한 데이터 베이스로 이루어졌다면, 1997년에 등록된 자동차에 대한 질의는 수많은 결과를 반환할 것이다. 그러나, 이들 중 작은 수만이 메르세데츠 자동차가 된다. 더욱이, 많은 질의에 대해 원하지 않은 결과의 수를 줄이는 식으로 질의의 순서를 바꾸는 것은 가능하지 않을 수 있다.
이러한 문제는 연결키(concatenated key)들을 이용하여 극복될 수 있다. 그러나, 지금까지 이러한 연결 키들은 주 검색키와 보조 검색키의 전체를 결합된 연결키로 유지하여 결과적으로 결합된 키가 특히 길게 되었다.
본 출원인은 개선된 검색 성능이 한정자, 특히 부가 한정자를 주 검색키에 연계함으로써 행해질 수 있음을 알았다. 한정자는 보조 또는 수반하는 검색 항을 직접적으로 표현하는 형태가 아니라 부수하는 항의 단축된 형태로 나타난다. 동일한 해싱 함수를 사용하여 데이터 베이스에 데이터를 삽입 또는 그로부터 삭제하기 위해 데이터 베이스를 질의한다. 따라서, 데이터 베이스의 생성 동안에 인덱스는 주키(전과 같이) 및 0 이상의 한정자키와 함께 생성된다.
이용 시 인덱스는 원리키를 이용하여 네비게이션되고 데이터는 사용 방식에 따라 결론 세트에 저장된다. 그러나 각 한정자 키는 0 내지 255 범위의 수이며 결론 세트에 키 엔트리와 함께 저장되는 1 바이트 아래로 해시 인코딩된다.
질의 동안에, 주(主) 키에는 0 또는 그 이상의 한정자 키가 공급된다. 다음 에 전과 같이 주키를 이용하여 인덱스를 네비게이션 한다. 처음에, 일단 정확한 결론 세트 또는 세트들에 도달한 다음에, 이들은 결론 세트의 엔트리와 한정자 키해시 코드 및 주 키값을 매칭함으로써 스캔된다. 모든 주키와 모든 한정자 해시 코드를 매칭하는 엔트리들 만이 반환된다.
복수 한정자 키가 동일한 단일 바이트 해시 코드를 매핑할 수 있음을 알아야 할 것이다. 그러므로 원하지 않는 데이터가 반환될 확률은 적고 한정적이다. 그러나, 양호한 랜덤화 해시 인코딩이 사용되고 그릇된 매칭의 확률은 255분의 1(또는 0.05% 미만)이고 본 발명은 모든 정확한 결과의 반환을 보장하며 작은 퍼센트의 틀린 결과를 보장한다. 따라서 반환된 모든 키 히트는 원하지 않는 엔트리 중 어느 하나를 제거하기 위해 데이터 기억 장치에서 검사되어야 한다. 그러나, 인덱스의 크기 축소 및 질의 프로세스의 단순화는 반환된 히트의 추가 분석을 보상한다. 이러한 이점은 부정확한 히트에 대한 확률이 증가하는 한정자수와 함께 감소하면 보다 많은 한정자을 사용함에 따라 증대한다. 불량 결과의 확률은 이상적인 상황하, 즉 (1/255)N 하에 있다. 따라서, 2 개의 한정자(N=2)와 함께 불량 결과의 확률은 65025 분의 1이거나 0.002% 미만이다. 3개의 한정자로 데이터의 부정확한 항목을 반환하기 위한 기회는 1400만 분의 1로 감소한다.
결론 세트 내에서 검색키의 크기 및 데이터 스토리지 요건이 훨씬 감소된다. 따라서, 8 개의 항(각각의 항은 8 바이트 길이까지 될 수가 있다)를 검색할 의도이면, 이것은 통상 각 검색키에 대해 64 바이트 데이터의 스토리지를 필요로 할 것이 다. 본 발명에 있어서 이러한 요건은 단지 15 바이트의 데이터로 감소된다.
데이터 베이스를 질의할 때 각 한정자 키는 옵션이며 모든 키 또는 어느 하나의 키는 인덱스 구조의 네비게이션에 영향을 미치지 않기 때문에 공급될 수 있다. 한정자 키는 단지 결론 세트를 스캐닝할 때 반환되는 히트수에 영향을 미친다. 따라서, 공급되는 한정자가 많을수록 질의 결과가 보다 정확해 진다.
한정자 기술은 예컨대 B-트리 등의 공지의 구조와 같은 어느 인덱스 구조들에 적용 가능함을 알아야 한다. 도 26은 이러한 본 발명의 형태에 따른 검색키의 포맷을 개략적으로 도시하며, 키의 제1 부분은 주키 데이터를 포함하며 나머지 키는 한정자 Q1, Q2 ...Q7 등을 포함하며, 각 한정자는 원래의 추가 키에 대해 해싱 함수에 의해 발생된 1 바이트 길이의 워드이다.
패턴 매칭
종종 데이터 베이스내에서 패턴 매칭 질의를 행하는 것이 좋다. 따라서 검색키 전체에 대해 검색하기 보다는 키의 일부분 만을 이용하여 검색이 수행된다.
이러한 검색의 효율성은 어떻게 키집단이 판정 그래프의 각 노드로 분할되는 지에 달려있다.
ASCII(아스키) 문자 세트가 갖는 문제점은 그것이 255 문자를 가지며 일부 문자가 나타날 확률이 매우 높으나 이중 문자의 조합은 뛰어나다는 것이다.
본 출원인은 ASCII 문자 세트(또는 등가 세트)가 소형 세트로 매핑되면 패턴 매칭이 훨씬 개선 가능함을 알았다.
본 출원인은 단일 문자가 4 개의 비트내에서 적합하고 2 개의 문자 시퀀스가 단일 바이트 내에 적합하도록 16문자(0-15)로 세트를 축소하는 매핑수를 정의하였다.
이러한 변형된 문자 세트는 키 모집단을 분할하도록 단일 인덱스로 사용 가능하다.
문자 세트의 매핑은 삽입, 삭제 또는 질의 동작을 위해 판정 그래프의 네비게이션 바로 전에 키에 적용된다. 원래의 키값 또는 변환된 키값(소형 크기)은 정확한 또는 개연성 있는 질의 결과의 필요성에 따라 좌우되는 결론 세트로 저장 가능하다. 2 개의 문자 세트의 예는 다음과 같다.
음성 세트
ASCII 문자 매핑된 값
모음(A, E, I, O, U) 제거
숫자(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) 제거
구두 문자 제거
스페이스, 탭 0
B 1
C, K, Q 2
D 3
F 4
G, J 5
H 6
K 7
L 8
M, N 9
P 10
R 11
S, Z 12
T 13
V 14
W 15
X, Y 제거
유사 세트
ASCII 문자 매핑된 값
스페이스, 탭 0
구두 문자 1
숫자(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) 2
모음(A, E, I, O, U) 3
B, D 4
C, K 5
F, P 6
G, J 7
H, Y 8
K, L 9
M, N 10
P, Q 11
R, S 12
T 13
V, W 14
X, Z 15
이들 각각의 방법에 있어서, 문자는 질의가 특정의 경우가 아니도록 상위 케이스로 변환된다. 또한, 라인 공급 및 문자 반환 등의 비인쇄 문자는 매핑에서 제거된다.
이러한 축소형 세트를 이용함으로써 패턴 매칭의 성능을 훨씬 향상할 수 있다. 키들은 삽입, 질의 삭제 동작 전에 매핑된 다음, 인덱스는 매핑된 키를 이용하여 네비게이션된다.
도 1은 본 발명의 개략도이다.
도 2는 판정 그래프의 논리적 구조의 개략도이다.
도 3은 판정 노드의 구조를 개략적으로 도시한다.
도 4는 결론 세트의 구조를 개략적으로 도시한다.
도 5는 결론 세트의 엔트리 구조를 개략적으로 도시한다.
도 6은 정확한 검색 절차를 개략적으로 도시한다.
도 7은 범위 검색 절차를 개략적으로 도시한다.
도 8a는 키를 삽입하기 위한 절차를 개략적으로 도시하며, 도 8b는 도 8a의 계속이다.
도 9a는 키를 삭제하기 위한 절차를 개략적으로 도시하며, 도 9b는 도 9a의 계속이다.
도 10a는 정확한 키 질의에 대한 절차를 개략적으로 도시하며, 도 10b는 도 10a의 계속이다.
도 11은 질의 범위에 대한 절차를 개략적으로 도시한다.
도 12a는 판정 그룹 G, 판정값 V을 갖는 노드를 최소 및 최대 키 범위로 이동하고 결과를 반환하기 위한 절차를 개략적으로 도시하며, 도 12b는 도 12a의 계속이다.
도 13은 판정 그래프의 일부분의 구조를 도시한다.
도 14는 수정 판정 노드의 논리적 구조를 도시한다.
도 15a는 키를 삽입하기 위한 절차를 도시하며, 도 15b는 도 15a의 계속이다.
도 16a는 키를 삭제하기 위한 절차를 도시하며, 도 16b는 도 16a의 계속이다.
도 17a는 정확한 키 매칭 절차를 도시하며, 도 17b는 도 17a의 계속이다.
도 18a는 패턴 리스트와 함께 트리를 이동하여 그 결과를 반환하기 위한 절차를 도시하며, 도 18b는 도 18a의 계속이다.
도 19는 패턴 리스트(L)의 검색 절차를 도시한다.
도 20은 패턴 매치 프로세스가 어떻게 분류 데이터에 도움을 주는 지에 대한 일례를 도시한다.
도 21은 한계 인덱스를 가진 판정 그래프의 개략도이다.
도 22는 수정된 결론 세트의 구조를 도시한다.
도 23은 판정 그래프를 분할하기 위한 제1 방법을 개략적으로 도시한다.
도 24는 판정 그래프를 분할하기 위한 제2 방법을 개략적으로 도시한다.
도 25는 한정자를 가진 복합 키의 구조를 개략적으로 도시한다.

Claims (13)

  1. 데이터 베이스를 컴파일링 및 트레버싱하는 방법으로, 제1 인코딩, 매핑 또는 압축 프로세스의 결과로부터 키의 제1 표현을 도출하고, 상기 키의 스토리지 공간 요건을 줄이기 위해 결론 세트 내에 상기 키의 제1 표현을 저장하고, 제 2 인코딩, 매핑, 또는 압축 프로세스의 결과로부터 상기 키의 제2 표현을 도출하고, 상기 키의 제2 표현을 이용하여 트리 그래프를 트래버싱하여 상기 결론 세트에 도달하는 것을 포함하는 방법.
  2. 범위의 한계를 나타내는 제1 키 및 제2 키 사이의 키의 범위로 데이터 베이스를 네비게이션하는 방법으로, 상기 키는 축소된 범위로 매핑되며, 상기 키의 순서가 매핑 동안에 보존되지 않으면, 대형 키 보다 큰 매핑된 공간 및 소형키 보다 작은 매핑된 공간에 대해서 검색이 행해지는 것인 방법.
  3. 제2항에 있어서,
    상기 결론 세트는 언매핑된 형태로 상기 키를 포함하는 것인 방법.
  4. 데이터 베이스 내의 키를 관리하는 방법에 있어서,
    상기 키는 상기 키 및 그의 관련 데이터가 상기 데이터 베이스 내에 유지되어야 하는 지속 기간을 표시하는 데이터 필드를 포함하며, 상기 데이터 필드는 이 용 시에 상기 키 및 그의 관련 데이터가 여전히 유효한지를 체크하기 위하여 심문되는 것을 특징으로 하는 방법.
  5. 제4항에 있어서, 만료된 키 및 데이터가 새로운 데이터로 겹쳐 쓰기 가능하게 만들어지는 것인 방법.
  6. 제4항 또는 제5항에 있어서, 만료된 키 및 데이터는 상기 데이터 베이스로부터 능동적으로 삭제되지 않는 것인 방법.
  7. 제4항 또는 제5항에 있어서, 결론 세트에 엑세스할 때 지속 기간을 가진 각 엔트리의 수명이 계산되며 그 계산 결과는 어느 엔트리가 겹쳐 쓰기 가능한 지를 판정하기 위해 저장되거나 사용될 수 있는 것인 방법.
  8. 컴퓨터로 하여금 제2항 또는 제3항에서 청구된 바와 같은 방법을 수행하게 하는 컴퓨터 판독 가능 명령어.
  9. 제8항에 있어서,
    상기 명령어는 데이터 캐리어 상에서 전달되는 것인 컴퓨터 판독 가능 명령어.
  10. 트리 그래프 및 결론 세트를 포함하고,
    키의 제1 표현은 상기 결론 세트 내에 저장되며, 상기 키의 제1 표현은 상기 키의 스토리지 공간 요건을 줄기기 위해 제1 인코딩, 매핑 또는 압축 프로세스의 결과로부터 도출되며, 상기 트리 그래프는 상기 키의 제2 표현을 이용하여 상기 트리 그래프를 트래버싱하여 상기 결론 세트에 도달될 수 있도록 구성되며, 상기 키의 제2 표현은 제2 인코딩, 메핑 또는 압축 프로세스의 결과로부터 도출되는 것을 특징으로 하는 데이터 베이스.
  11. 컴퓨터로 하여금 제4항 또는 제5항에서 청구된 바와 같은 방법을 수행하게 하는 컴퓨터 판독 가능 명령어.
  12. 제11항에 있어서,
    상기 명령어는 데이터 캐리어 상에서 전달되는 것인 컴퓨터 판독 가능 명령어.
  13. 데이터 베이스에 있어서,
    상기 데이터 베이스의 키는 이 키 및 그의 관련 데이터가 상기 데이터 베이스 내에 유지되어야 하는 지속 기간을 표시하는 데이터 필드를 포함하며, 상기 데이터 베이스는 이용시에 상기 키 및 그의 관련 데이터가 여전히 유효한지를 체크하기 위한 상기 데이터 필드를 심문하기 위하여 정렬되는 것을 특징으로 하는 데이터 베이스.
KR1020087004578A 2000-11-30 2001-11-28 데이터 베이스 KR20080024237A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB0029238.3 2000-11-30
GB0029238A GB2369695B (en) 2000-11-30 2000-11-30 Database

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020037007328A Division KR100886189B1 (ko) 2000-11-30 2001-11-28 데이터 베이스

Publications (1)

Publication Number Publication Date
KR20080024237A true KR20080024237A (ko) 2008-03-17

Family

ID=9904192

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020087004578A KR20080024237A (ko) 2000-11-30 2001-11-28 데이터 베이스
KR1020037007328A KR100886189B1 (ko) 2000-11-30 2001-11-28 데이터 베이스

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020037007328A KR100886189B1 (ko) 2000-11-30 2001-11-28 데이터 베이스

Country Status (22)

Country Link
US (1) US8224829B2 (ko)
EP (3) EP2009559A1 (ko)
JP (3) JP4810785B2 (ko)
KR (2) KR20080024237A (ko)
CN (2) CN1552032B (ko)
AR (1) AR035508A1 (ko)
AT (1) ATE436055T1 (ko)
AU (4) AU2002222096B2 (ko)
CA (1) CA2429990A1 (ko)
CY (1) CY1109459T1 (ko)
DE (1) DE60139212D1 (ko)
DK (1) DK1364314T3 (ko)
EA (4) EA005641B1 (ko)
EG (1) EG23400A (ko)
ES (1) ES2329339T3 (ko)
GB (6) GB2406681B (ko)
IL (3) IL156117A0 (ko)
MY (2) MY132130A (ko)
NO (2) NO20032416L (ko)
NZ (3) NZ526102A (ko)
SG (1) SG148842A1 (ko)
WO (1) WO2002044940A2 (ko)

Families Citing this family (71)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8352400B2 (en) 1991-12-23 2013-01-08 Hoffberg Steven M Adaptive pattern recognition based controller apparatus and method and human-factored interface therefore
US7904187B2 (en) 1999-02-01 2011-03-08 Hoffberg Steven M Internet appliance system and method
GB2383153A (en) * 2001-12-17 2003-06-18 Hemera Technologies Inc Search engine for computer graphic images
US7007027B2 (en) * 2002-12-02 2006-02-28 Microsoft Corporation Algorithm for tree traversals using left links
US7072904B2 (en) 2002-12-02 2006-07-04 Microsoft Corporation Deletion and compaction using versioned nodes
GB0304782D0 (en) * 2003-03-03 2003-04-09 Percy Richard System and method using alphanumeric codes for the identification, description, classification and encoding of information
US7620624B2 (en) * 2003-10-17 2009-11-17 Yahoo! Inc. Systems and methods for indexing content for fast and scalable retrieval
US7849063B2 (en) * 2003-10-17 2010-12-07 Yahoo! Inc. Systems and methods for indexing content for fast and scalable retrieval
US20050144241A1 (en) * 2003-10-17 2005-06-30 Stata Raymond P. Systems and methods for a search-based email client
US20050183120A1 (en) * 2004-01-13 2005-08-18 Saurabh Jain Multi-user personalized digital multimedia distribution methods and systems
US8316060B1 (en) 2005-01-26 2012-11-20 21st Century Technologies Segment matching search system and method
US8515983B1 (en) * 2005-10-28 2013-08-20 21st Century Technologies Segment matching search system and method
US7567968B2 (en) * 2005-01-31 2009-07-28 Microsoft Corporation Integration of a non-relational query language with a relational data store
US7565217B2 (en) * 2005-04-01 2009-07-21 International Business Machines Corporation Traversal of empty regions in a searchable data structure
US8412528B2 (en) * 2005-06-21 2013-04-02 Nuance Communications, Inc. Back-end database reorganization for application-specific concatenative text-to-speech systems
JP4810915B2 (ja) * 2005-07-28 2011-11-09 日本電気株式会社 データ検索装置及び方法、並びにコンピュータ・プログラム
US7792368B2 (en) * 2005-08-10 2010-09-07 Xerox Corporation Monotonic classifier
US8768777B2 (en) * 2005-08-31 2014-07-01 Sap Ag Tracking assets between organizations in a consortium of organizations
US8478755B2 (en) * 2006-04-20 2013-07-02 Microsoft Corporation Sorting large data sets
US8229902B2 (en) * 2006-11-01 2012-07-24 Ab Initio Technology Llc Managing storage of individually accessible data units
GB2445764A (en) * 2007-01-22 2008-07-23 Surfcontrol Plc Resource access filtering system and database structure for use therewith
GB2452760A (en) 2007-09-14 2009-03-18 Data Connection Ltd Storing and searching data in a database tree structure for use in data packet routing applications.
WO2009148473A1 (en) * 2007-12-12 2009-12-10 21Ct, Inc. Method and system for abstracting information for use in link analysis
US20090189894A1 (en) 2008-01-27 2009-07-30 Petrov Julian Methods and systems for analyzing a remoting system to determine where to render three dimensional data
JP5220483B2 (ja) * 2008-06-06 2013-06-26 インターナショナル・ビジネス・マシーンズ・コーポレーション 木構造のデータに対する集約計算を行うコンピュータ・システム、並びにその方法及びコンピュータ・プログラム
CN101295312B (zh) * 2008-06-18 2011-12-28 中兴通讯股份有限公司 一种使用表格呈现数据的方法
US8055646B2 (en) * 2008-08-05 2011-11-08 International Business Machines Corporation Prevention of redundant indexes in a database management system
US8095548B2 (en) * 2008-10-14 2012-01-10 Saudi Arabian Oil Company Methods, program product, and system of data management having container approximation indexing
US9047330B2 (en) * 2008-10-27 2015-06-02 Ianywhere Solutions, Inc. Index compression in databases
US20100257181A1 (en) * 2009-04-01 2010-10-07 Sybase, Inc. Dynamic Hash Table for Efficient Data Access In A Relational Database System
US8306958B2 (en) * 2009-09-14 2012-11-06 At&T Intellectual Property I, L.P. Time-outs with time-reversed linear probing
US20110093439A1 (en) * 2009-10-16 2011-04-21 Fanglu Guo De-duplication Storage System with Multiple Indices for Efficient File Storage
DE102009054753A1 (de) * 2009-12-16 2011-06-22 Robert Bosch GmbH, 70469 Verfahren zum Betreiben einer Sicherheitseinrichtung
US8694536B2 (en) * 2010-11-16 2014-04-08 Tibco Software Inc. Fast matching for content-based addressing
CN102087666B (zh) * 2011-01-30 2012-10-31 华东师范大学 一种基于节点与关键字覆盖关系的索引及其构建方法和查询方法
EP2490134A1 (en) 2011-02-18 2012-08-22 Amadeus S.A.S. Method, system and computer program to provide fares detection from rules attributes
US8983995B2 (en) 2011-04-15 2015-03-17 Microsoft Corporation Interactive semantic query suggestion for content search
US8788505B2 (en) 2011-04-27 2014-07-22 Verisign, Inc Systems and methods for a cache-sensitive index using partial keys
US8799240B2 (en) * 2011-06-23 2014-08-05 Palantir Technologies, Inc. System and method for investigating large amounts of data
US8676951B2 (en) * 2011-07-27 2014-03-18 Hitachi, Ltd. Traffic reduction method for distributed key-value store
US8965921B2 (en) * 2012-06-06 2015-02-24 Rackspace Us, Inc. Data management and indexing across a distributed database
WO2014078681A1 (en) * 2012-11-16 2014-05-22 Dahn David W Computer-implemented decision tracking systems, displays and methods
KR101441869B1 (ko) * 2013-02-21 2014-09-22 고려대학교 산학협력단 단축 url 생성 시스템 및 그 방법
EP3182304A1 (en) 2013-03-29 2017-06-21 Pilab S.A. Computer-implemented method for storing unlimited amount of data as a mind map in relational database systems
EP3159815A1 (en) 2013-06-30 2017-04-26 Pilab S.A. Database hierarchy-independent data drilling
EP2843568A1 (en) 2013-08-30 2015-03-04 Pilab S.A. Computer implemented method for creating database structures without knowledge on functioning of relational database system
EP2843567B1 (en) 2013-08-30 2017-05-10 Pilab S.A. Computer-implemented method for improving query execution in relational databases normalized at level 4 and above
US9400817B2 (en) 2013-12-31 2016-07-26 Sybase, Inc. In-place index repair
US10061792B2 (en) * 2013-12-31 2018-08-28 Sybase, Inc. Tiered index management
US9450602B2 (en) * 2014-01-02 2016-09-20 Sap Se Efficiently query compressed time-series data in a database
US9667704B1 (en) * 2014-04-26 2017-05-30 Google Inc. System and method for classifying API requests in API processing systems using a tree configuration
CN105404437B (zh) * 2014-08-05 2019-07-26 阿里巴巴集团控股有限公司 一种信息操作的方法及装置
CN104268146A (zh) * 2014-08-21 2015-01-07 南京邮电大学 一种适合分析型应用的静态b+树索引方法
CN104182522B (zh) * 2014-08-26 2017-04-19 中国科学院信息工程研究所 一种基于循环位图模型的辅助索引方法及装置
US20160063051A1 (en) * 2014-08-29 2016-03-03 Netapp, Inc. Methods for persisting data on nonvolatile memory for fast updates and instantaneous recovery and devices thereof
DE102014112741A1 (de) 2014-09-04 2016-03-10 Dr. Ing. H.C. F. Porsche Aktiengesellschaft Kraftfahrzeug
US9836695B2 (en) * 2015-03-24 2017-12-05 International Business Machines Corporation Automated decision support provenance and simulation
CN106294371B (zh) 2015-05-15 2019-08-16 阿里巴巴集团控股有限公司 字符串值域切分方法及装置
JP6241449B2 (ja) * 2015-05-21 2017-12-06 横河電機株式会社 データ管理システム及びデータ管理方法
US10846275B2 (en) 2015-06-26 2020-11-24 Pure Storage, Inc. Key management in a storage device
US9811524B2 (en) 2015-07-27 2017-11-07 Sas Institute Inc. Distributed data set storage and retrieval
US9946719B2 (en) 2015-07-27 2018-04-17 Sas Institute Inc. Distributed data set encryption and decryption
WO2017186774A1 (en) 2016-04-26 2017-11-02 Pilab S.A. Systems and methods for querying databases
SG11201811425TA (en) * 2016-09-22 2019-01-30 Visa Int Service Ass Techniques for in-memory key range searches
JP2018206084A (ja) * 2017-06-05 2018-12-27 株式会社東芝 データベース管理システムおよびデータベース管理方法
CN110427340B (zh) * 2018-04-28 2023-08-04 伊姆西Ip控股有限责任公司 用于文件存储的方法、装置和计算机存储介质
US11216432B2 (en) * 2018-07-06 2022-01-04 Cfph, Llc Index data structures and graphical user interface
US10423662B1 (en) * 2019-05-24 2019-09-24 Hydrolix Inc. Efficient and scalable time-series data storage and retrieval over a network
US11263195B2 (en) * 2020-05-11 2022-03-01 Servicenow, Inc. Text-based search of tree-structured tables
WO2023148411A1 (es) * 2022-02-04 2023-08-10 Navarro Arteaga Angel Procedimiento de calibración de gráficos
US11803545B1 (en) * 2022-06-24 2023-10-31 Sap Se Runtime statistics feedback for query plan cost estimation

Family Cites Families (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3593309A (en) 1969-01-03 1971-07-13 Ibm Method and means for generating compressed keys
JPH0772898B2 (ja) * 1981-06-27 1995-08-02 富士通株式会社 インデックスの作成方式
JPS607557A (ja) * 1983-06-27 1985-01-16 Fujitsu Ltd 文字型デ−タの区分化圧縮法
US5010478A (en) 1986-04-11 1991-04-23 Deran Roger L Entity-attribute value database system with inverse attribute for selectively relating two different entities
JPS63285629A (ja) 1987-05-19 1988-11-22 Fujitsu Ltd インデックス構成処理方法
US5121495A (en) 1988-02-02 1992-06-09 Bell Communications Research, Inc. Methods and apparatus for information storage and retrieval utilizing hashing techniques
JPH038083A (ja) 1989-06-06 1991-01-16 Fujitsu Ltd 識別子付情報の木構造管理方式
US5117349A (en) * 1990-03-27 1992-05-26 Sun Microsystems, Inc. User extensible, language sensitive database system
US5230047A (en) * 1990-04-16 1993-07-20 International Business Machines Corporation Method for balancing of distributed tree file structures in parallel computing systems to enable recovery after a failure
WO1992006440A1 (en) * 1990-10-05 1992-04-16 Microsoft Corporation System and method for information retrieval
JPH05120339A (ja) 1991-05-24 1993-05-18 Nec Ic Microcomput Syst Ltd 二分木構造データ登録処理方法
US5355473A (en) * 1991-06-20 1994-10-11 Lawrence Au Indexed record locating and counting mechanism
JPH05334153A (ja) 1992-06-01 1993-12-17 Nippon Telegr & Teleph Corp <Ntt> インデックス管理方式
US5689699A (en) 1992-12-23 1997-11-18 International Business Machines Corporation Dynamic verification of authorization in retention management schemes for data processing systems
JP2583010B2 (ja) * 1993-01-07 1997-02-19 インターナショナル・ビジネス・マシーンズ・コーポレイション 多層インデックス構造におけるローカルインデックステーブル及び大域インデックステーブルの間の一貫性を維持する方法
US5497485A (en) * 1993-05-21 1996-03-05 Amalgamated Software Of North America, Inc. Method and apparatus for implementing Q-trees
US5560007A (en) * 1993-06-30 1996-09-24 Borland International, Inc. B-tree key-range bit map index optimization of database queries
JP2683870B2 (ja) * 1994-05-23 1997-12-03 日本アイ・ビー・エム株式会社 文字列検索システム及び方法
JPH07319924A (ja) * 1994-05-24 1995-12-08 Matsushita Electric Ind Co Ltd 手書き電子文書のインデックス付けおよび探索方法
US5619199A (en) * 1995-05-04 1997-04-08 International Business Machines Corporation Order preserving run length encoding with compression codeword extraction for comparisons
JPH08314957A (ja) * 1995-05-18 1996-11-29 Mitsubishi Electric Corp データベースシステム
JPH08320648A (ja) * 1995-05-24 1996-12-03 Matsushita Electric Ind Co Ltd ナビゲーション装置
US5664179A (en) * 1995-06-27 1997-09-02 Mci Corporation Modified skip list database structure and method for access
JPH0936747A (ja) 1995-07-18 1997-02-07 Toshiba Corp データ圧縮方法及びデータ圧縮装置
US6427147B1 (en) * 1995-12-01 2002-07-30 Sand Technology Systems International Deletion of ordered sets of keys in a compact O-complete tree
US5819286A (en) * 1995-12-11 1998-10-06 Industrial Technology Research Institute Video database indexing and query method and system
US5806065A (en) * 1996-05-06 1998-09-08 Microsoft Corporation Data system with distributed tree indexes and method for maintaining the indexes
US5768581A (en) * 1996-05-07 1998-06-16 Cochran; Nancy Pauline Apparatus and method for selecting records from a computer database by repeatedly displaying search terms from multiple list identifiers before either a list identifier or a search term is selected
US5706495A (en) * 1996-05-07 1998-01-06 International Business Machines Corporation Encoded-vector indices for decision support and warehousing
IL118959A (en) * 1996-07-26 1999-07-14 Ori Software Dev Ltd Database apparatus
JPH1040255A (ja) 1996-07-29 1998-02-13 Nec Software Ltd ハッシュ表管理装置
US5899992A (en) 1997-02-14 1999-05-04 International Business Machines Corporation Scalable set oriented classifier
US5926820A (en) 1997-02-27 1999-07-20 International Business Machines Corporation Method and system for performing range max/min queries on a data cube
US5898760A (en) 1997-03-05 1999-04-27 Bellsouth Corporation Method and apparatus for automating the management of a database
US6115716A (en) * 1997-03-14 2000-09-05 Nokia Telecommunications Oy Method for implementing an associative memory based on a digital trie structure
JP3087694B2 (ja) * 1997-07-15 2000-09-11 日本電気株式会社 情報検索装置及びプログラムを記録した機械読み取り可能な記録媒体
SE510000C2 (sv) * 1997-07-21 1999-03-29 Ericsson Telefon Ab L M Struktur vid databas
US6041053A (en) * 1997-09-18 2000-03-21 Microsfot Corporation Technique for efficiently classifying packets using a trie-indexed hierarchy forest that accommodates wildcards
CA2319177A1 (en) * 1998-01-22 1999-07-29 Ori Software Development Ltd. Database apparatus
JP3849279B2 (ja) 1998-01-23 2006-11-22 富士ゼロックス株式会社 インデクス作成方法および検索方法
US6047283A (en) * 1998-02-26 2000-04-04 Sap Aktiengesellschaft Fast string searching and indexing using a search tree having a plurality of linked nodes
JP2000076106A (ja) 1998-08-31 2000-03-14 Nec Eng Ltd 索引順編成ファイルの管理方法
US6370518B1 (en) * 1998-10-05 2002-04-09 Openwave Systems Inc. Method and apparatus for displaying a record from a structured database with minimum keystrokes
US6345266B1 (en) * 1998-12-23 2002-02-05 Novell, Inc. Predicate indexing for locating objects in a distributed directory
JP2000201080A (ja) * 1999-01-07 2000-07-18 Fujitsu Ltd 付加コ―ドを用いたデ―タ圧縮/復元装置および方法
TW460812B (en) * 1999-03-31 2001-10-21 Ibm Automated file pruning
US6662180B1 (en) * 1999-05-12 2003-12-09 Matsushita Electric Industrial Co., Ltd. Method for searching in large databases of automatically recognized text
US6421664B1 (en) * 1999-06-16 2002-07-16 International Business Machines Corporation Apparatus, program product and method for estimating the number of keys within an index key range
US6356888B1 (en) * 1999-06-18 2002-03-12 International Business Machines Corporation Utilize encoded vector indexes for distinct processing
US6681218B1 (en) * 1999-11-04 2004-01-20 International Business Machines Corporation System for managing RDBM fragmentations
US7043641B1 (en) * 2000-03-08 2006-05-09 Igt Encryption in a secure computerized gaming system
EP1158431A3 (en) * 2000-05-22 2006-05-17 Broadcom Corporation Method and apparatus for performing a binary search on an expanded tree
US6938046B2 (en) * 2001-03-02 2005-08-30 Dow Jones Reuters Business Interactive, Llp Polyarchical data indexing and automatically generated hierarchical data indexing paths

Also Published As

Publication number Publication date
EA006562B1 (ru) 2006-02-24
CA2429990A1 (en) 2002-06-06
GB2407417B (en) 2005-06-29
EA007209B1 (ru) 2006-08-25
AU2008249232B2 (en) 2011-02-03
EA006640B1 (ru) 2006-02-24
WO2002044940A8 (en) 2004-03-11
WO2002044940A2 (en) 2002-06-06
AU2008249232A1 (en) 2008-12-18
KR20040036681A (ko) 2004-04-30
EA200300522A1 (ru) 2004-06-24
GB2406681A (en) 2005-04-06
JP2004527813A (ja) 2004-09-09
ES2329339T3 (es) 2009-11-25
EP2270680A2 (en) 2011-01-05
GB2406678A (en) 2005-04-06
DK1364314T3 (da) 2009-11-09
NZ526102A (en) 2007-01-26
NZ543307A (en) 2007-06-29
DE60139212D1 (de) 2009-08-20
US8224829B2 (en) 2012-07-17
EA200500009A1 (ru) 2005-10-27
ATE436055T1 (de) 2009-07-15
AU2002222096B2 (en) 2008-08-28
NO332645B1 (no) 2012-11-26
WO2002044940A3 (en) 2003-09-12
EG23400A (en) 2005-05-31
CY1109459T1 (el) 2012-05-23
CN1822003A (zh) 2006-08-23
GB0029238D0 (en) 2001-01-17
GB2406679B (en) 2005-05-18
IL156117A0 (en) 2003-12-23
AU2011202009A1 (en) 2011-05-26
CN1552032A (zh) 2004-12-01
NO20032416L (no) 2003-07-23
CN1552032B (zh) 2010-04-28
GB0427859D0 (en) 2005-01-19
GB0427854D0 (en) 2005-01-19
EA200500010A1 (ru) 2005-08-25
GB2406678B (en) 2005-05-18
JP4810785B2 (ja) 2011-11-09
NO20032416D0 (no) 2003-05-27
EP1364314A2 (en) 2003-11-26
GB0427855D0 (en) 2005-01-19
GB2369695B (en) 2005-03-16
NO20051945L (no) 2003-07-23
EP1364314B1 (en) 2009-07-08
GB0427860D0 (en) 2005-01-19
GB2407417A (en) 2005-04-27
NZ554641A (en) 2008-10-31
IL202125A (en) 2011-11-30
JP4267046B2 (ja) 2009-05-27
IL156117A (en) 2010-06-16
EP2009559A1 (en) 2008-12-31
GB0427862D0 (en) 2005-01-19
MY132130A (en) 2007-09-28
GB2406680B (en) 2005-05-18
GB2406680A (en) 2005-04-06
JP2009080833A (ja) 2009-04-16
MY142616A (en) 2010-12-15
EA200500008A1 (ru) 2005-10-27
US20040015478A1 (en) 2004-01-22
GB2406679A (en) 2005-04-06
EP2270680A3 (en) 2011-01-19
AR035508A1 (es) 2004-06-02
GB2369695A (en) 2002-06-05
AU2209602A (en) 2002-06-11
GB2406681B (en) 2005-05-18
EA005641B1 (ru) 2005-04-28
KR100886189B1 (ko) 2009-02-27
JP2008071362A (ja) 2008-03-27
SG148842A1 (en) 2009-01-29

Similar Documents

Publication Publication Date Title
KR100886189B1 (ko) 데이터 베이스
AU2002222096A1 (en) Method of organising, interrogating and navigating a database
US11899641B2 (en) Trie-based indices for databases
EP1234258B1 (en) System for managing rdbm fragmentations
Bercea et al. Fully-dynamic space-efficient dictionaries and filters with constant number of memory accesses
WO2001025962A1 (en) Database organization for increasing performance by splitting tables
Pagh Basic external memory data structures
IL157385A (en) Organising data in a database
JP3980326B2 (ja) データ管理方法およびコンピュータ読み取り可能な記録媒体
Masud et al. A hashing technique using separate binary tree

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
NORF Unpaid initial registration fee