KR20010083096A - 가치-사례-연결을 통한 컴퓨터에 의해 구현되는데이터베이스 - Google Patents

가치-사례-연결을 통한 컴퓨터에 의해 구현되는데이터베이스 Download PDF

Info

Publication number
KR20010083096A
KR20010083096A KR1020017000243A KR20017000243A KR20010083096A KR 20010083096 A KR20010083096 A KR 20010083096A KR 1020017000243 A KR1020017000243 A KR 1020017000243A KR 20017000243 A KR20017000243 A KR 20017000243A KR 20010083096 A KR20010083096 A KR 20010083096A
Authority
KR
South Korea
Prior art keywords
case
value
column
displacement
elements
Prior art date
Application number
KR1020017000243A
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 KR20010083096A publication Critical patent/KR20010083096A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/40Data acquisition and logging
    • 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/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/283Multi-dimensional databases or data warehouses, e.g. MOLAP or ROLAP
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99932Access augmentation or optimizing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • Y10S707/99934Query formulation, input preparation, or translation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99943Generating database or data structure, e.g. via user interface
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure

Landscapes

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

Abstract

효율적이면서 정연하게 다차원 데이터를 공간 감소시키는 표현 방식을 제공하는, 컴퓨터에 의해 구현되는 데이터베이스 및 방법이 제공된다. 각각의 속성에 대한 데이터 값이 압축 형태나 소트 순과 같이 공간 이용, 접근 속도 등의 장점을 제공하는 방식으로 저장된다. 속성에 대한 각각의 데이터 값의 사례가 사례 요소에 의해 식별되고, 그 각각은 한 개의 데이터 값과 관련된다. 연결 정보는 또다른 속성에 대한 데이터 값의 특정 사례로 각각의 사례 요소를 고유하게 연관시키는 각각의 사례 요소에 대해 제공된다.

Description

