KR101529315B1 - 값의 발생에 기초한 테이블의 압축 - Google Patents

값의 발생에 기초한 테이블의 압축 Download PDF

Info

Publication number
KR101529315B1
KR101529315B1 KR1020080046518A KR20080046518A KR101529315B1 KR 101529315 B1 KR101529315 B1 KR 101529315B1 KR 1020080046518 A KR1020080046518 A KR 1020080046518A KR 20080046518 A KR20080046518 A KR 20080046518A KR 101529315 B1 KR101529315 B1 KR 101529315B1
Authority
KR
South Korea
Prior art keywords
column
value
data
vector
dictionary
Prior art date
Application number
KR1020080046518A
Other languages
English (en)
Other versions
KR20080102981A (ko
Inventor
프란즈 페르버
구엔터 라데스톡크
앤드류 로스
Original Assignee
에스에이피 에스이
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에스에이피 에스이 filed Critical 에스에이피 에스이
Publication of KR20080102981A publication Critical patent/KR20080102981A/ko
Application granted granted Critical
Publication of KR101529315B1 publication Critical patent/KR101529315B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2237Vectors, bitmaps or matrices
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • 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

Landscapes

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

Abstract

값의 발생에 기초한 테이블의 압축을 위한 컴퓨터 프로그램 제품을 포함한 방법 및 장치가 개시된다. 통상, 컬럼의 인접한 로우의 그룹에서 자주 발생하는 값의 발생량을 나타내는 번호가 생성되고, 자주 발생하는 값이 컬럼의 로우에 존재하는지의 여부를 나타내는 벡터가 생성되고, 번호 및 벡터에 의해 표현되는 데이터의 검색을 가능하게 하도록 번호 및 벡터가 저장된다. 벡터는 인접한 로우의 그룹을 나타내는 한 부분을 생략할 수 있다. 값은 비즈니스 객체와 같은 비즈니스 데이터를 나타내는 사전기반 압축 값일 수 있다. 압축은 메모리 활용, 네트워크 대역폭 소비 및 처리 성능을 개선하기 위해 병렬로 인-메모리 수행될 수 있다.
사전기반 압축, 비트 벡터 압축, 벡터기반 압축, 값, 정렬, 테이블

Description

값의 발생에 기초한 테이블의 압축{COMPRESSION OF TABLES BASED ON OCCURRENCE OF VALUES}
본 발명은 디지털 컴퓨터에 의한 데이터 처리에 관한 것으로서, 값의 발생에 기초한 테이블의 압축에 관한 것이다.
검색 엔진은 결과를 찾기 위해 관계형 테이블과 같은 데이터베이스 테이블에서 상당량의 데이터를 검색할 수 있다. 수백만의 레코드를 포함한 테이블 조합과 같은 대량의 데이터인 경우, 데이터 처리에 다수의 하드웨어 자원이 필요할 수 있다. 예를 들면 사용자 요청을 실행 시 관련된 모든 레코드를 저장하기 위해서는 상당량의 임의 액세스 메모리 공간이 필요할 수 있다.
본 발명은 값의 발생에 기초한 테이블의 압축에 관련된 기법을 구현하는 컴퓨터 프로그램 제품을 포함한 장치 및 방법을 제공한다.
한 양상에서, 사전기반 압축 값의 컬럼을 생성하고, 이 컬럼을 정렬하고, 적 어도 하나의 컬럼을 위한 적어도 하나의 비트 벡터(bit vector)를 생성하고, 적어도 하나의 컬럼의 가장 자주 발생하는 값(most-frequently occurring value)의 발생을 나타내는 번호(number)를 생성하고, 비트 벡터로부터 가장 자주 발생하는 값을 제거하고, 번호 및 비트 벡터의 각각에 의해 표현되는 데이터의 인-메모리(in-memory) 검색을 가능하게 하도록 번호 및 비트 벡터를 저장한다. 사전기반 압축 값의 컬럼은 컬럼기반 데이터베이스의 각 컬럼을 위한 가능한 값 사전을 기반으로 할 수 있으며, 값은 구조적 비즈니스 데이터(structured business data)를 나타낼 수 있다. 정렬은 컬럼의 순서에서 제일 먼저 순서화된 제1 컬럼이 다른 컬럼의 자주 발생하는 값(frequently occurring value)보다 더 자주 발생하는 제1 컬럼의 가장 자주 발생하는 값을 갖도록 컬럼을 정렬하는 단계를 포함할 수 있다. 정렬은 제1 컬럼의 가장 자주 발생하는 값의 인스턴스(instances)가 제1 컬럼의 한 단부에 있도록 제1 컬럼을 정렬하는 단계와, 다른 컬럼 중 적어도 하나의 컬럼의 가장 자주 발생하는 값의 인스턴스가 다른 컬럼 각각의 단부를 향하도록 다른 컬럼을 정렬하는 단계를 더 포함할 수 있다. 각 비트 벡터는 각 컬럼의 가장 자주 발생하는 값을 나타낼 수 있고, 여기서 각 비트는 가장 자주 발생하는 값이 존재하는지의 여부를 나타낸다.
관련 양상에서, 데이터 컬럼의 가장 자주 발생하는 값에 대응하는 적어도 하나의 비트 벡터는 컬럼 중 적어도 하나의 컬럼을 위하여 생성하고, 컬럼의 가장 자주 발생하는 값의 발생을 나타내는 적어도 하나의 번호를 생성하고, 적어도 하나의 비트 벡터로부터 가장 자주 발생하는 값을 제거하고, 번호 및 비트 벡터에 의해 표 현되는 데이터의 검색을 가능하게 하도록 번호 및 적어도 하나의 비트 벡터를 저장한다. 각 비트 벡터는 값이 컬럼의 대응 위치에서 인스턴스화(instantiate) 되는지를 나타낼 수 있다.
관련 양상에서, 컬럼의 인접한 로우의 그룹에서 자주 발생하는 값의 발생량을 나타내는 번호를 생성하고, 자주 발생하는 값이 컬럼의 로우에서 인스턴스화되는 위치(places)를 나타내는 벡터를 생성하고, 번호 및 벡터에 의해 표현되는 데이터의 검색을 가능하게 하도록 번호 및 벡터를 저장한다. 벡터는 인접한 로우의 그룹을 나타내는 한 부분을 생략할 수 있다.
본 발명은 예를 들면 컴퓨터 프로그램 제품(예를 들면 컴퓨터 판독가능 매체에 실체적으로 구현되는 컴파일 코드 또는 소스 코드), 컴퓨터 구현 방법 및 시스템으로서 구현될 수 있다.
변경은 하나 이상의 다음 특징을 포함할 수 있다.
컬럼의 값은 테이블의 동일한 로우에 걸쳐 데이터 종속성을 갖는 구조적 비즈니스 데이터를 나타내는 값일 수 있다. 비즈니스 데이터는 결합 테이블(jointed tables) 세트로서 모델링될 수 있는 비즈니스 객체(business objects)를 포함할 수 있다.
액션(actions)은 복수의 하드웨어 서버에서 병렬로 수행될 수 있다. 예를 들면 로우는 복수의 서버에 걸쳐 분산될 수 있고, 각 서버는 그 로우에서 데이터 압축을 책임질 수 있다.
비트 벡터에 대응하는 가장 자주 발생하는 값과 같은 이 벡터에 대응하는 자 주 발생하는 값을 컬럼으로부터 제거함으로써 감소된 컬럼을 생성할 수 있다. 컬럼 대신 감소된 컬럼을 저장할 수 있다.
각 컬럼을 위해, 모든 컬럼을 위해, 또는 각 컬럼 세트의 임의 서브세트를 위해 비트 벡터를 생성할 수 있다.
컬럼 값의 변경은 컬럼으로부터 분리된 델타 버퍼(delta buffer)에 저장될 수 있고, 변경은 비동기적으로 통합될 수 있다.
여기에 개시된 본 발명은 하나 이상의 다음 이점을 실현하도록 구현될 수 있다. 대량의 데이터를 포함한 관계형 테이블과 같은 대량의 데이터베이스 데이터를 효율적으로 처리하기 위해서는 설치된 메모리(예를 들면 휘발성 메모리) 또는 디스크 저장 장치상에 데이터 볼륨을 유지시키고, (예를 들면 하드웨어 드라이브로부터 메모리로) 데이터 이동 시 효율적인 데이터 흐름을 위해 고 레벨 데이터 압축이 필요할 수 있다. 감소된 데이터 볼륨은 설치된 메인 메모리 또는 하드웨어 용량을 작게 요구할 수 있고, 감소된 데이터 흐름이 프로세서 캐시, 프로세서 구조 및 네트워크 대역폭상에 더욱 낮은 요구를 배치할 수 있으므로, 압축은 정보 처리 하드웨어 분야에서 다수의 효과를 가질 수 있다. 이것 모두는 하드웨어 요건, 응답 시간 및 전반적 시스템 성능상에 유리한 효과를 가질 수 있다. 상당한 데이터 압축은 데이터의 비용 효율적 인-메모리 처리를 가능하게 할 수 있으므로(예를 들면 우수 서버 또는 물리적 메모리량을 감소할 수 있으므로), 비즈니스 데이터와 같은 데이터를 압축하여 메모리에서 검색할 수 있다. 데이터의 비동기 갱신을 위해 델타 버퍼를 사용할 수 있고, 이 델타 버퍼는 검색 성능을 방해하지 않는 시간에 인덱스 갱신을 실행될 수 있도록 도와줄 수 있다(예를 들면 시스템은 검색을 위한 개선된 응답 시간에 대한 타협(trade-off)으로서 비동기인 드문 갱신이 바람직한 시나리오에 사용될 수 있다). 압축 기법이 조합되어 시나리오에 따른 유리한 메모리 비용 감소를 제공할 수 있다. 예를 들면 사전기반 압축은 컬럼의 메모리 풋프린트(memory footprint)를 감소시킬 것으로 예상되는 경우에 단지 그 컬럼에 대해 수행될 수 있는 동안, 벡터기반 압축이 메모리 풋프린트를 감소시킬 것으로 예상되는 다른 컬럼을 위해 수행될 수 있다.
하나 이상의 구현에 대한 상세사항은 첨부도면과 후술되는 상세한 설명에서 기술될 것이다. 다른 특징, 양상 및 이점들은 상세한 설명, 도면 및 특허청구범위로부터 명백해질 것이다.
다양한 도면에서 동일한 참조번호 및 명칭은 동일 요소를 나타낸다.
통상, 도 1 내지 도 7에서 데이터는 사전기반 압축, 비트 벡터 압축(또는 벡터기반 압축), 그리고 정렬 비트 벡터 압축(또는 단축된 벡터기반 압축)으로 참조될 수 있는 기법들의 조합을 이용하여 압축될 수 있다. 데이터는 구조적 비즈니스 데이터일 수 있는데, 여기서 데이터는 테이블과 같은 데이터 구조에서 조직화된 속성 또는 핵심수치(key figures)일 수 있고, 속성 또는 핵심수치가 종속성을 가질 수 있다는 점에서 조직화된다. 예를 들면 정보 테이블에서, 로우는 이 로우의 각 컬럼의 데이터가 로우의 다른 컬럼의 다른 데이터와 관련이 있도록 로우의 데이터 간의 종속성을 가질 수 있다. 데이터는 이 데이터의 널(null) 값과 같은 특정 값 이 테이블에서 소정 로우와 같이 데이터 구조의 일부분에서 혹은 전체 데이터 구조에 걸쳐 수천 또는 수백만 로우에 걸쳐 종종 과도하게 인스턴스화될 수 있다는 점에서 희소 분산(sparse distribution)을 형성할 수 있다. 예를 들면 이천만 엔트리를 가진 데이터 컬럼은 천구백만 널 엔트리를 포함할 수 있고, 여기서 천구백만 널 엔트리는 인접할 필요가 없는 다양한 로우에 위치한다.
도 1a는 구조적 데이터 테이블(105), 테이블의 컬럼을 위한 사전(110), 속성 테이블(115) 및 인덱스(120)를 도시하는 블록도이다. 통상, 도 1a는 컬럼(125)에서의 값을 위한 값 식별자(130)(ValueIds)를 명시하는 사전(110), 각 문서 식별자(140)(DocIds)를 위한 값 식별자(135)를 리스트하는 속성 테이블(115), 그리고 각 값 식별자(150)를 위한 문서 식별자(145)를 리스트하는 인덱스(120)가 테이블(105)의 컬럼(125)에 어떻게 제공될 수 있는지를 도시한다.
사전(110)은 이른바 사전기반 압축을 제공하는 데 이용될 수 있는데, 이는 메모리를 더욱 적게 차지할 수 있는 식별자로써 테이블에서의 값을 나타냄으로써 테이블에 저장된 데이터량을 감소시키도록 사전(110)을 이용하는 것과 관련 있을 수 있다. 통상, 사전(110)은 컬럼에 나타난 값 및 값 식별자의 리스트로서 정렬될 수 있다.
예를 들면 사전기반 압축에 의해 데이터 테이블로부터의 컬럼이 차지한 메모리 또는 디스크 공간을 감소시키기 위하여, 컬럼에 나타난 정렬된 상이한 값 리스트를 생성할 수 있고, 상이한 값을 번호 매기기(numbering)할 수 있다. (예를 들면 값 자체를 나타낼 수 있는 문자열보다는 정수로서 구현된) 번호는 값이 나타난 테이블에서 값에 대한 플레이스홀더(placeholders)로서 이용될 수 있다. 값을 나타내는 데 필요한 최대 번호를 기록할 수 있다. 컬럼의 카디널리티(cardinality)(C)는 나타나는 상이한 값의 번호로 정의되고, 컬럼의 총 길이가 N이라면, C의 값이 N보다 훨씬 작은 경우에 사전기반 압축은 테이블에 값을 저장하는 것에 비해 감소된 메모리 소비와 같은 이점을 가져올 수 있다. 저장된 C 값은 사전으로 언급될 수 있고, 예를 들어 사용자에게 판독가능한 결과를 되돌려 주기 위해 이들 값을 결정할 필요가 있을 때마다 테이블에 나타나는 번호의 값을 조사하는 데 이용될 수 있다.
예를 들면 테이블(105)은 INTEL, ABB 및 HP와 같은 값을 가진 컬럼(125)을 포함한다. 사전(110)은 컬럼(125)에 있을 수 있는 상이한 값을 나타낼 수 있는 값 식별자(130)를 포함한다. 예를 들면 속성 테이블(115)은 컬럼(125)의 각 로우를 위한 값 식별자를 포함한다. 예를 들면 문서 식별자 1("DocID 1")로 참조되는 제1 로우(160)는 값 INTEL과 관련된 값 식별자(4)를 가진 사전(110)을 기반으로 하여 값 식별자(4)로써 속성 테이블(115)에 표현된 값 INTEL을 포함한다. 테이블(105)의 컬럼(125)의 값은 속성 테이블(115)의 값 식별자로써 대체될 수 있고, 이는 컬럼(125)에 의해 나타나는 데이터의 메모리 풋프린트를 감소시킬 수 있다. 사전(110)과 함께 새 테이블의 값 식별자가 컬럼(125)의 값을 재구성하는 데 이용될 수 있다.
값 조회(lookup)를 용이하게 하고, 컬럼의 내용을 질의 실행에 더욱 적합한 형태로 만들기 위하여, 인덱스(120)를 생성할 수 있고, 이 인덱스는 컬럼(125)을 대체할 수 있다. 인덱스(120)는 그들 값 식별자에 의해 조직화된 컬럼(125)의 로우 리스트 테이블이다. 예를 들면 한 리스트(155)는 제4 값 식별자가 컬럼(125)의 로우 (1, 4, 8)과 관련이 있음을 나타낸다.
테이블의 메모리 임팩트(memory impact)의 예를 들면, 도 1a에 도시된 테이블(105)과 같은 테이블 T에서 로우의 번호는 1,000,000인 N과 동일할 수 있으며, 각 로우를 코딩하는 데 필요한 바이트의 수는 500일 수 있는데, 여기서 500 바이트는 4,000 비트와 동일하고 4 킬로비트와 동일하다. 압축이 없다면, 테이블 T는 500 바이트의 1,000,000배의 공간을 필요로 할 수 있는데, 이는 500 메가바이트 메모리 공간과 동일하며, 초당 테이블 T를 이동시키는 데 필요한 대역폭은 초당 4 기가비트일 수 있다.
데이터를 조직화하는 방법의 예를 들면, 테이블 T의 컬럼 A에서 상이한 값의 수가 250인 A의 카디널리티 C와 동일할 수 있다. 이 예에서, 컬럼 A를 위한 사전은 0 내지 250인 정수에 의해 번호 매기기된 C 값 리스트일 수 있다. 250까지의 정수의 이진 표현법은 (2의 8승은 256과 동일하므로) 1 바이트인 8 비트를 요구할 수 있다. 예를 들면 컬럼 A와 유사한 10 컬럼으로 구성된 테이블 T, 임의 컬럼에서 평균 비압축 컬럼 엔트리는 50 바이트를 차지한다(500 바이트를 10 컬럼으로 제산하면 컬럼당 50 바이트). 컬럼 A를 위한 사전은 (250 엔트리 × (사전 엔트리에서 대응 값을 나타내기 위한 50 바이트 + 1 한 바이트 값 식별자)이 약 12 킬로바이트로 약 100 킬로비트라는 사실로부터) 약 100 킬로비트를 요구할 수 있다. 따라서, 사전기반 압축에 의해 컬럼 A는 약 1.01 메가바이트(압축 컬럼 + 대응 사전 의 공간)인 사전기반 압축한 컬럼 A에 필요한 총 공간으로써 약 1 메가바이트인 1,000,000 바이트를 차지할 수 있는 반면, 압축없이 컬럼 A가 차지하는 명목상 공간은 50 메가바이트일 수 있다. 따라서, 압축 인자는 약 50이다.
도 1b는 구조적 데이터 테이블(170), 테이블의 컬럼을 위한 사전(172), 속성 테이블(174) 및 델타 인덱스(176)를 도시하는 블록도이다. 통상, 도 1b의 블록도 특징은 도 1a의 특징과 유사하게 동작할 수 있다. 예를 들면 테이블(105, 170)은 전술한 바와 같이 각각 도 1a 및 도 1b의 사전(110, 172)을 이용하여 사전기반 압축으로써 압축될 수 있는 레코드를 저장한다.
도 1b의 블록도는 도 1a의 블록도와 대조적으로 델타 인덱스(176)를 포함하는데, 이 인덱스는 컬럼에 데이터를 추가, 변형 또는 삭제하는 것을 포함할 수 있는 변경을 저장하는 데 이용될 수 있다. 특히, 델타 인덱스(176)는 압축 컬럼에서 데이터의 변경 결과를 포함한다. 델타 인덱스(176)의 사전 값은 전형적인 델타 인덱스의 경우에서와 같이 연대순으로 순서화될 수 있다. 델타 인덱스(176)의 값과 표시된 문서 식별자를 관련시켜 표시한 바와 같이, 연대 순서는 시간에 걸쳐 데이터에 행해지는 변경 순서를 반영할 수 있다. 예를 들면 값 식별자 (3)과 관련된 문서 식별자 (1, 4, 8) 리스트(178)는 문서 식별자 (1)이 문서 식별자 (4) 이전에 추가되었고, 문서 식별자 (4)는 문서 식별자 (8) 이전에 추가되었음을 나타낼 수 있다. 델타 인덱스(176)의 사전 값의 연대 순서는 유리하게도 이전 엔트리의 수정없이 증분 기록을 할 수 있게 해준다.
도 1b의 테이블(170)은 도 1a의 테이블(105)의 델타 또는 변경을 반영할 수 있다. 예를 들면 델타 인덱스(176)에 대응한 테이블(170)의 각 로우는 메인 인덱스(120)에 대응한 테이블(105)에 추가할 로우를 나타낼 수 있다. 다른 예에서, 테이블(170)의 로우가 테이블(105)의 로우와 동일한 레코드 식별자를 가지는 곳에서, 델타 인덱스(176)에 대응한 테이블(170)의 로우는 테이블(105)의 로우의 대체를 나타낼 수 있다. 또 다른 예를 들면, 테이블(170)의 로우는 테이블(105)의 동일한 레코드 식별자를 가진 로우 간의 차를 나타낼 수 있다(예를 들면 동일한 레코드의 다양한 컬럼에 있는 값에서의 포지티브 또는 네거티브 증분 차).
델타 인덱스(176)의 구현은 상이할 수 있다. 예를 들면 도 1b가 델타 값의 사전기반 압축을 포함한 델타 인덱스(176)을 도시하지만 반드시 그럴 필요는 없다.
도 1c는 메인 및 델타 인덱스로부터의 결과 집합 생성의 예를 도시한다. 예를 들면 델타 인덱스(176)는 (예를 들면 도 1a의 메인 인덱스(120)와 같은) 컬럼의 압축 데이터 인덱스와 함께 이용될 수 있는데, 여기서 델타 인덱스(176)는 인덱스에서 데이터로의 변경을 저장할 수 있다. 컬럼의 압축 데이터 인덱스와 델타 인덱스(176)를 검색할 수 있으며, 두 소스로부터의 결과를 병합하여 (예를 들면 델타 버퍼를 참조하여 후술되는 바와 같이) 압축 데이터로 행해지는 변경을 반영할 수 있는 복합 결과를 생성할 수 있다.
예에서 ("IBM"으로 레벨링된) 회사에 대한 총 수익은 메인 인덱스로부터의 총 수익을 알아내고, 델타 인덱스로부터의 총 수익으로써 이를 증분시킴으로써 계산된다. 특히, 커맨드(180) "RETURN TOTAL REVENUE FOR IBM SALES"는 서버 프로그램에 두 연산으로 분리될 수 있는데, 두 연산은 메인 인덱스로부터 IBM 수익에 대 한 제1 연산(182)(도 1a의 로우 5, 6은 총 값 10 유로 값을 가진, 메인 인덱스에서 "IBM"을 위한 값 식별자 3에 대응), 그리고 델타 인덱스로부터 IBM 수익에 대한 제2 연산(184)(도 1b의 로우 5, 6은 총 10 유로 값을 가진, 델타 인덱스에서 "IBM"을 위한 값 식별자 4에 대응)을 포함한다. 그리고 이들 두 연산의 결과는 피연산자(186)에 의해 병합될 수 있고, 여기서 병합은 델타 인덱스의 결과로써 메인 인덱스의 결과를 증분시키는 것을 포함할 수 있다. 증분은 포지티브 또는 네거티브일 수 있다. 메인 인덱스에서 엔트리 갱신은 먼저 구(old) 로우를 취소(cancel)하고 갱신된 로우를 삽입함으로써 처리될 수 있는데, 이 구현에서 취소는 델타 인덱스에서 네거티브 증분에 의해, 그리고 삽입은 포지티브 증분에 의해 표현될 수 있다.
도 2a 및 도 2b는 구조적 데이터 테이블(202, 204)을 도시하는 블록도이다. 통상, 제1 테이블(202)은 사전기반 압축에 따라 압축되지 않은 판매 테이블의 구현을 나타내고, 제2 테이블(204)은 사전기반 압축에 따라 압축된 제1 테이블(202)의 구현을 나타낸다.
제1 테이블(202)은 상이한 유형의 데이터 및, 상이한 유형의 데이터 조합을 기반으로 한 상이한 레코드를 나타내는 로우를 나타낸다. 예를 들면 컬럼은 판매 번호(206), 날짜(208), 위치 코드(210), 제품 코드(212), 제품의 판매량(214), 패킹 속성(216), 통화 단위(218), 센트에서 총 값(220), 송장 번호(222)를 나타낸다. 제1 로우(224)는 판매 번호 S2551, 날짜 20040904, 위치 코드 L164, 제품 코드 P21191 등인 정보 조합을 포함한다.
제2 테이블(204)은 제1 테이블의 컬럼(206-222)의 값을 사전기반 압축 값으 로서 나타낸다. 압축 값 유형은 속성을 포함하지만, (값의 압축에 부적절할 수 있다는 이유로) 핵심수치를 포함하지 않으며, 속성은 사전(232)에서 식별자에 의해 표현된다. 예를 들면 제1 테이블(202)의 판매 번호(206)의 값은 제2 테이블(204)의 제1 컬럼(228)에서 6 디지트 정수 값으로서 압축되고(약 25만 값까지 18 비트 정수 식별자에 의해 표현가능), 여기서 이들 정수 값은 제1 사전(230)에서의 값을 표현할 수 있지만, 제1 테이블(202)의 판매 수 핵심수치 값(214)은 사전에 표현되지 않는다(그리고 값 압축에 관련시킬 필요가 없다는 이유로 부동 소수점 수로서 표현된다). 제1 사전(230)에서 첫 판매 식별자 0000은 제2 테이블(204)의 제1 컬럼(228)의 값 S2500을 나타낸다.
도 2a 및 도 2b가 소정 유형의 사전기반 압축을 포함하지만, 이러한 압축은 상이할 수 있다. 예를 들면 도 2b의 제2 테이블(204)에서 핵심수치는 사전기반 압축에 따라 압축되지 않지만, 소정 구현에서 핵심수치 및 속성의 조합이 사전기반 압축에 따라 압축될 수 있고, 핵심수치만이 압축될 수 있거나, 선택 핵심수치 및 속성의 조합이 압축될 수 있다.
도 3은 속성 및 핵심수치의 카디널리티를 도시하는 테이블(300)이다. 예를 들면 테이블(300)은 도 2a 및 도 2b의 제1 및 제2 테이블(202, 204)에서 각 컬럼의 카디널리티 리스트를 포함할 수 있다. 테이블(300)은 도시된 카디널리티에 부가적으로 각 컬럼을 코딩하는 데 필요한 비트의 수를 각 카디널리티에 대해 포함한다. 예를 들면 2의 2승은 4이며 이는 3보다 크거나 같은 2의 최소 정수 배이므로, 카디널리티 3의 컬럼 M_3을 코딩하는 데 필요한 비트의 수는 2이다.
테이블(300)의 컬럼은 다른 테이블의 컬럼을 식별하는 제1 컬럼(305), 관련 컬럼에서 값의 카디널리티를 표시하는 제2 컬럼(310), 관련 카디널리티를 기반으로 관련 컬럼을 코딩하는 데 필요한 비트 수를 표시하는 제3 컬럼(315)을 포함한다. 예를 들면 테이블(300)의 제1 엔트리(320)는 M_1로 식별되는 속성 컬럼이 24 카디널티리를 가지며, (2의 15승은 24보다 크거나 동일한 2의 최소 정수 배이므로) 이진으로 코딩하기 위해 5 비트를 요구한다는 것을 나타낸다.
테이블(300)은 사전기반 압축과 결합하여 이용될 수 있는 그들 값의 카디널티리를 기반으로 값의 컬럼 폭을 생성함으로써 테이블의 메모리 임팩트를 감소시키는 데 이용될 수 있다.
도 4a 및 도 4b는 벡터기반 압축에 따라 압축 컬럼을 도시하는 블록도이다. 압축은 비트 벡터 압축으로 참조될 수 있다. 통상, 이 압축은 컬럼에서 최다 빈도 값을 알아내는 단계와, 컬럼에 대해 비트 벡터를 이용하여 이 값의 발생 또는 미발생을 나타내는 단계를 포함할 수 있다. 예를 들면 1은 값의 발생을 나타낼 수 있고, 0은 값의 미발생을 나타낼 수 있다. 압축은 자주 발생하는 값의 발생 수를 생성하는 단계, 그리고 비트 벡터로부터 자주 발생하는 값의 발생을 제거하여 더욱 작거나 감소된 비트 벡터를 생성하는 단계를 더 포함할 수 있다. 예를 들면 도 4a의 일련의 블록도와 대조적으로, 도 4b의 일련의 블록도는 정렬된 값의 비트 벡터를 자주 발생하는 값의 발생 수 및 다른 값을 나타내는 단축된 비트 벡터로 감소시키는 단계를 더 포함한다. 도 4a 및 도 4b의 컬럼에서의 값은 사전기반 압축 값일 수 있다.
도 4a의 제1 일련의 블록도에서 제1 화살표(404)에 의해 지시되는 바와 같이 값 컬럼(402)을 위한 비트 벡터(406)를 생성한다. 비트 벡터(406)는 제2 화살표(408)에 의해 지시되는 바와 같이 0 및 1로써 채워지는데, 0은 자주 발생하는 값 0000의 미발생을 나타내고, 1은 이 값의 발생을 나타낸다. 비트 벡터를 채우는 데 이용된 자주 발생하는 값은 가장 자주 발생하는 값, 또는 단지 다른 값보다 자주 발생되는 값일 수 있다. 값이 자주 발생하는지에 대한 판정은 데이터 컬럼의 스캔으로부터의 값 계산(tally of values), 또는 최다 발생될 것으로 예상되는 값의 통계 분석을 기반으로 할 수 있다(예를 들면 널 값은 예외 값만이 난-널(non-null)인 예외 테이블에서 가장 자주 발생하는 값일 것으로 예상될 수 있다). 값이 자주 발생하는지에 대한 판정을 위한 발생 범주는 데이터 컬럼으로 제한될 수 있다(즉 자주 발생하는 값은 컬럼 바이 컬럼 원리로 상이할 수 있다). 값 컬럼(402)은 제3 화살표(410)에 의해 지시되는 바와 같이 가장 자주 발생하는 값의 발생을 제거함으로써 압축될 수 있다. 예를 들면 컬럼(402)으로부터 값 0000을 제거하여 압축 컬럼(412)을 생성한다. 압축 컬럼(412)을 기반으로 컬럼(402)으로부터 값을 재구성하기 위하여, 비트 벡터(406)가 압축 컬럼(412)에서의 값의 위치 및 자주 발생하는 값의 위치를 나타내는 데 이용될 수 있다.
예를 들면 일단 사전기반 압축을 수행하면, 다음과 같이 관련된 컬럼을 위한 비트 벡터를 전개함으로써 압축이 더 성취될 수 있다. 널 값과 같은 자꾸 반복되는 값을 포함한 소정 컬럼 A의 경우, 최다 빈도 값 F가 컬럼 A에서 발견되어, 컬럼을 위해 비트 벡터 V를 이용하여 코딩될 수 있다. 비트 벡터 V는 N 항을 가질 수 있고, 여기서 N은 컬럼 A에서 로우의 수를 나타내는 포지티브 정수이다. V가 컬럼 A 외의 컬럼으로 기록된다면, V는 A에서 값 F의 각 출연 옆에 1을 포함할 수 있고, A에서 임의 다른 로우 옆에는 0을 포함할 수 있다. 비트 벡터 V는 컬럼 벡터 A로부터 분리될 수 있고, 값 F를 포함한 모든 로우가 A로부터 삭제되어 압축 컬럼 벡터 A*를 생성할 수 있다. 컬럼 A는 비트 벡터 V에 의해 명시되는 바와 같이 값 F를 재삽입함으로써 압축 컬럼 벡터 A*로부터 재구성될 수 있고, 판독가능한 값의 비압축 컬럼이 사전기반 압축 기법을 통해 명시된 바와 같이 사전을 이용함으로써 A로부터 재구성될 수 있다.
메모리 감소를 실현할 수 있는 예로서, 예를 들면 1,000,000과 동일한 N을 가지고 컬럼 A를 가진 테이블 T에서, 컬럼 A에서 최다 빈도 값 F가 A에서 990,000 번 나타난다고 하자. A에서 다른 10,000 값은 총 250 상이한 값인 C를 포함할 수 있는, A를 위해 사전에 리스트된 상이한 값 집합의 나머지로부터 취할 수 있다. 이 예에서, 컬럼 A를 위한 비트 벡터 V는 약 1 메가비트, 약 125 킬로바이트인 1,000,000 비트를 포함할 수 있다. 압축 컬럼 A*는 각각이 8 비트(즉 1 바이트) 정수로써 코딩되어 10 킬로바이트(즉 10,000 엔트리 × 1 바이트)의 공간 점유를 할 수 있는 10,000 엔트리를 포함할 수 있다. (비압축 예인 컬럼 A를 참조하여 거론한 바와 같이) 압축없이 컬럼 A에 필요한 총 공간은 50MB이다. 벡터 압축으로써 필요한 총 공간은 사전을 위한 공간, 압축 컬럼 A*를 위한 공간, 그리고 비트 벡터 V를 위한 공간을 포함할 수 있다. 컬럼 A의 벡터기반 압축 버전에 의해 필요한 총 공간은 147 킬로바이트일 수 있다(사전을 위한 12 킬로바이트, 압축 컬럼을 위한 10 킬로바이트, 그리고 비트 벡터를 위한 125 킬로바이트). 약 340의 압축 인자가 실현될 수 있다(즉, 비압축된 50,000 킬로바이트/벡터기반 압축 구현에 따라 압축된 147 킬로바이트).
도 4b의 제2 일련의 블록도는 도 4a의 제1 일련의 블록도와 대조적으로, 자주 발생하는 값의 발생 수를 나타내는 양의 생성을 도와주기 위해 데이터 컬럼 정렬을 포함한다. 도 4b의 제2 일련의 블록도에서, 제1 화살표(416)에 의해 도시된 바와 같이 컬럼(414)의 정렬 버전인 정렬된 컬럼(418)을 생성한다. 그 후 제2 화살표(420)에 의해 도시된 바와 같이, 자주 발생하는 값은 비트 벡터(422)에 의해 표현되고, 정렬된 컬럼(418)은 자주 발생하는 값 0000이 제거된 감소된 컬럼(424)과 비트 벡터(422)로 교체된 자주 발생하는 값을 가진다. 제3 화살표(426)에 의해 도시된 바와 같이 자주 발생하는 값의 발생량을 나타내는 번호(428)가 생성된다. 또한, 비트 벡터(422)는 자주 발생하는 값 그룹을 제거하여, 감소되거나 단축된 비트 벡터(430)를 생성한다. 소정 데이터는 비트 벡터(422)의 전면 또는 상위까지 정렬되지 않으므로, 단축된 비트 벡터(430)는 자주 발생하는 값이 감소된 컬럼(424)에서 차후 발생되는지의 여부를 결정하는 데 이용될 수 있다. 예를 들면 다양한 컬럼에 걸친 데이터 간의 종속성, 정렬 규칙, 또는 인자들의 조합은 컬럼의 값이 자주 발생하는 값 그룹으로 정렬되지 않도록 막는다. 전체 컬럼을 재구성하기 위하여, 그룹화에서 값 발생의 수(428)와 단축된 비트 벡터(430)를 감소된 컬 럼(424)과 결합하여 이용할 수 있다.
예를 들면 일단 테이블이 사전기반 압축 및 벡터기반 압축에 의해 압축되면, 다수 컬럼이 자주 발생하는 값의 다수 인스턴스(예를 들면 다수 널 또는 0 값)를 가지는 경우에 더 이상의 압축 레벨이 가능할 수 있다. (예를 들면 도 6의 테이블 600을 참조하여 기술하는 바와 같이) 테이블에서 로우는 그들 컬럼의 상위까지 컬럼에서 가장 자주 발생하는 값을 가능한 한 많이 가져오도록 정렬될 수 있다. 자주 발생하는 값의 최상위 블록은 자주 발생하는 값이 얼마나 자주 블록에 나타나는지를 기록하는 번호에 의해 비트 벡터에서 대체될 수 있다. 이 번호를 이용하면 비트 벡터를 단축하고 전체 압축률을 증가시킬 수 있다.
더욱 상세한 예로서, 예인 테이블 T는 F_1인 컬럼 1에서 가장 자주 발생하는 값, F_2인 컬럼 2에서 가장 자주 발생하는 값 등 F_M까지의 값을 가진 M 컬럼을 가질 수 있고, 여기서 컬럼 J에서 값 F_J의 발생 수는 │F_J│로서 기록될 수 있고, 컬럼 J는 임의 컬럼(즉 컬럼 1 내지 M 중의 임의 컬럼)일 수 있다. 컬럼 순서가 최다 빈도 값 F의 빈도에 의해 주어지도록 컬럼을 번호 매기기할 수 있으므로, 최다 F 값을 가진 컬럼이 첫 번째이고 최소 F 값을 가진 컬럼이 마지막이 된다. 따라서, 컬럼 1 내지 M은 │F_1│>│F_2│>...>│F_M│되도록 번호 매기기된다(예를 들면 도 6의 테이블(600)에서 컬럼(602)의 번호 매기기).
테이블 T의 로우는 모든 값 F_1이 상위에 있도록 컬럼 1에 의해 정렬될 수 있다. 정렬 순서는 상위 │F_1│ 로우의 내부 순서와 관계없을 수 있고 모든 값 F_2이 상위에 있도록 컬럼 2에 의해 정렬될 수 있다. 정렬 순서는 이제 값 F_2를 가진 로우의 상위 블록의 내부 순서와 관계없을 수 있으므로, 이들 로우는 모든 값 F_3이 상위에 있도록 컬럼 3에 의해 정렬된다. 로우 정렬은 값 F_(M_1)을 가진 로우의 최상위 블록이 상위에 값 F_M을 두도록 정렬될 때까지 로우의 정렬은 계속될 수 있다(예를 들면 마지막 컬럼 M을 제외하고 계속). (예를 들면 도 6의 테이블(600)에 도시된 바와 같이) 모든 F_1 로우는 감소 완료(completeness)로써 상위에 큰 수의 F_2 로우, 상위에 다소 적은 F_3 등으로써 상위에 있을 수 있다. 이러한 방식의 정렬은 이론적으로는 최종 압축률을 최대화하기 위한 최적 정렬이 아닐 수 있지만 비교적 구현이 용이할 수 있으므로, 더욱 복잡한 접근법보다 더 신속히 실행되며(예를 들면 더욱 효율적으로 처리 자원을 이용), 종종 최적 정렬에 근접할 수 있다.
상세한 예를 들면, 비트 벡터 V_1 내지 V_M가 컬럼 1 내지 M을 위해 기록될 수 있는데, 여기서 컬럼 J를 위한 각 비트 벡터 V_J는 값 F_J의 발생에 대한 '1' 값, 임의 다른 값을 위한 '0' 값을 포함한다. 결과는 값 F_J의 솔리드 블록으로써 각각 시작하는 비트 벡터 집합 V_J 일 수 있다. 각 V_J의 경우, 값 F_J의 솔리드 블록은 V_J에서 얼마나 많은 비트가 삭제되었는지를 기록하는 번호 n_J를 그들 위치에 기록한다. 희소 테이블 T의 경우(즉, 값의 인스턴스가 반드시 인접할 필요가 없는 최다 빈도 값의 빈도 발생을 가진 테이블), 단축된 비트 벡터 V*_J에 더한 번호 n_J가 차지하는 공간은 전체 비트 벡터 V_J가 차지하는 공간보다 상당히 작을 수 있다.
단축된 벡터기반 압축은 값의 컬럼 집합체의 효율성을 상당히 개선할 수 있다. 예를 들면, 모든 빈도 값 F_J가 0인 경우, 컬럼의 길이 n_J를 가진 초기 세그먼트 값을 집합화하는 것은 진부할 수 있고(예를 들면 n_J × 0은 0이므로), 이 진부함을 이용한 코드가 단축된 벡터기반 압축없는 경우에서 더욱 깨끗하고 신속할 수 있다.
얼마나 많은 압축을 실현할 수 있는지에 대한 예로서, 전술한 바와 같이 다시, 10,000,000 로우인 N을 가진 테이블 T, 10 컬럼 A_1 내지 A_10을 가진 테이블, 990,000번 나타나는 컬럼 A_1에서 최다 빈도 값 F_1, 총 250 상이한 값을 포함한 A_1에서 또 다른 10,000 값(각각 1 바이트)을 가진 테이블이 있다고 하자. 단축된 벡터기반 압축이 아니면, 가장 자주 발생하는 값 F_1을 위한 벡터기반 압축 컬럼 A*_1은 10 킬로바이트를 차지할 수 있고, 비트 벡터 V_1은 125 킬로바이트를 차지할 수 있다.
단축된 벡터기반 압축이면, 단축된 비트 벡터 V*_1은 10,000 비트를 포함할 수 있고 1.25 킬로바이트를 차지할 수 있다. 단축 컬럼 A_1을 위한 V_1에 대한 1 비트 블록을 나타내는 번호 n_1은 십진표기 990,000일 수 있고, 이진 표기법으로 20 비트를 요구할 수 있다(즉 3 바이트보다 작음). 단축된 벡터기반 압축으로써 압축된 A_1에 의해 요구되는 총 공간은 사전을 위한 공간, 단축 컬럼 A*_1을 위한 공간, 단축 비트 벡터 V*_1, 그리고 번호 n_1을 위한 공간을 위한 공간을 포함할 수 있다. 따라서, 단축된 벡터기반 압축 시 한 A_1을 위한 공간은 27 킬로바이트(12 킬로바이트, 10 킬로바이트, 1.25 킬로바이트 및 3 바이트)보다 작을 수 있다.
전술한 바와 같이, 압축없이 컬럼 A_1에 필요한 총 공간은 50 메가바이트일 수 있다. 단축된 벡터기반 압축 시, 압축 인자는 1800(적당히 반올림하여 50,000 킬로바이트/27 킬로바이트)보다 클 수 있다. J가 2 내지 10일 때 얼마나 많은 값 F_J가 그들 컬럼의 상위로 정렬되는지의 여부에 따라, 컬럼 A_2 내지 A_10과 같은 단축된 벡터기반 압축을 한 다른 컬럼을 위한 압축 인자는 적을 수 있고, 희소 테이블의 경우, 전반적인 압축 인자는 컬럼을 재구성하고 요구 시 선택된 값을 판독하는 데 필요한 오버헤드 코드(overhead code)를 허용할지라도 여전히 이러한 압축을 가치있게 만들기 충분할 정도로 여전히 높을 수 있다.
벡터기반 압축 및 단축된 벡터기반 압축의 경우, 컬럼을 압축하고 압축해제하고, 전체 컬럼을 압축해제하지 않고 컬럼에서 값의 효율적 판독을 용이하게 하는 데 (처리 및 메모리 소비를 포함하지만 이로 제한되지 않는) 소정 오버헤드 자원 소비가 필요할 수 있다. 추가적인 오버헤드는 (메인 메모리 공간을 포함하지만 이로 제한되지 않는) 공간과 (예를 들면 프로세서 코어 자원의 퍼센트 활용이라는 점에서 측정된) 실행 시간을 차지할 수 있고, 페널티(penalty)는 (예를 들면 벡터기반 압축, 사전기반 압축에 대조적으로, 혹은 어느 것도 아닌) 단축된 벡터기반 압축의 이용을 위해 임계치 설정 시 고려될 수 있다. 임계치는 다양한 테이블상에 테스트를 함으로써 탐구적으로 설정될 수 있다. 대량의 데이터를 담고 있는 테이블을 포함한 테이블을 포함한 구현 시, 처리 소비 대신 메모리 소비를 최소화하기 위한 압축 기법 선택을 이용할 수 있다(예를 들면 상이한 컬럼을 위한 상이한 기법). 메모리 소비를 최소화함으로써, 블레이드 서버(blade server)의 수 및 설치된 물리적 메모리량과 같은 더욱 적은 하드웨어 자원을 필요로 할 수 있다. 또한, 최소 메모리 풋프린트가 메인 메모리(예를 들면, 영구 저장을 위해 사용되는 하드디스크와 같이 보조 메모리보다 빠른 응답 시간을 가진 임의 액세스 메모리와 같은 휘발성 메모리)에서 데이터의 압축 및 검색을 허용할 수 있으므로, 질의에 응답하고 데이터를 압축하는 전반적인 속도가 개선될 수 있고, 압축을 구현하기 위한 처리 오버헤드가 수용가능할 만큼 작을 수 있다.
도 5는 데이터를 압축하고 압축 데이터를 검색하기 위한 시스템(500)을 도시하는 블록도이다. 시스템(500)은 검색 엔진 관리 툴(502), 호스트(504) 및 저장소(506)를 포함한다. 통상, 시스템(500)은 검색 엔진 관리 툴(502)을 이용하여 호스트(504)의 압축 데이터를 검색하는 데 이용될 수 있고, 데이터는 호스트(504)에 의해 조직화 및 압축될 수 있다. 또한, 호스트(504)에서 메모리에 보유된 데이터는 저장소(506)에 압축 또는 비압축 형태로 지속될 수 있다. 검색 엔진 관리 툴(502)은 (예를 들면 상호감시 및 백업을 제공하는 방식으로) 각 호스트(504)상에 과다하게 구현되는 압축 및 검색을 수행하는 서비스를 가진 통합 서비스일 수 있다.
호스트(504)는 각 호스트(504)가 데이터의 로우 부분을 보유하므로 조직화될 수 있다. 예를 들면 제1 호스트(508)는 제1 백만 로우를 보유할 수 있고, 제2 호스트(510)는 제2 백만 로우를 보유할 수 있다. 호스트(504)에 걸친 데이터 로우의 분산은 일정할 수 있으며 병렬 처리를 개선할 수 있다. 예를 들면 이것은 호스트(504)에 걸쳐 데이터 로우를 압축해제, 검색 및 재압축하는 병렬 처리를 개선하도록 행해질 수 있다. 데이터 분산의 결과, M이 포지티브 정수이면 1 내지 M의 일련의 컬럼의 각 컬럼은 파트 1 내지 N으로 분할될 수 있는데, 여기서 N은 포지티브 정수이고, 한 파트는 각 호스트가 그 호스트에 배정된 부분을 책임질 수 있는(예를 들면 배정된 부분의 인덱싱 및 압축, 또는 압축해제, 검색 및 재압축을 책임질 수 있는) 각 호스트에 배정된다.
데이터 테이블을 위한 논리적 인덱스는 하나의 호스트(504)에 저장될 수 있고, 이 논리적 인덱스는 데이터가 호스트(504)에 걸쳐 상주하는지를 결정하고 처리를 조정하는 데 이용될 수 있다. 예를 들면 제1 호스트(508)는 데이터 로우가 호스트(504)에 걸쳐 위치한 곳을 나타낼 수 있는 논리적 인덱스(518)를 포함한다. 조정 처리의 예로서, 검색 엔진 관리 툴(502)은 검색에 응답한 결과를 위해 제1 호스트(508)를 질의할 수 있고, 제1 호스트(508)는 호스트(504)의 검색과, 검색 엔진 관리 툴(502)에 제공하기 위한 결과를 합병하는 데 논리적 인덱스(518)를 이용할 수 있다.
호스트(504)는 저장소(506)를 공유하는 블레이드 서버일 수 있다. 저장소(506)는 호스트(504)에서 압축된 데이터를 위한 데이터베이스로부터 하나 이상의 테이블의 각각에 응답하는 제1 인덱스(512)와 같은 인덱스를 포함할 수 있다. 예를 들면 테이블은 다차원 OLAP(OnLine Analytical Processing) 큐브를 위한 차원 테이블(dimension table) 및 사실 테이블(fact table)일 수 있다. 인덱스는 인덱 스 구조를 위한 메타데이터(metadata)를 가진 논리적 인덱스와 압축 컬럼 집합을 포함할 수 있다. 예를 들면 제1 인덱스(512)는 호스트(504)의 데이터를 위한 메타데이터를 포함할 수 있는 논리적 인덱스(514)와 압축 컬럼 집합(516)을 포함한다.
각 호스트(504)는 책임질 수 있는 데이터 로우의 압축을 책임질 수 있다. 예를 들면 제1 호스트(508)는 압축 컬럼(520)에서 데이터 로우의 압축을 책임질 수 있다. 수행되는 압축은 본 문서에 기술된 임의 유형의 압축일 수 있다. 단축된 벡터기반 압축과 같은 압축 방안은 호스트에서 각 인덱스로써 저장될 수 있고 스플릿 인덱스(split index)의 경우에는 논리적 인덱스에 의해 조정될 수 있다.
또한, 각 호스트(504)는 델타 버퍼를 포함한다. 예를 들면 제1 호스트(508)는 제1 델타 버퍼(522)를 포함한다. 델타 버퍼는 호스트의 각 인덱스 파트로의 임의 변경을 저장할 수 있다. 예를 들면 제1 델타 버퍼(522)는 테이블의 제1 파트를 위한 데이터 컬럼(522)에 저장된 데이터로의 변경을 저장할 수 있다. 델타 버퍼는 각 변경에 응답하여 데이터로 갱신을 요구하는 대신 호스트(504)에서 데이터로의 변경을 저장하는 데 이용될 수 있다(예를 들면 갱신은 데이터상의 질의 동안에 성능을 방해하지 않도록 비동기적일 수 있다). 압축 컬럼이 개별 변경을 위해 갱신될 필요가 없으므로, 압축은 변경이 저장된 컬럼에 동기적으로 기록된 경우보다 더 크게 전반적인 시스템 성능을 개선시킬 수 있다. 예를 들면 갱신된 메인 인덱스를 압축하기 위한 오버헤드 자원이 드물게 소비되므로, 갱신이 델타 버퍼에 누적되고, 누적된 갱신이 드물게 메인 인덱스를 갱신하는 데 이용되는 경우에 갱신 통합과 관련된 처리 오버헤드가 감소될 수 있다. 예를 들면 컬럼 인덱스로 천 번의 작은 갱 신을 행하고 매회 인덱스를 압축해제하고 재압축하는 대신, 천 번 갱신을 델타 버퍼에 기록할 수 있고, 모두를 메인 인덱스에 함께 기록함으로써, 단지 하나의 압축해제 및 재압축 사이클이 필요하므로, 오버헤드 자원 소비에서 천 배 감소를 성취한다. 검색 결과를 알아내기 위하여, 델타 버퍼가 메인 인덱스에서 압축 데이터와 함께 검색될 수 있고, 델타 버퍼로부터의 결과는 변경을 포함한 결과를 생성하기 위해 메인 인덱스로부터의 결과와 병합될 수 있다. 소정 구현에서 구현 및 구성 상세사항에 따라, 각 호스트(504)는 또한 하나 이상의 델타 버퍼, 예를 들면 각 인덱스를 위한 델타 버퍼를 포함할 수 있다.
도 6은 다수 컬럼(602)에 걸친 데이터 정렬을 도시하는 테이블(600)의 블록도이다. 각 로우(604)는 컬럼(602)에 걸쳐 종속적인 값을 포함한다. 예를 들면 제1 로우(608)는 이 제1 로우(608)의 각 값이 제1 로우(608)의 다른 값에 의존하는 비즈니스 객체를 나타내는 구조적 데이터를 위한 값의 조합을 포함함으로써, 제1 컬럼(610)의 정렬은 제1 로우(608)의 값의 조합을 유지하도록 다른 컬럼의 데이터를 정렬한다. 비즈니스 객체는 결합 테이블 세트로서 모델링될 수 있다. 결합 테이블 집합으로서의 모델링은 조인된 테이블 세트로서 모델링될 수 있는 방식으로 정의되는 비즈니스 객체의 결과일 수 있으므로, 검색 엔진은 테이블의 로우에 걸쳐 검색하고 비즈니스 객체의 명시된 결합(joints)을 계산함으로써 객체를 조작할 수 있다.
테이블(600)에서 데이터는 사전기반 압축 값일 수 있다. 테이블(600)에서 데이터는 벡터기반 압축 기법의 준비 시 가장 자주 발생하는 값을 그룹화하기 위한 데이터를 정렬한 결과일 수 있다. 예를 들면 값 0은 각 컬럼(602)을 위한 가장 자주 발생하는 값일 수 있고, 로우는 값의 그룹화가 컬럼(602)의 최상위 부분에서 발생되도록 정렬될 수 있다.
테이블(600)에서 로우(604)의 정렬은 컬럼(602)에 걸쳐 가장 자주 발생하는 값을 고려할 수 있다. 예를 들면 합산 로우(606)는 컬럼(602)의 각각에 대한 가장 자주 발생하는 값의 발생 수를 나타낸다. 제1 컬럼(610)의 가장 자주 발생하는 값이 각 컬럼(602)의 다른 자주 발생하는 값보다 더 자주 발생되도록 컬럼(602)을 순서화할 수 있고, 컬럼에 걸쳐 더욱 자주 발생하는 값이 A_2 내지 A_9로 순서화되도록 다른 컬럼의 가장 자주 발생하는 값을 순서화한다. 로우는 컬럼의 정렬을 기반으로 하여 로우의 한 단부의 그룹에서 다수의 자주 발생하는 값만큼 다수 발생되도록 정렬될 수 있고, 이 정렬은 컬럼에 걸친 종속성을 고려할 수 있다.
예를 들어 합산 로우(606)에 의해 도시된 바와 같이, 포함한 0 값의 수에 의해 A_1 내지 A_9로써 수평적으로 컬럼을 순서화할 수 있다. 컬럼 A_1로 레벨링된 제1 컬럼(610)은 상위까지 모두 0 값을 가져오도록 정렬된 모든 로우를 가질 수 있다. 그 후 컬럼 A_2로 레벨링된 제2 컬럼(612)은 상위까지 이들 로우의 0 값을 가져오도록 정렬된 로우 1 내지 19를 가질 수 있다. 로우 1 내지 19로 제한된 제2 컬럼(612)의 정렬은 제1 컬럼(610)의 최상위 값의 정렬 순서의 유지와, 데이터의 로우에 걸친 데이터의 종속성을 기반으로 할 수 있다. 예를 들면 제1 컬럼(610)의 로우 1 내지 19는 로우 1 내지 19에서 가장 자주 발생하는 값 그룹을 유지 관리하기 위하여 그 컬럼의 가장 자주 발생하는 값을 포함하므로, 단지 이들 로우는 제2 컬럼(612)에서 정렬될 수 있다. 이 정렬 기법은 나머지 컬럼의 각각에 대해 후속될 수 있다. 예를 들면 컬럼 A_3으로 레벨링된 제3 컬럼(614)은 상위까지 이들 로우의 0 값을 가져오도록 정렬된 로우 1 내지 15를 가질 수 있고, 여기서 다른 로우의 0 값은 그들의 위치를 유지 관리할 수 있다(예를 들면 로우 17은 0 값을 포함한다). 다른 예에서와 같이, 컬럼 A_4로 레벨링된 제4 컬럼(616)은 이들 로우의 상위까지 0 값을 가져오도록 정렬된 로우 1 내지 14를 가질 수 있고, 컬럼 A_5로 레벨링된 제5 컬럼(618)은 상위까지 이들 로우의 0 값을 가져오도록 정렬된 로우 1 내지 10을 가질 수 있고, 컬럼 A_6으로 레벨링된 제6 컬럼(620)은 상위까지 이들 로우의 0 값을 가져오도록 정렬된 로우 1 내지 8을 가질 수 있고, 컬럼 A_7로 레벨링된 제7 컬럼 A_7은 상위까지 이들 로우의 0 값을 가져오도록 정렬된 로우 1 내지 7을 가질 수 있고, 컬럼 A_8로 레벨링된 제8 컬럼(624)은 상위까지 이들 로우의 0 값을 가져오도록 정렬된 로우 1 내지 6을 가질 수 있고, 컬럼 A_9로 레벨링된 제9 컬럼(626)은 상위까지 이들 로우의 0 값을 가져오도록 정렬된 로우 1 내지 4를 가질 수 있다.
각 정렬된 컬럼은 도 4b를 참조하여 기술된 단축된 벡터기반 압축과 같은 벡터기반 압축을 이용하여 압축될 수 있다. 컬럼의 정렬은 컬럼의 한 단부로 자주 발생하는 값의 더욱 큰 블록의 자주 발생하는 값을 밀어 넣음으로써 압축의 메모리 절약을 최적화할 수 있으므로, 예를 들면 더욱 단축된 비트 벡터는 이러한 정렬없이 발생될 수 있는 것보다 정렬에 의해 발생될 수 있다.
테이블(600)은 정렬 결과일 수 있는 데이터의 소정 조직을 포함할 수 있지 만, 정렬은 상이할 수 있고 데이터가 상이할 수 있다. 예를 들면 동일한 값 0이 각 컬럼(602)에 대한 가장 자주 발생하는 값이지만, 테이블은 상이할 수 있고 상이한 값은 각 컬럼(602)에 대한 가장 자주 발생하는 값일 수 있다. 또 다른 예로서, 한 컬럼에 대한 가장 자주 발생하는 값이 모든 컬럼을 정렬하는 데 이용될 수 있거나 모든 컬럼을 정렬할 필요가 없다.
도 7a 및 도 7b는 데이터 압축 및 압축 데이터의 검색을 가능하게 하는 처리(700, 702)를 도시하는 흐름도이다. 처리(700, 702)는 도 5의 호스트(504)에 의해 구현될 수 있다. 예를 들면 각 호스트(504)는 책임질 수 있는 데이터 부분상에 처리(700)를 수행할 수 있다. 압축 데이터는 구조적 비즈니스 데이터일 수 있다. 데이터의 상당한 압축이 데이터의 비용 효율적 인-메모리 처리를 허용할 수 있으므로(예를 들면 서버의 수 또는 물리적 메모리량이 감소), 데이터를 메모리에 압축 및 검색할 수 있다.
통상, 도 7a의 처리(700)에서, 메모리에서 데이터 컬럼의 사전기반 값을 정렬하고(704), 자주 발생하는 값을 나타내는 벡터를 생성하고(706), 자주 발생하는 값을 나타내는 번호를 생성하고(708), 번호 및 단축된 벡터를 정렬한다(710).
사전기반 값의 정렬(704)은 값의 하나 이상의 컬럼에 대한 최저값으로부터 최고값으로의 정렬을 포함한다. 다수 컬럼의 값을 정렬한다면, 정렬은 컬럼의 순서(예를 들면 테이블의 컬럼에서 가장 자주 발생하는 값의 수를 기반으로 한 순서)를 기반으로 하여, 소정 컬럼을 다른 컬럼 이전에 정렬하는 것을 의미할 수 있다. 예를 들면 도 6의 테이블(600)을 참조하여 기술한 컬럼(602)의 순서를 기반으로 컬 럼(602)을 정렬할 수 있다. 정렬은 컬럼에 걸친 데이터 종속성을 고려할 수 있다. 예를 들면 사전기반 값은 동일 로우에 대한 컬럼에 걸친 종속성으로써 구조화된 데이터를 나타낼 수 있고, 로우에서 값 관련성은 유지될 수 있다. 정렬은 도 5의 한 호스트와 같은 서버에서 발생될 수 있다.
예를 들면 사전기반 값의 정렬은 테이블의 컬럼에 대해, 임의 컬럼의 가장 자주 발생하는 값을 포함한 컬럼이 먼저 순서화되고, 다른 컬럼의 정렬은 이전 컬럼의 최상위 범위 내에 레코드를 기반으로 하도록 컬럼을 순서화하는 것을 포함한다(714).
컬럼의 자주 발생하는 값을 나타내는 벡터를 생성한다(706). 벡터는 로우에서 자주 발생하는 값의 발생 또는 미발생을 비트로써 나타내는 비트 벡터일 수 있다. 단지 소정 컬럼 또는 모든 컬럼에 대한 벡터를 생성할 수 있다. 벡터는 데이터 부분을 책임지는 각 서버에 의해 컬럼의 파트에 대해 생성될 수 있다(예를 들면 도 5의 호스트(504)의 각 호스트). 자주 발생하는 값은 컬럼 범주 내 가장 자주 발생하는 값과 같은 가장 자주 발생하는 값일 수 있는데 요구되는 것은 아니다. 예를 들면 각 컬럼의 가장 자주 발생하는 값에 대한 비트 벡터 표현을 생성할 수 있다(716).
자주 발생하는 값을 나타내는 번호를 생성한다(708). 각 수는 컬럼에서 자주 발생하는 값의 발생 수를 나타낼 수 있다. 예를 들면 도 4b는 자주 발생하는 값 0000의 6 발생을 표시하는 수 6을 포함한다(428). 발생 수는 컬럼의 한 단부(예를 들면 상위 또는 하위)에서 자주 발생하는 값 그룹에서 발생 수로 제한될 수 있다. 예를 들면 한 컬럼은 상위에서 자주 발생하는 값 그룹을 가질 수 있고, 번호는 그 그룹에서 값의 발생 수를 나타낼 수 있고, 그리고 컬럼은 그 값의 다른 인스턴스를 포함할 수 있다. 예를 들면 각 컬럼의 최상위 섹션에서 가장 자주 발생하는 값의 인스턴스를 나타내는 번호를 생성할 수 있다(718).
번호 및 단축된 벡터를 저장한다(710). 예를 들면 자주 발생하는 값의 발생을 나타내는 수를 단축된 벡터와 함께 저장할 수 있다. 예를 들면 테이블의 각 컬럼을 위한 번호 및 비트 벡터 집합을 저장할 수 있다. 단축된 벡터는 이 단축된 벡터를 생성하기 위해 벡터로부터 제거된 번호에 의해 표현된 값의 발생으로써 자주 발생하는 값의 발생을 나타내는 벡터일 수 있다. 단축된 벡터 정렬에 추가로, 값 그룹에서 자주 발생하는 값의 인스턴스는 단축된 또는 감소된 컬럼을 생성하기 위해 컬럼으로부터 제거될 수 있다. 예를 들면 가장 자주 발생하는 값을 포함한 비트 벡터의 상단부를 제거할 수 있고(720), 각 컬럼에 대한 가장 자주 발생하는 값의 발생 수를 나타내는 수와 단축된 비트 벡터를 저장할 수 있다(722). 또한, 가장 자주 발생하는 값 그룹을 포함한 컬럼의 상단부를 제거할 수 있고, 가장 자주 발생하는 값의 모든 인스턴스(예를 들면 최상위 및 있다면 다른 인스턴스)를 제거하여 단축된 컬럼을 생성할 수 있다(그리고 예를 들면 비트 벡터를 사용하여 재구성될 수 있다).
통상, 도 7a의 처리(700)의 서브처리의 구현에 부가적인 도 7b의 처리(702)는 (예를 들면 도 1a를 참조하여 기술한 바와 같이) 사전기반 압축 값을 생성하는 단계(712), (전술한 단락에 기술한 바와 같이) 컬럼의 값을 나타내는 벡터를 단축 하는 단계(720), 메모리에 압축 컬럼을 저장하는 단계(722), 그리고 질의를 실행하는 데 필요한 대로 컬럼을 압축해제하고 재압축하는 단계(724)를 더 포함한다.
압축 컬럼상에 검색을 수행하는 일은 압축 컬럼의 데이터를 메모리로 로딩하고(예를 들면 영구 저장소에 압축 데이터로부터 비휘발성 메모리), 데이터를 임시 구조로 압축해제하고, 그리고 검색에 의해 명시된 바와 같은 로우를 선택하는 것을 포함할 수 있다.
도 7a 및 도 7b의 처리(700, 702)는 소정 순서로 소정 서브처리를 포함할지라도, 부가적인 더욱 적거나 혹은 상이한 서브처리가 있을 수 있고, 이들 서브처리는 상이한 순서일 수 있다. 예를 들면 컬럼은 전체 컬럼을 정렬하기보다 컬럼의 가장 자주 발생하는 값의 비트 벡터 표현을 기반으로 정렬될 수 있다(예를 들면 단지 가장 자주 발생하는 값이 컬럼의 한 단부로 정렬될 수 있고, 다른 값은 정렬될 필요가 없다).
또 다른 예로서, 압축 유형이 성능을 최적화할 것으로 기대되는 (예를 들면 메모리 소비 감소) 압축 유형에 관한 결정을 기반으로 사전기반 압축, 일반적 벡터기반 압축 및 단축된 벡터기반 압축을 적용할 수 있다. 예를 들면 사전기반 압축은 사전기반 값 및 사전이 컬럼의 사전기반이 아닌 값보다 메모리를 덜 소비하는 것으로 예상된다면 수행할 수도 있다. 또 다른 예로서, 속성은 있지만 핵심 수치는 없는 로우만이 어떤 타입의 압축을 이용하여 압축될 수도 있다.
각 도면이 소정 특징 조합을 도시할지라도 다양한 구현을 할 수 있다. 예를 들면 도 5의 시스템(500)이 상이한 또는 더욱 적은 부가적인 구성요소를 포함할 수 있다. 또 다른 예인 소정 구현에서는 단일 컬럼을 위해 사전을 이용할 필요가 없다. 예를 들면 다수의 컬럼이 사전을 공유할 수 있다.
여기에 기술된 본 발명은 본 명세서에 개시된 구조적 수단 및 구조적 등가물을 포함한 컴퓨터 소프트웨어, 펌웨어 또는 하드웨어 또는 디지털 전자 회로에서, 혹은 이들의 조합에서 구현될 수 있다. 여기에 기술된 본 발명은 데이터 처리 장치, 예를 들면 프로그램가능 프로세서, 컴퓨터 또는 다중 컴퓨터의 동작을 제어하기 위해, 혹은 이의 제어에 의한 실행을 위해, 예를 들면 전달 신호로 또는 머신-판독가능 저장 장치에서 정보 캐리어로서 명백히 구현되는 하나 이상의 컴퓨터 프로그램과 같은 하나 이상의 컴퓨터 프로그램으로서 구현될 수 있다. (프로그램, 소프트웨어, 소프트웨어 애플리케이션 또는 코드로서 알려진) 컴퓨터 프로그램은 컴파일 또는 번역 언어를 포함한 임의 형태의 프로그래밍 언어로 기록될 수 있고, 이는 자립형 프로그램 또는 모듈, 구성소자, 서브루틴 또는 컴퓨팅 환경에 이용하기에 적합한 다른 유닛을 포함한 임의 형태로 전개될 수 있다. 컴퓨터 프로그램은 반드시 파일에 대응할 필요는 없다. 프로그램은 다른 프로그램 또는 데이터를 보유하는 파일 부분에, 질의 시 프로그램 전용인 단일 파일에, 혹은 다수의 조정 파일(예를 들면 하나 이상의 모듈, 서브 프로그램 또는 코드의 일부를 저장하는 파일)에 저장될 수 있다. 컴퓨터 프로그램은 한 사이트에서 한 컴퓨터 또는 다수의 컴퓨터상에서 실행되도록 전개되거나, 혹은 다수 사이트에 걸쳐 분산되거나, 혹은 통신망에 의해 상호접속될 수 있다.
여기에 기술된 본 발명의 방법 단계를 포함한, 본 명세서에 기술된 처리 및 논리적 흐름은 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그램가능 프로세서에 의해 수행될 수 있으므로, 입력 데이터상에 동작하여 출력을 발생함으로써 여기에 기술된 본 발명의 기능을 수행할 수 있다. 처리 및 논리적 흐름과 여기에 기술된 본 발명의 장치는 특정 논리회로, 예를 들면 FPGA(field programmable gate array) 또는 ASIC(application-specific integrated circuit)에 의해 수행되고 이로써 구현될 수 있다.
컴퓨터 프로그램의 실행에 적당한 프로세서는 예를 들면 범용 및 특정 마이크로프로세서의 모두 및 임의 종류의 디지털 컴퓨터의 임의 하나 이상의 프로세서를 포함한다. 통상, 프로세서는 판독전용 메모리 또는 임의 액세스 메모리, 또는 둘 모두로부터의 인스트럭션 및 데이터를 수신할 것이다. 컴퓨터의 필수 요소는 인스트럭션을 실행하기 위한 프로세서, 그리고 데이터 및 인스트럭션을 저장하기 위한 하나 이상의 메모리 장치이다. 일반적으로 컴퓨터는 데이터를 저장하기 위한 하나 이상의 대량 저장 장치, 예를 들면 자기, 자기광학 디스크 또는 광학 디스크로부터 데이터를 수신하거나 혹은 이로 데이터를 전송하기 위해 동작결합되거나 이를 포함할 것이다. 컴퓨터 프로그램 인스트럭션 및 데이터를 구현하기에 적당한 매체는 예를 들면 EPROM, EEPROM 및 플래시 메모리 장치와 같은 반도체 메모리 장치, 내부 하드 디스크 또는 착탈형 디스크와 같은 자기 디스크, 자기광학 디스크, 그리고 CD-ROM 및 DVD-ROM 디스크를 포함하는 모든 형태의 비휘발성 메모리 또는 휘발성 메모리(예를 들면 임의 액세스 메모리)를 포함한다. 프로세서 및 메모리는 특정 논리 회로에 의해 보완되거나 혹은 이 회로에 병합될 수 있다.
여기에 기술된 본 발명은 사용자와의 상호작용을 제공하기 위해, 사용자에게 정보를 디스플레이하기 위한 예를 들면 CRT(cathod ray tube) 또는 LCD(liquid crystal display) 모니터와 같은 디스플레이 장치, 그리고 사용자가 컴퓨터로 입력할 수 있는 예를 들면 마우스 또는 트랙볼과 같은 포인팅 장치와 키보드를 가진 컴퓨터상에서 구현될 수 있다. 다른 종류의 장치가 또한 사용자와의 상호작용을 제공하는 데 사용될 수 있는데, 예를 들면 사용자에게 제공되는 피드백은 임의 형태의 감각 피드백, 예를 들면 시각적 피드백, 청각 피드백 또는 촉각 피드백일 수 있고, 사용자로부터의 입력은 음향, 스피치 또는 촉각 입력을 포함한 임의 형태로 수신될 수 있다.
여기에 개시된 본 발명은 후단 구성요소(예를 들면 데이터 서버), 미들웨어 구성요소(예를 들면 애플리케이션 서버) 또는 전단 구성요소(예를 들면 사용자가 여기에 기술된 본 발명의 구현과 상호작용할 수 있게 하는 웹 브라우저 또는 그래픽 인터페이스를 가진 클라이언트 컴퓨터), 또는 이러한 후단, 미들웨어 및 전단 구성요소의 임의 조합을 포함하는 컴퓨팅 시스템에서 구현될 수 있다. 시스템의 구성요소는 디지털 데이터 통신의 임의 형태 또는 매체, 예를 들면 통신망에 의해 상호연결될 수 있다. 통신망의 예는 LAN(local area network)과 WAN(wide area network), 예를 들면 인터넷을 포함한다.
컴퓨팅 시스템은 클라이언트와 서버를 포함할 수 있다. 클라이언트와 서버는 통상, 논리적 감각으로 서로 멀리 있으며 전형적으로 통신망을 통해 상호작용한다. 클라이언트와 서버의 관계는 각 컴퓨터상에 실행되는 컴퓨터 프로그램에 의 해, 그리고 서로 클라이언트-서버 관계를 가짐으로써 발생된다.
여기에 기술된 본 발명은 특정 실시예에 의해 기술되지만 다른 실시예가 후속되는 특허청구범위의 범주 내에서 구현될 수 있다. 예를 들면 동작은 상이할 수 있고 여전히 바람직한 결과를 성취한다. 소정 구현에서, 멀티태스킹과 병렬처리가 바람직할 수 있다. 다른 실시예가 후속되는 특허청구범위의 범주 내에 있다.
도 1a는 구조적 데이터 테이블, 테이블의 컬럼을 위한 사전, 속성 테이블 및 메인 인덱스를 도시하는 블록도.
도 1b는 구조적 데이터 테이블, 테이블의 컬럼을 위한 사전, 속성 테이블 및 델타 인덱스를 도시하는 블록도.
도 1c는 메인 및 델타 인덱스로부터의 결과 집합 생성의 예를 도시하는 도면.
도 2a 및 2b는 구조적 데이터 테이블을 도시하는 블록도.
도 3은 속성 및 핵심수치의 카디널리티를 나타내는 테이블.
도 4a 및 도 4b는 벡터기반 압축에 따라 압축된 컬럼을 도시하는 블록도.
도 5는 데이터를 압축하고 압축 데이터를 검색하는 시스템을 도시하는 블록도.
도 6은 다수 컬럼에 걸친 데이터의 정렬을 도시하는 테이블의 블록도.
도 7a 및 도 7b는 데이터 압축과 압축 데이터의 검색을 가능하게 하는 처리를 도시하는 흐름도.

Claims (20)

  1. 데이터 처리 장치로 하여금 동작들을 수행하게 하는 프로그램이 저장된 컴퓨터 판독가능 매체로서,
    상기 동작들은,
    사전기반 압축 값의 컬럼 - 상기 사전기반 압축 값의 컬럼은 컬럼기반 데이터베이스의 각 컬럼을 위한 가능 값의 사전에 기초하고, 상기 사전기반 압축 값의 컬럼은 구조적 비즈니스 데이터임 - 을 생성하는 단계와,
    상기 컬럼의 순서에서 처음 순서화된 제1 컬럼이 다른 컬럼의 가장 자주 발생하는 값보다 더욱 자주 발생하는 상기 제1 컬럼의 가장 자주 발생하는 값을 갖도록 상기 컬럼을 정렬하는 단계와,
    상기 제1 컬럼의 가장 자주 발생하는 값의 인스턴스가 상기 제1 컬럼의 한 단부에 있도록 상기 제1 컬럼을 정렬하는 단계와,
    상기 다른 컬럼 중 적어도 하나의 컬럼의 가장 자주 발생하는 값의 인스턴스가 상기 다른 컬럼 각각의 한 단부에 있도록 상기 다른 컬럼 중 적어도 하나의 컬럼을 정렬하는 단계와,
    상기 컬럼 중 적어도 하나의 컬럼을 위한 비트 벡터 - 상기 비트 벡터 각각은 각 컬럼의 가장 자주 발생하는 값을 나타냄 - 를 생성하는 단계로서, 가장 자주 발생하는 값이 각 컬럼의 각 로우에 존재하면 가장 자주 발생하는 값이 존재하는지 여부를 비트 벡터의 각 비트가 나타내는 단계를 포함하는 비트 벡터 생성 단계와,
    관련된 비트 벡터가 있는 상기 각 컬럼에 대한 번호 - 상기 번호는 컬럼의 한 단부의 가장 자주 발생하는 값의 발생량을 나타냄 - 를 생성하는 단계와,
    비트 벡터와 관련된 상기 번호에 기초하여 각 컬럼의 한 단부의 가장 자주 발생하는 값의 표현을 상기 각 비트 벡터로부터 제거하는 단계와,
    상기 번호 및 상기 비트 벡터 각각에 의해 표현되는 데이터의 비휘발성 메모리 검색을 가능하게 하도록 하나 이상의 비트 벡터 각각을 위한 하나 이상의 번호를 저장하는 단계
    를 포함하는 동작을 수행하게 하는 컴퓨터 판독가능 매체.
  2. 제1항에 있어서,
    상기 사전기반 압축 값은 테이블의 동일한 로우에 걸쳐 데이터 종속성을 갖는 구조적 비즈니스 데이터를 나타내는 값인 컴퓨터 판독가능 매체.
  3. 제2항에 있어서,
    상기 비즈니스 데이터는 결합 테이블 세트로서 모델링되는 비즈니스 객체를 포함하는 컴퓨터 판독가능 매체.
  4. 제1항에 있어서,
    상기 동작들은 복수의 하드웨어 서버에서 병렬로 수행되는 컴퓨터 판독가능 매체.
  5. 제4항에 있어서,
    상기 동작들은 감소된 컬럼을 생성하도록 하나 이상의 번호에 대응하는 컬럼으로부터 상기 가장 자주 발생하는 값을 제거하는 단계와, 상기 컬럼 대신 상기 감소된 컬럼을 저장하는 단계를 더 포함하는 컴퓨터 판독가능 매체.
  6. 제1항에 있어서,
    상기 비트 벡터는 상기 컬럼의 각각 또는 모두에 대하여 생성되는 컴퓨터 판독가능 매체.
  7. 제1항에 있어서,
    상기 컬럼의 상기 사전기반 압축 값에 대한 변경은 상기 컬럼으로부터 분리된 델타 버퍼에 저장되고, 상기 변경은 비동기적으로 통합되는 컴퓨터 판독가능 매체.
  8. 데이터 처리 장치로 하여금 동작들을 수행하게 하는 프로그램이 저장된 컴퓨터 판독가능 매체로서,
    상기 동작들은,
    데이터 컬럼 - 상기 데이터 컬럼은 사전기반 압축 값을 포함함 - 의 하나의 값에 대응하는 비트 벡터를 생성하는 단계로서, 상기 하나의 값이 상기 컬럼의 로우에 존재하는 경우에는 상기 하나의 값이 존재한다는 점을 상기 벡터의 각 비트가 나타내고, 또 상기 하나의 값 이외의 또 다른 값이 상기 컬럼의 로우에 존재하는 경우에는 상기 하나의 값이 존재하지 않는다는 점을 상기 벡터의 각 비트가 나타내는 단계를 포함하는 비트 벡터 생성 단계와,
    상기 컬럼의 가장 자주 발생하는 값의 발생량을 나타내는 번호를 생성하는 단계와,
    상기 컬럼에서의 상기 가장 자주 발생하는 값에 대응하는 비트를 상기 비트 벡터로부터 제거하는 단계와,
    상기 번호 및 상기 비트 벡터에 의해 표현되는 데이터의 검색을 가능하게 하도록 상기 번호 및 상기 비트 벡터를 저장하는 단계와,
    상기 컬럼과 분리되어 상기 컬럼의 상기 사전기반 압축 값에 대한 변경을 저장하도록 구성되는 델타 버퍼(delta buffer)를 생성하는 단계
    를 포함하고,
    상기 변경은 상기 컬럼의 상기 사전기반 압축 값에 대한 추가, 변형 또는 삭제 중 적어도 하나를 포함하고, 상기 저장되는 변경은 사전 값 및 속성 테이블에 배치되는 값 식별자를 포함하고, 상기 사전 값은 시간에 걸쳐 상기 컬럼의 상기 사전기반 압축 값에 행해지는 변경의 순서를 반영하기 위해 연대순(chronological order)으로 상기 델타 버퍼에 추가되는 컴퓨터 판독가능 매체.
  9. 제8항에 있어서,
    상기 사전기반 압축 값은 테이블의 동일한 로우에 걸쳐 데이터 종속성을 갖는 구조적 비즈니스 데이터를 나타내는 값인 컴퓨터 판독가능 매체.
  10. 제8항에 있어서,
    상기 동작들은 비휘발성 메모리에서의 복수의 하드웨어 서버에서 병렬로 수행되는 컴퓨터 판독가능 매체.
  11. 제8항에 있어서,
    상기 비트 벡터는 상기 컬럼의 가장 자주 발생하는 값에 대응하는 컴퓨터 판독가능 매체.
  12. 제8항에 있어서,
    상기 동작들은 감소된 컬럼을 생성하도록 상기 컬럼으로부터 상기 가장 자주 발생하는 값을 제거하는 단계와, 상기 컬럼 대신 상기 감소된 컬럼을 저장하는 단계를 더 포함하는 컴퓨터 판독가능 매체.
  13. 제8항에 있어서,
    상기 변경은 비동기적으로 통합되는 컴퓨터 판독가능 매체.
  14. 제8항에 있어서,
    상기 동작들은,
    상기 사전기반 압축 값을 생성하는 단계와,
    상기 컬럼의 사전기반 압축 값을 정렬하는 단계
    를 더 포함하는 컴퓨터 판독가능 매체.
  15. 데이터를 압축하기 위한 방법으로서,
    사전기반 압축 값의 컬럼의 인접한 로우의 그룹에서 가장 자주 발생하는 값의 발생량을 나타내는 번호를 생성하는 단계와,
    상기 컬럼의 상기 가장 자주 발생하는 값을 위한 벡터 - 상기 벡터는 상기 가장 자주 발생하는 값이 상기 컬럼의 로우에 존재하는지 여부를 나타내고, 상기 벡터는 상기 인접한 로우의 그룹을 나타내는 한 부분을 생략함 - 를 생성하는 단계와,
    상기 번호 및 상기 벡터에 의해 표현되는 데이터의 검색을 가능하게 하도록 상기 번호 및 상기 벡터를 저장하는 단계와,
    상기 컬럼과 분리되어 상기 컬럼의 값에 대한 변경을 저장하도록 구성되는 델타 버퍼를 생성하는 단계
    를 포함하고,
    상기 변경은 상기 컬럼의 값에 대한 추가, 변형 또는 삭제 중 적어도 하나를 포함하고, 상기 저장되는 변경은 사전 값 및 속성 테이블에 배치되는 값 식별자를 포함하고, 상기 사전 값은 시간에 걸쳐 상기 컬럼의 값에 대해 행해지는 변경의 순서를 반영하기 위해 연대순으로 상기 델타 버퍼에 추가되는 데이터 압축 방법.
  16. 제15항에 있어서,
    상기 컬럼의 값은 테이블의 동일한 로우에 걸쳐 데이터 종속성을 갖는 구조적 비즈니스 데이터를 나타내는 데이터 압축 방법.
  17. 제15항에 있어서,
    상기 벡터는 상기 컬럼의 가장 자주 발생하는 값에 대응하는 데이터 압축 방법.
  18. 제15항에 있어서,
    감소된 컬럼을 생성하도록 상기 컬럼으로부터 상기 가장 자주 발생하는 값을 제거하는 단계와, 상기 컬럼 대신 상기 감소된 컬럼을 저장하는 단계를 더 포함하는 데이터 압축 방법.
  19. 제15항에 있어서,
    상기 변경은 비동기적으로 통합되는 데이터 압축 방법.
  20. 제15항에 있어서,
    상기 벡터는 비트 벡터인 데이터 압축 방법.
KR1020080046518A 2007-05-21 2008-05-20 값의 발생에 기초한 테이블의 압축 KR101529315B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/805,178 2007-05-21
US11/805,178 US8032499B2 (en) 2007-05-21 2007-05-21 Compression of tables based on occurrence of values

Publications (2)

Publication Number Publication Date
KR20080102981A KR20080102981A (ko) 2008-11-26
KR101529315B1 true KR101529315B1 (ko) 2015-06-29

Family

ID=39485118

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020080046518A KR101529315B1 (ko) 2007-05-21 2008-05-20 값의 발생에 기초한 테이블의 압축

Country Status (4)

Country Link
US (4) US8032499B2 (ko)
EP (1) EP1995877B1 (ko)
KR (1) KR101529315B1 (ko)
CN (1) CN101311931B (ko)

Families Citing this family (105)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8886614B2 (en) * 2004-02-03 2014-11-11 Teradata Us, Inc. Executing a join plan using data compression
US9460064B2 (en) * 2006-05-18 2016-10-04 Oracle International Corporation Efficient piece-wise updates of binary encoded XML data
US8032499B2 (en) 2007-05-21 2011-10-04 Sap Ag Compression of tables based on occurrence of values
US9003054B2 (en) * 2007-10-25 2015-04-07 Microsoft Technology Licensing, Llc Compressing null columns in rows of the tabular data stream protocol
US8108401B2 (en) * 2008-03-28 2012-01-31 International Business Machines Corporation Applying various hash methods used in conjunction with a query with a group by clause
US8099440B2 (en) * 2008-08-15 2012-01-17 International Business Machines Corporation Method for laying out fields in a database in a hybrid of row-wise and column-wise ordering
US8250043B2 (en) 2008-08-19 2012-08-21 Netapp, Inc. System and method for compression of partially ordered data sets
US10430415B2 (en) * 2008-12-23 2019-10-01 International Business Machines Corporation Performing predicate-based data compression
US8370326B2 (en) * 2009-03-24 2013-02-05 International Business Machines Corporation System and method for parallel computation of frequency histograms on joined tables
US8935223B2 (en) * 2009-04-30 2015-01-13 Oracle International Corporation Structure of hierarchical compressed data structure for tabular data
US9667269B2 (en) 2009-04-30 2017-05-30 Oracle International Corporation Technique for compressing XML indexes
US8645337B2 (en) 2009-04-30 2014-02-04 Oracle International Corporation Storing compression units in relational tables
US8356060B2 (en) 2009-04-30 2013-01-15 Oracle International Corporation Compression analyzer
US8452755B1 (en) 2009-05-12 2013-05-28 Microstrategy Incorporated Database query analysis technology
US8577902B1 (en) * 2009-05-12 2013-11-05 Microstrategy Incorporated Data organization and indexing related technology
US8296517B2 (en) 2009-08-19 2012-10-23 Oracle International Corporation Database operation-aware striping technique
US20130262486A1 (en) * 2009-11-07 2013-10-03 Robert B. O'Dell Encoding and Decoding of Small Amounts of Text
US8832142B2 (en) 2010-08-30 2014-09-09 Oracle International Corporation Query and exadata support for hybrid columnar compressed data
TW201143305A (en) * 2009-12-29 2011-12-01 Ibm Data value occurrence information for data compression
US8255372B2 (en) 2010-01-18 2012-08-28 Oracle International Corporation Efficient validation of binary XML data
US9195657B2 (en) * 2010-03-08 2015-11-24 Microsoft Technology Licensing, Llc Columnar storage of a database index
US9152683B2 (en) * 2010-10-05 2015-10-06 International Business Machines Corporation Database-transparent near online archiving and retrieval of data
US8442988B2 (en) 2010-11-04 2013-05-14 International Business Machines Corporation Adaptive cell-specific dictionaries for frequency-partitioned multi-dimensional data
US8423522B2 (en) * 2011-01-04 2013-04-16 International Business Machines Corporation Query-aware compression of join results
US8868512B2 (en) * 2011-01-14 2014-10-21 Sap Se Logging scheme for column-oriented in-memory databases
US20120303633A1 (en) * 2011-05-26 2012-11-29 International Business Machines Corporation Systems and methods for querying column oriented databases
US10756759B2 (en) * 2011-09-02 2020-08-25 Oracle International Corporation Column domain dictionary compression
US8843456B2 (en) * 2011-12-06 2014-09-23 International Business Machines Corporation Database table compression
US9792117B2 (en) 2011-12-08 2017-10-17 Oracle International Corporation Loading values from a value vector into subregisters of a single instruction multiple data register
US10534606B2 (en) 2011-12-08 2020-01-14 Oracle International Corporation Run-length encoding decompression
US9697174B2 (en) 2011-12-08 2017-07-04 Oracle International Corporation Efficient hardware instructions for processing bit vectors for single instruction multiple data processors
US8521788B2 (en) 2011-12-08 2013-08-27 Oracle International Corporation Techniques for maintaining column vectors of relational data within volatile memory
US9342314B2 (en) 2011-12-08 2016-05-17 Oracle International Corporation Efficient hardware instructions for single instruction multiple data processors
US9582553B2 (en) * 2012-06-26 2017-02-28 Sap Se Systems and methods for analyzing existing data models
US8862571B2 (en) * 2012-06-29 2014-10-14 International Business Machines Corporation Predicate pushdown with late materialization in database query processing
US8838577B2 (en) 2012-07-24 2014-09-16 International Business Machines Corporation Accelerated row decompression
US8812523B2 (en) 2012-09-28 2014-08-19 Oracle International Corporation Predicate result cache
US9292569B2 (en) 2012-10-02 2016-03-22 Oracle International Corporation Semi-join acceleration
KR101403356B1 (ko) * 2012-10-22 2014-06-05 (주)티베로 데이터 압축 장치, 데이터 압축 방법 및 그 방법을 위한 컴퓨터 판독 가능한 기록 매체
CN103885984B (zh) * 2012-12-21 2018-05-04 国际商业机器公司 处理数据库查询结果集的方法和设备
US9442949B2 (en) * 2013-03-14 2016-09-13 Futurewei Technologies, Inc. System and method for compressing data in a database
US10642837B2 (en) 2013-03-15 2020-05-05 Oracle International Corporation Relocating derived cache during data rebalance to maintain application performance
US10296462B2 (en) 2013-03-15 2019-05-21 Oracle International Corporation Method to accelerate queries using dynamically generated alternate data formats in flash cache
US9165050B2 (en) * 2013-07-19 2015-10-20 Sap Se Data availability during columnar table merges
US9659050B2 (en) * 2013-08-06 2017-05-23 Sybase, Inc. Delta store giving row-level versioning semantics to a non-row-level versioning underlying store
US8902086B1 (en) * 2013-09-11 2014-12-02 Allegiance Software, Inc. Data encoding for analysis acceleration
US9430390B2 (en) 2013-09-21 2016-08-30 Oracle International Corporation Core in-memory space and object management architecture in a traditional RDBMS supporting DW and OLTP applications
US8933829B2 (en) 2013-09-23 2015-01-13 International Business Machines Corporation Data compression using dictionary encoding
US9495466B2 (en) 2013-11-27 2016-11-15 Oracle International Corporation LIDAR model with hybrid-columnar format and no indexes for spatial searches
US9336196B2 (en) 2013-12-06 2016-05-10 Sap Se Methods, systems, and apparatus for optimization using statistical estimation
US9608664B2 (en) 2013-12-30 2017-03-28 International Business Machines Corporation Compression of integer data using a common divisor
CN103761316B (zh) * 2014-01-26 2018-02-06 北京中电普华信息技术有限公司 一种基于稀疏矩阵的数据压缩存储方法及装置
CN104899204B (zh) * 2014-03-05 2020-04-07 腾讯科技(深圳)有限公司 数据存储方法及装置
US9628107B2 (en) 2014-04-07 2017-04-18 International Business Machines Corporation Compression of floating-point data by identifying a previous loss of precision
CN105022739B (zh) * 2014-04-21 2019-05-21 腾讯科技(北京)有限公司 数据的存储方法及装置
US10726005B2 (en) 2014-06-25 2020-07-28 Sap Se Virtual split dictionary for search optimization
US10057217B2 (en) * 2014-07-15 2018-08-21 Sap Se System and method to secure sensitive content in a URI
US9350384B2 (en) 2014-09-30 2016-05-24 International Business Machines Corporation Hierarchical data compression and computation
US10210280B2 (en) 2014-10-23 2019-02-19 Sap Se In-memory database search optimization using graph community structure
US9959299B2 (en) 2014-12-02 2018-05-01 International Business Machines Corporation Compression-aware partial sort of streaming columnar data
US9413386B1 (en) 2015-02-19 2016-08-09 Qualcomm Incorporated System, apparatus, and method for decompressing data
US10909078B2 (en) 2015-02-25 2021-02-02 International Business Machines Corporation Query predicate evaluation and computation for hierarchically compressed data
US10459913B2 (en) 2015-02-26 2019-10-29 Red Hat, Inc. Database query processing
US9306597B1 (en) 2015-03-30 2016-04-05 Microsoft Technology Licensing, Llc Data compression
US10248622B2 (en) * 2015-03-30 2019-04-02 Sap Se Variable virtual split dictionary for search optimization
US10073885B2 (en) 2015-05-29 2018-09-11 Oracle International Corporation Optimizer statistics and cost model for in-memory tables
US11392568B2 (en) 2015-06-23 2022-07-19 Microsoft Technology Licensing, Llc Reducing matching documents for a search query
US11281639B2 (en) 2015-06-23 2022-03-22 Microsoft Technology Licensing, Llc Match fix-up to remove matching documents
US20160378803A1 (en) * 2015-06-23 2016-12-29 Microsoft Technology Licensing, Llc Bit vector search index
US10242071B2 (en) 2015-06-23 2019-03-26 Microsoft Technology Licensing, Llc Preliminary ranker for scoring matching documents
US10733164B2 (en) 2015-06-23 2020-08-04 Microsoft Technology Licensing, Llc Updating a bit vector search index
US9990308B2 (en) 2015-08-31 2018-06-05 Oracle International Corporation Selective data compression for in-memory databases
US10169361B2 (en) 2015-11-16 2019-01-01 International Business Machines Corporation Columnar database compression
US10303655B1 (en) * 2015-12-21 2019-05-28 EMC IP Holding Company LLC Storage array compression based on the structure of the data being compressed
US10061714B2 (en) 2016-03-18 2018-08-28 Oracle International Corporation Tuple encoding aware direct memory access engine for scratchpad enabled multicore processors
US10061832B2 (en) 2016-11-28 2018-08-28 Oracle International Corporation Database tuple-encoding-aware data partitioning in a direct memory access engine
US10055358B2 (en) 2016-03-18 2018-08-21 Oracle International Corporation Run length encoding aware direct memory access filtering engine for scratchpad enabled multicore processors
US10432217B2 (en) 2016-06-28 2019-10-01 International Business Machines Corporation Page filtering via compression dictionary filtering
US10599488B2 (en) 2016-06-29 2020-03-24 Oracle International Corporation Multi-purpose events for notification and sequence control in multi-core processor systems
US10235100B2 (en) 2016-08-23 2019-03-19 Sap Se Optimizing column based database table compression
US10380058B2 (en) 2016-09-06 2019-08-13 Oracle International Corporation Processor core to coprocessor interface with FIFO semantics
US10133667B2 (en) 2016-09-06 2018-11-20 Orcle International Corporation Efficient data storage and retrieval using a heterogeneous main memory
US10783102B2 (en) 2016-10-11 2020-09-22 Oracle International Corporation Dynamically configurable high performance database-aware hash engine
US10459859B2 (en) 2016-11-28 2019-10-29 Oracle International Corporation Multicast copy ring for database direct memory access filtering engine
US10176114B2 (en) 2016-11-28 2019-01-08 Oracle International Corporation Row identification number generation in database direct memory access engine
US10762071B2 (en) 2016-11-29 2020-09-01 Sap Se Value-ID-based sorting in column-store databases
US10725947B2 (en) 2016-11-29 2020-07-28 Oracle International Corporation Bit vector gather row count calculation and handling in direct memory access engine
US11086876B2 (en) 2017-09-29 2021-08-10 Oracle International Corporation Storing derived summaries on persistent memory of a storage device
US11699032B2 (en) * 2017-11-03 2023-07-11 Microsoft Technology Licensing, Llc Data set lookup with binary search integration and caching
US11663207B2 (en) * 2018-09-24 2023-05-30 Salesforce, Inc. Translation of tenant identifiers
US11086828B2 (en) * 2018-10-12 2021-08-10 Sap Se Compression of column store tables
US11500842B2 (en) * 2018-12-14 2022-11-15 Sap Se Adaptive compression optimization for effective pruning
US10606775B1 (en) 2018-12-28 2020-03-31 Micron Technology, Inc. Computing tile
US11157478B2 (en) 2018-12-28 2021-10-26 Oracle International Corporation Technique of comprehensively support autonomous JSON document object (AJD) cloud service
US11139827B2 (en) * 2019-03-15 2021-10-05 Samsung Electronics Co., Ltd. Conditional transcoding for encoded data
US11514027B2 (en) 2019-06-07 2022-11-29 Sap Se Paged hybrid LOBs
US11403367B2 (en) 2019-09-12 2022-08-02 Oracle International Corporation Techniques for solving the spherical point-in-polygon problem
US11423001B2 (en) 2019-09-13 2022-08-23 Oracle International Corporation Technique of efficiently, comprehensively and autonomously support native JSON datatype in RDBMS for both OLTP and OLAP
US11386089B2 (en) 2020-01-13 2022-07-12 The Toronto-Dominion Bank Scan optimization of column oriented storage
US11558067B2 (en) * 2020-05-19 2023-01-17 Sap Se Data compression techniques
US11463559B1 (en) 2021-08-24 2022-10-04 Lyft, Inc. Compressing digital metrics for transmission across a network utilizing a graph-based compression dictionary and time slice delta compression
US11609889B1 (en) * 2021-09-17 2023-03-21 International Business Machines Corporation Reordering datasets in a table for increased compression ratio
US20240086392A1 (en) * 2022-09-14 2024-03-14 Sap Se Consistency checks for compressed data
SE2350371A1 (en) * 2023-03-30 2024-02-27 Tomicic Consulting AB Method and system for referencing data
CN118100955A (zh) * 2024-04-26 2024-05-28 深圳鲲云信息科技有限公司 一种用于对压缩数据进行并行解压的预处理的方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040034616A1 (en) * 2002-04-26 2004-02-19 Andrew Witkowski Using relational structures to create and support a cube within a relational database system
US20050187962A1 (en) * 2004-02-20 2005-08-25 Richard Grondin Searchable archive

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5523946A (en) * 1992-02-11 1996-06-04 Xerox Corporation Compact encoding of multi-lingual translation dictionaries
US6269363B1 (en) * 1994-01-24 2001-07-31 Yossi Matias Method of accessing data using approximate data structures by relaxing the operations that define same
US5574906A (en) * 1994-10-24 1996-11-12 International Business Machines Corporation System and method for reducing storage requirement in backup subsystems utilizing segmented compression and differencing
US5870036A (en) * 1995-02-24 1999-02-09 International Business Machines Corporation Adaptive multiple dictionary data compression
US6112208A (en) * 1997-08-25 2000-08-29 Fujitsu Limited Data compressing method and apparatus to generate bit maps in accordance with extracted data symbols
JP3337633B2 (ja) * 1997-12-03 2002-10-21 富士通株式会社 データ圧縮方法及びデータ復元方法並びにデータ圧縮プログラム又はデータ復元プログラムを記録したコンピュータ読み取り可能な記録媒体
US20020099691A1 (en) * 1998-06-24 2002-07-25 Michael Dean Lore Method and apparatus for aggregation of data in a database management system
US6009432A (en) * 1998-07-08 1999-12-28 Required Technologies, Inc. Value-instance-connectivity computer-implemented database
EP1217540A1 (en) * 2000-11-29 2002-06-26 Lafayette Software Inc. Methods of organizing data and processing queries in a database system, and database system and software product for implementing such method
EP1407386A2 (en) * 2001-06-21 2004-04-14 ISC, Inc. Database indexing method and apparatus
US20050119299A1 (en) 2002-03-08 2005-06-02 Sankyo Company, Limited Ophthalmic solutions containing tetrazole derivatives
US7269606B2 (en) * 2004-02-26 2007-09-11 Sap Ag Automatic reduction of table memory footprint using column cardinality information
CN100576203C (zh) * 2005-12-31 2009-12-30 中国工商银行股份有限公司 多表连接方法
US7792877B2 (en) * 2007-05-01 2010-09-07 Microsoft Corporation Scalable minimal perfect hashing
US8032499B2 (en) 2007-05-21 2011-10-04 Sap Ag Compression of tables based on occurrence of values

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040034616A1 (en) * 2002-04-26 2004-02-19 Andrew Witkowski Using relational structures to create and support a cube within a relational database system
US20050187962A1 (en) * 2004-02-20 2005-08-25 Richard Grondin Searchable archive

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Navneet Goyal 외 2인, "Improved Bitmap Indexing Strategy for Data Warehouses", 9th International Conference on Information Technology (ICIT'06), IEEE 2006, pp.213-216 (2006) *
Navneet Goyal 외 2인, "Improved Bitmap Indexing Strategy for Data Warehouses", 9th International Conference on Information Technology (ICIT'06), IEEE 2006, pp.213-216 (2006)*
Thomas Legler 외 2인, "Data Mining with the SAP NetWeaver Bl Accelerator", VLDB 2006 Proceedings of the 32nd international conference on Very large data bases, pp. 1059-1068, (2006.09.12.) *
Thomas Legler 외 2인, "Data Mining with the SAP NetWeaver Bl Accelerator", VLDB 2006 Proceedings of the 32nd international conference on Very large data bases, pp. 1059-1068, (2006.09.12.)*

Also Published As

Publication number Publication date
US9852169B2 (en) 2017-12-26
EP1995877B1 (en) 2016-11-02
US8032499B2 (en) 2011-10-04
US20140250090A1 (en) 2014-09-04
US8126855B2 (en) 2012-02-28
EP1995877A1 (en) 2008-11-26
US20080294676A1 (en) 2008-11-27
KR20080102981A (ko) 2008-11-26
CN101311931A (zh) 2008-11-26
US20110313980A1 (en) 2011-12-22
US20120124019A1 (en) 2012-05-17
CN101311931B (zh) 2011-12-07
US8768899B2 (en) 2014-07-01

Similar Documents

Publication Publication Date Title
KR101529315B1 (ko) 값의 발생에 기초한 테이블의 압축
US10884987B2 (en) Block compression of tables with repeated values
AU2012282870B2 (en) Managing storage of data for range-based searching
US7783855B2 (en) Keymap order compression
CA2723731C (en) Managing storage of individually accessible data units
US20150006508A1 (en) Method and system for storing, organizing and processing data in a relational database
WO1992015954A1 (en) Compaction of a querying in relational databases
Tenhunen Scientific Methods in Relational Database Compression Research
Bhuiyan et al. High Performance SQL Queries on Compressed Relational Database.

Legal Events

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

Payment date: 20190530

Year of fee payment: 5