가치-사례-연결을 통한 컴퓨터에 의해 구현되는 데이터베이스{VALUE-INSTANCE-CONNECTIVITY COMPUTER-IMPLEMENTED DATABASE}
기존의 데이터베이스 관리 시스템은 사용자의 데이터 관찰을 즉각적으로 반영하는 방식으로 데이터를 저장하고 조작한다. 일반적으로 사용자는 데이터를 일련의 순서에 의한 레코드(또는 "튜플(tuple)")로 생각하고, 그 각각은 논리적으로 고정된 수의 "필드"(또는 "속성")를 포함하며, 이 "필드"는 상기 레코드에 의해 기술되는 실체에 관한 특정 내용을 포함한다. 이 관찰은 선형 그리드와 같은 논리표 구조에 의해 자연스럽게 나타난다. 이 경우에 행은 레코드를, 열은 필드를 나타낸다.
기존 사용자 관점에서 레코드 기반의 표와 그 상응함의 오랜 존재는 일반적으로 인식되는 결함을 제외하고는 대표적인 데이터베이스 체계를 이뤄왔다. 그러나, 레코드 기반의 표는 피할수 없는 것으로 전통적으로 간주된, 높은 수준의 무질서도와 리던던시(redundancy)를 포함하는 주요한 구조적 결함을 포함한다. 가령, 이러한 표는 기껏해야 한 개의 표준(열의 값을 바탕으로, 또는 열의 값이나 여러 열 값의 함수)에 따라 소팅되거나 그룹 형성(즉, 동일한 값의 인접 위치화)을 할수 있다. 이 제한은 이 특정한 표준보다 모든 표준에서 질의(querying)와 갱신(updating)과 같이 본질적인 데이터베이스 기능을 힘겹고 충분히 자원집약적(resource-intensive)이게 한다.
앞서의 결점은 레코드 기반 표 구조의 기본적 성질에 포함되어 있다. 특히, 각각의 필드의 위치설정이 동일한 레코드의 모든 다른 필드와 선형으로 이루어져야 한다는 점에 포함되어 있다. 레코드 기반의 표 구조에서 필드의 이러한 임의 위치설정은 모든 다른 배열을 배제한다. 그러므로 보다 정연하고 압축적이며 효율적인 데이터 배열에 의해 드러나는 자연스럽고 이용가능한 호출 데이터 관계를 흐리게 된다. 더욱이, 레코드 기반의 표가 데이터를 효과적으로 그룹형성하거나 소팅할 수 없다는 것은 DBM에 부정적인 영향을 미친다.
데이터베이스 연구는 이 문제점에 대한 완화제를 제공하지만, 그 하부 원인(즉, 레코드 기반 표 구조의 신뢰성)을 드러내거나 다루지는 못한다. 가령, 레코드 기반의 표 구조범위 내에서 자연스럽고 다차원적인 그룹 형성을 할 수 없다는 점은 인덱스 기반의 데이터 구조 생성을 유도하였다. 이 보조 구조는 내재적으로 그리고 자주 대량으로 여분을 남기지만, 기존 표를 이용하여 직접 나타낼 수 없는 그룹 형성과 순서정렬을 이룰 수 있다. 인덱스 기반의 구조는 전체적으로 길고, 뒤얽혀서, 관리, 최적화, 갱신 등이 매우 번잡하다. 공통 인덱스의 예로는 b-트리, t-트리, 스타-인덱스, 그리고 여러 비트맵이 있다.
기존 기술에서 발전한 다른 보완 구조는 다른 결점을 가진다. 가령, 해시 표는 개별 데이터 아이템의 신속한 질의(querying)를 제공할 수 있지만, 그 순서 소팅에서의 단점은 범위 질의(range queries)에 대해 이 표를 부적합하게 하고, 특정 순서로 데이터를 되돌리는 어떤 다른 작동에 대해서도 이 표를 부적합하게 한다.
유연한 소팅이나 그룹형성 평형을 이용하여 정연하고, 잉여량이 없으며, 다차원인 데이터 셋을 관리하는 능력은 데이터베이스 관리에 특히 유용하다. 소팅된 데이터는 이진 검색 알고리즘과 삽입 소트 등을 통해 신속한 검색 및 갱신을 가능하게 한다. 그룹형성된 데이터는 필요 공간을 감소시키는 압축(condensation)을 가능하게 하고, 그래서 검색 및 갱신 등의 속도를 향상시킨다.
대부분의 데이터 표 열, 또는 모든 데이터 표 열이 그룹 형성되거나 소팅된 순서로 저장될 수 있는 데이터 저장 시스템은 그러므로 매우 바람직하다. 이전의 연구는 "완전히 변환된 데이터베이스"를 연구하였고, 이는 각각의 열을 전통적 방식을 통해 인덱싱하며, 레코드와 인덱스의 모든 부적절함을 보존하였다. 추가적으로, 완전한 인덱싱 수용에 필요한 넘치는 저장 요구사항은 완전히 변환된 데이터베이스를 실용불가하게 하고, 특히 메인 메모리 데이터베이스에서 실용불가하게 한다.
본 발명은 컴퓨터에 의해 구현되는 데이터베이스에 관한 것이고, 특히 효율적이고 정연하며 공간 감소된 다차원 데이터의 표시방식에 관한 것이다.
도 1은 본 발명의 한 실시예의 블록 다이어그램.
도 2는 단일 링(ring) 구조의 도면.
도 3은 브리지 필드(bridge field)를 갖춘 서브링 구조의 도면.
도 4는 "스타(star)" 구조의 도면.
도 5는 사례표 셀과 연관된 가치표 셀을 찾는 루틴을 설명하는 순서도.
도 6은 전류 열이 V/O 스플릿(split)인 다음 열의 행을 결정하는 루틴의 도면.
도 7은 레코드 구조 데이터를 선형 어레이로 매핑하는 순서도.
도 8은 선형 레코드 구조를 사례표로 기록하는 과정을 설명하는 순서도.
도 9는 사례표의 두 레코드의 셀의 교환을 설명하는 순서도.
도 10은 기존 셀을 삭제된 셀로 교환하는 과정의 순서도.
도 11은 사례표의 주어진 값의 사례 셀에 대해 삭제 셀과 바로 인접하는 비삭제 셀을 찾는 과정의 순서도.
도 12는 원래의 관련값으로부터 바로 선행하는 값까지 사례표의 프리 셀(삭제된 사례 셀)을 이동시키는 과정의 순서도.
도 13은 원래의 관련값으로부터 바로 다음의 값까지 사례표의 프리 셀(삭제된 사례 셀)을 이동시키는 과정의 순서도.
도 14는 주어진 값에 대한 사례의 총수(삭제 사례 포함)를 결정하는 과정의 순서도.
도 15는 사례표에서 이전에 삭제되지 않았던 사례 셀이 삭제를 나타내는 순서도.
도 16은 가치표 열로 들어가는 포인터가 V/O 스플릿이 아닐 경우 새로운 값을 가치표 열로 삽입하는 과정의 순서도.
도 17은 가치표 열로 들어가는 포인터가 V/O 스플릿이 아닐 경우 새로운 값을 가치표 열로 삽입하는 과정의 순서도.
도 18은 가치표에서 프리(삭제된) 사례표 셀을 가치표의 주어진 값으로 할당하는 과정의 순서도.
도 19는 삭제 레코드 작동의 단계를 나타내는 블록 다이어그램.
도 20은 추가 레코드 작동의 단계를 나타내는 블록 다이어그램.
도 21은 수정 레코드 작동의 단계를 나타내는 블록 다이어그램.
도 22는 질의 작동의 단계를 나타내는 블록 다이어그램.
도 23은 결합(join) 작동의 단계를 나타내는 블록 다이어그램.
그러므로 앞서 언급한 바와 같이 기존 기술의 결함 특징을 갖추지 않으면서 부분적으로 또는 완전하게 정연화되는(가령, 그룹 형성되거나 소팅되는) 데이터베이스를 제공하는 것이 본 발명의 목적이다.
간단하게 말하자면, 기존의 데이터베이스와 같이, 각각의 행이 레코드이고 각각의 열이 레코드의 필드를 포함하는 표로 데이터베이스의 구조를 형성하는 대신에, 열을 치환하거나 수정하여 공간 이용이나 접근 속도 등에 장점을 제공할 수 있다. 그래서 행이 더 이상 레코드에 개별적으로 상응할 필요가 없다. 가령, 한 개의 이러한 수정은 잉여값을 제거함(메모리 이용을 감소시킴)으로서 열을 압축하는 것이고, 또다른 하나는 열을 소팅 정렬시키는 것이다. 그래서 값의 그룹이 어떤 특정한 순서로 항상 나타나는 것을 보장한다(이는 특정 값에 대해 열을 검색하는 데 소요되는 시간을 크게 감소시킬 수 있다). 다른 하나는 열을 압축하고 소팅하는 것이다. 다른 장점을 가지는 다른 치환과 수정도 물론 가능하다. 치환되거나 수정된 값의 표는 "가치표(value table)"로 이후 명명할 것이다.
논리적으로, 분리 데이터 구조는 데이터베이스의 "레코드" 재구축에 필요한 정보를 제공한다. 특히, 분리 데이터 구조는 "사례(instance)" 및 "연결(connectivity)" 정보를 제공한다. 이때 사례 정보는 레코드 내의 필드의 각각의 값의 사례를 식별하고, 연결 정보는 한 개 이상의 다른 필드의 값의 특정 값의 사례로 각각의 사례를 연관시킨다.
발명의 한 실시예에서, 사례 및 연결 정보 모두는 "사례표(instance table)"로 명명되는 표로 제공된다. 사례 표의 각각의 열은 데이터베이스 레코드 속성에 상응하고, 상기 속성(그리고 가능하다면 다른 속성)에 대한 값을 포함하는 가치표의 열과 연계된다. 사례표의 각각의 셀(행/열 위치)은 위치(한 실시예에서 행 번호)와 사례값(셀 내용)을 가진다. 가치표의 관련 열의 관련 셀은 각각의 사례 셀 위치로부터 도출된다. 또한, 동일한 레코드에 속하는 사례표의 또다른 열의 관련 사례 셀은 각각의 사례 셀의 사례값으로부터 도출된다. 그러므로 본 실시예에서,사례 셀의 위치는 셀이 값의 사례인 값을 식별하고, 사례 셀의 내용은 사례를 또다른 필드의 또다른 사례 셀과 연계시키는 연결 정보를 제공한다. 셀 위치로부터 가치 표의 관련 값 셀을 도출함으로서, 그리고 셀의 사례값으로부터 관련 사례 셀의 위치를 도출함으로서, 그리고 이 처리를 관련 사례 셀에서 반복함으로서, 레코드가 사례표의 셀에서 시작하면서 재구축된다. 이때, 체인의 최종 셀은 한 실시예에서 최초 셀의 상응하는 위치를 제공한다.
가치표의 열이 저장되었으나 압축되지 않았을 경우, 한 실시예에서, 가치표 열과 사례표의 관련 열은 동일한 번호의 행을 가진다. 사례 셀의 관련 값셀은 한 실시예에서 사례 셀과 동일한 행 번호를 가지는 관련 가치표 열의 값셀이다. 사례 셀의 관련 사례 셀(즉, 동일한 레코드에 속하는 사례표의 또다른 열의 셀)은 사례 셀의 사례값에 의해 주어지는 행 번호를 가지는 특정 열의 셀이다. 한 실시예에서, 특정 열은 사례표의 다음 열이고, 최종 열 다음엔 제 1 열로 넘어간다. 가령, 가치표의 열 1이 압축되지 않았을 때, 그리고 치환후, 가치표의 열 1, 행 2, 열 2, 행 5가 동일한 레코드에 속할 때, 그리고 열 2, 행 5의 사례가 사례표의 열 2와 행 5에 있을 때, 열 1, 행 2의 사례표는 번호 5를 포함할 것이다(이는 다음 열의 행 5가 동일한 레코드에 속한다는 것을 나타낸다).
가치표 열이 압축될 경우, 상기 열과 상기 열에 관련된 사례표 열 사이에 1:1 대응이 더 이상 존재하지 않는다. 이 경우에, "변위 표"로 불리는 표가 제공된다. 발명의 한 실시예에서 이 변위표는 압축 가치표 열과 연관된 각각의 사례표 열에 대한 열을 가지며, 가치표 열의 각각의 행과 연관된 사례표 행 번호의 범위를구체화한다. 사례셀과 연관된 값셀은 사례셀 위치(행 번호)를 바탕으로 상응하는 변위표 열에 의해 결정된다. 한 실시예에서, 변위표 열은 관련 가치표 열과 같은 번호의 행을 가지며, 변위표의 각각의 셀은 상응하는 값셀과 연계된 사례표 행번호 범위의 제 1 행번호를 제공한다. 대안으로, 변위표의 각각의 셀은 사례표 행번호 범위의 최종 행번호, 상기 범위의 총 행수, 또는 각각의 값셀과 연계된 사례표 행번호 범위를 도출할 수 있는 어떤 다른 값을 제공할 수 있다.
앞서 기술한 바와 같이 변위표의 한가지 단점은 사례 셀에 상응하는 값셀에 대한 변위표를 검색하는 것이 레코드 재구축을 더디게한다는 점이다. 이 결함은 발명의 또다른 실시예에서 다루어진다. 즉, 사례 셀의 관련 사례 셀이 변위 열을 가지는 열에 있는 경우의 사례 셀의 사례값이 관련 사례 셀과 연계된 값셀의 위치로 설정되는, 이러한 실시예에서 다루어진다(앞서 기술한 실시예에서 관련 사례 셀의 위치에 반한다). 관련 사례 셀의 값은 변위표 검색없이 직접 얻을 수 있다. 이 실시예에서, "어커런스표(occurrence table)"로 불리는 표는 관련 사례 셀을 결정하기 위한 정보를 제공한다.
어커런스표의 한 실시예에서, 앞서 기술한 바와 같이 사례값으로 셀을 가지는 사례표의 각각의 열은 동일한 번호의 행을 가지는 어커런스표의 관련 열을 가진다. 어커런스표의 셀은 본 실시예에서 그 위치를 바탕으로 사례표의 셀과 연관되고, 오프셋을 구체화한다. 관련 사례 셀에 도달하기 위해 값셀과 관련된 사례표 행번호 범위 내의 제 1 행번호에 오프셋이 추가된다. 제 1 행번호는 사례 셀의 사계값을 바탕으로 변위표로부터 도출된다. 그러므로 사례 셀 내용, 어커런스표, 그리고 변위표에 의해, 사례 셀에 대한 연결 정보가 본 실시예에서 제공된다.
앞서 기술한 데이터 구조는 전적으로 RAM 내에 있을 수도 있고, 다수의 데이터 프로세서로 구성된 네트워크 사이에 분포될 수도 있다. 이 데이터 구조는 여러 방식으로 구현될 수 있으며, 여기서 드는 특정 실시예에 제한되지 않는다. 가령, 한 실시예가 컴퓨터에 의해 구현되는 데이터베이스 및 앞서 기술한 방법을 이용하여 데이터 세트를 부분적으로만 저장하는 과정을 포함할 수 있다. 이때 나머지는 기존의 표를 바탕으로 하는 방식으로 저장될 수 있다. 정보는 여러 형태로 저장될 수 있고, 발명은 어떤 특정 형태에 제한되지 않는다. 특정 열의 내용은 기능에 의해, 또는 다른 저장 정보와 조합된 기능에 의해, 또는 비트맵을 포함한 어떤 형태의 저장 정보에 의해, 나타날 수 있다.
보다 일반적으로, 가치, 사례, 변위, 그리고 어커런스 표가 행을 가지는 "표"로 기술되었으나, 발명은 이러한 구조에 제한되지 않는다. 이 표에 정보를 저장하기 위한 어떤 컴퓨터화된 데이터 구조도 사용가능하다. 가령, 앞서 기술된 값은 "값 저장"의 특정 예(즉, 데이터베이스에서 정보의 사용자 관측값을 나타내는 데이터값을 저장)이고, 사례표는 "사례 저장"과 "연결 저장"의 한 예(즉, 값 저장에서 데이터 아이템의 사례를 식별하고, 값 저장에서 데이터 아이템의 사례 사이의 관계를 나타냄)이며, 변위표는 "기본 저장"의 특정 예(즉, 데이터 값의 동일한 사례의 어커런스의 발생빈도(주파수)를 나타냄)이다. 표의 열은 "리스트"의 특정 예이거나, 또는 보다 일반적으로, "세트"의 특정 예이다. 볼 발명의 용도를 위한 "세트"는 한 개 이상의 "요소(element)"를 포함하고, 그 각각의 요소는 값과 "위치"를 포함한다. 이때 위치는 세트 내의 요소의 위치를 구체화한다. 앞서의 설명에서, 표의 열의 "셀"은 "요소"의 예이고, 세트에서 그 위치는 그 행 번호이다.
더욱이, 앞서 기술된 실시예가 기존의 "레코드"와 그 조작에 관해 언급함에 반해, 발명은 레코드에 제한되지 않고, 데이터값 사이의 관계를 실용적으로 나타낼 수 있다.
모든 이러한 변화는 본 발명의 선택적인 실시예이다.
본 발명의 데이터베이스 시스템에 의해 지원되는 전형적인 데이터베이스 작동은 아래의 사항을 포함하지만, 이에 제한되지는 않는다.
1) 물리적 레코드를 재구축한다.
2) 질의 판정에 일치하는 레코드를 찾는다.
3) 표준 방식으로 표를 결합한다.
4) 레코드를 삭제하거나 추가한다.
5) 기존 레코드를 수정한다. 그리고
6) 유용한 작업을 실행하기 위해 모든 표준 데이터 베이스 작동을 조합한다.
본 발명은 효율적인 질의 및 갱신 처리, 데이터베이스 저장 요구사항 감소, 그리고 데이터베이스 조직 및 관리 단순화를 가능하게 하는 데이터베이스 구조화의 새롭고 효율적 방법을 제공한다. 잉여(redundancy) 증가를 통해 정렬도를 달성하는 것 보다(즉, 동일한 데이터의 원래 비정렬 표현 위에 정렬된 데이터 표현을 위에 얹는 것보다), 본 발명은 기본 수준으로 잉여(redundancy)를 제거한다. 이는 저장 요구사항을 감소시키고, 더 많은 데이터를 RAM에 동시에 저장시키며(응용 프로그램성능을 향상시키고 하드웨어 비용을 감소시키며), 통신망 사이의 데이터 베이스 전송 속도를 향상시키고, 그래서 광범위한 분야의 산업용/과학용 응용 프로그램에 대해 고속 메인 메모리 데이터베이스를 실용적으로 만든다. 고속 질의 처리는 완전히 변환된 데이터베이스에서 발견되는 오버헤드가 없을 경우 가능하다. 더욱이, 본 발명의 데이터 구조로, 데이터는 기존 데이터베이스에서보다 보다 용이하게 조작될 수 있고, 그래서 데이터 복사없이 사례표의 일부 엔트리가 변경될 필요만 있다. 그러므로, 일반적 데이터베이스 작동은 본 발명을 이용함으로서 보다 효율적일 것이다. 추가적으로, 레코드 지향 구조에서 연산 방식으로 집약적인 히스토그래픽 분석, 데이터 압축, 그리고 다중 정렬과 같은 일부 작동이 앞서 기술한 구조로부터 즉각적으로 획득가능하다. 발명은 병렬 연산 환경에서의 개선된 처리를 또한 제공한다.
본 발명의 데이터베이스 시스템은 산업 표준 미들웨어를 사용하는 거의 모든 데이터베이스 전위와 호환되는 효율적인 데이터베이스를 위한 후위로 사용될 수 있다. 그리고 본 발명의 데이터베이스 시스템은 기존 데이터베이스 소프트웨어와 상시 호환성을 제공한다. 또한, 본디 독립형 엔진은 C++ 함수, 템플리트, 또는 클래스 라이브러리 등을 통해 직접 구현될 수 있다. 미들웨어에 대한 후위로 구현되거나 독립형 엔진으로 구현되든지 간에, 본 발명은 사용자에게 친숙한 데이터베이스를 제공하고, 허나 이는 새롭고 효율적인 방식으로 내부적으로 관리된다.
도 1은 본 발명의 기본 하드웨어 설정을 도시한다. 프로그램 스토어(4)는 하드디스크와 같은 기억 장치로서, 본 발명의 데이터베이스 시스템 기능을 실행하는 소프트웨어를 포함한다. 이 소프트웨어는 하부 데이터베이스의 데이터 구조를 생성하기 위한, 그리고 레코드 지향 파일에서와 같이 유산 데이터베이스를 상기 데이터 구조로 리포맷하기 위한 루틴을 포함한다. 추가적으로, 소프트웨어는 질의, 삭제, 추가, 수정, 그리고 결합 루틴같이, 데이터베이스를 조작하고 데이터베이스에 접근하기 위한 루틴을 포함한다. 데이터 파일은 기억 장치(2)에 저장되고, 한 개 이상의 데이터베이스와 연계된 데이터를 포함한다. 데이터 파일은 여기서의 데이터 구조의 이진 이미지로 포맷될 수도 있고, 레코드 지향의 파일로 포맷될 수도 있다. 프로그램 스토어(4)와 기억 장치(2)는 단일 기억 장치의 다른 부분일 수 있다. 프로그램 스토어(4)의 소프트웨어는 프로세서(5)에 의해 실행된다. 상기 프로세서(5)는 RAM(7)을 가진다. 데이터베이스 시스템에 의해 실행될 작업의 선택은 사용자 스테이션(6)에서 사용자에 의해 결정된다.
다음의 내용에서, "포인터"라는 용어는 C/C++ 언어 의미(메모리 주소를 포함하는 변수)를 포함하는 일반적 개념으로 사용되고, 보다 일반적으로, 기억 장치가 RAM, 디스크, 등인 지, 기억 장치의 위치를 고유 방식으로 기술하기 위해 사용되는 어떤 데이터 종류를 포함하는 일반적 개념으로 사용된다. 주어진 데이터 구조의 시작으로부터 오프셋되는 정수로 구현되는 포인터는 기억 용량을 적게 차지하면서 C/C++ 포인터와 같은 기능을 실행한다. 여기서 사용되는 메모리, 기억 장치 등의 용어는 데이터를 저장하는 전기적, 광학적, 또는 그외의 모든 다른 수단을 의미한다.
"다차원"이라는 용어는 수학적이나 준-수학적 측면에서, n-차원 벡터 공간을 점유하기 위해 n-열 레코드 기반의 표가 고려되는 데이터 관점을 의미한다. 이 용어는 더 좁은 분야로 사용되지 않으며, 데이터 웨어하우징(warehousing) 및 온라인 분석 처리(OLAP)에 가끔 사용된다. 이때 다차원성은 다층 데이터 분석을 의미한다.
기본 데이터베이스 구조
각각의 행이 레코드를 나타내고 각각의 열이 레코드의 필드를 나타내는 레코드 기반의 표는 기존 데이터베이스에서 공공연히 사용된다. 본 발명에 따르는 데이터베이스는 이 공지 구조와 다르다. 한 실시예에서, 데이터베이스는 두 개의 기본 데이터 구조로 나누어진다. 비압축 가치표와 사례표로 나누어진다. 가치표는 기존 데이터베이스와 동일한 데이터 사례를 포함하지만, 각각의 열이 치환되거나 수정될 수 있어서, 행이 특정 레코드에 상응할 필요가 없다. 본 실시예에 따라, 사례표는 가치표로부터 레코드를 재구축하기 위한 수단을 제공한다. 특히 한 실시예에서, 사례표는 비압축 가치표와 동일한 번호의 행과 열을 가지며, 사례표의 각각의 셀(즉, 행/열 위치)은 동일 레코드의 다음 필드에 대한 행 번호를 포함한다. 그러므로, Value_Table(r, c)를 포함하는 레코드의 다음 필드의 값은 Value_Table(Instance_Table(r, c))이다. 이때, r과 c는 가치표의 특정 위치의 행 과 열이며, Instance_Table(r, c)는 다음 필드의 행번호이다. 함수 next(c)는 현재의 열로부터 다음 열을 얻는다. 링 구조를 이용한 본 발명의 한 실시예에서, next(c) = ((c+1) mod n)이고, 이때 n은 열의 수이며, 열은 0 ~ n-1까지의 번호를 가진다. 대안의 실시예(열번호가 1~n)에서, next(c) = c mod n +1이다. 여러 다양한 구조가 가능하며, 그 각각은 상응하는 next(c) 함수를 가진다.
예를 들어, 행마다 한 개의 레코드를 기록하는 표준 포맷의 데이터베이스가 아래에 도시된다.
기존 데이터베이스:
본 발명의 특정 실시예에 따라 배열되는 상응하는 가치 및 사례표는 다음과 같다.
가치표
사례표
앞서 도시되는 가치표는 본 예에서 각각의 열을 알파벳 순으로 소팅함으로서 생성된다. 원 데이터베이스의 레코드 번호를 표시하기 위해 본 문헌의 설명용으로만 첨자가 각각의 값 다음에 위치한다.
열을 소팅한 후에, 가치표의 행은 원 데이터베이스의 단일 레코드에 일반적으로 대응하지 않는다. 그러나 사례표는 기존 외부 레코드 관점에 대해 상기 레코드를 재구축하기 위해 필요한 정보를 제공한다. 특히, 사례표의 각각의 셀(즉, 행/열 위치)은 앞서의 실시예에서 단일 레코드와 연계된다. 가치표에서 동일한 행/열 위치를 가지는 셀은 상기 열과 관련된 필드에 대한 레코드 값을 포함한다. 사례표 셀 자체는 레코드의 다음 필드의 행 번호를 포함한다.
가령, 사례표의 "English" 열(열 0)의 행 1을 포함하는 레코드가 재구축된다고 가정해보자. 가치표의 관련 셀(즉, 행 1, 열 0)은 값 "Five"를 포함한다. 순서대로 다른 필드(열)을 고려할 때, "English" 열(열 0)의 행 1과 같은 레코드에 속하는 "Spanish"열(열 1)의 행이 결정된다. 행 1/열 0에서 사례표에 의해 정보가 제공된다(이 경우에 숫자 1이 포함된다). 이는 "Spanish" 열의 행 "1"이 "English" 열의 행 "1"과 같은 레코드에 있다는 것을 의미한다. 다음으로, "Spanish" 열(열 1)의 행 "1"과 같은 레코드로부터 "German" 열(열 2)의 행을 결정하기 위해, 사례표의 행 1/열 1이 판독되고, 이는 숫자 3을 포함하며, 이는 "German" 열의 행 "3"이 동일한 레코드라는 것을 의미한다. 이 레코드를 추적해보면, 사례표의 "German" 열(열 2)의 행 3이 동일 레코드의 "Type" 열(열 3)의 행을 제공하고, 그 내용이 숫자 5로서, "Type" 열의 행 "5"가 "German" 열의 행 3과 동일한 레코드라는 것을 의미한다. "Type" 열(열 3)의 행 5는 "Parity" 열(열 4)의 상응하는 행이 행 6임을 표시한다. 최종적으로, 표의 최종 열인 사례표의 "Parity" 열(열 4)의 행 6은 "English" 열로부터 상응하는 행이 행 1임을 나타내고, 이는 과정이 시작하는 장소이다. 이같은 사실은 본 예에서 사용되는 링 구조에 기인한다.
그러므로, 앞서 설명된 실시예에 따라, 사례표의 각각의 행/열 위치는 동일 레코드에 속하는 다음 열의 행 번호를 포함하며, 최종 열은 첫 번째 열의 동일한 레코드의 행 번호를 포함한다. 동일한 레코드에 속하는 행/열 위치간 링크는, 본 실시예에서, 도 2에 도시되는 바와 같이 사례표를 통해 링을 형성한다. 이 링을 트래버스(traverse)할 경우, 가치표에서 직접 상응하는 행/열 위치가 각각의 필드 값의 회복을 허용한다. 본 발명의 선택적인 실시예에서 링 구조 대신에 다른 구조가 사용될 수도 있다.
레코드 지향 데이터로부터의 가치 및 사례표 생성
가치 및 사례표는 기존 레코드 지향 데이터베이스 포맷의 데이터를 이용하여 본 발명에 따라 생성될 수 있다.
먼저, 원래의 데이터베이스의 각각의 열의 데이터를 변화시키거나 치환함으로서 가치표가 생성된다. 가치표 열의 변화 예는 데이터를 소트하여 정렬시키는 것과 유사한 값을 함께 그룹형성하는 것이다. 다른 열도 다르게 치환되거나 변화될 수 있다. 실제 응용 프로그램에서 디스플레이나 검색을 위해 그 실용성을 바탕으로 하여 소트 순서가 정해져야 할 것이다. 잠재적인 소트 순서에 대한 요청사항은 값을 정렬하는 연산가능한 술어(predicate)를 가져야한다는 점이다. 일부 열은 소팅되지 않은 상태를 유지할 수 있다. 앞서의 예에서는 모든 열이 알파벳 순으로 소팅되었다.
한 실시예에서, 제 1 단계 중에, 아래의 제 2 단계의 사례표 생성을 촉진시키는 임시 중간표가 생성된다. 본 실시예에서 중간표는 가치표의 상응하는 필드의치환된 위치를 표시하는 열과 레코드에 상응하는 행을 가진다. 앞서 예의 중간표는 다음과 같다(치환은 소트 순서임).
중간표:
그러므로, 원 레코드 5에 대한 "English" 필드가 가치표의 행 1에 있고, 레코드 5에 대한 "Spanish" 필드가 가치표의 행 1에 있으며, 레코드 5에 대한 "German" 필드가 가치표의 행 3에 있고, 레코드 5에 대한 "Type" 필드가 가치표의 행 5에 있으며, 그리고 레코드 5에 대한 "Parity" 필드가 가치표의 행 6에 있다는 것이 중간표에 나타난다.
본 실시예에 따라, 사례표는 다음과 같이 결정된다.
Instance_Table(Intermediate_Table(r, c), c)
= Intermediate_Table(r, next(c)),
r과 c는 중간표의 행과 열이며, next(c)는 앞서 정의한 바와 같다. 다시 말해서, 중간표의 각각의 셀은 살폐표의 상응하는 열의 행을 구체화한다. 사례표의 상기 행은 중간표의 다음 열의 값을 수용한다.
가령, 앞서 예의 레코드 번호 5를 생각해보면, 중간표의 "English" 필드(열 0)가 숫자 1을 포함하고, 다음 필드 "Spanish"(열 1)도 숫자 1을 포함한다. 이 정보를 바탕으로, 값 1이 사례표의 행 1에 위치한다. 사례표의 "Spanish" 필드의 행 1은 중간표의 레코드 번호 5의 "German" 필드(열 2)의 값으로 설정되고, 이는 소팅된 가치표의 "German" 필드의 행번호에 상응한다. 이 과정은 각각의 필드에 대해 반복되고, 최종 필드는 제 1 필드로 다시 이어진다.
사례표 생성을 위해 중간표 이용을 회피하려하는 동등한 알고리즘이 존재한다는 것을 당 분야의 통상의 지식을 가진 자는 알고 있으며, 본 발명은 여기서 밝혀진 알고리즘에 제한되지 않는다.
압축 가치표
일부 환경에서, 잉여값을 제거함으로서 일부 열이 압축될 경우, 가치표의 데이터는 공간적 측면(메모리, 디스크 이용)에서 보다 효율적으로 표현될 수 있다. 가령, 앞서의 가치표에서, "Parity" 필드는 두 개의 다른 값만을 가지고, "Type" 필드는 네 개의 다른 값만을 가진다. 주어진 필드에 대해 고유값의 수는 그 필드의 카디널리티(cardinality)라 부른다. 따라서, 본 발명의 선호되는 실시예에서, 압축 가치표를 구축함으로서 잉여값(redundancy)이 제거될 수 있다. 그 예는 다음과 같다.
압축 가치표
이 공간 절약을 실현하기 위해, 가치표에 대한 기억 공간이 적절한 방식으로 할당되어야 한다. 가령, 2차원 어레이로 표를 할당함에 반해 분리형 벡터나 리스트로 각각의 열을 할당한다. 추가적으로, 열에 주어지는 변화는 동일한 값을 함께 그룹형성하여야 한다.
비압축 가치표의 원정보를 유지하기 위하여, "변위표"라 불리는 추가 구조가 선호되는 실시예에 제공된다. 본 발명의 한 실시예에서, 변위표는 최초 또는 최종 행 번호를 제공하고, 이 번호에서 열의 각각의 고유값이 원래의 비압축 가치표에 발생한다(각각 "제 1 행번호"와 최종 행번호" 포맷으로 불린다). 예를 들어, 압축 가치표에 대한 변위표는 다음과 같다("제 1 행번호 포맷").
변위표
압축 가치표의 제 1 행의 값("Even")이 비압축 가치표의 행 1에 있었고, 압축 가치표의 제 2 행의 값("Odd")가 비압축 가치표의 행 4에 먼저 있었다는 점이 변위표의 "Parity" 열에 나타난다. 대안으로, 각각의 값에 대한 레코드 카운트는 변위표에 저장될 수 있고, 각각의 값에 대한 제 1 행은 수학적으로 도출될 수 있으며, 또는 카운트와 변위의 산술적 조합이 사용될 수도 있다.
W 바이트의 필드 폭과 카디널리티 C를 가지는 열은 고유값의 W*C + P*C 바이트 RAM에서 P 바이트 크기의 정수값(행 번호)의 변위표와 함께 "압축" 열로 나타나고, 반면, 비압축 열의 기억 공간은 W*N 바이트를 필요로 한다(여기서 N은 레코드의 수이다). 그러므로,
W*C + P*C < W*N, 또는,
C < N/(1+P/W),
이 압축형태는 이롭다.
본 실시예의 압축열은 사례표 셀과 가치표 셀(행/열 위치)간의 1:1 대응성을 파괴한다. 그러므로, 레코드 재구축 중, 동일한 행/열 위치에서 가치표의 값을 단순히 바라봄으로서 사례표를 트래버스(traverse)할 때, 셀에 대한 값은 검색되지 않는다. 예를 들어, 앞서 예의 사례표의 열 3("Type") 및 행 5와 같은 행/열 위치의 가치표에는 셀이 존재하지 않는다.
대신에 발명의 선호되는 실시예에 따라, Instance_Table(r, c)과 연관된 필드값이 Value_Table(disp_row_num, c)로 주어지며, 이때, c는 압축 열이며, disp_row_num은 c 번째 열에 대한 변위표 셀의 행번호이다.
Displacement_Table(disp_row_num, c)
<= r < Displacement_Table(disp_row_num+1, c),
이때, disp_row_num+1이 존재하지 않을 경우, 즉, disp_row_num이 열 c에 대한 최종 Displacement_Table 행일 경우, 상한 테스트가 실행되지 않는다(제 1 행번호" Displacement_Table 포맷의 경우).
Displacement_Table(disp_row-num-1, c)
< r <= Displacement_Table(disp_row_num, c)
이때, disp_row-num-1이 존재하지 않을 경우 하한 테스트가 실행되지 않는다("최종 행 번호" Displacement_Table 포맷의 경우).
앞서의 예를 다시 고려해 볼 때, 열 3의 행 5와 연관된 가치표의 값을 찾기 위하여, 5 이하의 최대값을 가지는 변위표의 열 3의 행이 위치한다. 이는 앞서의 변위표의 행 3이다(행 4는 값 6을 가지며, 이는 5보다 크다). 그러므로, 열 3의 행 3은 사례표의 열 3의 행 5와 연관된 가치표의 값을 가진다.
일부 형태의 데이터에 적용가능한 공간 절약 기술
특정 실시예에 따라, 일부 성질을 가지는 데이터를 갖춘 필드는 앞서 기술한 일부 구조(즉, 가치, 변위, 또는 사례표)를 사용하지 않으면서 본 발명의 데이터베이스 시스템으로 일체화된다. 이는 이 구조에 포함될 수 있는 정보가 내재적 형태로 시스템내에 이미 존재하는 경우이다. 즉, 존재하는 다른 정보나 데이터의 특성으로부터 정보를 추론할 수 있다. 가령, 1에서 N까지 번호를 비압축 가치표 열이 포함할 경우, 가치표에 이 정보를 저장할 필요가 전혀 없다. 왜냐하면, 정보가 사례표에 내재되어 있기 때문이다(사례표의 행 1은 값 1에 상응한다). 각각의 열(필드) 설명자의 정보는 어떤 구조가 상기 필드에 대해 내재적인지, 그리고 어떻게 또한 어디서 내재 데이터를 얻을 수 있는 지를 나타낸다. 앞서 주어진 예에서, 사례표 열에 대한 열 설명자는 각각의 행에 상응하는 값이 행 번호임을 나타낼 것이다. 이 데이터는 앞서 기술한 알고리즘에 사용될 수 있고, 또는 다른 알고리즘 구현도 사용될 수 있다.
"내재" 구조가 사용되는 특별한 상황이 존재할 경우, 공간 절약을 이룰 수있다. 이러한 환경의 예는 아래의 사항을 포함한다.
1) 필드 값 리스트의 각각의 값이 사례 리스트에만 나타나기 때문에 고유 값을 가지는 필드는 어떤 변위 리스트도 필요로 하지 않는다.
2) 가치표의 행과 동일한 범위를 가지는 인접 고유 정수값을 가지는 필드가 어떤 가치 리스트나 어떤 변위 리스트도 필요로하지 않는다. 이 값은 소팅되어, 그 값이 가치 리스트에서의 자신의 위치와 동일하게 될 것이다. 그래서, 사례 리스트의 위치가 될 것이다. 그러므로, 그 값은 사례 리스트의 위치(행)와 동일하고, 그래서 어떤 분리값 리스트도 필요하지 않다. 이 값은 고유한 것이기 때문에, 어떤 변위 리스트도 필요하지 않다.
3) 인접 정수 입력값 함수의 출력 값인 값을 가지는 필드는, 상기 함수가 정연한 입력에 대해 정연한 출력을 생성할 경우, 어떤 가치 리스트도 필요로하지 않는다. 사례 리스트의 셀 위치(행)에 함수를 적용함으로서 값이 연산된다. 행 위치가 정연한 인접 정수이므로, 함수의 출력 역시 정연하다. 그러므로, 사례 리스트로부터 값이 연산도리 수 있기 때문에, 어떤 가치 리스트도 필요하지 않다. 함수의 출력값이 고유 입력에 대해 항상 고유하기 때문에, 어떤 변위 리스트도 더 이상 필요하지 않다.
4) 주어진 정연한 입력에서 함수가 정연한 출력을 생성할 경우, 인접 정수 입력값 함수의 출력 값으로 접근되는 값을 가지는 필드는 감소 공간 가치 리스트로 구현될 수 있다. 이 경우의 가치 리스트는 완전한 값 대신에 함수 출력의 오프셋만을 포함할 필요가 있다. 그리고 함수의 출력 더하기 오프셋이 정연한 값을 생성하도록 가치 리스트가 배열된다.
5) 동일한 데이터값과 모두 연관된, 그리고 모든 데이터값과 연관된 사례 리스트 요소와 모두 연관되어 있는 인접 사례 리스트 요소의 순서는 단일 엔트리로 나타날 수 있다. 가령, 관련 데이터 값, 관련 사례 요소의 관련 데이터값의 위치, 그리고 적절히 조절된 변위 리스트를 갖춘 순서의 사례 요소의 수에 의해 표현될 수 있다.
추가적으로, 공지 압축 및 공간 감소 기술이 가치 및 사례표 등에 적용될 수 있다. 가령, 사전형(dictionary type) 방법을 이용하여 값이 나타날 수 있고, 값의 전체 길이보다 짧은 비트 패턴과 일치하는 방법이 여기에 포함된다. 이 압축 및 압축 기술의 효과는 보다 임의적인 비트 패턴을 생성하는 것으로서, 해싱(hashing) 성능을 또한 개선시킨다. 추가적으로, 가치표, 사례표, 그리고 다른 구조도 런 길이 인코딩(run length encoding)과 같은 반복 비트 패턴과 워드 압축(word compaction)을 이용하여 압축될 수 있다. 앞서의 압축 기술 성능을 최적화시키기 위해 가능할 경우 열의 상대적 위치와 열 내의 사례의 상대적 위치를 재조정함으로서 사례표는 추가적으로 압축될 수 있다.
압축 가치표를 갖춘 선택적인 사례표
앞서 기술한 변위표는 레코드 재구축을 더디게 한다. 왜냐하면, 압축 열로부터의 값이 변위표 검색 이후에야 얻을 수 있기 때문이다.
본 발명의 또다른 실시예에 사용되는 선택적인 구조는 사례표를 수정하여, 압축 열을 가리키는 열의 엔트리가 그 대신에 가치표로 직접 향하는 것이다. 이때"어커런스 표"로 명명되는 추가 표가 제공된다. 상기 표는 사례표의 다음 열의 행번호가 연산될 수 있는 정보를 포함한다. "어커런스표"는 사례표의 상응하는 셀에 의해 지정된 특정 값의 어커런스 번호를 포함한다. 특히, 변위표가 "제 1 행 포맷"에 있는 실시예에서, 사례표의 행 번호는 1을 기반으로 하고, 어커런스 표도 1을 기반으로하며, 다음 필드의 사례표 행 번호는 다음과 같다.
Occurrence_Table_(r, c) +
Displacement_Table(Instance_Table(r, c), next(c)) - 1
본 실시예의 변형은 여러 구조의 0을 기반으로 하는 번호, 어커런스표의 0을 기반으로 하는 어커런스 번호, 또는 변위표 엔트리에 대한 "최종 행 번호" 포맷을 포함한다. 이러한 변형은 다음 필드의 사례표 행번호를 결정하기 위한 앞서의 공식에 영향을 미친다. 가령, 어커런스표 및 사례표의 0을 기반으로 하는 번호, 0을 기반으로 하는 어커런스 번호, 그리고 변위표의 "최종 행 번호"포맷에 대해, 다음 필드의 사례표 행번호는 다음과 같다.
Instance_Table(r, c) = 0일 때,
Occurrence_Table(r, c)
Instance_Table(r, c) > 0 일 때,
Occurrence_Table(r, c) + Displacement_Table(Instance_Table(r, c)-1, next(c))+1
(Displacement_Table(Instance_Table(r, c)-1, next(c))가 이전 값에 대한 최종 행 번호이기 때문이다). 모든 이러한 실시예에서, 사례표와 어커런스표는 두부분의 요소를 가지는 한 개의 표로 병합될 수 있다.
앞서의 예에서, Type 열은 사례표의 Parity 열을 가리키고, 가치표의 Parity 열은 압축된다. 본 선택적 실시예에 따라, 사례표와 어커런스표는 다음과 같다.
선택적인 사례표
어커런스표
그러므로, 사례표의 Type 열은 parity 열의 가치표의 관현 행을 직접 향한다. 가령, 상기 사례표의 행 5의 Type 열은 2를 포함하고, 이는 가치표의 parity 열 행 2가 Type 열 행 5와 연관된 동일한 레코드에 대한 Parity값을 포함한다는 것을 의미한다. 이 경우에, Parity 열의 행 2는 값 "Odd"를 포함한다. 사례표의 Parity 열 관련 행은 어커런스의 Type 열 행 5 더하기 변위표의 Parity 열 행 2의 값 빼기 1, 즉 3 + 4 - 1, 또는 6이다.
가치표, 사례표, 변위표, 그리고 어커런스표는 분리되어 저장되는 표로 기술된 바 있다. 그러나 대안의 실시예에서, 이는 항상 그런 것은 아니다. 가령, 가치표와 변위표 요소가 인접하게 저장될 수 있고, 사례표와 어커런스표 요소도, 압축 가치표로 상기 열에, 마찬가지로 인접하게 저장될 수 있다. 이는 데이터베이스로부터 데이터행을 검색할 때 기억 캐시 미스를 감소시키고, 인접 요소로 하여금 동일한 기본 기억 어드레스를 공유하도록 함으로서 오퍼랜드 페치 시간을 감소시킨다.
스쿠어링이나 네스티드 정렬(Skewering, or Nested Ordering)
주어진 가치표와 변위표에 대해, 동일한 레코드 세트를 생성하는 사례표와 어커런스표가 다수 존재할 수 있다. 이는, 여러어커런스를 가지는 값의 경우에, 값의 어커런스가 임의 순서의 값을 가지는 물리적 레코드에 할당될 수 있다는 것을 의미한다. 일반적으로, 여러 값의 다중성의 팩토리알 프로덕트는 동일한 물리적 레코드 셋을 생성하는 사례/어커런스표의 수를 부여한다. 그러므로 414,270개의 다른 사례/어커런스표가 존재하여, 아래에 주어지는 SPJmod 데이터베이스의 레코드를 생성한다. 이때 414,720 = 3!*1!*3!*1!*2!*1!*2!*1!*5!*2!*1!*3!*2!*1!*이다.
링 구조에서, 개별적으로 소팅되는 열을 저장하기 위해 필요한 것보다 더 이상의 오버헤드가 없는 N개의 멀티키 "사전형" 순서를 동시에 저장하는 고유 살/어커런스 표현이 존재한다(여기서 언급되는 특성을 스쿠어링(skewring)이라고 한다. 이때, N은 데이터베이스의 속성의 수이다). 각각의 열 C는 한 개의 이러한 오더링을 형성하여, 상기 열이 키의 가장 주목할만한 속성으로 간주되고, next(C)는 그 다음 가장 중요한 속성으로 간주되며, 등등 하여, 열 prev(C)는 가장 덜 주목받는 속성으로 간주된다. 이때 prev(c)는 링 구조의 이전 열이다. 순서화는 여기서 "사전형(lexical)"이라고 불린다. 왜냐하면, 워드를 알파벳식으로 소팅하기 위해 사용되는 동일 종류의 오더링이기 때문이다. 즉, 워드는 첫 번째 문자로 소팅되고, 첫 번째 문자가 같을 경우 두 번째 문자로 소팅된다.
SPJmod로 명명되는 기존표에서 시작하는 스쿠어링(skewering)이 도시된다.
SPJmod에 대해 앞서 기술한 실시예에 따라 압축 가치표 및 변위표는 다음과 같다.
가치표
변위표
세개의 대안의 사례/어커런스표가 아래에 도시되고, 그 각각은 SPJmod의 물리적 레코드 셋을 재생성한다. 사례 및 어커런스표는 사례/어커런스 형태의 엔트리로 단일 조합된 표로 도시된다.
가치표의 각각의 값은 사례/어커런스표 셀의 인접 블록에 상응한다. 이는 상기 값에 대한 변위표 엔트리에 의해 정해진다. 이 블록은 아래에 인쇄된 사례/어커런스표의 하이라이트를 교대시킴으로서 나타난다.
사례/어커런스(버젼 1)
사례 어커런스(버젼 2)
사례 어커런스(버젼 3)
버전 3에서, 각각의 값 블록 내의 엔트리는 사례와 어커런스를 바탕으로 소팅된다. SPJmod에 의해 자연적으로 정해지는 N(여기서, 4) 멀티키 오더링은 다음과같다.
(S#, P#, J#, QTY),
(P#, J#, QTY, S#),
(J#, QTY, S#, P#), 그리고
(QTY, S#, P#, J#),
이때, 필드는 내림차순으로 좌측으로부터 우측으로 정렬된다.
기존의 레코드형 표 구조의 데이터베이스에서, 어떤 순서대로 레코드를 재구축하기 위해, 공간 및 시간의 거래가 존재한다. 레코드가 신속하게 재생성되려면, 네 개의 분리 인덱스가 요구되고, 네 개의 다른 소트 순서를 구체화한다. 이러한 공간의 잉여 사용을 피하기 위해, 시간을 소요하는 검색이 매번 필요하고 사전식 정렬이 변화한다.
스쿠어링 사례/어커런스표는 이 거래를 제거한다. 어떤 자연 사전식 오더도 선형 시간으로 생성될 수 있다. 가령, 오더(P#, J#, QTY, S#)를 재생생하기 위해, 열 P#의 셀은 상부에서 하부로 진행하여, 각각의 이러한 셀에 상응하게 레코드를 재구축한다. 이 레코드는 바람직한 사전식 순서에 놓일 것이다. 이를 설명하기 위해, 열 P#의 셀 0000-0006에 상응하는 레코드는 다음과 같다.
열 P#의 cell 0000 -> S5 P2 J2 200
열 P#의 cell 0001 -> S2 P3 J2 200
열 P#의 cell 0002 -> S2 P3 J5 600
열 P#의 cell 0003 -> S3 P4 J2 500
열 P#의 cell 0004 -> S2 P5 J2 100
열 P#의 cell 0005 -> S5 P5 J5 500
열 P#의 cell 0006 -> S5 P6 J2 200
마찬가지로, 선택된 사전식 순서의 가장 주목할만한 열의 셀을 통해 선형 하향으로 진행함으로서 N개의 사전식 주문 중 어느것에도 레코드가 재생생될 수 있다.
가치표의 열이 소팅되고 압축될 경우, 열에서 시작하는 멀티키 사전식 오더링을 생성함으로서 스쿠어링 사례/어커런스표가 형성된다. 나머지 N-1 멀티-키 사전식 오더링이 자동적으로 생긴다.
본 발명의 데이터베이스 시스템내 표준 데이터베이스 포맷 보존
본 발명은 상당한 추가 오버헤드를 발생시키지 않으면서 기존 형태의 데이터베이스 부분을 유지하는 옵션을 허용한다. 이는 압축될 수 없고 질의가 생기지 않는 열의 경우에 바람직할 수 있다. 도해를 통한 실시예가 아래에 도시된다.
설명을 위해서, 본 발명의 데이터구조로 변화되지 않을 French 열이 아래 도시되는 바와 같이 기존 데이터베이스에 추가된다.
기존 데이터베이스
French 열에 대해 변위, 사례, 어커런스표의 분리 열을 생성하는 대신에,French 열은 다른 열 중 하나에 "부착"되고, 그 변위, 사례, 어커런스표는 앞서와 같이 도시된다.
먼저, French 열을 "부착"하기 위해 열이 선택된다. 데이터베이스의 어떤 열도 이 목적을 위해 선택될 수 있다. 본 예에서, Parity 열이 선택되었다. 레코드를 데이터베이스에서 재구축할 때, 상기 기록에 대한 "Parity" 값을 결정할 때 "French" 속성에 대한 적절한 값이 검색된다.
가치표 압축 이전에 Parity 열에 French 열을 부착하기 위하여, 가치표의 French 셀이 Parity 셀과 같은 순서로 소팅된다. 본 발명에 따르는 데이터 구조의 조직 중 이 작동이 실행되기 때문에, 추가 효과의 미소량만이 필요하다. 소팅된 French 열은 아래와 같이 압축 가치표에 추가된다.
가치표
변위, 사례, 그리고 어커런스표는 한 실시예에서 다음과 같다.
변위표
사례표
어커런스표
이제, 질의 English = "Three"에 상응하는 레코드가 재구축된다. 이 레코드는 기존 데이터베이스에서 다음과 같이 주어진다.
앞서의 데이터 구조로부터 이 레코드를 재구축하기 위해, 먼저, 가치표 English 열의 값 "Three"가 발견되고, 사례표를 추적함으로서 레코드의 잔여 속성이 재구축된다. Parity 열에 대한 사례 셀에서, 레코드에 상응하는 "French" 값은 가치표의 French 열의 상응하는 셀의 값이다. 본 예에서, 사례표 Parity 열의 행 5의 엔트리는 재구축중인 레코드와 연관된다. 그러므로, "French" 값이 가치표의 "French" 열의 행 5에 발견되고, 그 값은 "Trois"이다.
대안으로, 비소팅 열에 대한 치환물로 식별 치환을 사용함으로서 본 발명의 데이터 구조에 비소팅 열이 포함될 수 있다.
열 병합 압축
발명의 추가적 실시예에 따라, 분리 가치표 열은 원래의 열 각각에 대한 분리 변위 리스트 열을 가지는 단일 여로 병합될 수 있다. 이는 "유니언 열(union column)"로 명명된다. 이는 잠재적인 장점을 가진다. 즉, 더작은 가치표를 가지며, 미리 결합된 데이터 촉진 결합 작동을 보이며, 갱신 속도가 개선된다. 특정한 원래의 열에 존재하지 않는 값은 상기 값에 대한 널 범위에 의해 변위표 열에 표시된다. 가령("제 1 행번호" 포맷 변위표를 가정할 때), 원래의 열이 병합 열의 행 'r'에서 값을 가지지 않을 경우, 상기 열에 대한 변위표는 행 'r'과 'r+1'에서 동일한 값을 가질 것이다(즉, Displacement_Table(r+1, c) - Displacement_Table(r, c) = 0). 'r'이 열의 최종 행일 경우, 그 값은 상기 열에 대한 사례표의 행 번호보다 큰 번호로 설정된다.
대안으로, 변위표가 "최종행 번호" 포맷일 경우, 어떤 값 번호 r의 사례도 표시하지 않는 널 범위는 다음과 같이 주어진다. 즉, r-1이 유효한 행번호일 경우, Displacement_Table(r, c) = Displacement_Table(r-1, c). r이 최저 유효 행번호일 경우, Diplacement_Table(r, c) = 0(1을 바탕으로 하는 행 번호), = -1(0을 바탕으로 하는 행번호).
가령, 다음의 기존 데이터베이스가 고려된다.
기존 데이터베이스
First와 Middle 열에 대한 상응하는 가치표 및 변위표는 한 실시예에서 다음과 같다.
가치표 변위표
열-병합 공간-절약 기술을 적용하는 것은 상기 열을 가리키도록 조절되는 First와 Middle에 대한 변위표 열과 함께, First와 Middle에 대한 단일 가치표 열을 가져온다. 이는 아래에 도시된다.
유니언 열을 갖춘 가치표 변위표
본 실시예에서, 블랭크 First 이름이 빈 것은 동일한 값을 가지는 변위표의 첫 번째 두 행에 의해 표시된다(즉, 차이가 0이다). First 이름 값 "Allen" 및 "Edward"와 Middle 이름값 "Alexander", "Jackson", "John", "Joseph", "Steven"이 빈 것은 마찬가지로 표시된다. 추가적으로, "the"의 스펠링을 가지는 First 이름은 어떤 어커런스도 가지지 않으며, 변위표 값에서 12로 표시되며, 이는 레코드 번호보다 크다. 역으로, 총레코드 번호 이하의 최종 행의 변위표 값은 상기 값이 한 개의 어커런스를 가짐을 표시한다.
본 예에서, 각각의 First 및 Middle 필드 엔트리에 대해 20 바이트의 저장 공간이 필요할 경우, 비압축 열은 11 레코드에 대해 440 바이트를 사용할 것이다. 열병합 압축 이후에, 가치표의 유니언 열은 총 20*15 바이트를 사용하고 변위표에 2바이트값이 생기므로, 변위표 열은 2*2*15 바이트를 사용하고 총 360 바이트를 차지하여 80 바이트를 공간 절약한다. 분리 열에 대한 가치표 값이 보다 중복될 수록 공간 절약이 상응하게 커질 것이다. 유니언 열은 아래에 기술되는 바와 같이 결합구현시 사용되는 것에 또한 장점을 가진다.
본 발명의 대안의 실시예에 사용되는 또다른 공간 절약 기술은 원래 필드의 여러 조합을 나타내는 값을 가지는 단일 필드로 낮은 카디널리티의 필드를 조합하는 것이다. 가령, 앞서의 예에서, Type 및 Parity 필드는 단일 필드, Typar로 병합될 수 있고, 이는 Type와 Parity 값의 조합을 나타내는 값을 가진다.
수정 입력표
가치표 변위표
사례표
이 데이터 구조의 설정 과정은 앞서와 동일하다. 단, Type 및 Parity 데이터가 두 개의 분리된 열이라기 보다는 한 단위로 간주된다는 점이 다르다. Typar 열의 압축이 원래의 Type 및 Parity 열에 대해 얻어지는 압축보다 작을 때, 전체 공간 절약은 변위표와 사례표 열의 감소된 숫자로 인한 것이다. 이 공간 절약은 조합 카디널리티가 충분히 작을 때 실현가능하다. 조합 필드의 제 1 부분(Even/Odd)과 일치하는 값을 검색하는 것은 일반적으로 불변이나, 제 2 부분(Composite/Power2/Prime/Unit)에 대한 검색은 보다 복잡하다. 예를 들어 "Prime"을 검색하기 위해서는 "EvenPrime"과 "OddPrime"에 대한 두가지 검색을 실행할 필요가 있다. 일반적으로, C번의 이러한 검색이 필요하고, 이때 C는 조합의 제 1 열의 카디널리티이다. 카운트는 연루된 열에 대해 보다 정교하다. 두 개 이상의 열이 조합되고, 비용은 비슷하다.
해싱
해싱은 로그-시간 이진 검색을 크게 능가하는 고속 데이터 저장 및 검색 메카니즘을 포함한다. 적절한 크기의 해시 표에서 효율적인 해시 기능으로 구현될 때 낮은 계수의 일정 시간 생산(low-coefficient constant-time performance)을 할 수 있지만, 고성능 해쉬 패러미터에 대한 검색이 복잡하고, 난이하며, 데이터에 따라 좌우될 수 있다. 보다 중요한 것은, 해싱이 큰 단점을 가진다는 점이다. 해시 기능은 정연한 결과를 복귀시키는 데 실패하는 것이 일반적이어서, 범위 질의, 정연한 출력에 대한 사용자 요청(SQL "소트-바이" 및 "그룹-바이" 등), 그리고 (그 효율적인 구현이 소팅 정도에 따라 좌우되는) 다른 질의에 부적절하게 된다.
다차원 데이터의 효율적이고 정연하며 공간 감소된 표현 방식을 지원함으로서, 본 발명은 기존 DBM의 무질서도와 관련된 해싱의 결점을 제거한다. 더욱이, 어떤 공지된 해싱 기술이 본 발명과 함께 사용될 수 있다.
소팅된 가치표에 적용되는 해싱의 한 예는 64 KB 해시표로서, 이때 해시표의 각각의 엔트리는 가치표의 제 1 요소의 위치를 포함하며, 가치표의 첫 번째 두 바이트는 엔트리 위치와 일치한다. 예를 들어, 0을 기반으로 하는 번호를 이용함으로서, 해시표의 제 1 엔트리는 가치표 제 1 엔트리에 대한 포인터를 포함한다. 그 첫 번째 두 바이트는 모두 0을 포함한다. 제 2 엔트리는 가치표 제 1 엔트리에 대한 포인터를 포함하며, 그 첫 번째 두 바이트는 00000000 00000001, 등을 포함한다. 그러므로, 모든 세트의 연속적 해시표 엔트리는 모든 64K의 가능한 첫 번째 두 바이트에 대해 관련된 첫 번째 두 바이트 비트 패턴을 포함하는 값의 전체 범위를 고유하게 구체화한다. 이 좁은 범위의 값이 이진 검색 등을 통해 검색될 수 있고, 그래서 검색 대상값을 찾는다. 동일한 값을 가지는 두 개의 연속 해시표 엔트리는 어떤 가치 요소도 제 1 엔트리의 첫 번째 두 바이트를 포함하지 않는다는 것을 표시한다.
앞서 기술한 바와 같이 구현되는 해시표의 상부에 추가 수정이 가해질 수 있다. 가령, 가치표 값의 특정 두 바이트를 떨어냄으로서 공간이 절약될 수 있다. 왜냐하면, 상기 두 바이트는 해시표로부터 얻을 수 있기 때문이다.
그러나, 상기 값이 사용자에게 돌아오기 전에 떨어내진 첫 번째 두 바이트를 재구축하는데는 추가적인 시간이 필요하다. 이는 예를 들어 가치표의 적적한 행에 대해 해시표를 이진 검색함으로서 행해질 수 있다. 이는 최악의 경우 64K 해시표에 대해 16개까지의 추가 단계를 차지할 수 있지만, 보간 검색 등에 의해 평균 성능이크게 감소될 수 있다. 이는 특정 데이터 세트의 정규 분포에 의해 지원된다.
해싱은 관련 값 요소에 대한 검색을 직접 되돌리거나 좁히기 위해 사례 요소 상에서 실행될 수도 있고, 어커런스표에 대한 대안으로 작용한다. 주어진 사례요소와 연관된 값 요소나 일부 근처의 값 요소를 되돌리게 하는 해시 기능이 이 목적을 위해 사용될 수 있다. 근처의 값 요소가 되돌려지면, 특정 관련 값 요소는 변위표의 제한부를 검색함으로서 나타난다. 한 개의 이러한 기술은 사례표의 각각 가능한 첫 번째 두 바이트에 매핑되는 가치표로의 포인터를 가지는 64KB 해시표이다. 검색할 변위표 엔트리의 범위는 해시표 엔트리와 그 인접 엔트리에 의해 부여된다.
상당한 검색이 여전히 필요하지만 가용한 국부 분포 패턴이 또한 존재하는 상황에서, 이 64KB 엔트리 해시표는 두부분 엔트리를 수용할 수 있도록 수정될 수 있다. 이러한 구현예에서, 제 1 해시표 엔트리는 해시표의 위치에 의해 구체화되는 첫 번째 두 바이트를 포함하는 제 1 사례 요소와 관련된 첫 번째 값을 여전히 지정한다. 제 2 해시표 엔트리는 구체화된 사례 요소와 연관된 값 요소에 대한 검색을 추가적으로 좁히기 위해 이 국부 분포를 사용하는 함수의 어드레스를 제공한다.
두 바이트 필드에 상응하는 64KB 해시표 선택이 전부라고는 할 수 없다. 다른 바이트 크기 선택, 다른 근(radix), 그리고 선행 바이트와는 다른 바이트 위치설정도 사용될 수 있다. 더욱이, 어떤 다른 해싱 방법도 또한 사용될 수 있다.
사례표에 대한 일반 구조
앞서 기술한 바와 같이 특정 실시예에서, 개별 레코드는 일부 구조의 사례표를 통해 링크된다. 그 중 가장 간단한 것 중 하나가 원형으로 링크된 리스트, 또는"링" 구조이다. 지금까지의 예는 이러한 간단한 링 구조를 사용하였다. 즉, 사례표의 포인터(즉, 엔트리)는 한 개의 "previous"와 한 개의 "next" 필드를 가지는 각각의 필드로 단일 루프의 레코드에 모든 필드를 링크한다. 이는 도 2에 도시된다. 발명의 다른 실시예에서는 다른 구조도 사용될 수 있다.
본 발명과 연계하여 용어가 사용됨에 따라 구조(topology)는 그래프 형태로 정의되고, 속성이나 다른 형태의 속성 데이터가 그래프의 노드이며, 노드 사이에 링크가 존재한다. 이는 간단한 링 구조에 대한 명백한 예이다.
구조(topology)의 또다른 예가 도 3에 도시된다. 이 구조에서, 필드는 공통적으로 한 개의 필드를 가지는 두 개의 서브세트로 분리되고, 각각의 서브세트는 간단한 링 구조를 가진다. 두 링에 공통인 필드는 둘 사이의 "브리지"로 작용한다. 완전한 레코드 재구축은 두 링 주위로의 트래버스(traverse)를 필요로하고, 브리지 필드는 레코드 서브링을 단일 엔터티로 결합한다. 다수의 질의가 한 개의 서브링 필드에만 관한 것일 경우에, 이 구조는 특히 유용하다. 왜냐하면, 전체 레코드를 트래버스(traverse)하거나 검색함이 없이 상기 서브링이 트래버스(traverse)하거나 검색가능하기 때문이다.
도 4에 도시되는 바와 같이, 또하나의 구조는 스타(별) 배치이다. 이때 각각의 필드는 중앙 허브로부터 방출되는 이중 링크 스포크를 나타낸다. 대안으로, 별의 개별 지선(가지)은 선형일 수도 있고 링 구조일 수도 있다. 일반적으로, 레코드 저장과 특정 데이터베이스 검색을 최적화하기 위해 앞서의 구조가 조합될 수 있다.
앞서 정의된 구조가 단일 방식으로, 또는 이중으로 링크될 수 있고, 구조는앞서의 예에서처럼 닫힐 필요가 없다. 또한, 접근 패턴을 바탕으로 데이터베이스 시스템에 의해 자동적으로, 또는 사용자 옵션에 단일 및 이중으로 링크된 사이에서 구조가 변화할 수 있다. 이중 링크된 구조는 데이터 인접성이 중요할 경우 유용하다. 즉, 조합되어 접근되는 필드가 서로 가까이 구조적으로 위치하도록 레코드의 필드 순서가 배열될 때, 이중 링크 구조가 유용하다. 단일 링크 구조는, 완전한 레코드가 검색될 때, 또는 주된 필드 검색 시작점과 순서가 주어질 경우에, 보다 바람직하다. 왜냐하면, 단일 링크 구조의 사례 리스트가 이중 링크 경우의 기억 용량의 반을 차지하기 때문이다.
브리지 필드 예
도 3은 각각의 레코드가 브리지 필드로 English를 가지는 두 개의 분리 서브링을 포함하는 구조를 설명한다. 이러한 구조를 구현하는 사례표는 아래와 같다.
English 열은 두 개의 출력 포인터를 가지며, 한 개의 포인터마다 서브링 각각을 표시한다. English 열의 행 1에서 시작하는 레코드를 트래버스하기 위해, 출력 포인터 중 하나가 먼저 뒤따르고, 이는 Spanish 열의 행 1을 가리킨다. Spanish 열의 행 1은 Gernam 열의 행 3을 가리키고, 이는 English 열의 행 1로 다시 되돌아온다. 다른 출력 포인터도 이어져서, Type 열의 행 5를 이끈다. Type 열의 행 5는Parity 열의 행 6을 가리키고, English 열의 행 1로 다시 되돌린다.
데이터베이스 구현
앞서 기술된 데이터 구조로 데이터를 입력하고, 유지하며, 상기 데이터 구조로부터 데이터를 추출하기 위한 루틴의 구현이 아래에 기술된다. 이 작동을 실행하기 위한 알고리즘에는 여러 다른 방식이 있으며, 본 발명이 여기 제시되는 알고리즘에 제한되지 않는다는 점을 당 분야의 통상의 지식을 가진 자는 알 수 있을 것이다.
주어진 레코드와 연관된 데이터를 추출하고 이를 선형으로 버퍼링하며, 그리고 버퍼링된 선형의 데이터를 발명의 데이터 구조로 기록하기 위해, 한 실시예에서 원시 함수가 제공된다. 본 발명에 따르는 데이터 구조는 다음과 같다.
1) VAL2: 소트 순으로 가능할 경우 압축된 열을 가지는 가치표,
2) DISP: 변위표(VALS2의 상응하는 열 I와 같은 행 번호를 가지는 열 I),
3) DELS: 삭제표(VALS2의 상응하는 열 I와 같은 행번호를 가지는 열 I),
4) INST: 사례표,
5) OCCUR: 어커런스표.
아래의 내용에서, 링 구조를 가지는 실시예가 사용된다. 본 실시예의 링 구조에서, 이전열과 다음열로 각각 되돌리는 함수 prev(C)와 next(C)는 다음과 같다. 즉, prev(C) = (C + fcount -1) mod fcount, 이때 fcount는 열의 수이고, C는 0에서 fcount-1까지의 열번호이다. 대안의 실시예는 1에서 fcount까지 변하는 열번호를 가진다. 이때 prev(C) - (C-1)?(C-1):fcount이고, next(C) = C mod fcount + 1이다. 가장 일반적인 구조는, 보다 복잡한 prev()와 next() 함수를 정의함으로서, 또는 간단한 링으로 된 구조의 분석에 의해, 또는 상기 간단한 링에서 아래의 함수의 반복 적용 분석에 의해 구현될 수 있다.
비압축 가치표와 사례표의 행의 수는 recount로 나타난다. 압축 VALS2 열은 더 적은 행을 가지며, 상응하는 DISP 및 DELS 구조도 마찬가지다. 행은 0에서 reccount-1까지의 번호를 가진다(0을 기반으로 함). 대안의 실시예는 1에서 reccount까지의 행번호를 가질 수 있다(1을 기반으로 함).
"V/O 스플리팅"은 앞서 기술한 압축 가치표를 가지는 대안의 사례표에 관한 것이다. 사례표의 열 I의 포인터가 가치 성분과 어커런스 성분을 가질 경우, I번째 열은 "V/O 스플릿"으로 불린다. 비-V/O 및 V/O 스플릿 열에 대한 병렬 처리는 적절한 경우 제시된다. 열이 V/O 스플리팅을 가지는 지 사례표 각각의 열에 대한 기술어(descriptor)가 표시한다. 기술어는 노드 트래버스 경로, 열이 0을 기반으로 하는지, 1을 기반으로 하는 번호인 지와 같은 다른 열/속성 특정 정보를 또한 포함한다.
가치표 각각의 열에 대한 열 기술어는 데이터 종류, 필드 크기, 치환/변화 종류, 압축 형태, 잠금 정보, 해싱 종류 등과 같은 구조배치 정보를 포함한다.
다른 표도 관련 구조배치 정보를 포함하는 열 기술어를 가진다.
함수 변수와 복귀값의 표시를 용이하게 하기 위해, 다음이 사용된다(준-C 언어나 C++ 용어로 쓰여짐).
typedef long Row;
typedef int Column;
class chainVO { Row chainV[fcount]; Row chainO[fcount]; bool valid; }
chianVO 객체가 유효 레코드에 대한 데이터와 함게 채워졌다면, ChainV[C]는 열 next(C)의 레코드 VALS2 엔트리의 행 번호를 포함한다.
사례표의 열 C가 V/O 스플릿일 경우, chainO[C]는 값 VALS2[chainV[C], next(C)]의 어커런스번호를 포함한다.
사례표의 열 C가 V/O 스플릿이 아닐 경우, chainO[C]는 사례표의 열 next(C)의 레코드 셀의 행번호를 포함한다.
레코드 재구축
사례표 열 C의 행번호 R이 주어질 때, 사례표 [R, C] 셀과 연관된 실제값을 포함하는 VALS2의 고유 행번호 V가 존재한다. 도 5에 도시되는 루틴 Row get_valrec(Row R, Column C)는 R과 C로부터 V를 결정한다. 단계 GV1은 열 C에 대한 열 기술어를 확인함으로서 DISP표 열을 가지는 지를 결정하고, 그렇지 않을 경우, 단계 GV2가 V를 R로 설정한다. 그렇지 않을 경우, DISP표 열이 존재한다면, 단계 GV3가 (열 기술어를 다시 확인함으로서) 그 포맷을 결정한다. DISP표 열이 제 1 행번호 포맷에 있을 경우, 단계 GV4에서, 다음의 값으로 V가 설정된다. 즉, DISP[V, C] <= R < DISP[V+1, C]이 참일 경우의 값으로 V가 설정된다. 이때 V-1이 존재하지 않을 경우 하한 테스트는 실행되지 않는다(즉, V가 열 C에 대한 제 1 DISP 표 행일 경우).
사례표의 열 C가 V/O 스플릿일 경우, 사례표의 열 next(C)의 행번호 Next_R은 도 6의 R_from_VO(C, I, O) 루틴의 순서도에 도시되는 바와 같이, DISP 및 OCCUR 구현에 따라 좌우되는 방식으로 V/O 엔트리로부터 결정된다. R_from_VO()는 현재의 열 C, 다음 열의 관련 값의 행번호 I, VALS2의 NEXT(C), 그리고 상기 값의 어커런스 번호 O를 지난다. 단계 242는 변수 I'을 I로, X를 0으로 설정한다. 단계 243은 DISP표의 열 next(C)가 "제 1 행" 포맷이나 "최종 행" 포맷에 있는 지를 시험한다. "최종 행" 포맷에 있을 경우, 단계 244가 실행되어, I'을 I-1로, X를 1로 설정한다. 양자의 어느 경우에도, 단계 245가 실행되고, 이는 변수 O'을 O로 설정한다. 단계 246이 실행되어, OCCUR표의 열 C가 1을 바탕으로 하는 지를 시험한다. 1을 바탕으로 할 경우, 단계 247이 실행되어, O'을 O-1로 설정한다. 어느 경우에도 단계 248이 이어지고, 다음 열의 행인 Next_R을 DISP[I', next(C)]+O'+X로 설정한다.
도 7은 get_chain(Row R0, column C0)으로 명명되는 레코드 구조 데이터를 선형화하는 함수를 도시한다. 사례표의 행 R0, 열 C0에서 시작하여, 이 루틴은 포인터 사이클을 따라 진행하며, 포인터를 CHainVO 객체에 저장한다. 포인터 사이클이 닫히면, CHainVO.valid는 "참"으로 설정된다. 그렇지 않을 경우 "거짓"으로 설정된다.
단계 G1에서, 사례표 셀[R0, C0]는 레코드 재구축을 위한 시작점으로 설정된다. 단계 G2에서, "현재의 셀"[R, C]는 시작 셀[R0, C0]로 초기화된다. 단계 G3에서, 사례표의 현재열에 대한 열 기술어는 V/O 스플리팅을 가지는 지 보기 위해 확인된다.
열이 V/O 스플리팅을 가지지 않을 경우, 단계 G4가 R을 INST[R, C]로 직접 설정함으로서 다음 열의 행 번호를 페치(fetch)한다. 단계 G5는 chainO[] 어레이로 로딩시키기 위해 변수 O를 설정한다. 단계 G6는 상응하는 다음 열의 행번호 v를 VALS2, DISP, 그리고 DELS에서 찾기 위해 get_valrec(R, next(C))를 이용한다.
열 C가 V/O 스플리팅을 가질 경우, V(VALS2, DISP, DELS의 다음 열의 행번호)와 O(상기 값에 대한 어커런스번호)가 단계 G7에서 INST[R, C]와 OCCUR[R, C]로 각각 설정된다. 단계 G8은 사례표의 열 next(C)에서 행번호 R을 찾기 위해 앞서 기술한 바와 같이 R_from_VO(C, V, O)를 이용한다.
과정은 단계 G9에서 다시 모여, chainV[C]와 chainO[C]가 V와 O로 각각 설정된다. 단계 G10은 C를 next(C)로 대치하고, 단계 G11은 시작 열로 과정이 복귀하였는 지(즉, C0)를 확인한다. 그렇지 않을 경우, 과정은 단계 G3로 돌아가, 앞서의 과정을 반복한다. 과정이 원래의 시작열로 돌아온 경우, 단계 G12는 현재의 R 값을 시작값 R0와 비교한다. 동일하다면, 포인터 체인은 폐루프를 형성하여, 유효한 레코드가 재구축되었으며 ChainVO 객체에 저장되었음을 표시한다. 그리고 단계 G14는 플랙(flag)이 이 사실을 표시하게 설정한다. R이 R0와 같지 않을 경우, 단계 G13은 레코드 재구축 시도가 폐루프를 이끌어내지 못했다는 것을 플랙이 표시하도록 설정하고, 이는 발명의 본 실시예에서, 유효 레코드가 셀[R0, C0]을 통과하지 않았다는 것을 표시한다. 발명의 다른 실시예에서, 다른 구조를 이용함으로서, 관련 사례 요소간 포인터 체인은 폐루프를 형성할 필요가 없다.
레코드 재구축의 최종 단계는 chainV 어레이에 저장된 가치표 행번호를 값으로 변환하는 것이다. 레코드의 열 C 값은 VALS2[chainV[prev(C)], C]로 주어진다.
일반화된 레코드 재구축
레코드 재구축을 위해 get_chain()을 이용한 앞서의 설명은 간단한 루프 구조를 바탕으로 한다. 이 경우에 구조의 다음 열은 현재의 열에만 의존한다. 그 상황을 일반화할 수 있다. 다음 열이 현재의 열에 부가하여, 또는 현재의 열과 다른 메타-데이터에 의존할 수 있다. 가령, 다음 열은 현재 열과 이전 열 모두의 함수일 수 있다. 즉, C = next(C, prev(C)). 추가적으로, 구조의 다음 열은 가치표의 현재 셀의 값 V와 같이 데이터 자체에만 의존할 수도 있고, C = next(C, prev(C), V)처럼 앞서 제시한 모든 사항에 의존할 수도 있다.
레코드 수정을 위한 원시함수
원시 함수는 레코드 삭제, 레코드 삽입, 그리고 레코드 수정의 한가지 구현법으로 이제 기술된다. 이 구현은 "스왑(swap)" 방법으로 일컬어진다. 이 방법에서, 가치표의 값은 비삭제 사례와 함께 삭제될 수 있다. DELS로 불리는 데이터 구조는 삭제 사례의 수의 각각의 값에 대한 카운트를 저장한다. 그러므로, DELS는 VALS2와 DISP와 같은 열번호를 가지며, 주어진 열에 대해, VALS와 DISP와 같은 행번호를 가진다. 삭제된 사례는 사례표에서 자유 공간으로 간주되며, 주어진 열의 주어진 값에 대해 모든 비삭제 사례가 인접하게 함께 그룹형성되고 모든 삭제 사례가 인접하게 그룹형성되도록 사례표가 유지되어, 비삭제 사례가 삭제 사례에 선행하고, 그 역도 마찬가지다. 이는 아래의 함수에서 도시되는 바와 같이, 기존 레코드에 대한 새로운 레코드나 새로운 필드값으로의 할당을 위해 자유 공간을 용이하게 위치시키게 한다. 입력 데이터표의 적절한 삭제 레코드를 포함함으로서 설정 시간에서 사례표의 바람직한 위치에 자유 공간을 위치시킬 수 있다. 그래서, 삭제 이전에 삽입을 실행하기 위한 한가지 구현방법을 제공한다.
도 8에 도시되는 put_chain(Column C0, ChainVO rec, int count) 함수는 get_chain()의 역을 실행한다. 열 C0에서 시작하는 put_chain()은 ChainVO 객체 "rec"의 모든 내용이나 일부 내용을 열의 "count" 번호에 대해 사례표와 어커런스표로 기록한다. 열 C에 기록된 행 번호는 rec의 prev(C) 엔트리로부터 얻어진다. Put_chain()은 가치표나 변위표를 수정하지 않는다.
단계 P1은 현 열 번호 C를 시작열 C0로 설정한다. 단계 P2는 이전 열이 V/O 스플릿인 지를 결정하기 위해 열 prev(C)에서 사례표에 대한 열 기술어를 확인한다. prev(C)가 V/O 스플릿이면, 단계 P3는 V를 ChainV[prev(C)](가치표 및 변위표의 행번호)와 0(어커런스표의 행번호)으로 설정한다. 단계 P4가 R(사례표의 행번호)을 R_from_VO(prev(C), V, O)로 설정한다.
순간표의 prev(C) 열이 V/O 스플릿이 아닐 경우, 단계 P5는 R을 chainO[prev(c)]로 설정한다. 기록할 사례표의 열 C의 행번호를 얻은 후, 단계 P6는 열 C가 V/O 스플릿인 지를 결정한다. 그렇지 않을 경우, 단계 P7은 INST[R, C]를 chainO[C]로 설정한다. 열 C가 V/O 스플릿인 경우, 단계 P8은 INST[R, C]를 chainV[C]로, OCCUR[R, C]를 chainO[C]로 설정한다. 단계 P9에서 과정이 다음 열로 이동하고, 단계 P10에서 열 카운트가 감소된다. 단계 11에서 어떤 추가 열도 기록되지 않는다고 결정될 경우, 과정이 종료되고, 그렇지 않을 경우 루프는 단계 P2로되돌아가 다시 반복된다.
도 9는 함수 int swap(column C, Row R1, Row R2)의 순서도로서, 사례표와 다른 표를 수정하여, [R1, C]를 통과하는 레코드가 [R2, C]를 통과하도록 하게하고, [R2, C]를 통과하는 레코드가 [R1, C]를 통과하게 한다.
단계 S1은 INST[R1, C]를 통해 ChainVO 객체 ChainVO_1으로 보내는 레코드에 대한 레코드 데이터를 페치(fetch)하고, INST[R2, C]를 통해 ChainVO_2로 통과하는 레코드에 대한 레코드 데이터를 페치한다. 두 레코드는 폐루프이어야 하고, 그렇지 않을 경우, get_chain()에 의해 예외가 나타난다. 두 루프가 유효할 경우, 단계 S2에서, ChainVO_1.chainV[prev(C)]와 ChainVO_2.chainV[prev(C)]의 값이 상호교환되고, ChainVO_1.chainO[prev(C)]와 ChainVO_2.chainO[prev(C)]의 값이 상호교환된다. 교환된 값은 prev(C) 열에 있다. 왜냐하면, 상기 열이 사례표의 열 C의 행번호를 결정하기 때문이다. 단계 S3에서 수정은 put_chain(prev(C), ChainVO_1, 2)와 put_chain(prev(C), ChainVO_2, 2)로의 호출을 통해 사례표로 다시 기록된다. put_chain()은 카운트 2와 함께 호출된다. 왜냐하면, put_chain() 루프를 한번에 통과하는 것은 스왑 셀로 포인터를 갱신시키며, 제 2차 통과는 스왑 셀의 내용을 갱신시킨다. 합격 코드가 단계 S4에서 돌아오고, 처리과정이 완료된다.
도 10은 함수 del_swap(Column C, Row R, Row Rd)의 순서도로서, 사례표와 다른 표를 수정시켜서, [R, C]를 통한 레코드가 자유 셀[Rd, C]를 통과하도록 다시 루팅되게 한다. 이 루틴은 주어진 값의 비삭제 사례로부터 삭제된 것의 격리를 관리하는 데 사용된다.
단계 D1에서, 다시 루팅될 레코드용 데이터가 get_chain()으로의 호출을 통해 ChainVO 객체 ChainVO_r에 위치한다. 레코드가 폐루프가 아니라고 get_chain()이 결정하면, 예외가 생긴다. 단계 d2는 Vd = get_Valrec(Rd, C)을 이용하여 자유 셀 Rd와 연관된 가치표의 행 Vd를 찾는다.
단계 D3는 사례표의 열 prev(C)의 열 기술어를 확인하여 열 prev(C)가 V/O 스플릿인지를 결정한다. 열 prev(C)가 V/o 스플릿이 아닌 경우, 단계 D4가 실행되어, ChainVO_r.chainV[prev(C)]를 Vd로, 그리고 ChainVO_r.chainO[prev(C)]를 Rd로 설정한다. 열 prev(C)가 V/O 스플릿인 경우, 단계 D5와 D6가 실행된다. 단계 D5는 앞서 기술된 R_from_VO()에 크게 관련된 방식으로 어커런스 번호 Od를 설정하고, 특히 Od = Rd - DISP[Vd', C] - X이다. 이때, DISP가 제 1 행번호 포맷일 경우 Vd' = Vd이고 X = 0이며, DISP가 최종행번호 포맷일 경우, Vd' = Vd - 1이며 X = 1이다. OCCUR이 0을 바탕으로 하기보다는 1을 바탕으로 할 경우 X는 앞서보다 1만큼 감소한다. 단계 D6는 값을 ChainVO 객체로 하고, ChainVO_r.chainV[prev(C)]를 Vd로, 그리고 ChainVO_r.chainO[prev(C)]를 Od로 설정한다. 어느 경우에도, 단계 D7이 실행되어, put_chain(prev(C), ChainVO_r, 2)으로의 호출을 통해 수정된 레코드 구조를 사례표로 다시 기록한다. 그리고 처리과정이 완료된다.
도 11은 함수 top_undel(Column C, Row R)의 순서도이다. 사례표의 셀 [R, C]은 값 VALS2[V, C]와 연계되어 있고, 이때 V = get_valrec(R, C)이다. 이 값이 비삭제 사례를 가질 경우, top_undel()은 이러한 비삭제 사례에 대해 가장 높은 행번호를 복귀시킨다. 그렇지 않을 경우, 루틴은 비삭제 사례가 없으며 V의 제 1 사례의 행번호보다 작은 번호만이 있음을 표시하는 플랙(flag)을 복귀시킨다.
단계 T1에서, 사례표 행 R 열 C와 관련된 가치표 행 R이 발견된다. 즉, V = get_valrec(R, C)이다. 단계 T2는 값 V의 모든 사례의 사례표에 가장 높은 번호로 IP를 설정한다. DISP가 최종 행번호 포맷일 경우, UP = DISP[V, P]이다. DISP가 제 1 행번호 포맷일 경우, UP = DISP[V+1, C] - 1이며, DISP[V+1, C]가 존재할 경우, 또는 DISP[V+1, C]가 존재하지 않을 경우, UP = reccount + X - 1이다. 이때, 0을 기반으로 하는 행번호의 경우 X = 0이고, 1을 기반으로 하는 행번호의 경우 X = 1이다. 열 C에 DISP가 전혀 존재하지 않을 경우, 비압축 가치표 열을 통한 검색이 값 번호 V의 제 1 사례와 최종 사례의 행번호를 제공할 것이다. 단계 T3는 DLS를 값 번호 V에 대한 삭제 사례의 카운트로 설정한다. DELS 구조가 있을 경우, DLS = DELS[V, C]. 그렇지 않을 경우 삭제시에 플래그되는 사례를 카운팅함으로서 DLS가 얻어진다. 단계 T4는 TU를 값 번호 V의 제 1 삭제 사례 바로 이전의 행번호로 설정한다. 단계 T5는 BOT를 설정한다. 값 번호 V의 제 1 사례의 행번호로 설정한다. 제 1 행번호 포맷 DISP에 대해, BOT = DISP[V, C]이고, "최종 행번호" 포맷 DISP에 대해, BOT = 1 + DISP[V-1, C](DISP[V-1, C]이 존재할 경우)이거나, BOT = X(X를 기반으로 하는 행번호의 경우 X=0, X=1)이다. 열 C에 대해 DISP가 존재하지 않을 경우, 비압축 가치표에서의 검색으로 BOT를 얻을 수 있다. 단계 T6는 TU >= BOT인지를 확인한다. 그렇지 않을 경우, 행번호 TU는 값번호 V에 속하지 못하지만, 대신에 V의 제 1 사례의 행번호보다 작은 번호가 된다. 단계 T7은 TU를 돌려보내고, 모든 사례가 삭제되었음을 표시하는 플랙을 복귀시킨다. TU >= BOT일 경우, 단계 T6는단계 T8을 뒤따르고, 바람직한 행번호를 복귀시킨다.
도 12는 함수 I-move-space-uplist(Column C, Row V)의 순서도로서, 삭제 사례로부터 비삭제 사례의 격리를 유지하면서 DELS[V+1, C]로부터 DELS[V, C]까지 자유 셀을 움직이도록 사례표의 포인터를 스왑한다.
단계 U1은 VALS2의 열 C의 행번호 V+1에 값이 존재하는 지를 확인한다. 행번호 V+1에 값이 존재하지 않을 경우(즉, 인덱스 V+1이 한계밖일 경우), 단계 U2에서 에러 신호가 발생하고 함수가 중단된다. 그렇지 않을 경우 단계 U3는 VALS2의 열 C의 행 V+1이 어떤 삭제된 사례를 가지는 지를 확인한다. 삭제 사례가 없을 경우, 단계 U4는 에러를 보고하고, 처리과정을 종료시킨다. 삭제 사례가 발견될 경우, 단계 U5는 J = top_undel(C, K)를 연산함으로서 행 V+1이 어떤 비삭제 사례를 가지는 지를 확인한다. DISP의 열 C가 제 1 행번호 포맷일 경우, 행번호 V+1의 제 1 사례의 행번호인 K는 K = DISP[V+1, C]로 주어지고, DISP의 열 C가 최종 행번호 포맷일 경우, K = DISP[V, C]+1이며, DISP의 열 C가 존재하지 않을 경우, 가치표의 선형 검색에 의해 발견된다. 그러하다면, 단계 U6는 제 1 삭제 사례로 제 1 비삭제 사례를 스와핑하도록 del_swap(C, K, J+1)을 호출하여, 값 V와 연관된 사례표 행 다음에 자유 셀을 놓는다. 단계 U7은 값번호 V+1에 대해 삭제 셀의 카운트로부터 이 자유 셀을 빼고, 단계 U8은 값 번호 V에 대해 삭제 셀의 카운트에 자유 셀을 더하며, 그리고 단계 U9는 변위표를 조절하여, 삭제 사례의 값번호 V의 세트로 자유 셀 이동을 반영한다. DISP의 열 C가 제 1 행번호 포맷일 경우, DISP[V+1, C]는 한 셀만큼 값번호 V+1에 대한 사례 블록의 "바닥(floor)"을 움직이도록 증가된다. DISP의열 C가 최종 행번호 포맷일 경우, DISP[V, C]는 한 셀만큼 값번호 V에 대한 사례 블록의 "천정("ceiling")을 이동하도록 증가될 것이다.
도 13은 I_move_space_downlist(열 C, 행 V)의 순서도로서, DELS[V, C]로부터 DELS[V+1, C]까지 자유 셀을 움직이도록 사례표의 포인터를 스와핑한다. 삭제 사례로부터 비삭제 추출이 유지된다. 복귀 값에 의해 에러가 표시된다.
단계 W1은 VALS2의 열 C의 행 V+1이 한계를 벗어나는 지를 결정한다. 한계를 벗어난다고 결정될 경우, 단계 W2는 에러를 보고하고 복귀한다. 그렇지 않을 경우 단계 W3는 값 V가 어떤 삭제 사례를 가지는 지를 시험한다. 삭제 사례를 가지지 않을 경우 단계 W4는 에러를 보고하고 과정 처리를 종료시킨다. 삭제 사례가 발견될 경우, 단계 W5는 J = top_undel(C, K)를 계산하여(이때 DISP의 열 C가 제 1 행 포맷인 경우 값 V+1의 제 1 사례의 행번호인 K는 DISP[V+1, C}로 주어지고, DISP의 열 C가 최종 행번호 포맷일 경우 K = DISP[V, C]+1이며, DISP의 열 C가 없을 경우 가치표의 선형 검색에 의해 발견됨), 값 V+1이 비삭제 사례를 가지는 지를 결정한다. 만약 비삭제 사례를 가질 경우, 단계 W6는 del_swap(C, J, K-1)을 호출하여, 값 V+1의 최고 비삭제 사례를 값 V의 최종 삭제 사례로 스와핑하고, 그래서 가치표 행번호 V+1와 관련된 사례표 행으로 자유 셀을 이동시킨다. 단계 W7은 이 자유 셀을 값번호 V+1에 대한 카운트에 더한다. 단계 W8은 값 V에 대한 카운트로부터 셀을 뺀다. 단계 W9은 V와 V+1 간의 한계를 이동시켜서, 값번호 V+1의 삭제 사례 세트로 이동 자유 셀을 병합한다. DISP의 열 C가 제 1 행번호 포맷일 경우, DISP[V+1, C]가 한 셀 하향으로 값 V+1에 대한 사례 블록의 "바닥(floor)"을 이동시키도록 감소된다. DISP의 열 C가 최종행 번호 포맷일 경우, DISP[V, C]는 한 셀 하향으로 값 V에 대해 사례 블록의 "천장(ceiling)"을 이동하도록 감소된다.
도 14는 Row inst_count(Column C, Row V)의 순서도로서, VALS2[V, C]에서의 값에 대한 총 사례 카운트(비삭제 + 삭제)를 부여하며, 이때 V는 VALS2 어레이의 행번호이고, C는 열번호이다.
단계 C1은 DISP의 열 C가 존재하는 지를 결정한다. 존재하지 않을 경우, 비압축 값 열의 필요값 엔트리가 단계 C2에서 직접 카운팅되고, 처리과정이 종료된다. DISP의 열 C가 존재하지 않을 경우, 단계 C3는 DISP 열이 제 1 행번호 포맷에 있는 지 결정한다. 그렇지 아니할 경우, 처리과정은 단계 C4로 이어진다. DISP 열이 제 1 행번호 포맷에 있을 경우 처리 과정은 단계 C8로 진행된다. 단계 CR는 변수 BOT를 어떻게 설정할 지 결정한다. V가 DISP에 대하여 허용가능한 가장 낮은 인덱스일 경우, 단계 C5는 0을 기반으로 하는 행번호의 경우 BOT = -1로 설정하고, 1을 기반으로 하는 행번호의 경우 BOT = 1로 설정한다. 다른 한편으로 V-1이 DISP에 대해 유효한 인덱스일 경우, 단계 C6은 BOT = DISP[V-1, C]로 설정한다. 단계 C7은 총 사례 카운트를 DISP[V,C]-BOT로 찾아내고, 처리과정이 완료된다. DISP[C]가 제 1 행번호 포맷에 있다고 단계 C3가 결정할 경우, 처리과정은 단계 C8로 이어져, 변수 TOP를 설정하는 방법을 결정한다. V가 DISP에 대해 허용가능한 가장 높은 인덱스일 경우, 단계 C9은 X를 기반으로 하는 행번호일 때 TOP = reccount + X로 설정한다. 다른 한편으로, DISP에 대해 V+1이 유효한 인덱스일 경우, 단계 C10은 TOP = DISP[V+1, C]로 설정한다. 단계 C11은 총 사례 카운트를 TOP-DISP[V, C]로 찾아내고, 처리과정이 종료된다.
도 15는 사례표 셀[R, C]을 삭제하는 함수의 순서도이다. 즉, 사례표의 셀[R, C]는 자유 풀에 위치하고, 적절한 DELS 카운트가 증가된다. 새로이 삭제된 셀이 동일한 값에 대해 비삭제 셀로 둘러싸일 때, del_swap()을 통해 비삭제/삭제 경계로 이동된다. 레코드 구조 데이터는 VO로 불리는 ChainVO 객체에 위치한다. 이 루틴은 레코드 삭제와, 기존 레코드에서의 필드 갱신에 사용된다. 단계 E6의 "기존 레코드 갱신"과 단계 DR7의 "셀을 통한 셀코드 삭제"를 참조할 수 있다.
단계 DC1에서, 열 C의 VALS2/DELS/DISP 행번호는 레코드가 처리중임을 나타내는 ChianVO 구조로부터 얻어진다. 그리고 상응하는 DELS 카운트가 증가된다. 단계 DC2는 질의 셀에 대한 포인터가 V/O 스플릿인지 결정한다. prev(C)가 V/O 스플릿이 아닐 경우, 단계 DC3는 VO.chainO로부터 직접 행번호 R을 얻는다. prev(C)가 V/O 스플릿일 경우, 단계 DC4는 R = R_from_VO(prev(C), V, VO.chainO[prev(C)])를 통해 VO.chainO로부터 R을 재구축한다. 어느 경우에도, top_undel(C, R)으로의 호출을 통해 동일한 값에 대한 상부 비삭제 셀이 위치하고, 단계 DC5에서 T로 설정된다. 단계 DC6는 삭제되는 셀이 질의 값에 대한 최상부 비삭제 셀인 지를 시험한다. 그렇지 아니할 경우, 삭제 사례로부터 비삭제의 격리를 유지하기 위해 del_swap(C, T, R)으로의 호출을 통해 단계 DC7에서 스왑이 실행된다. 처리과정이 이때 종료된다.
도 16은 insert_V(Row V, Column C, void *newvalptr)의 순서도로서, 이전에 존재한 갑이 아닌 새로운 값인 VALS2의 열 C로 삽입되고, 새로운 값을 수용하기 위해 관련 DELS와 DISP 표를 수정한다. 이 함수는 사례표의 열 prev(C)가 V/O 스플릿일 때만 사용된다.
단계 IV1은 삽입점(행 v)에서의 값이 비삭제 사례를 가지는 지를 시험한다. 즉, 비삭제 사례가 존재하지 않는다는 것을 표시하는 플랙(flag)을 top_undel(R, C)가 되돌려보내는 지를 시험한다. 이때 R은 값 V의 사례의 INST 행번호이다. DISP의 열 C가 존재할 경우 R = DISP[V, C]가 이러한 사례다. DISP가 어떤 열 C도 가지지 않을 경우, R = V가 이러한 사례이다. 행 V에서 값의 비삭제 사례가 존재하지 않을 경우, 단계 IV2가 실행되어, 예전값을 새로운 값으로 덮어쓰고, 처리과정이 종료된다. 비삭제 사례가 존재할 경우, 어떤 비삭제 사례도 가지지 않는 가장 가까운 값에 대해 검색이 실행된다. 단계 IV3는 인덱스 J를 1로 초기화한다. 단계 IV4는 V+J와 V-J가 한계밖에 있는 지를 결정한다. 그러할 경우, 이는 어떤 추가 검색도 가능하지 않으며 어떤 자유 값 슬롯도 발견되지 않는 것을 의미하는 것으로서, 단계 IV5가 실행되어, VALS2, DISP, 그리고 DELS의 열 C에서 한 개 이상의 추가 슬롯에 대해 추가 공간을 할당한다. 단계 IV6는 V+J가 한계 내에 있는 지를 시험하고, 행 V+J의 값이 비삭제 사례를 가지는 지를 top_undel(R', c)를 통해 시험한다. 이때 R'은 값 V + J의 사례의 INST 행번호이다. DISP의 열 C가 존재할 경우, R' = DISP[V+J, C]가 이러한 사례이다. DISP가 열 C를 가지지 않을 경우, R' = V+J가 이러한 사례이다. V+J가 한계 내에 있고 V+J가 어떤 비삭제 사례도 가지지 않을 경우, 단계 IV7으로 시작하는 가지(branch)가 실행된다. 그렇지 않을 경우 단계 IV10이 실행된다.
단계 IV7에서 시작하는 가지는 한 개의 루프로서, 상기 루프는 VALS2의 행 V에서 V+J-1의 값을 다음 높은 행으로 이동시키고, VALS2의 행 V에서의 비사용행을 열게한다. 단계 IV7은 값 V+J의 삭제 사례를 값 V+J-1에 더한다. 가령, DELS가 열 C를 가질 경우, DELS[V+J-1, C]가 DELS[V+J-1, C] + DELS{V+J, C]로 설정된다. 단계 IV8은 VALS2(그리고 DELS, DISP)의 행 V+J-1에서의 값을 VALS2, DELS, DISP의 행 V+J로 각각 이동시키고, J를 감소시킨다(즉 VALS2[V+J, C] = VALS2[V+J-1, C], DELS[V+J, C] = DELS[V+J-1, C], DISP[V+J, C] = DISP[V+J-1, C]이다). 단계 IV9은 J=0일때까지 단계 IV8을 반복한다. 그 다음에, 단계 IV15는 VALS2의 행 V의 새로운값을 삽입하고, DELS와 DISP를 갱신하여, 새로운 값이 어떤 사례도 가지지 않음을 표시한다. 즉, VALS2[V, C] = 새로운 값, DELS[V, C] = 0, 그리고 DISP[V, C] = DISP[V+1, C]이다. 처리과정이 이때 완료된다.
단계 IV10은 V-J가 한계 내에 있는 지를 시험하고, 행 V-J의 값이 비삭제 사례를 가지는 지를 시험한다. 비삭제 사례가 존재할 경우, 단계 IV11이 실행되어, J를 증가시키고, 단계 IV4로 루프를 되돌린다. V-J가 한계 내에 있고 값 V-J가 어떤 비삭제 사례도 가지지 않을 경우, 단계 IV12가 실행되어, 다음의 루프를 시작한다. 즉, 상기 루프는 VALS2의 행 V-J+1에서 V의 값을 다음 낮은 행으로 이동시켜서, VALS2의 행 V의 비사용행을 연다. 단계 IV12는 값 V-J의 삭제 사례를 값 V-J-1에 더한다. 예를 들어, DELS가 열 C를 가질 경우 DELS[V-J-1, C]가 DELS[V-J-1, C] + DELS[V-J, C]로 설정된다. 단계 IV13은 VALS2(그리고 존재할 경우 DELS, DISP)의 행 V-J+1에 대한 값을 VALS2, DELS, DISP의 행 V-J로 각각 이동시킨다. 즉,VALS[V-J, C] = VALS2[V-J+1, C], DELS[V-J, C] = DELS[V-J+1, C], DISP[V-J, C] == DISP[V-J+1, C]이고, J를 감소시킨다. 단계 IV14는 J=0일 때까지 IV13을 반복하고, J=0일 때 단계 IV15는 어떤 사례도 가지지 않는 새로운 값을 앞서 기술한 바와 같이 삽입하고, 처리과정이 종료된다.
도 17은 insert_vov(Row V, Column C, void *newvalptr)의 순서도로서, 사례표의 열 prev(C)가 V/O 스플릿일 때 VALS2의 열 C로 새로운 값을 삽입한다. 이러한 열에 대한 열 기술어 세트는 열 C의 VALS2의 가장 높게 현재 사용되는 행 번호인 값 h_val과, 사례표에서 현재 가장 높게 사용되는 행번호 h_ptr을 포함한다. VALS2와 사례표는 새로운 에트리 수용을 위해 서로의 단부에서 추가 블랭크 공간으로 할당되는 것이 선호된다. 본 발명의 한 실시예에서, 삽입된 새로운 값은 VALS2 표의 단부에 기록된다. 소트순으로 추가 VALS2 행번호를 부여하는 치환 리스트는 적절한 소트 위치에서 새로운 인덱스의 삽입에 의해 갱신된다. 치환 리스트는 소트 순서의 VALS2 열의 새로운 부분에 접근하기 위해 사용된다. VALS2 열의 값에 대한 검색은 값 리스트의 원래의 소팅된 부분을 먼저 검색하고, 일치점이 없을 경우, 새로운 값사이에서의 검색을 위해 제 2 이진 검색이 치환 리스트를 이용할 것이다.
덧붙여진 새로운 값 리스트의 불필요한 검색을 피하기 위해 다른 수단이 사용될 수 있다. 이는 아래의 3개 사항을 포함한다. 1) V/O 스플릿을 위한 사례표 값과 함께 원래의 소팅된 값 리스트는 뒷전에서 재조직되어, 덧붙여진 새로운 값 리스트를 가능한 짧게한다. 2) 새로운 값이 범위 내에 없을 때 덧붙여진 새로운 값 리스트의 불필요한 검색을 피하기 위해, 주어진 예전값과 인접 예전값 사이에 새로운 값이 덧붙여지거나 덧붙여지지 않을 때 값 리스트나 관련 변위 리스트 또는 독립형으로 구현되는 비트 플랙이 식별된다. 3) 기존 해시 함수와 연계되고 이 목적을 위해 특별히 사용되는 해시 함수를 갖춘 포인터 메카니즘은 검색할 필요가 있는 덧붙여진 새로운 값 리스트의 범위를 좁힌다.
insert_vov 루틴은 "Insert new record(새 레코드 삽입)"와 "Update existing record(기존 레코드 갱신)" 루틴에 의해 사용된다.
단계 VOV1은 열 C에 대한 열 기술어로부터, 열 C에 이미 사용된 가장 높은 VALS2 슬롯 번호 h_val과, 이미 사용된 가장 높은 사례표 행번호 h_ptr을 얻는다. 단계 VOV2에서, 빈 슬롯이 존재할 경우, h_val과 h_ptr은 VALS2와 사례표의 열 C의 제 1 가용 빈 슬롯을 가리키도록 각각 증가된다. 단계 VOV25는 h_val이 범위 내에 있는 지를 결정하고, 단계 VOV26은 VALS2, DISP, 그리고 DELS의 열 C에서 한 개 이상의 추가 슬롯에 대해 추가 공간을 할당한다. h_ptr이 범위 내에 있는 지를 단계 VOV27이 결정하고, 단계 VOV28은 INST의 열 C에서 한 개 이상의 추가 슬롯에 대해 추가 공간을 할당한다.
단계 VOV3에서, VALS2 슬롯은 새로운 값으로 채워진다. 그래서 h_val이 다시 한번 가장 높게 사용되는 슬롯번호를 표시한다. 즉, VALS2[h_val, C]이 새로운 값으로 설정된다. 단계 VOV4에서, 새로운 값의 적절한 소트 순서 위치는 새로이 덧붙여진 값 세트 내에서 발견되고, 값 h_val은 치환 리스트의 상기 위치에 삽입된다. 단계 VOV5에서, DISP와 DELS 구조가 갱신된다. DISP[h_val, C]는 h_ptr로 설정되고, DELS[h_val, C]는 1로 설정된다. 왜냐하면, h_ptr을 하나씩 증가시키는 것은한 개의 레코드에 대해 효과적으로 공간을 할당하기 때문이다. 이때 상기 레코드는 아직 "비삭제" 레코드이고, 그래서 DELS 풀의 일부이다. 마지막으로, 단계 VOV6에서, 새로운 값의 소트 위치와 같은 행 V는 루틴 호출 insert_vov()에 사용되는 ChainVO 객체로 적절한 삽입을 위해 h_val로 변경된다. 특히, chainV[prev(C)]는 새로운 값, 즉 h_val의 실제 위치를 가리켜야 한다.
도 18은 insert_c(ChainVO VO, Column C)의 순서도이다. 이 루틴은 VO에 의해 구체화되는 열 C값의 삭제 사례가 있는 지를 확인하고, 없을 경우, 한 개의 가장 가까운 값으로부터 삭제 사례를 이동시킨다. 값의 제 1 삭제 사례의 행 번호는 VO.chainO에 저장된다.
단계 IC1은 제 1 삭제 사례가 VO.chainO[prev(C)]로 기록되는 값에 대해 열 C의 VALS2 행번호로 V를 설정한다(즉, V = VO.chanV(prev(C)). 단계 IC2는 이 값이 삭제 사례를 가지는 지를 결정한다. 이 값이 삭제 사례를 가지지 않을 경우, 단계 IC3가 실행되고, 이는 어떤 값에 대해 삭제 사례가 있는 지를 결정하기 위해 삭제 사례와 함께 가장 가까운 값에 대한 반복적 검색을 실행한다. 어떤 삭제 사례도 발견되지 않을 경우, 단계 IC4는 INST의 열 C에서 한 개 이상의 추가 슬롯에 대해 추가 공간을 할당하고, 추가 슬롯이 비어있다는 것을 표시하기 위해 필요한 대로 데이터 구조를 조절한다. VALS2의 행 V에서의 값이 삭제 사례를 가질 때까지 단계 IC5는 I_move_space_uplist()나 I_move_space_downlist()의 반복 응용을 실행한다. 가치표 행번호 V가 이미 자체 삭제 사례를 가질 경우 단계 IC2 이후 직접 실행되는 단계 IC6는 가치표 행번호 V와 연관된 사례표의 열 C의 행번호로 J를 설정한다.DISP의 열 C가 존재할 경우, J = DISP[V, C]는 이러한 사례를 가진다. DISP가 어떤 열 C도 가지지 않을 경우, J = V와 같은 사례를 가진다. 단계 IC7은 제 1 삭제 사례 K를 찾아내고, K는 top_undel(C, J)에 의해 돌아오는 행번호 더하기 1에 위치한다(즉, K = top_undel(C,J)+1). 단계 IC8은 이전 열 prev(C)가 V/O 스플릿인 지를 시험한다. 그렇지 않을 경우, 단계 IC9는 VO.chainO[prev(C)]를 K로 설정한다. 그렇지 않으면, 단계 IC10은 VO.chainO[prev(C)]를 K-DISP[V', C]-X로 설정하며, 이때 DISP가 제 1 행번호 포맷일 경우 V'=V, X=0이고, DISP가 최종 행포맷일 경우 V'=V-1이고 X=1이다. 어느 경우에도 처리과정이 종료된다.
레코드 삭제
본 실시예에서 레코드의 포인터 표 셀을 식별함으로서, 그리고 DELS 열에서 삭제되는 것으로 표시함으로서 레코드 삭제가 실행된다. 이러한 자유 공간은 기존 레코드의 데이터가 변화되거나 새로운 레코드가 추가될 때 이용할 수 있다. 앞서 기술한 바와 같이 "덧붙여진" 비소팅 열에서, 덧붙여진 열의 셀 삭제 상태는 덧붙여진 셀의 삭제 상태와 동일하다.
레코드 삭제가 도 19에 도시된다. 단계 DR1에서, 삭제될 레코드(셀 [R0, C0]을 포함하는 레코드)는 ChainVO 객체 VO로 로딩된다. [R0, C0]로부터 시작하는 포인터 체인이 폐루프를 형성하지 않을 경우, 예외가 나타나며, 처리과정이 종료된다. 단계 DR2는 레코드가 삭제 셀을 가지는 지를 결정한다. 왜냐하면, 단 한 개의 비삭제 셀만이 삭제될 수 있기 때문이다. 레코드가 삭제 셀을 포함할 경우, 단계 DR3는 에러를 보고하고, 처리과정을 종료한다. 레코드의 어떤 셀도 삭제되지 않을경우, 단계 DR4가 실행되어, 현재 열 C를 열 C0로 초기화하고 현재 행 R을 R0로 초기화한다. 단계 DR5는 앞서 기술한 바와 같이 "Delete pointer cell[R, C](포인터 셀 [R, C] 삭제)"로의 호출을 통해 현재 셀 [R, C]를 삭제하고, R을 next(C)의 행번호로 설정한다. 단계 DR6는 next(C)로의 호출을 통해 C를 다음 열로 설정한다. 현 열이 시작 열과 같지 않을 경우, 단계 DR7은 단계 DR5로 루프 백되고, 그렇지 않을 경우 DR7은 처리과정을 종료시킨다.
가령, 레코드 "Five"가 앞서의 예에서 삭제될 경우, 이 레코드에 속하는 INST(그리고 가능하다면 OCCUR)의 모든 셀은 "삭제"된 것으로 표시된다. 앞서 예의 경우에, DELS 표는 다음과 같이 나타난다(레코드 "Five"가 유일하게 삭제된 것인 경우에).
삭제
Type = "Prime"과 같은 레코드 카운트는 DISP의 열 Type으로부터 6-3(행 4의 엔트리와 행 3의 엔트리의 차)으로 얻어지며, 이는 세 개의 이러한 레코드가 존재함을 표시한다. 그러나, DELETES 구조는 상기 레코드 중 하나가 삭제되어 실제 총계가 6-3-1 = 2임을 표시한다. Parity = "Odd"를 갖춘 레코드의 수도 비슷하게 얻어진다. DISP는 Parity 열의 행 2의 값 4를 도시한다. 그러므로, INST의 행 4~6은 세 레코드 모두 "Odd"와 관련된다. 또한, DELETES GOD 2의 Parity 열에는 "1"이 존재하여, Parity = "Odd"를 가지는 비삭제 레코드의 수가 3-1 = 2이다.
레코드 삽입
새로운 레코드의 삽입이 도 20에 도시된다. 단계 IR1은 새로운 레코드 필드에 대한 값을 얻고, 이를 임시 버퍼에 저장한다. ChainVO 객체 VO는 레코드 구축과 삽입에 대해 또한 할당된다. "부착" 열에 속하는 필드는 앞서 기술한 바와 같이 부착되는 열의 값에 접미사로 처리된다. 단계 IR2는 현재의 열 C를 제 1 열로 설정한다. 단계 IR3는 새로운 레코드의 열 C 값으로 구체화되는 값 V에 대해 가치표 VALS2를 검색하고, 그 값이 이미 존재하는 지와 값의 소트 위치 C를 복귀시킨다. prev(C)가 V/O 스플릿일 때, VALS2의 검색이 두부분으로 행해진다. 먼저, 원래의 소팅된 값 리스트가 검색되고, 일치점이 없을 경우, 추가 값의 덧붙여진 리스트가 치환 리스트를 통해 검색된다. 단계 IR4는 값이 이미 존재하는 지를 시험한다. 그러할 경우, 단계 IR8이 실행되고, 그렇지 않을 경우 단계 IR5가 실행된다.
단계 IR5는 열 C가 V/O 스플릿인 지를 결정한다(이 경우에 사례표의 prev(C)에 대한 열 기술어는 V/O 스플리팅을 표시할 것이다). V/O 스플릿일 경우, 단계 IR7이 실행되어, insert_vov(V, C, *new value)로의 호출을 통해 새로운 값을 VALS2, DISP, DELS로 삽입한다. V/O 스플릿이 아닐 경우, 단계 IR6가 실행되어, insert_v(V, C, *new value)로의 호출을 통해 새 값을 VALS2, DISP, DELS로 삽입한다.
어느 경우에도, 단계 IR8은 VO 객체에 ChainV를 구축하고, VO.chainV[prev(C)]로 설정하며, 이때 V는 단계 IR3에서 발견되는 소트 위치(열prev(C)가 V/O 스플릿이 아닐 경우)이거나, "insert_vov()"에서 발견되는 h-val(사례표의 열 prev(C)가 V/O 스플릿일 경우)이다.
단계 IR9는 VALS2의 행 V의 값이 사례를 삭제 사례를 가지는 지를 (존재할 경우 DELS 표 열을 확인함으로서, 그렇지 않을 경우 툼스톤 카운팅에 의해) 결정한다. 삭제 사례가 없을 경우, 단계 IR10이 실행되어, insert_c(VO, C)로의 호출을 통해 값에 대한 삭제 사례를 제공한다.
삭제 사례가 이미 존재할 경우, 단계 IR11과 함께 시작하는 가지(branch)가 실행된다. 단계 IR11에서, 제 1 삭제 사례의 사례표 행번호 K는 top_undel(C, J)+1로의 호출을 통해 발견되고, j는 행 번호를 표시하며, 값 번호 V의 사례의, 사례표의 열 C의, 행번호를 나타낸다. 특히, DISP의 열 C가 존재할 경우, J=DISP[V, C]와같은 사례를 가진다. DISP의 열 C가 존재하지 않을 경우, J=V와 같은 사례를 가진다. 단계 IR12는 사례표의 열 prev(C)가 V/O 스플릿인 지를 결정한다. 사례표의 열 prev(C)가 V/O 스플릿인 경우, 단계 IR13은 VO.chainO[prev(C)]를 적절한 어커런스 번호로 설정한다. 즉, K-DISP[V', C]-X로 설정한다. 이때, DISP가 제 1 행번호 포맷일 경우, V'=V이고 X=0이며, DISP가 최종 행번호 포맷일 경우 V'=V-1이고 X=1이다. prev(C)가 V/O 스플릿이 아닐 경우, 단계 IR14는 삭제 사례의 행번호 K를 VO.chainO[prev(C)]로 로딩한다.
어느 경우에도, 단계 IR15는 VALS2의 행 V에 대한 삭제 카운트로부터 삭제 사례를 뺀다. 단계 IR16은 다음 열로 이동하고, D를 next(C)로 설정한다. 단계 IR17은 모든 열이 처리되었는 지를 결정하며, 미처리시 단계 IR3로 되돌아간다. 그렇지 않을 경우, 단계 IR18은 put_chain(0, VO, fcount)으로의 호출을 통해 전체 객체 VO를 사례표로 기록하며, 이때 fcount는 레코드의 필드의 수이며, 처리과정이 완료된다.
레코드 갱신
기존 레코드를 갱신하는 것이 도 21에 도시된다. 단계 E1에서, 사용자는 갱신될 레코드를 선택하고, 단계 E2에서 레코드는 ChainVO 객체 VO로, 그리고 임시 버퍼로 로딩된다. 레코드의 모든 셀은 VO를 로딩하기 위한 시작점으로 선택될 수 있다. 단계 E3에서, 사용자는 임시 버퍼의 일부 또는 모든 필드 값을 부가적으로 변화시킨다. 단계 E4는 제 1 열, 열 0에서 시작하기 위해 "현재 열" C를 초기화한다. 단계 E5는 사용자가 필드/열 C의 값을 변화시켰는 지를 결정한다. 사용자가 값을 변화시키지 않았을 경우, 이 여에서 어떤 처리도 필요하지 않으며, 단계 E20이 실행되어, C를 next(C)로 설정함으로서 C를 다음 열로 진행시킨다.
열 C 값이 변화하였을 경우, 단계 E6가 실행되고, 이는 앞서 기술한 바와 같이 "Delete pointer cell [R, C](포인터 셀 [R, C] 삭제)"로의 호출을 통해 레코드의 옛값의 비삭제 사례를 먼저 삭제한다. 단계 E7은 새 레코드의 열 C 값으로 구체화된 값에 대해 가치표를 검색하고, 일치하는 지 아닌지 값의 소트 위치를 되돌린다. prev(C)가 V/O 스플릿일 때, 가치표의 검색이 두 부분으로 실행된다. 먼저, 원래의 소팅된 값 리스트가 검색되고, 그리고 일치점이 발견되지 않을 경우 추가 값의 덧붙여진 리스트가 치환 리스트를 통해 검색된다. 단계 E8은 새로운 값이 VALS2에 이미 존재하고 있었는 지를 시험한다. 그러하였다면, 단계 E12에서 시작하는 가지(branch)가 실행된다. 그렇지 않을 경우 단계 E9에서 시작되는 가지가 실행된다.
단계 E9는 열 prev(C)가 V/O 스플릿인 지를 결정한다. 만약 그럴 경우, 단계 E11은 insert_vov(V, C, *new value)로의 호출을 통해 새값을 VALS2, DISP, DELS로 삽입한다. 그렇지 않을 경우, 단계 E10은 insert_v(V, C, *new value)로의 호출을 통해 새값을 삽입한다. 단계 E12는 한번에 한요소씩 새 레코드의 chainV를 구축하고, VO.chainV[prev(C)]=V로 설정한다. 이때 열 prev(C)가 V/O 스플릿이 아니면 단계 E7에서 발견되는 소트 위치이고, 또는 열 prev(C)가 V/O 스플릿일 경우 "insert_vov()"에서 발견되는 h_val이다. 단계 E13은 행 V의 값이 DELS표를 들여봄으로서 삭제 사례를 가진 지 결정한다. 또는, DELS가 어떤 상응하는 열도 가지지 않을 경우 카운팅 툼스톤에 의해 결정한다. 값이 삭제 사례를 가지지 않을 경우, 단계 E14에서 시작되는 가지가 실행된다. 단계 E14는 insert_c(VO, C)로의 호출을 통해 값에 대한 삭제 사례를 제공하고, VO.chainO[prev(C)]를 갱신한다. 그렇지 않을 경우, 단계 E15에서 시작한 가지가 실행된다. 단계 E15는 값 번호 V의 제 1 삭제 사례의 열 C의 행번호 K를 찾는다. 즉, K = top_undel(C, J)+1이고, 이때 J는 값 번호 V의 사례의, 사례표 열 C의, 행번호를 나타낸다. 특히, DISP의 열 C가 존재할 경우, J=DISP[V, C]와 같은 사례를 가지며, 그렇지 않을 경우 J=V와 같은 사례를 가진다. 단계 E16은 열 prev(C)가 V/O 스플릿인 지를 시험한다. 열 prev(C)가 V/O 스플릿일 경우, 단계 E18이 실행되어, K를 어커런스 번호로 설정한다. 즉, K = K - DISP[V', C]-X이다. 이때 DISP가 제 1 행번호 포맷일 경우 V'=V-1이고 X=1이며, DISP가 최종 행포맷일 경우, V'=V-1이고 X=1이다. 어느 경우에도, 단계 E17이실행되어, 적절한 데이터를 VO.chainO[prev(C)]=K이다. 단계 E19는 삭제 사례를 삭제 카운트로부터 제거한다. 단계 E20은 C를 다음 열로 변화시킨다. 즉, C=next(C). 단계 E21은 모든 열이 처리되었는 지를 시험한다. 즉 C=0인 지를 시험한다. C가 시작 열로 복귀하지 않았을 경우, 실행 루프는 단계 E5로 돌아가고, 새로운 C값으로 반복한다. 그렇지 않을 경우 단계 E22는 put_chain(O, VO, fcount)로의 호출을 통해 전체 객체 VO를 사례표로 기록한다. 그리고 처리과정이 종료된다.
질의(Queries)
본 발명의 데이터베이스 시스템의 열이 독립적으로 소팅될 수 있기 때문에, 질의가 매우 신속하게 실행될 수 있다. 다양하면서도 효율적이고 표준적인 검색이나 룩업 알고리즘이 사용될 수 있다. 가령, 간단한 이진 검색이 최악의 경우 C log2n의 시간 성능을 보이고, 평균 성능은 C log2(n/2)이다. 다른 검색 기술이 사용될 수도 있고, 그 중 최적의 것이 데이터의 특성과 특정 상황에 따라 좌우된다.
이진 중간점이나 보간 검색의 상부에서 병렬화가 구현된다. 검색 알고리즘의 이러한 병렬화 기술은 당 분야에 잘 알려져 있다. n개의 컨테이너의 각각의 열로부터 소트 데이터 요소의 행을 그룹형성함으로서 추가적인 병렬화가 얻어질 수 있고, 이때 n은 프로세서의 수나 그 정수배와 같다. 시스템은 이 컨테이너의 상한과 하한점을 검색하여, 그 중에서 데이터 소팅의 필요성을 제거한다. n이 프로세서의 수와 같을 때, 전체 컨테이너는 단일 프로세서 환경에서 단일 행이 작동할 때와 같은 효율로 검색되고 조작되며, 이 컨테이너의 변위는 미미해진다.
한 예로서, 주어진 필드에 대해 선택값을 가지는 모든 레코드에 대한 질의의 순서도가 도 22에 도시된다. 단계 221에서, 특정 필드에 대한 가치표가 선택값 M과 일치하는 값에 대해 검색된다. 또한, 열이 소팅된 순서에 있기 때문에, 이진 검색이 사용될 수 있다. 단계 222는 일치값이 발견되었는 지를 시험한다. 일치값이 발견되지 않았을 경우 이는 단계 223에서 보고된다.
예를 들어 Value_Table(r, c)에서 일치값이 발견될 경우, 단계 224와 225가 실행되어, 일치값으로 가치표의 행을 결정하고(단계 224), 이 행과 연관된 레코드를 재구축한다(단계 225). 비압축 열의 경우, 일치값을 가지는 셀과 연관된 레코드는 앞서와같이 재구축된다. 인접 행(r+1, r+2, ..., r-1, r-2, ...)이 일치값에 대해 확인되며, 추가 일치값이 발견되면 상기 셀과 연관된 레코드가 또한 재구축된다. 인접 행의 검색은 비일치값이 있을 때 어느 방향으로도 정지할 수 있다.
압축 열의 경우, 일치값을 향하는 사례표 행번호의 범위는 변위표로부터 얻어진다. 또한, 일치값이 Value_Table(r, c)에서 발견될 때, 제 1 행번호 포맷에 있을 경우 Displacement_Table(r, c)의 내용은 범위의 시작이며, Displacement_Table(r+1, c)-1이 범위의 마지막에 있다. 단계 225는 앞서 기술한 바와 같이 사례표에서 식별된 셀을 포함하는 레코드를 재구축한다.
(FIELD_X=M) .AND. (FIELD_Y=N), (FIELD_X=M) .OR. (FIELD_Y=N) 등과 같이 보다 복잡한 질의도 여기서 사용되는 데이터 구조를 이용하여 효율적으로 구현된다. 예를 들어 AND 질의는 FIELD_X = M과 일치하는 모든 레코드를 찾음으로서, 그리고 레코드 재구축 중에 제 2 조건(가령 FIELD_Y = N)에 대한 시험을 함으로서 구현될 수 있다.
본 발명의 주목할만한 장점은 AND 조건 질의가 더 적은 단계로 실행될 수 있다는 점이다. 왜냐하면, 압축 열의 경우에, 조건 각각과 부합하는 행의 수가 변위표로부터 이미 공지되어 있기 때문이다. 적용될 첫 번째 조건은 더 적은 일치점을 가지는 것이 되게 선택될 수 있다. 이와는 대조적으로, 기존 데이터베이스 엔진은 각각의 열에서 발견되는 카디널리티의 근사 아이디어만 가지기 위해 주기적으로 "분석" 사이클을 실행하여야 한다. 앞서 언급한 본 발명의 실시예로, 카디널리티는 각각의 값에 대해 시간에 선행한다고 알려져 있다. 제 1 조건에 일치하는 모든 레코드를 찾고 제 1 조건에 의해 일치되지 않는 제 2 조건에 일치하는 모든 레코드를 찾음으로서 OR 질의도 구현될 수 있다. 임의적으로 복잡한 표현이 자주 있는 질의라고 알려질 경우, 마치 정상적인 필드인 양 상기 표현을 위한 소팅된 열이 가치표, 변위표, 그리고 사례표에 포함될 수 있다. 그리고 마찬가지로 빠른 이진 검색 방법을 적용할 수 있다.
앞서 기술한 구조에 상응하는 데이터 구조가 질의 결과와 함께 초기화될 수 있어서, 서브-질의를 용이하게 한다.
SQL 함수
많은 SQL 함수가 미미한 연산 노력만으로 본 발명에 따르는 데이터 구조에 의해 지원될 수 있다. 예를 들어, 주어진 속성에 대해 특정한 값을 가지는 레코드 번호를 되돌리는 COUNT 함수는 변위표의 인접값과 상기 값에 대한 엔트리에 접근함으로서 일정한 시간 내에서 가용하다. 주어진 속성에 대해 최대값과 최소값을 가지는 레코드를 찾아내는 MAX와 MIN 함수는 주어진 열에서 상부 셀과 하부 셀에 각각 접근함으로서 구현될 수 있다. 주어진 속성에 대해 중간값의 레코드를 찾아내는 MEDIAN 함수는 레코드 카운트 반에 가장 가까운 변위표 위치를 검색하여 관련값을 되돌림으로서 구현가능하다. 어커런스의 최대 번호를 가지는 값을 찾아내는 MODE 함수는 인접 변위표 값에서 최대차에 대한 선형 검색에 의해, 그리고 상응하는 값을 이용하여 구현될 수 있다. 이 함수는 효율적이다. 왜냐하면, 변위표가 열 내의 값 카운트의 히스토그램에 직접 관련되기 때문이다.
INSERT, DELETE, 그리고 UPDATE 작동도 앞서 기술된 이 작동들의 실시예에서 지원된다.
본 발명은 다른 종류의 SQL 질의를 또한 지원한다. 가령, "PLANT"와 "EMPLOYEE"의 두 표를 생각해보자. 그 여러 속성이 아래에 기재된다.
PLANT:
PLANT_NAME PLANT_NUMBER MANGER_ID 등....
EMPLOYEE:
EMPLOYEE_NAME EMPLOYEE_ID JOB ADDRESS 등...
각각의 설비(plant)의 각각의 담당자명(manager name)을 찾아내기 위한 질의는 다음과 같이 SQL로 표현된다.
SELECT EMPLOYEE_NAME
FROM PLANT, EMPLOYEE
WHERE MANAGER_ID = EMPLOYEE_ID
두 표에 대한 표현이 일치하지 않을 경우, 즉 각각이 다른 값을 가질 경우 (예를 들어 변위표와 어커런스표), PLANT 데이터베이스의 MANAGER_ID 열과 EMPLOYEE 데이터베이스의 EMPLOYEE_ID 열 값 사이의 동등성을 시험하기 위해 간단한 중첩 루프(nested loop)가 사용될 수 있고, 각각의 일치점에 대해, EMPLOYEE 데이터베이스의 상응하는 EMPLOYEE_NAME을 찾을 수 있다. EMPLOYEE와 PLANT 데이터베이스의 사례, 변위, 그리고 어커런스표가 단일 MANAGER_ID/EMPLOYEE_ID 열을 갖는 같은 가치표를 가리킬 경우, EMPLOYEE 및 PLANT에 대한 특정 열에 대한 엔트리를 가지는 각각의 변위표에 대해, EMPLOYEE 표의 상응하는 EMPLOYEE_NAME을 찾을 수 있다.
결합(Joins)
결합 작용은 단일 결합 표를 생성하기 위해 두 개 이상의 표를 조합한다. 예를 들어, 두 표는 각각 EMPLOYEES에 관한 정보를 가질 수 있고, 결합은 각각의 EMPLOYEE에 관한 두 표의 모든 정보를 결정하도록 실행될 수 있다.
결합을 실행하기 위해, 표 중 하나에서 주요 키나 후보 키를 통해 표가 링크된다. 주요키나 후보키는 고유한 속성이거나 고유한 속성 조합이다. 이 동일한 속성, 또는 속성 조합의 잉여 표현(외부 키(foreign key)로 불림)은 한 개 이상의 다른 표에 포함된다. 외부 키는 주요키나 후보키와 같은 카디널리티를 가질 필요가 없고 고유할 필요도 없다.
결합 작용은 두 개 이상의 표의 확장 카테시안 프로덕트의 서브셋으로 정의된다. 두 레코드 기반의 표의 카테시안 프로덕트는 제 1 표의 각각의 행을 제 2 표의 모든 행과 조합한다. 가령, 제 1 표가 M 행과 N 열을 가지고 제 2 표가 P행과 Q열을 가질 경우, 카테시안 프로덕션은 MxP 행과 N+Q 열을 가질 것이다. 확장 카테시안 프로덕트는 널 값을 한 개 이상의 원래의 표로 삽입함으로서 생성되는 카테시안 프로덕트이다.
멤버십 함수는 결합 응답 세트에 있는 두 개 이상의 표의 확장 카테시안 프로덕트의 서브세트를 형성한다. 멤버십 함수는 비교 조건과 결합 판정을 포함하며, 비교 조건과 결합 판정은 특정 결합 형태를 함께 결정하며, 이는 열 실렉터와 함께 결합에 의해 돌아오는 응답 세트를 결정한다.
비교 조건은 논리 오퍼레이터를 구체화한다. 예를 들어, SQL SELECT 문장의 "Where"절에서 속성 명칭간에 나타나는 것을 들 수 있다. 가장 흔한 비교 조건은 동등성이고, 상응하는 결합은 동등-결합(equi-join)으로 불린다. 이상이나 이하와 같은 다른 조건도 또한 가능하다.
결합 판정은 비교 조건, 특정 결합 속성, 그리고 열 실렉터가 주어졌을 때 결합의 응답 세트를 구체화한다. 편의를 돕기 위해, 각각의 표의 단일 속성의 동등 결합이 가정되고, 이는 아래에 기술된다. 결합 판정은 내부 결합(결합 응답 세트는 두 표에 모두 나타나는 행으로 이루어짐), 외부 결합(좌측 외부 결합, 우측 외부 결합, 그리고 완전한 외부 결합으로 추가 분할됨. 결합 응답 세트는 모든 행으로 이루어짐), 유니언 결합(결합 응답 세트는 두 표 중 하나에만 나타나는 행으로 이루어짐. 나머지 값은 널로 채워진 행임), 그리고 크로스 결합(결합 응답 세트는 두 표의 완전 비확장 카테시안 프로덕트로 이루어짐)을 포함한다.
열 실렉터는 어느 열이 결합의 응답 세트에서 복귀되는 지를 구체화한다.
기존 데이터베이스 시스템에서, 결합은 기억 공간, 처리 시간 면에서 매우 소요가 크다. 왜냐하면, 미리 인덱싱된 데이터가 소팅 상태를 유지하여야 하거나, 결합 중인 각각의 속성 전체에 대해 다중 패스를 포함한 시간소요가 큰 검색을 필요로하기 때문이다. 후자의 경우에, 레코드 카운트의 n-폴드 프로덕트와 같으면서 같은 카디널리티를 가지는 표에 대해, 두 열의 결합을 시행하는 데 걸리는 시간은 행의 수의 제곱에 비례하고, 삼열 결합은 세제곱에 비례한다. 멤버십 함수는 변위표, 여러 선택적인 변위표, 비트맵, 또는 가치 논리 함수를 통해 효율적으로 구현될 수 있다.
대안의 변위표
유니언 열의 일부 성질은 변위표 열에 여러 수정을 이끈다. 이는 결합 실행에 특히 유용하다. "완전한" 변위 구조는 (압축) 가치표의 상응하는 열의 행과 1:1 대응 관계인 행을, 각각의 열에 대해, 가진다. 한 실시예에서 완전한 변위표 셀의 내용은 가치표의 상응하는 값을 소유하는 모든 사례의 사례표의 제 1 사례의 행번호이다. 가치표의 값이 어떤 사례도 가지지 않을 경우, 이에 상응하면서 다음의 셀의 변위표의 동일한 엔트리는 이를 표시할 것이다. 결과적으로, 사례와 함께보다는 사례없이 더 많은 값을 가질 경우(이후 "희소" 경우(sparse case)로 부름), 변위 구조의 다른 값보다 더 많이 반복되어, 변위표에 잉여(redundancy)를 생성한다. 한 실시예에서 완전한 변위표의 경우에, 엔트리는 소팅된 순서로 놓여, 사례표의 행번호 J에 대해, 가치표의 상응하는 행번호 V는 DISP[V, I] <= J < DISP[V+1, I](제 1행번호 포맷의 변위열에 대해), 또는 DISP[V-1, I] < J <= DISP[V, I](최종 행번호 포맷에 대해)에 해당하는 값이다.
"희소" 경우에, 변위표 열에 대한 선택적 포맷(이하 '"압축" 변위 포맷'으로 명명함)이 잉여를 제거하기 위해 사용될 수 있다. 이 포맷에서, 변위표 엔트리는 두 부분을 가진다.
1) DV, 사례를 가지는 값의 가치표의 행번호, 그리고
2) DD, 값의 실제 사례의 사례표의 시작 행번호
행번호 엔트리 DD는 소팅된 순이다. DV는 아래의 가치표가 소팅된 순일 때 자연적으로 소팅 상태에 놓인다.
사례표의 열 I의 행번호 J에 대해, 가치표의 상응하는 행번호 V는 다음과 같다.
1) DD[K] <= J < DD[K+1](제 1 행번호 포맷의 경우)이거나, DD[K-1] < J <= DD[K](최종 행번호 포맷의 경우)이도록, 이진 검색 등을 통해 K를 찾는다.
2) V = VD[K].
압축 변위열은 적절한 때 기억 공간을 절약하면서 이진 검색 속도를 향상시킨다. 그러나, 주어진 값의 사례가 존재할 경우의 시험은 완전한 변위 열을 이용하여 일정-시간 룩업이지만, 압축 변위 열을 이용한 로그 시간 이진 검색이다.
사례가 없는 값이 거의 드문 경우에, 변위표의 추가 선택적인 포맷(조밀 포맷(dense format))은 모든 잃어버린 값을 신속하게 찾게 한다. 이 선택적 포맷에서, 변위표 엔트리는 어떤 사례도 가지지 않는 값을 구별하기 위한 비트플랙을 가지고, 어떤 사례도 가지지 않는 값의 경우에, 엔트리 내용은 사례없이 다음 값으로의 포인터이다(잃어버린 값의 링크 리스트가 결여된, 원래 정의된 변위 리스트는 "풀 포맷(full format)"으로 불린다).
대안의 변위표 예
희소 및 조밀 변위열은 기존의 레코드형 표 Jmod와 SPJmod에 대해 아래에 도시된다(C. J. Date, Introduction to Database Systems, 6th Edition, inside front cover(1995)).
Jmod:
SPJmod:
Jmod와 SPJmod에 대한 가치표, 변위표, 사례표, 그리고 어커런스표는 다음과 같다.
Jmod:
VALS:
사례/어커런스표:
가령 표 Jmod와 SPJmod의 J# 속성에 대한 신속한 결합 질의를 촉진시키기 위해, J#에 대한 유니언 열이 생성되고, 유니언 열에 상응하는 희소 및 조밀 변위표 열이 Jmod와 SPJmod에 대해 변위표로 병합된다. Jmod와 SPJmod에 대한 J# 유니언 열은 다음과 같다.
Jmod와 SPJmod에 대한 J# 유니언:
Jmod와 SPJmod 각각에 대한 변위 열의 적절한 종류는 유니언 열의 카디널리티를 Jmod와 SPJmod표의 상응하는 열의 카디널리티에 비교함으로서 결정된다. 앞서의 J# 유니언 열의 카디널리티는 7이다. Jmod 표의 J# 열에 대한 카디널리티는 5이다. 유니언 열의 거의 모든 갓이 Jmod 표에 나타나기 때문에, 조밀 변위열이 상기 속성에 대해 구축된다. SPJmod 표의 경우에, J# 열의 카디널리티 2는 유니언 열의 카디널리티 7에 비교된다. J# 값이 이 경우에 "희소"이기 때문에, SPJmod 열에 대한 희소 변위열이 구축된다. J# 유니언 열, Jmod에 대한 변위 열, 그리고 SPJmod에대한 변위열이 아래에 도시되고, 설명을 위해 한표에 모두 나타난다.
유니언 및 변위 열
Jmod에 대한 조밀 변위열에서, 애스터리스크는 아래의 두 사항을 나타내는 비트플랙이다. 1) Jmod는 상응하는 값을 갖춘 레코드를 가지지 않는다. 2) 이어지는 값은 Jmod에 나타나지 않는 유니언 열의 다음 값에 대한 포인터이다. 그러므로 Jmod에 나타나지 않는 유니언 열의 상기 값들은 원형 링크 리스트에 유지된다.
SPJmod에 대한 희소 변위열에서, 엔트리는 포맷 DV/DD로 제시되고, DV는 SPJmod 표의 사례를 가지는 유니언 열의 값에 대한 포인터이고, DD 포인터는 주어진 값의 사례의 SPJmod 사례/어커런스 표의 시작 행번호이다.
비트맵을 이용한 결합 모델링
Jmod와 SPJmod 표에 대한 J# 유니언 열은 비트맵으로 보완될 수 있다. 비트맵은 유니언 열의 주어진 값이 Jmod나 SPJmod 표 에 포함되는 지를 표시한다. 이러한 구조를 생성하는 과정이 아래에 도시된다. 이 예의 비트맵은 7개의 엔트리, 0000 - 0006으로 이루어지고, 그 각자는 유니언 열에 존재하는 J#의 값이다. 각각의 엔트리는 2비트와 연관된다. 제 1 비트는, J#의 상응하는 값이 Jmod 표에 존재할 때, 1로 설정된다. 그렇지 않을 경우 0으로 설정된다. 마찬가지로, J# 값이SPJmod 표에 존재할 경우 제 2 엔트리는 1로 설정되고, 그렇지 않을 경우 0으로 설정된다.
Jmod 표가 조밀 변위열로 나타나기 때문에, 그 비트 엔트리는 '1'로 초기화된다. 왜냐하면, 유니언 열의 거의 모든 값이 Jmod에 포함되기 때문이다. 마찬가지로, SPJmod가 희소 변위열로 나타나기 때문에, 그 비트 엔트리는 '0'으로 초기화된다. 왜냐하면, 유니언 열의 값이 SPJmod에 거의 존재하지 않기 때문이다.그러므로 초기 비트맵은 다음과 같다.
초기 비트맵:
다음 단계는 최종 비트맵을 구축하는 것이다. Jmod 열에 대해, J# 유니언 열에 존재하지 않는 값은 그 조밀 변위열의 비존재 값의 링에 포함된다. 링은 트래버스되고, 비트맵의 상응하는 엔트리는 '0'으로 설정된다.
SPJmod 열에 대한 엔트리를 수정하기 위해, DV 포인터는 SPJmod 표의 엔트리를 가지는 유니언 열의 값을 가리키고, 비트맵의 상응하는 엔트리는 '1'로 설정된다. 최종 비트맵은 다음과 같다.
최종 비트맵:
N-값의 논리 함수는 비트맵에 대한 함수와 결합 작용을 모델링할 수 있다. 이 기술은 기존 표 S, P, J를 참고로 아래의 예에 의해 설명된다(C. J. Date, Introduction to Database Systems, 6th Edition, inside front cover(1995)).
본 예에서, 유니언 결합은 S, P, J 표의 "CITY" 열에서 실행된다. 이는 "CITY" 값이 S, P, J 표 중 하나에서 정확하게 나타나는 레코드만 찾은 것을 수반한다.
제 1 단계는 S, P, J의 CITY 열에 대한 유니언 열을 구축하는 것이다(유니언 열이 아직 존재하지 않을 경우).
제 2 단계는 유니언 열 각각의 값을 S, P, J 표에 각각 상응하는 3비트와 연관시키는 것이다. CITY 값이 적절한 표에 존재할 경우 한 개의 비트가 'Y'(즉, '1')로 설정되고, 그렇지 않을 경우 'N'(즉 '0')으로 설정된다. 이러한 표가 아래에 도시된다.
유니언 열 및 비트맵:
CITY 속성의 특정한 값에 대해, CITY의 상기 값이 S, P, J 표 중 하나에 정확히 나타날 경우에만, 즉 상기 유니언 열에 대한 비트맵의 비트 중 하나가 정확하게 'Y'와 같을 경우에만, 상기 값을 가지는 레코드가 유니언 결합에 나타난다. 이러한 행을 찾는 함수의 한가지 도식적 구현이 아래에 기술되는 함수 f(temp, column)이다. 이 함수의 영역은 두 개의 변수 'temp'와 'column'으로 이루어진다. 변수 'temp'는 'Y', 'N', 또는 'D' 중 하나일 수 있고, 변수 'column'은 'Y'나 'N' 중 하나이다. 마지막으로, 함수 f의 복귀 값은 세 개의 값 'Y', 'N', 또는 'D'로 이루어진다.
유니언 열의 CITY의 각각의 값에 대해, 함수 F는 세 개의 열 각각의 비트값에 반복적으로 적용된다. 변수 'column'은 현 열의 비트값으로 설정되고, 'temp'는 함수 f의 이전 적용의 결과로 할당된다. 제 1 열 S에 대해, 'temp'는 'N'으로 초기화된다. 결과가 'Y'일 경우, 값은 유니언 결합에 나타난다. 결과가 'N'이나 'D'일 경우, 값이 나타나지 않는다.
함수 f는 다음과 같이 정의된다.
"Athens"에 상응하는 유니언 표의 제 1 행에 이 함수를 적용하면, f(f(f('N', 'Y'), 'N'), 'Y')이고, 이는 'D'와 같다. 그러므로, 행에 두 번 나타나는 "Athens"가 유니언 결합에는 나타나지 않는다.
'Oslo'에 대한 행에 함수 f를 가하면, f(f(f('N', 'N'), 'N'), 'Y')가 된다. 이는 'Y'와 같다. 그러므로 행에 한번 나타나는 'Oslo'는 유니언 결합에 나타난다.
도 23은 결합 작용을 도시하는 순서도이다. 단계 231에서, 사용자는 결합을 위해 표를 준비한다. 단계 232에서, 본 발명의 데이터 구조에 미리 나타나지 않는 표가 이러한 구조로 변환된다. 단계 233에서, 확장 카테시안 프로덕트의 서브세트로 결합을 형성하는 논리 표현의 일부인 값으로 열이 나타난다. 단계 234는 이 열이 선택되었는 지를 시험한다. 어떤 열도 선택되지 않았을 경우, 결합은 완전한 비확장 카테시안 프로덕트에 상응하고, 레코드 재구축은 조건적 제약없이 단계 238을 통해 진행하다. 즉, 각각의 표로부터의 모든 레코드가 모든 다른 표의 모든 레코드로 조합된다.
그렇지 않을 경우 단계 235가 실행되어, 한 개 이상의 열이 선택되었는 지를 시험한다. 그러하다면, 상기 열은 조합 열로 조합된다.
적절한 가치표 유니언 열이 존재하지 않을 경우, 단계 237이 관련 변위표 열과 함께 이를 생성한다. 단계 238은 풀, 조밀/희소 변위 리스트, 비트맵, 다가치 논리 함수, 또는 이들의 조합을 이용하여 결합 출력을 생성하는 루틴의 범위를 수정하여, 적절한 비교 조건 및 결합 판정을 이용함으로서 결합 종류를 일치시킨다.
가령, 내부 결합의 응답 세트는, 관련된 표가 비-널 레코드 범위를 가지는 변위표 행에 상응하는 사례표 셀에 제한된다. 이는 예를 들어 변위표 엔트리로부터 결정될 수 있다. 이러한 변위표 행 각각으로부터 도출되는 상응하는 사례 셀 엔트리는 모든 일치 레코드에 대한 각각의 표에 대해 사례표 셀 범위를 제공한다. 응답 세트는 상기 레코드에만 제한되어, 적절한 내부 결합 응답 세트를 생성한다. 다른 종류의 결합에 대한 응답 세트가 예를 들어 변위표로부터 유사하게 결정될 수 있다.
앞서 언급한 질의 방법과의 조합은 SQL의 "SELECT ... FROM ... WHERE ...."와같은 완전한 범위의 문장의 구현을 가능하게 한다.

Claims (32)

  1. 컴퓨터에 의해 구현되는 데이터베이스로서,
    상기 데이터베이스는 한 개 이상 세트의 데이터 값 요소와 한 개 이상의 제1, 2 세트의 사례 요소를 포함하며,
    상기 각각의 데이터 값 요소는 한 개 이상 세트의 데이터 값 요소와 데이터 값 중 하나에 위치를 가지고,
    상기 각각의 사례 요소는 각 세트의 사례 요소와 사례 값에 위치를 가지며, 그리고 각 세트의 사례 요소는 속성에 상응하고,
    제 1 세트의 사례 요소에서 제 1 사례 요소에 대해,
    한 개 이상 세트의 데이터 값 요소의 제 1 관련 데이터 값 요소는 제 1 사례 요소의 위치로부터 도출되고,
    제 2 세트의 사례 요소의 한 개의 제 2 사례 요소는 제 1 사례 요소의 사례 값으로부터 도출되며, 그리고 제 2 세트의 사례 요소의 한 개의 제 2 사례 요소의 위치는 제 1 세트의 사례 요소에서 제 1 사례 요소의 위치와는 다르고,
    한 개 이상 세트의 데이터 값 요소의 제 2 관련 데이터 값 요소는 제 2 세트의 사례 요소의 한 개 이상의 다른 요소와 제 2 사례 요소와 관련되며,
    제 1 사례 요소는 제 1 사례 요소값에 독립적으로 제 2 사례 요소로부터 도출될 수 있는 것을 특징으로 하는 데이터베이스.
  2. 제 1 항에 있어서, 제 2 사례 요소는 다음 요소인 것을 특징으로 하는 데이터베이스.
  3. 제 1 항에 있어서, 한 개 이상 세트의 데이터 값 요소 중 하나가 소팅되는 것을 특징으로 하는 데이터베이스.
  4. 제 1 항에 있어서, 한 개 이상 세트의 데이터 값 요소 중 하나가 압축되어, 그 세트가 고유 데이터 값을 포함하는 것을 특징으로 하는 데이터베이스.
  5. 제 1 항에 있어서, 한 개 이상 세트의 데이터 값이 압축되어, 그 세트가 고유 데이터 값을 포함하고, 이어 소팅되는 것을 특징으로 하는 데이터베이스.
  6. 제 1 항에 있어서, 동일한 데이터 값을 가지는 모든 데이터 값 요소가 한 개 이상 세트의 데이터 값 요소 중 하나의 인접 위치를 가지는 것을 특징으로 하는 데이터베이스.
  7. 제 1 항에 있어서, 한개 이상 세트의 데이터 값 요소 중 하나가 고유 값 순서를 생성하는 알고리즘이며, 그 순서의 각각의 데이터값에 대해, 데이터 값 요소의 한 세트의 데이터 값 위치는 모든 데이터 값이 상기 알고리즘에 의해 생성되는 경우 이 순서에서 상기 값이 가질 위치에 의해 주어지는 것을 특징으로 하는 데이터베이스.
  8. 제 5 항에 있어서, 제 1 관련 데이터 값 요소는 압축 세트의 데이터 값 요소에 있고, 상기 데이터베이스는 변위 세트의 변위 요소를 추가로 포함하며, 상기 변위 요소는 압축 세트의 데이터 값 요소와 연관되고, 변위 세트의 각각의 요소는 변위 세트와 변위 값의 위치를 가지며, 제 1 관련 데이터값 요소는 변위 세트로부터 도출되는 것을 특징으로 하는 데이터베이스.
  9. 제 8 항에 있어서, 변위 세트의 각각의 요소는 그 위치로부터 도출된 압축 세트의 데이터 값 요소의 한 개의 관련 요소를 가지는 것을 특징으로 하는 데이터베이스.
  10. 제 8 항에 있어서, 변위 세트의 각각의 요소는 제 1 사례 세트의 요소 범위와 연관되고, 이 범위의 각각의 요소는 동일한 데이터 값 요소와 연관되는 것을 특징으로 하는 데이터베이스.
  11. 제 10 항에 있어서, 변위 세트의 요소의 변위 값은 위치의 관련 범위의 제 1 위치를 구체화하는 것을 특징으로 하는 데이터베이스.
  12. 제 10 항에 있어서, 변위 세트의 요소의 변위 값은 위치의 관련 범위의 최종위치를 구체화하는 것을 특징으로 하는 데이터베이스.
  13. 제 10 항에 있어서, 변위 세트의 요소의 변위 값은 위치의 관련 범위의 위치 수를 구체화하는 것을 특징으로 하는 데이터베이스.
  14. 제 1 항에 있어서, 제 2 관련 데이터 값 요소는 압축 세트의 데이터 값 요소에 있고,
    상기 데이터베이스는 변위 세트의 변위 요소와 어커런스 세트의 어커런스 요소를 추가로 포함하며,
    상기 변위 세트의 변위 요소는 압축 세트의 데이터 값 요소와 연관되고, 각각의 변위 요소는 변위 세트와 변위 값의 위치를 가지며,
    상기 어커런스 세트의 어커런스 요소는 제 1 세트의 사례 요소와 연관되고, 각각의 어커런스 요소는 어커런스 세트와 어커런스 값의 위치를 가지며, 그리고
    제 1 사례 요소는 변위 세트와 어커런스 세트로부터 도출되고, 그리고
    제 2 관련 데이터 값 요소는 제 1 사례 요소의 사례 값으로부터 도출되는 것을 특징으로 하는 데이터베이스.
  15. 제 14 항에 있어서, 제 2 사례 요소는 변위 세트 요소와 어커런스 세트 요소로부터 도출되며, 변위 세트 요소의 위치는 제 1 사례 요소의 사례 값에 의해 주어지고, 어커런스 세트 요소의 위치는 제 1 사례 요소의 위치에 의해 주어지는 것을특징으로 하는 데이터베이스.
  16. 제 14 항에 있어서, 제 2 사례 요소는 변위 세트 요소와 어커런스 리스트 요소의 값의 합으로부터 도출되고, 변위 세트 요소의 위치는 제 1 사례 요소의 사례 값에 의해 주어지고, 어커런스 리스트 요소의 위치는 제 1 사례 요소의 위치에 의해 주어지는 것을 특징으로 하는 데이터베이스.
  17. 제 1 항에 있어서, 제 2 사례 요소의 사례 값으로부터 도출되는 모든 관련 사례 요소와 제 2 사례 요소를 포함하는 관련 사례 요소 그룹은 제 1 사례 요소를 포함하는 것을 특징으로 하는 데이터베이스.
  18. 제 17 항에 있어서, 제 1 사례 요소에 독립적으로 도출되는 관련 쇼소 그룹의 각각의 관련 사례 요소가 고유한 것을 특징으로 하는 데이터베이스.
  19. 컴퓨터에 의해 구현되는 데이터베이스로서,
    상기 데이터베이스는 한 개 이상 세트의 데이터 값 요소와 한 개 이상의 제 1, 2 세트의 사례 요소를 포함하며,
    각각의 데이터 값 요소는 한 개 이상 세트의 데이터 값 요소와 데이터 값 중 하나의 위치를 가지고,
    각각의 사례 요소는 각 세트의 사례 요소와 사례 값을 가지며, 각 세트의 사례 요소는 속성에 상응하고,
    제 1 세트의 사례 요소의 제 1 사례 요소에 대해,
    제 1 사례 요소의 위치로부터 도출되는 한 개 이상 세트의 데이터 값 요소의 제 1 관련 데이터 값 요소가 제 1 세트의 사례 요소의 한 개 이상의 다른 요소와 제 1 사례 요소와 연관되고,
    제 2 세트의 사례 요소의 한 개의 제 2 사례 요소는 제 1 사례 요소의 사례 값으로부터 도출되며, 제 2 세트의 사례 요소의 제 2 사례 요소의 위치는 제 1 세트의 사례 요소의 제 1 사례 요소의 위치와는 다르고,
    한 개 이상 세트의 데이터 값 요소의 제 2 관련 데이터 값 요소는 제 2 세트의 사례 요소의 한 개 이상의 다른 요소와 제 2 사례 요소와 연관되며, 그리고
    제 1 사례 요소는 제 1 사례 요소의 값과는 독립적으로 제 2 사례 요소로부터 도출될 수 있는 것을 특징으로 하는 데이터베이스.
  20. 컴퓨터에 의해 구현되는 데이터베이스로서,
    상기 데이터베이스는 두 개 이상의 속성 세트와 연결 정보를 포함하며,
    상기 두 개이상의 속성 세트는 데이터 값과 사례 요소를 포함하고, 각각의 사례 요소는 한 개의 데이터 값과 연관되고, 위치 및 내용을 가지며,
    상기 연결 정보는 한 개 이상 다른 속성 세트에서 특정 사례 요소로 각각의 사례 요소를 고유하게 연관시키고,
    제 1 속성 세트의 제 1 데이터 값과 연관된 제 1 사례 요소에 대한 연결 정보가 제 1 사례 요소를 제 2 사례 요소와 연관시키고, 상기 제 2 사례 요소는 제 2 속성 세트의 제 2 데이터 값과 연관된 다수의 사례 요소 중 특정한 하나이며,
    제 2 사례 요소의 위치는 제 1 사례 요소의 위치에 독립적인 것을 특징으로 하는 데이터베이스.
  21. 제 20 항에 있어서, 제 1 사례 요소의 연결 정보가 제 1 사례 요소의 내용을 포함하는 것을 특징으로 하는 데이터베이스.
  22. 제 21 항에 있어서, 각각의 데이터 값은 한 개의 위치를 가지고, 제 2 속성 세트의 데이터 값은 고유하고 소팅되는 것을 특징으로 하는 데이터베이스.
  23. 제 22 항에 있어서, 제 2 속성 세트는 제 2 데이터 값과 관련된 제 2 속성 세트의 사례 요소를 식별하는 변위 정보를 추가로 포함하는 것을 특징으로 하는 데이터베이스.
  24. 제 23 항에 있어서, 제 1 속성 세트는 제 2 속성 세트의 제 2 데이터 값의 사례 사이에서 제 2 사례 요소의 어커런스 번호를 식별하는 어커런스 정보를 추가로 포함하고, 제 1 사례 요소에 대한 연결 정보는 제 2 속성 세트에 대한 변위 정보와 제 1 속성 세트에 대한 어커런스 정보를 추가로 포함하는 것을 특징으로 하는 데이터베이스.
  25. 튜플(tuple)을 저장하고 검색하기 위한 시스템으로서, 상기 시스템은 제 1 속성의 값에 상응하는 다수의 사례의 집합과, 사례 수에 상응하는 카디널리티 요소를 포함하고, 카디널리티 요소는 사례수가 변할 때마다 갱신되며, 한 개 이상의 사례는 제 2 속성의 값에 상응하는 한 개 이상 다른 사례를 표시하고, 제 2 속성은 제 1 속성과는 다른 것을 특징으로 하는 시스템.
  26. 튜플을 저장하고 검색하는 시스템으로서, 상기 시스템은 제 1 속성의 값에 상응하는 다수의 사례의 집합과, 사례 수에 상응하는 카디널리티 요소를 포함하며, 그 값은 카디널리티 요소로부터 도출될 수 있고, 한 개 이상의 사례는 제 2 속성값에 상응하는 한 개 이상의 다른 사례를 표시하며, 제 2 속성은 제 1 속성과 다른 것을 특징으로 하는 시스템.
  27. 다수의 튜플을 저장하는 시스템으로서, 각각의 튜플은 제 2 속성값을 가지는 제 2 속성과, 제 1 속성 값을 가지는 한 개 이상의 제 1 속성을 포함하며,
    상기 시스템은 단일 사례 요소와 카디널리티 요소를 포함하고,
    동일한 제 1 속성 값과 동일한 제 2 속성 값을 가지는 두 개 이상의 튜플에 대해, 단일 사례 요소는 제 1 속성 값과 제 2 속성 값을 식별하고, 상기 카디널리티 요소는 동일한 제 1, 2 속성 값을 가지는 튜플 수에 관한 정보를 포함하는 것을 특징으로 하는 시스템.
  28. 제 27 항에 있어서, 사례 요소는 카디널리티 요소를 포함하는 것을 특징으로 하는 시스템.
  29. 다수의 튜플을 저장하는 시스템으로서, 각각의 튜플은 제 1 속성 값을 가지는 한개 이상의 제 1 속성과 제 2 속성 값을 가지는 제 2 속성을 포함하고,
    상기 시스템은 값 기억소, 사례 기억소, 연결 기억소, 그리고 카디널리티 기억소를 포함하며,
    상기 값 기억소는 다수의 튜플의 제 1, 2 속성 값을 저장하고,
    상기 사례 기억소는 각각의 튜플과 연관된 값 저장소의 값의 사례를 식별하며,
    상기 연결 기억소는 사례 간의 관계에 관한 정보를 저장하고, 그리고
    상기 카디널리티 기억소는 같은 값의 사례의 어커런스 주파수를 나타내는 정보를 저장하고, 사례 기억소의 특정 사례와 연관된 값 기억소의 특정 사례는 카디널리티 기억소를 이용하여 도출되는 것을 특징으로 하는 시스템.
  30. 제 29 항에 있어서, 사례 기억소와 연결 기억소는 구별되지 않는 것을 특징으로 하는 시스템.
  31. 압축 데이터베이스로부터 레코드를 검색하는 방법으로서, 상기 데이터베이스는 구분되는 값의 어커런스 번호에 관한 정보와 속성의 구분 값에 관한 정보를 저장함으로서 압축되고, 상기 방법은:
    - 주어진 값의 어커런스 번호에 관한 정보를 검색하고,
    - 주어진 값의 어커런스 번호에 관한 정보를 바탕으로 사례 요소를 결정하며,
    - 사례 요소를 바탕으로 연결 요소를 결정하고, 그리고
    - 연결 요소로부터 레코드를 결정하는, 이상의 단계를 포함하는 것을 특징으로 하는 방법.
  32. 다수의 값의 사례를 저장하는 방법으로서, 상기 방법은:
    - 구분값의 순서에서 값의 위치에 관한 정보를 저장하고,
    - 구분값의 순서의 값의 위치가 변할 때마다 값의 위치에 관한 정보를 갱신하며,
    - 값의 사례의 수에 관한 정보를 저장하고,
    - 값의 사례의 수가 변할 때마다 값의 사례 수에 관한 정보를 갱신하며,
    - 다수의 값의 사례 순서의 값의 한 개 이상 사례의 집단 위치에 관한 정보를 저장하고,
    - 집단의 위치가 변할 때마다 집단의 위치에 관한 정보를 갱신하는, 이상의 단계를 포함하는 것을 특징으로 하는 방법.
KR1020017000243A 1998-07-08 1999-07-08 가치-사례-연결을 통한 컴퓨터에 의해 구현되는데이터베이스 KR20010083096A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/112,078 1998-07-08
US09/112,078 US6009432A (en) 1998-07-08 1998-07-08 Value-instance-connectivity computer-implemented database
PCT/US1999/015431 WO2000003335A1 (en) 1998-07-08 1999-07-08 Value-instance-connectivity computer-implemented database

Publications (1)

Publication Number Publication Date
KR20010083096A true KR20010083096A (ko) 2001-08-31

Family

ID=22342004

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020017000243A KR20010083096A (ko) 1998-07-08 1999-07-08 가치-사례-연결을 통한 컴퓨터에 의해 구현되는데이터베이스

Country Status (16)

Country Link
US (6) US6009432A (ko)
EP (1) EP1208478A4 (ko)
JP (1) JP2002520715A (ko)
KR (1) KR20010083096A (ko)
CN (1) CN1317116A (ko)
AU (1) AU4867699A (ko)
BR (1) BR9911931A (ko)
CA (1) CA2336651A1 (ko)
HK (1) HK1040785A1 (ko)
IL (1) IL140757A0 (ko)
MX (1) MXPA01000123A (ko)
NO (1) NO20010111L (ko)
PL (1) PL345460A1 (ko)
RU (1) RU2001103641A (ko)
WO (1) WO2000003335A1 (ko)
ZA (1) ZA200100187B (ko)

Families Citing this family (135)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE19627472A1 (de) * 1996-07-08 1998-01-15 Ser Systeme Ag Datenbanksystem
CA2210755C (en) * 1997-07-17 2003-12-23 Ibm Canada Limited - Ibm Canada Limitee Creating proxies for distribution of beans and event objects
EP1208480A4 (en) * 1998-10-02 2006-10-18 Ncr Corp DATA DEPTH EXPLORATION MEDIA IN A SYSTEM FOR MANAGING RELATIONAL DATA BASES
US6772166B1 (en) * 1998-10-02 2004-08-03 Ncr Corporation SQL-based analytic algorithm for clustering
US6629132B1 (en) * 1998-12-23 2003-09-30 Novell, Inc. Predicate indexing of data stored in a computer with application to indexing cached data
US6304867B1 (en) * 1999-02-25 2001-10-16 Electronic Data Systems Corporation System and method for enhanced performance of a relational database management system through the use of application-specific memory-resident data
US6360224B1 (en) * 1999-04-23 2002-03-19 Microsoft Corporation Fast extraction of one-way and two-way counts from sparse data
US6163774A (en) * 1999-05-24 2000-12-19 Platinum Technology Ip, Inc. Method and apparatus for simplified and flexible selection of aggregate and cross product levels for a data warehouse
US6385604B1 (en) 1999-08-04 2002-05-07 Hyperroll, Israel Limited Relational database management system having integrated non-relational multi-dimensional data store of aggregated data elements
US6408292B1 (en) * 1999-08-04 2002-06-18 Hyperroll, Israel, Ltd. Method of and system for managing multi-dimensional databases using modular-arithmetic based address data mapping processes on integer-encoded business dimensions
US20020029207A1 (en) 2000-02-28 2002-03-07 Hyperroll, Inc. Data aggregation server for managing a multi-dimensional database and database management system having data aggregation server integrated therein
US6625612B1 (en) 2000-06-14 2003-09-23 Ezchip Technologies Ltd. Deterministic search algorithm
US7216132B1 (en) * 2000-08-16 2007-05-08 Sparta Systems, Inc. System and method for automated process control
US20020065815A1 (en) * 2000-10-04 2002-05-30 Xcelerix, Inc. Systems and methods for searching a database
US6804664B1 (en) 2000-10-10 2004-10-12 Netzero, Inc. Encoded-data database for fast queries
US6535885B1 (en) * 2000-10-16 2003-03-18 Aether Systems, Inc. Multikeyed table implementable on a personal digital assistant
US7016903B1 (en) * 2001-01-25 2006-03-21 Oracle International Corporation Method for conditionally updating or inserting a row into a table
US7657576B1 (en) * 2001-05-24 2010-02-02 Oracle International Corporation Asynchronous change capture for data warehousing
US6687798B1 (en) * 2001-05-31 2004-02-03 Oracle International Corporation Methods for intra-partition parallelism for inserts
US6480857B1 (en) 2001-06-07 2002-11-12 David Chandler Method of organizing hierarchical data in a relational database
US7461077B1 (en) 2001-07-31 2008-12-02 Nicholas Greenwood Representation of data records
JP4162183B2 (ja) * 2001-11-12 2008-10-08 株式会社日立製作所 データベース管理システムの静的な情報を取得する手段を有する記憶装置
US6957222B1 (en) * 2001-12-31 2005-10-18 Ncr Corporation Optimizing an outer join operation using a bitmap index structure
US6957210B1 (en) 2001-12-31 2005-10-18 Ncr Corporation Optimizing an exclusion join operation using a bitmap index structure
US20030126555A1 (en) * 2002-01-03 2003-07-03 International Business Machines Corporation Enhanced attribute prompting in browser clients
CA2374298A1 (en) * 2002-03-01 2003-09-01 Ibm Canada Limited-Ibm Canada Limitee Computation of frequent data values
US7035862B2 (en) * 2002-05-09 2006-04-25 Siemens Medical Solutions Health Services Corporation Method for processing information from an information repository
US7548935B2 (en) * 2002-05-09 2009-06-16 Robert Pecherer Method of recursive objects for representing hierarchies in relational database systems
US7249118B2 (en) 2002-05-17 2007-07-24 Aleri, Inc. Database system and methods
US6920460B1 (en) * 2002-05-29 2005-07-19 Oracle International Corporation Systems and methods for managing partitioned indexes that are created and maintained by user-defined indexing schemes
CA2390350A1 (en) * 2002-06-10 2003-12-10 Ibm Canada Limited-Ibm Canada Limitee Incremental cardinality estimation for a set of data values
GB0215464D0 (en) * 2002-07-04 2002-08-14 Hewlett Packard Co Combining data descriptions
US7039897B2 (en) * 2002-07-12 2006-05-02 Hewlett-Packard Development Company, L.P. Modeling a target system by interpolating
US7620170B2 (en) 2002-12-31 2009-11-17 At&T Intellectual Property I, L.P. Computer telephony integration (CTI) complete customer contact center
US7573999B2 (en) 2002-12-31 2009-08-11 At&T Intellectual Property I, L.P. Computer telephony integration (CTI) complete healthcare contact center
US7248688B2 (en) 2003-01-27 2007-07-24 Bellsouth Intellectual Property Corporation Virtual physician office systems and methods
CA2429910A1 (en) * 2003-05-27 2004-11-27 Cognos Incorporated System and method of query transformation
WO2005024604A2 (en) * 2003-09-09 2005-03-17 Siftology, Inc. Dynamic lexicon
US7337163B1 (en) * 2003-12-04 2008-02-26 Hyperion Solutions Corporation Multidimensional database query splitting
US8886614B2 (en) * 2004-02-03 2014-11-11 Teradata Us, Inc. Executing a join plan using data compression
US7269606B2 (en) * 2004-02-26 2007-09-11 Sap Ag Automatic reduction of table memory footprint using column cardinality information
US7373354B2 (en) * 2004-02-26 2008-05-13 Sap Ag Automatic elimination of functional dependencies between columns
US20050234976A1 (en) * 2004-04-20 2005-10-20 Relativity Technologies, Inc. System and method for deriving an object oriented design from the business rules of a legacy application
US20050235266A1 (en) * 2004-04-20 2005-10-20 Relativity Technologies, Inc. System and method for business rule identification and classification
EP1591916B1 (en) * 2004-04-26 2013-11-06 Sap Ag Method, computer program and device for deleting data sets contained in a table system
US7594075B2 (en) * 2004-10-20 2009-09-22 Seagate Technology Llc Metadata for a grid based data storage system
DE102005019153A1 (de) * 2005-04-25 2007-06-06 Robert Bosch Gmbh Verfahren und System zum Verarbeiten von Daten
US8538969B2 (en) * 2005-06-03 2013-09-17 Adobe Systems Incorporated Data format for website traffic statistics
CA2615659A1 (en) * 2005-07-22 2007-05-10 Yogesh Chunilal Rathod Universal knowledge management and desktop search system
US7769744B2 (en) 2005-12-02 2010-08-03 Microsoft Cororation Missing index analysis and index useage statistics
JP4200456B2 (ja) * 2005-12-28 2008-12-24 ブラザー工業株式会社 周辺装置、プログラム、制御方法
JP4918797B2 (ja) * 2006-03-23 2012-04-18 富士通株式会社 ファイル管理プログラム、ファイル管理装置およびファイル管理方法
JP2007264814A (ja) * 2006-03-27 2007-10-11 Fujitsu Ltd レプリケーションデータ作成プログラム、レプリケーションデータ反映プログラムおよびデータベース装置
US8086598B1 (en) 2006-08-02 2011-12-27 Hewlett-Packard Development Company, L.P. Query optimizer with schema conversion
US10007686B2 (en) * 2006-08-02 2018-06-26 Entit Software Llc Automatic vertical-database design
US8671091B2 (en) * 2006-08-02 2014-03-11 Hewlett-Packard Development Company, L.P. Optimizing snowflake schema queries
US20080059492A1 (en) * 2006-08-31 2008-03-06 Tarin Stephen A Systems, methods, and storage structures for cached databases
JP2008112934A (ja) * 2006-10-31 2008-05-15 Oki Electric Ind Co Ltd 半導体記憶装置及びその製造方法
US7698285B2 (en) * 2006-11-09 2010-04-13 International Business Machines Corporation Compression of multidimensional datasets
US20080163159A1 (en) * 2007-01-03 2008-07-03 Relativity Technologies, Inc. System and method for extracting UML models from legacy applications
US20080222080A1 (en) * 2007-03-06 2008-09-11 Nitrosecurity, Inc. Inferred index of circular tables in a database
US8266116B2 (en) * 2007-03-12 2012-09-11 Broadcom Corporation Method and apparatus for dual-hashing tables
US7779037B2 (en) * 2007-03-27 2010-08-17 International Business Machines Corporation Sharing a single instance of a user defined type
US8032499B2 (en) * 2007-05-21 2011-10-04 Sap Ag Compression of tables based on occurrence of values
US9449047B2 (en) 2007-06-19 2016-09-20 Sybase, Inc. Dynamic modification of schemas in streaming databases
US8745012B2 (en) 2007-08-10 2014-06-03 Sybase, Inc. Log-structured store for streaming data
US7444596B1 (en) * 2007-11-29 2008-10-28 International Business Machines Corporation Use of template messages to optimize a software messaging system
US7890480B2 (en) * 2008-02-11 2011-02-15 International Business Machines Corporation Processing of deterministic user-defined functions using multiple corresponding hash tables
US8108361B2 (en) * 2008-07-31 2012-01-31 Microsoft Corporation Efficient column based data encoding for large-scale data storage
CN101355560B (zh) * 2008-09-12 2011-12-14 深圳市联软科技有限公司 一种数据传输方法及系统
US8180774B2 (en) * 2008-10-03 2012-05-15 Seomoz, Inc. Web-scale data processing system and method
US8234268B2 (en) * 2008-11-25 2012-07-31 Teradata Us, Inc. System, method, and computer-readable medium for optimizing processing of distinct and aggregation queries on skewed data in a database system
CN101751406B (zh) * 2008-12-18 2012-01-04 赵伟 一种实现基于列存储的关系型数据库的方法及装置
WO2010087793A1 (en) * 2009-01-29 2010-08-05 Emc Corporation Method and apparatus for processing distributed data
US8700674B2 (en) * 2009-07-14 2014-04-15 Hewlett-Packard Development Company, L.P. Database storage architecture
US20110060718A1 (en) * 2009-09-04 2011-03-10 Song You Method and Apparatus for Organizing Hierarchical Data in a Relational Database
JP5487985B2 (ja) * 2010-01-14 2014-05-14 富士通株式会社 圧縮装置、方法及びプログラム、並びに展開装置、方法及びプログラム
US8666993B2 (en) 2010-02-22 2014-03-04 Onepatont Software Limited System and method for social networking for managing multidimensional life stream related active note(s) and associated multidimensional active resources and actions
US8290931B2 (en) * 2010-02-22 2012-10-16 Hewlett-Packard Development Company, L.P. Database designer
US8423522B2 (en) 2011-01-04 2013-04-16 International Business Machines Corporation Query-aware compression of join results
CN102355362B (zh) * 2011-07-22 2014-02-19 华为技术有限公司 一种网络拓扑生成方法和装置
US8990544B2 (en) * 2011-12-21 2015-03-24 Advanced Micro Devices, Inc. Method and apparatus for using a previous column pointer to read entries in an array of a processor
CN102682108B (zh) * 2012-05-08 2015-02-18 同方知网数字出版技术股份有限公司 一种行列混合的数据库存储方法
US9176999B2 (en) 2012-09-13 2015-11-03 International Business Machines Corporation Multiplication-based method for stitching results of predicate evaluation in column stores
US10152500B2 (en) 2013-03-14 2018-12-11 Oracle International Corporation Read mostly instances
US10642837B2 (en) 2013-03-15 2020-05-05 Oracle International Corporation Relocating derived cache during data rebalance to maintain application performance
US9218134B2 (en) * 2013-07-02 2015-12-22 GlobalFoundries, Inc. Read based temporal locality compression
US10789213B2 (en) 2013-07-15 2020-09-29 International Business Machines Corporation Calculation of digest segmentations for input data using similar data in a data deduplication system
US9836474B2 (en) * 2013-07-15 2017-12-05 International Business Machines Corporation Data structures for digests matching in a data deduplication system
US10339109B2 (en) * 2013-07-15 2019-07-02 International Business Machines Corporation Optimizing hash table structure for digest matching in a data deduplication system
US9594766B2 (en) 2013-07-15 2017-03-14 International Business Machines Corporation Reducing activation of similarity search in a data deduplication system
US10229132B2 (en) 2013-07-15 2019-03-12 International Business Machines Corporation Optimizing digest based data matching in similarity based deduplication
US10296598B2 (en) 2013-07-15 2019-05-21 International Business Machines Corporation Digest based data matching in similarity based deduplication
US8762387B1 (en) * 2013-07-31 2014-06-24 Linkedin Corporation Inverted indexes for accelerating analytics queries
US9292553B2 (en) * 2013-08-20 2016-03-22 Pivotal Software, Inc. Queries for thin database indexing
US9292554B2 (en) * 2013-08-20 2016-03-22 Pivotal Software, Inc. Thin database indexing
US10303682B2 (en) 2013-09-21 2019-05-28 Oracle International Corporation Automatic verification and triage of query results
US9378232B2 (en) 2013-09-21 2016-06-28 Oracle International Corporation Framework for numa affinitized parallel query on in-memory objects within the RDBMS
US9292564B2 (en) 2013-09-21 2016-03-22 Oracle International Corporation Mirroring, in memory, data from disk to improve query performance
US9323799B2 (en) 2013-09-21 2016-04-26 Oracle International Corporation Mechanism to run OLTP workload on in-memory database under memory pressure
US9128972B2 (en) 2013-09-21 2015-09-08 Oracle International Corporation Multi-version concurrency control on in-memory snapshot store of oracle in-memory database
CN103473371B (zh) * 2013-09-29 2017-12-15 北大医疗信息技术有限公司 数据压栈系统和取数据压栈方法
US9767178B2 (en) 2013-10-30 2017-09-19 Oracle International Corporation Multi-instance redo apply
CN103678556B (zh) * 2013-12-06 2017-10-10 华为技术有限公司 列式数据库处理的方法和处理设备
CN103761316B (zh) * 2014-01-26 2018-02-06 北京中电普华信息技术有限公司 一种基于稀疏矩阵的数据压缩存储方法及装置
US9697221B2 (en) * 2014-03-19 2017-07-04 Oracle International Corporation OZIP compression and decompression
US10635645B1 (en) 2014-05-04 2020-04-28 Veritas Technologies Llc Systems and methods for maintaining aggregate tables in databases
US10002148B2 (en) 2014-07-22 2018-06-19 Oracle International Corporation Memory-aware joins based in a database cluster
US10275184B2 (en) 2014-07-22 2019-04-30 Oracle International Corporation Framework for volatile memory query execution in a multi node cluster
US9875259B2 (en) 2014-07-22 2018-01-23 Oracle International Corporation Distribution of an object in volatile memory across a multi-node cluster
CN104462222A (zh) * 2014-11-11 2015-03-25 安徽四创电子股份有限公司 一种卡口车辆通行数据的分布式存储方法及系统
US11829349B2 (en) 2015-05-11 2023-11-28 Oracle International Corporation Direct-connect functionality in a distributed database grid
US10073885B2 (en) 2015-05-29 2018-09-11 Oracle International Corporation Optimizer statistics and cost model for in-memory tables
US10067974B2 (en) 2015-05-29 2018-09-04 Oracle International Corporation Loading and reloading an in-memory copy of a database object without blocking concurrent updates to the database object
US10216781B2 (en) 2015-05-29 2019-02-26 Oracle International Corporation Maintaining cross-node coherence of an in-memory database object in a multi-node database cluster
US9990308B2 (en) 2015-08-31 2018-06-05 Oracle International Corporation Selective data compression for in-memory databases
US10984043B2 (en) 2015-10-02 2021-04-20 Oracle International Corporation Method for faceted visualization of a SPARQL query result set
US10678788B2 (en) 2015-10-22 2020-06-09 Oracle International Corporation Columnar caching in tiered storage
US10747752B2 (en) 2015-10-23 2020-08-18 Oracle International Corporation Space management for transactional consistency of in-memory objects on a standby database
US11657037B2 (en) 2015-10-23 2023-05-23 Oracle International Corporation Query execution against an in-memory standby database
US10146842B2 (en) * 2015-11-19 2018-12-04 Google Llc Pre-instantiating native applications in background
CN105589969A (zh) * 2015-12-23 2016-05-18 浙江大华技术股份有限公司 一种数据处理方法及装置
US10102046B2 (en) 2016-03-24 2018-10-16 Oracle International Corporation In-memory data analytic system that provides an integrated tracking mechanism for explicit memory resources
US10346403B2 (en) * 2016-05-06 2019-07-09 International Business Machines Corporation Value range synopsis in column-organized analytical databases
US10572469B2 (en) 2016-05-31 2020-02-25 Oracle International Corporation Versioning and non-disruptive servicing of in-memory units in a database
US10698771B2 (en) 2016-09-15 2020-06-30 Oracle International Corporation Zero-data-loss with asynchronous redo shipping to a standby database
US10437688B2 (en) 2016-09-22 2019-10-08 Oracle International Corporation Enhancing consistent read performance for in-memory databases
US10891291B2 (en) 2016-10-31 2021-01-12 Oracle International Corporation Facilitating operations on pluggable databases using separate logical timestamp services
US11475006B2 (en) 2016-12-02 2022-10-18 Oracle International Corporation Query and change propagation scheduling for heterogeneous database systems
US10402387B2 (en) * 2016-12-13 2019-09-03 Sap Se Mechanism for constant-space indexing optimized data block merging
US20180300388A1 (en) * 2017-04-17 2018-10-18 International Business Machines Corporation System and method for automatic data enrichment from multiple public datasets in data integration tools
US10691722B2 (en) 2017-05-31 2020-06-23 Oracle International Corporation Consistent query execution for big data analytics in a hybrid database
US11086876B2 (en) 2017-09-29 2021-08-10 Oracle International Corporation Storing derived summaries on persistent memory of a storage device
US11514055B2 (en) 2019-09-13 2022-11-29 Oracle International Corporation Querying on hybrid formats and storages
CN116644103B (zh) * 2023-05-17 2023-11-24 本原数据(北京)信息技术有限公司 基于数据库的数据排序方法和装置、设备、存储介质

Family Cites Families (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4468732A (en) * 1975-12-31 1984-08-28 International Business Machines Corporation Automated logical file design system with reduced data base redundancy
US4479196A (en) * 1982-11-15 1984-10-23 At&T Bell Laboratories Hyperedge entity-relationship data base systems
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
US4858146A (en) * 1986-08-13 1989-08-15 The Babcock & Wilcox Company Automated design of structures using a finite element database
IL84255A (en) * 1987-10-23 1993-02-21 Galram Technology Ind Ltd Process for removal of post- baked photoresist layer
JPH07104868B2 (ja) * 1988-04-08 1995-11-13 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン データ記憶検索システム
EP0444358B1 (en) * 1990-02-27 1998-08-19 Oracle Corporation Dynamic optimization of a single relation access
US5604899A (en) 1990-05-21 1997-02-18 Financial Systems Technology Pty. Ltd. Data relationships processor with unlimited expansion capability
US5276868A (en) * 1990-05-23 1994-01-04 Digital Equipment Corp. Method and apparatus for pointer compression in structured databases
US5201046A (en) * 1990-06-22 1993-04-06 Xidak, Inc. Relational database management system and method for storing, retrieving and modifying directed graph data structures
US5333313A (en) * 1990-10-22 1994-07-26 Franklin Electronic Publishers, Incorporated Method and apparatus for compressing a dictionary database by partitioning a master dictionary database into a plurality of functional parts and applying an optimum compression technique to each part
US5560006A (en) * 1991-05-15 1996-09-24 Automated Technology Associates, Inc. Entity-relation database
US5592667A (en) 1991-05-29 1997-01-07 Triada, Ltd. Method of storing compressed data for accelerated interrogation
US5379422A (en) * 1992-01-16 1995-01-03 Digital Equipment Corporation Simple random sampling on pseudo-ranked hierarchical data structures in a data processing system
US5388259A (en) * 1992-05-15 1995-02-07 Bell Communications Research, Inc. System for accessing a database with an iterated fuzzy query notified by retrieval response
US5555388A (en) * 1992-08-20 1996-09-10 Borland International, Inc. Multi-user system and methods providing improved file management by reading
US5412797A (en) * 1992-08-31 1995-05-02 International Business Machines Corporation Method for implementing one-to-many binary relations in object-oriented systems using doubly-linked rings
US5469568A (en) * 1993-01-07 1995-11-21 International Business Machines Corporation Method for choosing largest selectivities among eligible predicates of join equivalence classes for query optimization
US5794228A (en) * 1993-04-16 1998-08-11 Sybase, Inc. Database system with buffer manager providing per page native data compression and decompression
US5649181A (en) * 1993-04-16 1997-07-15 Sybase, Inc. Method and apparatus for indexing database columns with bit vectors
US5794229A (en) 1993-04-16 1998-08-11 Sybase, Inc. Database system with methodology for storing a database table by vertically partitioning all columns of the table
US5918225A (en) 1993-04-16 1999-06-29 Sybase, Inc. SQL-based database system with improved indexing methodology
US5488722A (en) * 1993-05-28 1996-01-30 International Business Machines Corporation System and method for automating implementation and execution of constraint most likely to be violated in a database
US5504885A (en) * 1993-06-29 1996-04-02 Texas Instruments Incorporated O-R gateway: a system for connecting object-oriented application programs and relational databases
US5701453A (en) * 1993-07-01 1997-12-23 Informix Software, Inc. Logical schema to allow access to a relational database without using knowledge of the database structure
US5765146A (en) * 1993-11-04 1998-06-09 International Business Machines Corporation Method of performing a parallel relational database query in a multiprocessor environment
US5546575A (en) 1994-05-23 1996-08-13 Basil E. Potter & Associates, Inc. Encoding method for compressing a tabular database by selecting effective compression routines for each field and structure of partitions of equal sized records
US5687367A (en) * 1994-06-21 1997-11-11 International Business Machines Corp. Facility for the storage and management of connection (connection server)
US5611076A (en) * 1994-09-21 1997-03-11 Micro Data Base Systems, Inc. Multi-model database management system engine for databases having complex data models
US5838965A (en) * 1994-11-10 1998-11-17 Cadis, Inc. Object oriented database management system
US5701461A (en) * 1995-01-27 1997-12-23 Microsoft Corporation Method and system for accessing a remote database using pass-through queries
US5687362A (en) * 1995-01-30 1997-11-11 International Business Machines Corporation Enumerating projections in SQL queries containing outer and full outer joins in the presence of inner joins
US5819086A (en) * 1995-06-07 1998-10-06 Wall Data Incorporated Computer system for creating semantic object models from existing relational database schemas
US5734887A (en) * 1995-09-29 1998-03-31 International Business Machines Corporation Method and apparatus for logical data access to a physical relational database
US5797136A (en) * 1995-10-05 1998-08-18 International Business Machines Corporation Optional quantifiers in relational and object-oriented views of database systems
US5999933A (en) * 1995-12-14 1999-12-07 Compaq Computer Corporation Process and apparatus for collecting a data structure of a memory dump into a logical table
US5787279A (en) * 1995-12-22 1998-07-28 International Business Machines Corporation System and method for conformationally-flexible molecular recognition
US5761652A (en) * 1996-03-20 1998-06-02 International Business Machines Corporation Constructing balanced multidimensional range-based bitmap indices
US5802525A (en) * 1996-11-26 1998-09-01 International Business Machines Corporation Two-dimensional affine-invariant hashing defined over any two-dimensional convex domain and producing uniformly-distributed hash keys
US5799312A (en) * 1996-11-26 1998-08-25 International Business Machines Corporation Three-dimensional affine-invariant hashing defined over any three-dimensional convex domain and producing uniformly-distributed hash keys
US5995957A (en) * 1997-02-28 1999-11-30 International Business Machines Corporation Query optimization through the use of multi-column statistics to avoid the problems of column correlation
US6138111A (en) * 1997-05-02 2000-10-24 Informix Software, Inc. Cardinality-based join ordering
US5946692A (en) * 1997-05-08 1999-08-31 At & T Corp Compressed representation of a data base that permits AD HOC querying
US5956706A (en) * 1997-05-09 1999-09-21 International Business Machines Corporation Method and system for limiting the cardinality of an SQL query result
US5963936A (en) * 1997-06-30 1999-10-05 International Business Machines Corporation Query processing system that computes GROUPING SETS, ROLLUP, and CUBE with a reduced number of GROUP BYs in a query graph model
US5966709A (en) 1997-09-26 1999-10-12 Triada, Ltd. Method of optimizing an N-gram memory structure
US6018734A (en) 1997-09-29 2000-01-25 Triada, Ltd. Multi-dimensional pattern analysis
US5983232A (en) 1997-09-29 1999-11-09 Triada, Ltd. Virtual structured information system
US6006232A (en) * 1997-10-21 1999-12-21 At&T Corp. System and method for multirecord compression in a relational database
US6006219A (en) 1997-11-03 1999-12-21 Newframe Corporation Ltd. Method of and special purpose computer for utilizing an index of a relational data base table
US6199099B1 (en) * 1999-03-05 2001-03-06 Ac Properties B.V. System, method and article of manufacture for a mobile communication network utilizing a distributed communication network
US6330554B1 (en) * 1999-06-03 2001-12-11 Microsoft Corporation Methods and apparatus using task models for targeting marketing information to computer users based on a task being performed
US6374263B1 (en) * 1999-07-19 2002-04-16 International Business Machines Corp. System for maintaining precomputed views
US6484179B1 (en) * 1999-10-25 2002-11-19 Oracle Corporation Storing multidimensional data in a relational database management system

Also Published As

Publication number Publication date
IL140757A0 (en) 2002-02-10
RU2001103641A (ru) 2003-06-27
US20050192996A1 (en) 2005-09-01
US6606638B1 (en) 2003-08-12
US20080319939A1 (en) 2008-12-25
ZA200100187B (en) 2002-01-08
US20040059750A1 (en) 2004-03-25
MXPA01000123A (es) 2002-10-17
NO20010111D0 (no) 2001-01-08
NO20010111L (no) 2001-03-07
JP2002520715A (ja) 2002-07-09
PL345460A1 (en) 2001-12-17
CA2336651A1 (en) 2000-01-20
EP1208478A4 (en) 2008-07-02
US20080235250A1 (en) 2008-09-25
US6009432A (en) 1999-12-28
CN1317116A (zh) 2001-10-10
WO2000003335A1 (en) 2000-01-20
EP1208478A1 (en) 2002-05-29
BR9911931A (pt) 2001-10-02
HK1040785A1 (zh) 2002-06-21
AU4867699A (en) 2000-02-01

Similar Documents

Publication Publication Date Title
KR20010083096A (ko) 가치-사례-연결을 통한 컴퓨터에 의해 구현되는데이터베이스
US6141655A (en) Method and apparatus for optimizing and structuring data by designing a cube forest data structure for hierarchically split cube forest template
US6334125B1 (en) Method and apparatus for loading data into a cube forest data structure
US6424967B1 (en) Method and apparatus for querying a cube forest data structure
JP5833406B2 (ja) 参照を使用してジェネリック・データ・アイテムに関連するデータ管理アーキテクチャ
US5557791A (en) Outer join operations using responsibility regions assigned to inner tables in a relational database
US20010000536A1 (en) Value-instance-connectivity computer-implemented database
US6931390B1 (en) Method and mechanism for database partitioning
US6240418B1 (en) Database apparatus
US7171427B2 (en) Methods of navigating a cube that is implemented as a relational object
US5713014A (en) Multi-model database management system engine for database having complex data models
US5257365A (en) Database system with multi-dimensional summary search tree nodes for reducing the necessity to access records
Engles A tutorial on data base organization
US20060064432A1 (en) Mtree an Xpath multi-axis structure threaded index
US6343286B1 (en) Efficient technique to defer large object access with intermediate results
US20050165733A1 (en) System and method for an in-memory roll up-on-the-fly OLAP engine with a relational backing store
US7076507B1 (en) Value-instance-connectivity computer-implemented database
Relue et al. Efficient runtime generation of association rules
US6694324B1 (en) Determination of records with a specified number of largest or smallest values in a parallel database system
Sidló et al. Shaping SQL-based frequent pattern mining algorithms
Wey Implementation of queries based on relational algebra in a database management system
Tam Datacube: its implementation and application in olap mining.
Deen Data and File Structure
Weldon et al. An attribute-based file organization for a relational database
CA2202217A1 (en) Method and apparatus for classifying raw data entries according to data patterns

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid