KR20180094004A - 블록 처리 저장 시스템 상에 저장된 데이터 및 오디오 데이터의 축소 - Google Patents

블록 처리 저장 시스템 상에 저장된 데이터 및 오디오 데이터의 축소 Download PDF

Info

Publication number
KR20180094004A
KR20180094004A KR1020187019557A KR20187019557A KR20180094004A KR 20180094004 A KR20180094004 A KR 20180094004A KR 1020187019557 A KR1020187019557 A KR 1020187019557A KR 20187019557 A KR20187019557 A KR 20187019557A KR 20180094004 A KR20180094004 A KR 20180094004A
Authority
KR
South Korea
Prior art keywords
data
elements
audio
tree
lossless
Prior art date
Application number
KR1020187019557A
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 KR20180094004A publication Critical patent/KR20180094004A/ko

Links

Images

Classifications

    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/0017Lossless audio signal coding; Perfect reconstruction of coded audio signal by transmission of coding error
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/02Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using spectral analysis, e.g. transform vocoders or subband vocoders
    • 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
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • 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
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4043Adaptive prefix coding
    • H03M7/405Tree adaptation
    • 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
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3086Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
    • 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
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3088Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78

Abstract

본 개시내용은 블록 처리 저장 시스템 상에 저장된 데이터 및 오디오 데이터의 축소에 관한 것이다. 오디오 컴포넌트의 무손실 축소된 표현은 하나 이상의 기본 오디오 컴포넌트에 대한 참조들, 그리고 임의로, 하나 이상의 기본 오디오 컴포넌트에 적용될 때, 오디오 컴포넌트가 얻어지게 하는 재구성 프로그램의 설명을 포함할 수 있다. 데이터 블록의 무손실 축소된 표현은 하나 이상의 기본 데이터 엘리먼트 블록에 대한 참조들, 그리고 임의로, 하나 이상의 기본 데이터 엘리먼트 블록에 적용될 때, 데이터 블록이 얻어지게 하는 재구성 프로그램의 설명을 포함할 수 있다.

Description

블록 처리 저장 시스템 상에 저장된 데이터 및 오디오 데이터의 축소
본 개시내용은 데이터 저장, 검색, 및 통신에 관한 것이다. 보다 구체적으로, 본 개시내용은 내용 연관 시브(content-associative sieve)를 사용하는 무손실 데이터 축소에 관한 것이다.
현대 정보 시대는 엄청난 양의 데이터의 생성, 포착 및 분석으로 특징지워진다. 새로운 데이터가 다양한 소스들로부터 생성되고, 소스들의 예들은 구매 거래 기록, 기업 및 정부 기록 및 통신, 이메일, 소셜 미디어 게시물, 디지털 사진 및 비디오, 머신 로그, 임베디드 디바이스로부터의 신호, 디지털 센서, 셀룰러폰 GPS(global positioning satellite), 우주 위성, 과학 계산, 및 원대한 도전 과학을 포함한다. 데이터가 다양한 포맷들로 생성되고, 그의 상당 부분은 구조화되어 있지 않으며 종래의 데이터베이스에 입력하기에 부적합하다. 기업, 정부, 및 개인은 유례없는 속도로 데이터를 생성하고 이 데이터를 저장, 분석, 및 전달하기 위해 분투하고 있다. 늘어나는 데이터를 보유하기 위해 저장 시스템의 구매에 매년 수백억 달러가 지출된다. 이와 유사하게, 데이터를 처리하기 위해 컴퓨터 시스템에 거액이 지출된다.
대부분의 최신 컴퓨터 및 저장 시스템들에서, 데이터는, 저장 계층구조로서 조직화된, 다수의 저장 계층(tier of storage)들에 걸쳐 수용되고 배포된다. 종종 그리고 신속하게 액세스될 필요가 있는 데이터는 가장 빠르지만 가장 고가의 계층(tier)에 배치되는 반면, 대부분의 데이터(백업을 위한 사본들을 포함함)는 가장 밀도가 높고 가장 저렴한 저장 매체에 저장되는 것이 바람직하다. 가장 빠르고 가장 고가인 데이터 저장 계층은, 마이크로프로세서 코어에 아주 근접하여 존재하고 데이터의 랜덤 액세스를 위한 가장 낮은 대기시간과 가장 높은 대역폭을 제공하는, 컴퓨터 시스템의 휘발성 랜덤 액세스 메모리 또는 RAM이다. 점진적으로 더 밀도가 높고 더 저렴하지만 더 느린 계층들(점진적으로 더 높은 대기시간 및 더 낮은 대역폭의 랜덤 액세스를 가짐)은 비휘발성 솔리드 스테이트 메모리 또는 플래시 저장소, 하드 디스크 드라이브(HDD), 그리고 마지막으로 테이프 드라이브를 포함한다.
증가하는 데이터를 보다 효과적으로 저장하고 처리하기 위해, 컴퓨터 산업은 데이터 저장 매체의 밀도 및 속도와 컴퓨터들의 처리 능력을 계속하여 개선시키고 있다. 그렇지만, 데이터 양의 증가는 컴퓨팅 및 데이터 저장 시스템들의 용량 및 밀도의 개선을 훨씬 능가한다. 2014년의 데이터 저장소 산업의 통계를 보면 지난 몇 년 동안 생성되고 포착된 새로운 데이터가 전 세계에서 지금까지 포착된 데이터의 대부분을 구성한다는 것을 보여준다. 현재까지 전 세계에서 생성된 데이터의 양은 수 제타바이트(zettabyte)를 초과하는 것으로 추정된다(제타바이트는 1021 바이트임). 데이터의 엄청난 증가로 인해 이 데이터를 신뢰성있게 저장, 처리 및 전달해야만 하는 데이터 저장, 컴퓨팅, 및 전달 시스템들에 대한 요구가 커지고 있다. 이로 인해, 데이터가 감소된 비용으로 저장되고 또한 효율적으로 처리 및 전달될 수 있도록, 데이터를 압축(compact)하기 위해 무손실 데이터 축소 또는 압축 기법들의 사용이 증가된다.
각종의 무손실 데이터 축소 또는 압축 기법들이 수년 간 등장하고 발전해 왔다. 이 기법들은 데이터에서 어떤 형태의 중복성(redundancy)을 찾아내고 그 중복성을 이용하여 어떤 정보 손실도 없이 데이터 풋프린트(data footprint)의 감소를 실현하기 위해 데이터를 검사한다. 데이터에서의 특정 형태의 중복성을 이용하려고 하는 주어진 기법에서, 달성되는 데이터 축소의 정도는 데이터에서 그 특정 형태의 중복성이 얼마나 빈번히 발견되는지에 의존한다. 데이터 축소 기법이 데이터에서의 임의의 이용가능한 중복성을 유연하게 발견하고 이용할 수 있는 것이 바람직하다. 데이터가 아주 다양한 소스들 및 환경들로부터 그리고 각종의 포맷들로 나오기 때문에, 이 다양한 데이터를 핸들링하는 범용 무손실 데이터 축소(universal lossless data reduction) 기법들의 개발 및 채택에 큰 관심이 있다. 범용 데이터 축소 기법은 알파벳 이외의 입력 데이터에 대한 어떤 사전 지식도 필요로 하지 않는 기법이고; 따라서 데이터의 구조 및 통계적 분포 특성들을 사전에 알 필요없이 모든 데이터에 일반적으로 적용될 수 있다.
데이터 압축 기법들의 상이한 구현들을 비교하는 데 사용될 수 있는 적합성 메트릭(goodness metric)들은 대상 데이터 세트들에 대해 달성되는 데이터 축소의 정도, 압축 또는 축소가 달성되는 효율성, 및 데이터가 압축해제되고 장래의 사용을 위해 검색되는 효율성을 포함한다. 효율성 메트릭들은 해결책의 성능 및 비용 효과(cost-effectiveness)를 평가한다. 성능 메트릭들은 새로운 데이터가 소비되고 축소될 수 있는 처리율 또는 수집 속도(ingest rate), 입력 데이터를 축소시키는 데 필요한 대기시간 또는 시간, 데이터가 압축해제되고 검색될 수 있는 처리율 또는 속도, 데이터를 압축해제하고 검색하는 데 필요한 대기시간 또는 시간을 포함한다. 비용 메트릭들은, 마이크로프로세서 코어들과 같은 요구된 임의의 전용 하드웨어 컴포넌트들의 비용 또는 마이크로프로세서 이용률(중앙 처리 유닛 이용률), 전용 스크래치 메모리(dedicated scratch memory)의 양 및 메모리 대역폭은 물론, 데이터를 보유하는 다양한 저장 계층들로부터 요구되는 액세스 횟수 및 대역폭을 포함한다. 효율적이고 신속한 압축은 물론 압축해제 및 검색을 제공함과 동시에 데이터의 풋프린트를 감소시키는 것이 데이터를 저장 및 전달하기 위한 총 비용을 줄이는 것뿐만 아니라 데이터의 후속 처리를 효율적으로 가능하게 하는 이점이 있다는 것에 유의한다.
업계에서 현재 사용되고 있는 범용 데이터 압축 기법들 중 다수는 1977년에 Abraham Lempel과 Jacob Ziv에 의해 개발된 Lempel-Ziv 압축 방법에서 파생된 것이다 - 예컨대, Jacob Ziv and Abraham Lempel, "A Universal Algorithm for Sequential Data Compression," IEEE transactions on information theory, Vol. IT-23, No. 3, May 1977를 참조 -. 이 방법은 인터넷을 통한 효율적인 데이터 전송을 가능하게 하는 기초가 되었다. Lempel-Ziv 방법들(LZ77, LZ78 및 그의 변형들이라고 지칭됨)은 스트링(string)의 반복적인 출현들을 순차적으로 제시되는 입력 데이터 스트림의 슬라이딩 윈도우(sliding window) 내에 보이는 이전 출현에 대한 참조로 대체하는 것에 의해 데이터 풋프린트를 감소시킨다. 입력 데이터 스트림으로부터의 주어진 데이터 블록으로부터의 새로운 스트링(fresh string)을 소비할 때, 이 기법들은 윈도우의 길이에 이르기까지 현재 블록 및 이전 블록 내에서 이전에 보인 모든 스트링들을 조사한다. 새로운 스트링이 중복(duplicate)이면, 새로운 스트링이 원래의 스트링(original string)에 대한 역방향 참조(backward reference)로 대체된다. 중복된 스트링에 의해 제거되는 바이트 수가 역방향 참조를 위해 요구된 바이트 수보다 더 크면, 데이터의 축소가 달성되었다. 윈도우에 보이는 모든 스트링들을 탐색하기 위해 그리고 최대한의 스트링 매칭을 제공하기 위해, 이 기법들의 구현들은, 반복적 스캐닝(iterative scanning) 및 윈도우에 보이는 모든 스트링들의 사전을 포함하는 임시 북키핑 구조(temporary bookkeeping structure)를 구축하는 것을 비롯한, 각종의 방식들을 이용한다. 새로운 스트링을 어셈블(assemble)하기 위해 입력의 새로운 바이트들을 소비할 때, 이 기법들은, 중복이 발견되었는지를 결정하기 위해 그리고 중복을 역방향 참조로 대체하기 위해(또는, 대안적으로, 사전에의 추가가 행해질 필요가 있는지를 결정하기 위해), 기존의 윈도우 내의 모든 바이트들을 스캔하거나, 스트링들의 사전을 참조한다(어떤 계산이 뒤따름).
Lempel-Ziv 압축 방법은, 소스 심벌들이, 보다 빈번한 심벌들에 대해 보다 짧은 길이의 코드들이 사용됨으로써 데이터의 축소를 가져오도록 가변 폭 인코딩 방식을 종종 이용하여, 압축되고 있는 데이터 블록에서의 그들의 출현 빈도 또는 확률에 기초하여 동적으로 재인코딩되는, 제2 최적화가 데이터에 적용되는 것을 수반한다. 예를 들어, David A. Huffman, "A Method for the Construction of Minimum-Redundancy Codes," Proceedings of the IRE - Institute of Radio Engineers, Sep. 1952, pp. 1098-1101을 참조한다. 이 기법은 허프만 재인코딩(Huffman re-encoding)이라고 지칭되며, 전형적으로 빈도들을 계산하는 데이터에 걸친 제1 패스(pass)와 데이터를 실제로 인코딩하는 제2 패스를 필요로 한다. 이 방식에 따른 몇 가지 변형들이 또한 사용 중이다.
이 기법들을 사용하는 일 예는 Lempel-Ziv LZ77 압축 방법과 허프만 재인코딩을 결합한 "Deflate"라고 알려진 방식이다. Deflate는 바이트 시퀀스를 (보통은 보다 짧은) 비트 시퀀스로서 표현하는 방법과 후자의 비트 시퀀스들을 바이트로 패킹(packing)하는 방법을 지정하는 압축 스트림 데이터 포맷 규격을 제공한다. Deflate 방식은 원래 PKZIP 아카이빙 유틸리티(archiving utility)용으로 PKWARE, Inc.의 Phillip W. Katz에 의해 설계되었다. 예컨대, 1991년 9월 24일자의 Phillip W. Katz의 미국 특허 제5,051,745호 "String searcher, and compressor using same"을 참조한다. 미국 특허 제5,051,745호는 미리 결정된 대상 스트링(입력 스트링)에 대한 심벌들의 벡터(윈도우)를 탐색하는 방법을 기술한다. 이 해결책은 윈도우 내의 심벌들 각각에 대한 포인터를 갖는 포인터 배열(pointer array)을 이용하고, 입력 스트링의 동일한 사본이 있는지 탐색될 필요가 있는 윈도우 내의 가능한 위치들을 필터링하기 위해 해싱 방법을 사용한다. 이에 뒤따라서 그 위치들에서 스캐닝 및 스트링 매칭이 행해진다.
Deflate 방식은 데이터 압축을 위한 zlib 라이브러리에서 구현된다. Zlib은 Linux, Mac OS X, iOS, 및 각종의 게임 콘솔들과 같은 몇 가지 소프트웨어 플랫폼들의 핵심 컴포넌트인 소프트웨어 라이브러리이다. zlib 라이브러리는 zip(파일 아카이빙), gzip(단일 파일 압축), png(무손실 압축 이미지에 대한 Portable Network Graphics 포맷), 및 많은 다른 애플리케이션에서 사용하기 위한 Deflate 압축 및 압축해제 코드를 제공한다. Zlib은 이제 데이터 전송 및 저장을 위해 널리 사용된다. 서버들 및 브라우저들에 의한 대부분의 HTTP 트랜잭션들은 zlib을 사용하여 데이터를 압축 및 압축해제한다. 유사한 구현들이 데이터 저장 시스템들에 의해 점점 더 사용되고 있다.
2014년 4월에 Intel Corp.에 의해 발표된 "High Performance ZLIB Compression on Intel® Architecture Processors"라는 제하의 논문은 최신 인텔 프로세서(Core I7 4770 프로세서, 3.4 GHz, 8 MB 캐시) 상에서 실행되고 데이터의 Calgary 데이터 코퍼스(Calgary corpus of data)에 대해 동작하는 zlib 라이브러리의 최적화된 버전의 압축 및 성능을 서술한다. zlib에서 사용되는 Deflate 포맷은 매칭을 위한 최소 스트링 길이를 3 문자로, 매칭하는 것(match)의 최대 길이를 256 문자로, 그리고 윈도우의 크기를 32 킬로바이트로 설정한다. 이 구현은 9개의 최적화 레벨들에 대한 제어를 제공하고, 레벨 9는 최고 압축을 제공하지만 가장 많은 계산을 사용하고 스트링들의 가장 전면적 매칭(exhaustive matching)을 수행하며, 레벨 1은 가장 빠른 레벨이고 탐욕적 스트링 매칭(greedy string matching)을 이용한다. 이 논문은 단일 스레드 프로세서(single-threaded processor)를 사용하고 평균 17.66 클록/바이트의 입력 데이터를 소비하는 zlib 레벨 1(가장 빠른 레벨)을 사용하여 51%의 압축률을 보고한다. 3.4 GHz의 클록 주파수에서, 이것은 단일 마이크로프로세서 코어를 완전히 사용하는 동안 192 MB/초의 수집 속도를 의미한다. 이 보고는 또한 성능이 어떻게 적당한 압축 이득을 위해 최적화 레벨 6을 사용하는 38 MB/초(평균 88.1 클록/바이트)의 수집 속도로 그리고 최적화 레벨 9를 사용하는 16 MB/초(평균 209.5 클록/바이트)의 수집 속도로 빠르게 떨어지는지를 기술한다.
기존의 데이터 압축 해결책들은 전형적으로 최신 마이크로프로세서들 상의 단일 프로세서 코어를 사용하여 10 MB/초부터 200 MB/초까지의 범위에 있는 수집 속도들로 동작한다. 수집 속도를 더욱 증대(boost)시키기 위해, 다수의 코어들이 이용되거나, 윈도우 크기가 감소된다. 비록 비용은 증가하지만, 커스텀 하드웨어 가속기들을 사용하여 수집 속도에 대한 추가의 개선들이 달성된다.
앞서 기술된 기존의 데이터 압축 방법들은 전형적으로 단일 메시지 또는 파일 또는 어쩌면 몇 개의 파일들의 크기인 로컬 윈도우에서 짧은 스트링들 및 심벌들의 레벨에서 미세 단위 중복성(fine-grained redundancy)을 이용하는 데 효과적이다. 이 방법들은 큰 데이터 세트들 또는 극도로 큰 데이터 세트들에 대해 동작하고 높은 데이터 수집 속도 및 데이터 검색 속도를 요구하는 애플리케이션들에서 사용될 때 심각한 한계들 및 단점들을 갖는다.
하나의 중요한 한계는 이 방법들의 실제 구현들이 로컬 윈도우 내에서만 중복성을 효율적으로 이용할 수 있다는 것이다. 이 구현들이 임의적으로 긴 입력 데이터 스트림들을 용인할 수 있지만, 미세 단위 중복성이 발견되어야 하는 윈도우의 크기에 제한을 두는 것은 효율성에 의해 좌우된다. 이 방법들은 고도로 계산 집약적이고, 윈도우 내의 모든 데이터에의 빈번하고 신속한 액세스를 필요로 한다. 다양한 북키핑 구조들의 스트링 매칭 및 룩업(lookup)은 새로운 입력 스트링을 생성하는 각각의 새로운 바이트(또는 몇 바이트)의 입력 데이터를 소비할 때 트리거된다. 원하는 수집 속도들을 달성하기 위해, 스트링 매칭을 위한 윈도우 및 연관된 수단(machinery)은 대체로 프로세서 캐시 서브시스템에 존재해야만 하며, 이는 실제로 윈도우 크기에 대한 제약을 가한다.
예를 들어, 단일 프로세서 코어 상에서 200 MB/초의 수집 속도를 달성하기 위해, (모든 데이터 액세스들 및 계산을 포함하여) 수집된 바이트당 평균 이용가능 시간 버짓(time budget)은 5 ns이며, 이는 3.4 GHz의 동작 주파수를 갖는 최신 프로세서를 사용하여 17 클록을 의미한다. 이 버짓은 (소수의 사이클이 소요되는) 온칩 캐시들에의 액세스들 및 그에 뒤따른 스트링 매칭을 수용한다. 현재의 프로세서들은 몇 메가바이트의 용량의 온칩 캐시들을 가지고 있다. 메인 메모리에의 액세스는 200 사이클(약 70ns) 초과가 소요되며, 따라서 대체로 메모리에 존재하는 보다 큰 윈도우들은 수집 속도를 더욱 느려지게 할 것이다. 또한, 윈도우 크기가 증가하고, 중복된 스트링까지의 거리가 증가할 때, 역방향 참조들의 길이를 지정하는 비용도 증가하고, 따라서 중복이 있는지 보다 긴 스트링들만이 보다 넓은 범위에 걸쳐 탐색되도록 한다.
대부분의 최신 데이터 저장 시스템들에서, 저장 계층구조의 다양한 계층들에 걸쳐 저장된 데이터의 풋프린트는 시스템에서의 메모리 용량보다 몇 자릿수 더 큰 크기이다. 예를 들어, 시스템이 수백 기가바이트의 메모리를 제공할 수 있는 반면, 플래시 저장소에 존재하는 활성 데이터의 데이터 풋프린트는 수십 테라바이트일 수 있으며, 저장 시스템 내의 총 데이터는 수백 테라바이트부터 수 페타바이트까지의 범위에 있을 수 있다. 또한, 후속 저장 계층들에의 데이터 액세스들의 달성가능한 처리율은 각각의 연속적인 계층에 대해 한 자릿수 이상만큼 떨어진다. 슬라이딩 윈도우가 너무 커지게 되어 메모리에 더 이상 적합하지 않을 때, 이 기법들은 다음 데이터 저장 레벨들에의 상당히 더 낮은 대역폭 및 보다 높은 대기시간의 랜덤 IO(입력 동작 또는 출력 동작) 액세스에 의해 스로틀링(throttle)된다.
예를 들어, 데이터에 이미 존재하고 256 테라바이트 풋프린트에 걸쳐 확산되어 있는, 이를테면, 40 바이트의 평균 길이의 100개의 스트링들을 참조하여 기존의 데이터로부터 어셈블될 수 있는 4 킬로바이트의 들어오는 데이터의 파일 또는 페이지를 고려한다. 각각의 참조는 그의 주소를 지정하는 6 바이트, 및 스트링 길이에 대한 1 바이트를 필요로 하면서 40 바이트를 절감할 가능성이 있다. 이 예에서 기술된 페이지가 5배 초과만큼 압축될 수 있지만, 이 페이지에 대한 수집 속도는 (이 스트링들이 어디에 존재하는지를 완벽하고 저렴하게 예측할 수 있을지라도) 100개의 중복된 스트링들을 페치하고 검증하는 데 필요한 저장 시스템에의 100회 이상의 IO 액세스들에 의해 제한될 것이다. 250,000회 랜덤 IO 액세스/초(4 KB의 페이지들에의 랜덤 액세스들의 1 GB/초의 대역폭을 의미함)를 제공하는 저장 시스템은 저장 시스템의 모든 대역폭을 다 사용하면서 단지 10 MB/초의 수집 속도에 대해서는 초당 4 KB 크기의 이러한 페이지들을 2,500개만 압축할 수 있어서, 저장 시스템으로서 이용가능할 수 없게 된다.
수 테라바이트 또는 수 페타바이트 정도의 큰 윈도우 크기들을 갖는 종래의 압축 방법들의 구현들은 저장 시스템에의 데이터 액세스의 감소된 대역폭에 의해 스타빙(starve)될 것이고, 용납할 수 없을 정도로 느릴 것이다. 그러므로, 이러한 기법들의 실제 구현들은, 프로세서 캐시 또는 시스템 메모리에 들어가는 윈도우 크기들에서, 중복성이 로컬적으로 존재하는 경우에만 중복성을 효율적으로 발견하고 이용한다. 중복적인 데이터가 들어오는 데이터와 수 테라바이트, 페타바이트, 또는 엑사바이트만큼 공간적으로 또는 시간적으로 분리되어 있으면, 이 구현들은, 저장소 액세스 대역폭에 의해 제한되는, 용인가능한 속도들로 중복성을 발견할 수 없을 것이다.
종래의 방법들의 다른 한계는 데이터의 랜덤 액세스에 적합하지 않다는 것이다. 윈도우 전체에 걸쳐 있는 압축된 데이터 블록들은 임의의 블록 내의 임의의 청크가 액세스될 수 있기 전에 압축해제될 필요가 있다. 이것은 윈도우의 크기에 실제 제한을 둔다. 그에 부가하여, 압축되지 않은 데이터에 대해 전통적으로 수행되는 동작들(예컨대, 탐색 동작)이 압축된 데이터에서는 효율적으로 수행될 수 없다.
종래의 방법들(그리고 상세하게는, Lempel-Ziv 기반 방법들)의 또 다른 한계는 하나의 차원을 따라서만 중복성이 있는지 탐색한다는 것 - 동일한 스트링들을 역방향 참조들로 대체하는 것 - 이다. 허프만 재인코딩 방식의 한계는, 빈도들을 계산하고 이어서 재인코딩하기 위해, 데이터에 걸친 2번의 패스들을 필요로 한다는 것이다. 이것은 보다 큰 블록들에 대해 느려지게 된다.
전역 데이터 저장소(global store of data)에 걸쳐 긴 중복된 스트링들을 검출하는 데이터 압축 방법들은 종종 디지털 핑거프린팅(digital fingerprinting) 방식과 해싱(hashing) 방식의 조합을 사용한다. 이 압축 프로세스를 데이터 중복 제거(data deduplication)라고 지칭된다. 데이터 중복 제거의 가장 기본적인 기법은 파일들을 고정 크기 블록들로 분해하고 데이터 리포지토리(data repository)에 걸쳐 중복된 블록들을 찾아낸다. 파일의 사본이 생성되면, 제1 파일 내의 각각의 블록은 제2 파일에 중복을 가지며, 중복은 원래의 블록에 대한 참조로 대체될 수 있다. 중복 가능성이 있는 블록들의 매칭을 가속화하기 위해, 해싱의 방법이 이용된다. 해시 함수는 스트링을, 그의 해시 값이라고 불리는, 숫자 값으로 변환하는 함수이다. 2개의 스트링들이 같으면, 그들의 해시 값들도 같다. 해시 함수들은 다수의 스트링들을 주어진 해시 값에 매핑하고, 그로써 긴 스트링들이 훨씬 더 짧은 길이의 해시 값으로 될 수 있다. 해시 값들의 매칭은 2개의 긴 스트링들의 매칭보다 훨씬 더 빠를 것이고; 따라서, 중복들일 수 있는 가능한 스트링들을 필터링하기 위해, 해시 값들의 매칭이 먼저 행해진다. 입력 스트링 또는 블록의 해시 값이 리포지토리에 존재하는 스트링들 또는 블록들의 해시 값과 매칭하면, 중복의 존재를 확인하기 위해 입력 스트링이 동일한 해시 값을 갖는 리포지토리 내의 각각의 스트링과 비교될 수 있다.
파일을 고정 크기 블록들로 분해하는 것은 간단하고 편리하며, 고정 크기 블록들은 고성능 저장 시스템에서 매우 바람직하다. 그렇지만, 이 기법은 발견할 수 있는 중복성의 양에 한계가 있고, 이는 이 기법들이 낮은 압축 레벨들을 갖는다는 것을 의미한다. 예를 들어, 제2 파일을 생성하기 위해 제1 파일의 사본이 만들어지면 그리고 심지어 단일 바이트의 데이터가 제2 파일에 삽입되면, 모든 다운스트림 블록들의 정렬(alignment)이 변할 것이고, 각각의 새로운 블록의 해시 값이 새로 계산될 것이며, 데이터 중복 제거 방법이 더 이상 모든 중복들을 다 찾아내지는 않을 것이다.
데이터 중복 제거 방법들에서의 이 한계를 해결하기 위해, 업계는 매칭하는 내용의 위치들에서 데이터 스트림들을 동기화하고 정렬하기 위해 핑거프린팅의 사용을 채택하였다. 이 후자의 방식은 핑거프린트들에 기초하여 가변 크기 블록들을 생성한다. Michael Rabin은 랜덤하게 선택된 기약 다항식들이 비트 스트링을 핑거프린팅하는 데 어떻게 사용될 수 있는지를 보여주었다 - 예컨대, Michael O. Rabin, "Fingerprinting by Random Polynomials," Center for Research in Computing Technology, Harvard University, TR-15-81, 1981을 참조 -. 이 방식에서, 랜덤하게 선택된 소수(prime number) p가 긴 문자 스트링을, 큰 정수 모듈로(modulo) p로 간주되는 그 스트링의 나머지(residue)를 계산하는 것에 의해, 핑거프린팅하는 데 사용된다. 이 방식은 k-비트 정수들에 대해 정수 산술을 수행하는 것을 필요로 하고, 여기서 k = log2(p)이다. 대안적으로, 차수 k의 랜덤 기약 소수 다항식(random irreducible prime polynomial)이 사용될 수 있고, 핑거프린트는 그러면 데이터 모듈로 소수 다항식의 다항식 표현이다.
이 핑거프린팅 방법은, 시스템이 전역 리포지토리에서 이 청크들의 중복들을 찾아낼 수 있도록, 데이터 중복 제거 시스템들에서 청크 경계들을 설정할 적절한 위치들을 식별하기 위해 사용된다. 특정 값들의 핑거프린트들을 발견할 때 청크 경계들이 설정될 수 있다. 이러한 사용의 일 예로서, 32 이하의 차수의 다항식을 이용하여, (입력의 첫 번째 바이트에서 그리고 이어서 그후의 모든 연속적인 바이트에서 시작하여) 입력 데이터 내의 각각의 48-바이트 스트링마다에 대해 핑거프린트가 계산될 수 있다. 이어서 32-비트 핑거프린트의 하위 13 비트를 검사하고, 그 13 비트의 값이 미리 지정된 값(예컨대, 값 1)일 때마다 단절점(breakpoint)을 설정할 수 있다. 랜덤 데이터에 대해, 이러한 단절점이 대략 8 KB마다 한 번씩 나오게 되어, 평균 크기 8 KB의 가변 크기 청크들이 얻어질 가능성이 있도록, 13 비트가 그 특정의 값을 가질 확률은 1/ 213이다. 단절점들 또는 청크 경계들은 데이터의 내용에 의존하는 핑거프린트들에 사실상 정렬될 것이다. 오랜 기간(stretch) 동안 어떤 핑거프린트도 발견되지 않을 때, 시스템이 리포지토리에 대한 미리 지정된 크기보다 더 짧은 청크들을 확실히 생성하도록, 단절점이 미리 지정된 문턱값에 강제로 설정될 수 있다. 예컨대, Athicha Muthitacharoen, Benjie Chen, and David Mazieres, "A Low-bandwidth Network File System," SOSP '01, Proceedings of the eighteenth ACM symposium on Operating Systems Principles, 10/21/2001, pp. 174-187를 참조한다.
Michael Rabin과 Richard Karp에 의해 개발된 Rabin-Karp 스트링 매칭 기법은 핑거프린팅 및 스트링 매칭의 효율성에 대한 추가적인 개선들을 제공하였다(예컨대, Michael O. Rabin and R. Karp, "Efficient Randomized Pattern-Matching Algorithms," IBM Jour. of Res. and Dev., vol. 31, 1987, pp. 249-260을 참조). m 바이트 서브스트링을 그의 핑거프린트가 있는지 검사하는 핑거프린팅 방법이 O(m) 시간 내에 핑거프린팅 다항식 함수를 평가할 수 있다는 것에 유의한다. 이 방법이, 이를테면, n 바이트 입력 스트림의 매 바이트마다에서 시작되는 서브스트링에 적용될 필요가 있기 때문에, 데이터 스트림 전체에 대해 핑거프린팅을 수행하는 데 필요한 총 노력은 O(nxm)일 것이다. Rabin-Karp는, 서브스트링의 길이에 관계없이, 일정한 수의 동작들만 수행하여 이전 서브스트링의 해시 값으로부터 다음 서브스트링의 해시 값을 계산할 수 있는 롤링 해시(Rolling Hash)라고 지칭되는 해시 함수를 알아내었다. 따라서, 1 바이트를 우측으로 시프트시킨 후에, 새로운 m 바이트 스트링에 대한 핑거프린트의 계산이 증분적으로 행해질 수 있다. 이것은 핑거프린트를 계산하는 노력을 O(1)로, 그리고 데이터 스트림 전체를 핑거프린팅하기 위한 총 노력을, 데이터의 크기에 선형적인, O(n)으로 감소시킨다. 이것은 핑거프린트들의 계산 및 식별을 크게 가속화시킨다.
앞서 기술된 데이터 중복 제거 방법들에 대한 전형적인 데이터 액세스 및 계산 요구사항들은 다음과 같이 기술될 수 있다. 주어진 입력에 대해, 청크를 생성하기 위해 핑거프린팅이 완료되면, 청크에 대한 해시 값이 계산된 후에, 이 방법들은 먼저 모든 청크들의 해시 값들을 리포지토리에 유지하는 전역 해시 테이블(global hash table)을 탐색 및 룩업하기 위해 메모리 및 후속 저장 계층들에의 한 세트의 액세스들을 필요로 한다. 이것은 전형적으로 저장소에의 제1 IO 액세스를 필요로 할 것이다. 해시 테이블에 매칭하는 것이 있을 때, 이것에 뒤이어서 동일한 해시 값을 지니는 실제 데이터 청크들을 페치하기 위해 제2 세트의 저장소 IO들(전형적으로 하나이지만, 동일한 해시 값을 갖는 청크들이 리포지토리에 몇개 존재하는지에 따라 하나 초과일 수 있음)이 있게 된다. 마지막으로, 입력 청크를 페치된 매칭 가능성이 있는 청크와 비교하여 중복을 확인 및 식별하기 위해 바이트 단위 매칭(byte-by-byte matching)이 수행된다. 이것에 뒤이어서 새로운 중복된 블록을 원래의 블록에 대한 참조로 대체하기 위한 (메타데이터 공간에의) 제3 저장소 IO 액세스가 있게 된다. 전역 해시 테이블에 매칭하는 것이 없으면(또는 중복이 발견되지 않으면), 시스템은 새로운 블록을 리포지토리에 입력하기 위해 하나의 IO를 필요로 하고 새로운 해시 값을 입력하기 위해 전역 해시 테이블을 업데이트하기 위해 다른 IO를 필요로 한다. 이와 같이, 큰 데이터 세트들(메타데이터 및 전역 해시 테이블이 메모리에 들어가지 않고, 따라서 그들에 액세스하기 위해 저장소 IO를 필요로 하는 경우)에 대해, 이러한 시스템들은 입력 청크당 평균 3번의 IO를 필요로 할 수 있다. 전역 해시 테이블에 액세스하기 위해 제1 저장소 IO를 필요로 함이 없이 전역 해시 테이블에서의 미스(miss)들이 종종 검출될 수 있도록 각종의 필터들을 이용하고, 따라서 청크들 중 일부를 처리하는 데 필요한 IO의 횟수를 2로 줄이는 것에 의해 추가적인 개선들이 가능하다.
초당 250,000번의 랜덤 IO 액세스들(4 KB의 페이지들에의 랜덤 액세스들의 1 GB/초의 대역폭을 의미함)을 제공하는 저장 시스템은 초당 평균 크기 4 KB의 입력 청크들을 약 83,333개(250,000을 입력 청크당 3번의 IO로 나눔) 수집 및 중복 제거할 수 있어, 저장 시스템의 모든 대역폭을 다 사용하면서 333 MB/초의 수집 속도를 가능하게 한다. 저장 시스템의 대역폭의 절반만이 사용되더라도(따라서 다른 절반은 저장된 데이터에의 액세스를 위해 이용가능함), 이러한 중복 제거 시스템은 166 MB/초의 수집 속도를 여전히 제공할 수 있다. 이 수집 속도(I/O 대역폭에 의해 제한됨)는 충분한 처리 능력이 시스템에서 이용가능하다면 달성가능하다. 이와 같이, 충분한 처리 능력이 주어지면, 데이터 중복 제거 시스템들은 IO의 효율적 사용(economy)에 의해 데이터의 전역 범위에 걸쳐 큰 데이터 중복들을 발견하고 최신의 저장 시스템들에서 초당 수백 메가바이트의 수집 속도로 데이터 축소를 제공할 수 있다.
이상의 설명에 기초하여, 이 중복 제거 방법들이 전역적 범위에 걸쳐 긴 스트링들의 중복들을 찾아내는 데 효과적이지만, 주로 큰 중복들을 찾아내는 데 효과적이다는 것은 명백할 것이다. 보다 미세한 단위로 데이터에 대한 변형들 또는 수정들이 있으면, 이용가능한 중복성이 이 방법을 사용하여 발견되지 않을 것이다. 이것은 이 방법들이 유용한 데이터 세트들의 범위를 크게 감소시킨다. 이 방법들은 특정 데이터 저장 시스템들 및 애플리케이션들, 예컨대, 백업되는 새로운 데이터가 수정된 몇 개의 파일들만을 갖고 나머지는 모두가 이전의 백업에서 저장되었던 파일들의 중복들인, 통상의 데이터 백업에서 사용되어 왔다. 마찬가지로, 데이터 중복 제거 기반 시스템들은 종종, 데이터 센터들의 가상화된 환경들에서와 같이, 데이터 또는 코드의 다수의 정확한 사본들이 만들어지는 환경들에 설치된다. 그렇지만, 데이터가 변하고 보다 전반적으로 또는 보다 미세한 단위로 수정될 때, 데이터 중복 제거 기반 기법들은 그 효율성을 잃는다.
일부 접근법들(보통 데이터 백업 응용분야들에서 이용됨)은 입력 데이터와 입력의 해시 값과 매칭하는 해시 값을 갖는 스트링 간의 실제 바이트 단위 비교를 수행하지 않는다. 이러한 해결책들은 SHA-1과 같은 강력한 해시 함수들을 사용하여 충돌의 낮은 확률에 의존한다. 그렇지만, 충돌의 유한한 영이 아닌 확률(다수의 상이한 스트링들이 동일한 해시 값에 매핑될 수 있음)로 인해, 이러한 방법들은 무손실 데이터 축소를 제공하는 것으로 간주될 수 없고, 따라서 주된 저장 및 통신의 높은 데이터 무결성 요구사항들을 충족시키지 않을 것이다.
일부 접근법들은 다수의 기존의 데이터 압축 기법들을 조합한다. 전형적으로, 이러한 설정에서, 전역 데이터 중복 제거 방법들이 데이터에 먼저 적용된다. 차후에, 중복 제거된 데이터 세트에 대해, 작은 윈도우를 이용하여, 추가적인 데이터 축소를 달성하기 위해 허프만 재인코딩과 조합된 Lempel-Ziv 스트링 압축 방법들이 적용된다.
그렇지만, 지금까지 알려진 기법들을 모두 이용함에도 불구하고, 증가하고 축적되는 데이터의 요구와 세계 경제가 최상의 이용가능한 최신 저장 시스템들을 사용하여 감당가능하게 수용할 수 있는 것 사이에는 몇 자릿수의 격차가 계속하여 존재한다. 증가하는 데이터에 의해 요구되는 저장 용량의 엄청난 요구사항들이 주어지면, 데이터의 풋프린트를 추가로 감소시키기 위한 개선된 방법들이 계속하여 필요한다. 기존의 기법들의 한계들을 해결하거나 기존의 기법들에 의해 해결되지 않은 차원들을 따라 데이터에서의 이용가능한 중복성을 이용하는 방법들을 개발할 필요가 계속하여 있다. 이와 동시에, 용인가능한 속도로 그리고 용인가능한 처리 비용으로 효율적으로 데이터에 액세스하고 데이터를 검색할 수 있는 것이 계속하여 중요하다.
요약하면, 큰 데이터 세트들 및 극도로 큰 데이터 세트들에 걸쳐 중복성을 이용하고 높은 데이터 수집 속도 및 데이터 검색 속도를 제공할 수 있는 무손실 데이터 축소 해결책들에 대한 필요성이 오랫동안 계속되고 있다.
본 명세서에 기술되는 실시예들은 높은 데이터 수집 속도 및 데이터 검색 속도를 제공하면서 큰 데이터 세트들 및 아주 큰 데이터 세트들에 대해 무손실 데이터 축소를 수행할 수 있고 기존의 데이터 압축 시스템들의 단점들 및 한계들을 겪지 않는 기법들 및 시스템들을 특징으로 한다.
구체적으로는, 일부 실시예들은 데이터 청크에 기초하여 하나 이상의 기본 데이터 엘리먼트를 식별할 수 있으며, 여기서 상기 식별하는 것은 기본 데이터 엘리먼트들의 내용에 기초하여 기본 데이터 엘리먼트들을 조직화하는 데이터 구조를 탐색하기 위해 데이터 청크의 내용을 사용하는 것을 포함한다. 다음에, 실시예들은, 하나 이상의 기본 데이터 엘리먼트에 재구성 프로그램을 적용함으로써 데이터 청크가 재구성될 수 있도록, 데이터 청크 및 식별된 하나 이상의 기본 데이터 엘리먼트에 기초하여 재구성 프로그램을 결정할 수 있다. 실시예들은 이어서 데이터 청크의 무손실 축소된 표현(losslessly reduced representation)을 생성할 수 있으며, 여기서 무손실 축소된 표현은 식별된 하나 이상의 기본 데이터 엘리먼트 내의 각각의 기본 데이터 엘리먼트에 대한 참조 및 재구성 프로그램의 설명을 포함한다.
입력 데이터 세트는 구조의 하나 이상의 컴포넌트에 기초하여 입력 데이터 세트에 대해 탐색들이 수행되는 것을 가능하게 하는 구조를 가질 수 있다. 본 명세서에 기술된 일부 실시예들은 입력 데이터 세트의 구조를 인식할 수 있다. 실시예들은 이어서 구조의 하나 이상의 컴포넌트에 기초하여 축소된 데이터 세트에 대해 탐색들이 수행될 수 있도록 입력 데이터 세트의 구조의 컴포넌트들을 사용하여 기본 데이터 엘리먼트들을 조직화할 수 있다.
일부 실시예들은, 기본 데이터 엘리먼트들을 조직화하는 데이터 구조로부터, 데이터 구조(상기 데이터 구조는 기본 데이터 저장소(prime data store)라고 불림)에 제시되는 입력 쿼리 내의 특정 필드들 또는 차원들의 값들에 기초하여, 기본 데이터 엘리먼트들에 대한 메타데이터에 대한 참조들, 또는 기본 데이터 엘리먼트들에 대한 메타데이터, 또는 기본 데이터 엘리먼트들을 내용 연관 방식으로 검색할 수 있다. 매 기본 데이터 엘리먼트마다, 기본 데이터 저장소는 기본 데이터 엘리먼트를 참조하는 각각의 청크의 무손실 축소된 표현에 대한 역참조(reverse reference)를 보유할 수 있다. 이것은 기본 데이터 저장소의 내용 연관 탐색에 기초한 데이터 청크들의 검색을 가능하게 한다. 따라서, 데이터가 무손실 축소된 형태로 되어 있으면서 데이터의 내용 연관 탐색 및 검색이 수행될 수 있다.
일부 실시예들은 데이터 청크 내의 키워드들을 검출하기 위해 데이터 청크를 스캔하고, 이어서 데이터 청크들에서 발견된 키워드들에 대한 역 인덱스(inverted index)를 유지할 수 있으며, 각각의 키워드에 대한 이러한 인덱스는 키워드를 포함하는 각각의 청크의 무손실 축소된 표현에 대한 참조를 포함한다. 이것은, 데이터 청크들이 축소된 형태로 저장되어 있으면서, 데이터 청크들이 키워드들에 의해 탐색되는 것을 가능하게 한다.
도 1a는 본원에 기술되는 일부 실시예들에 따른, 입력 데이터를 엘리먼트들로 인수분해하고 이들을 기본 데이터 저장소에 존재하는 기본 데이터 엘리먼트들로부터 파생시키는 데이터 축소 방법들 및 장치들을 나타낸 도면.
도 1b 내지 도 1g는 본원에 기술되는 일부 실시예들에 따른, 도 1a에 예시된 방법들 및 장치들의 변형들을 나타낸 도면.
도 1h는 본원에 기술되는 일부 실시예들에 따른, 분류된 데이터(Distilled Data)의 구조를 기술하는 포맷 및 규격의 일 예를 제시하는 도면.
도 1i 내지 도 1p는 도 1a 내지 도 1g에 도시된 데이터 축소 방법들 및 장치들의 변형들에 대한 입력 데이터의 무손실 축소된 형태로의 개념적 변환을 나타낸 도면.
도 2는 본원에 기술되는 일부 실시예들에 따른, 입력 데이터를 엘리먼트들로 인수분해하고 이 엘리먼트들을 기본 데이터 저장소에 존재하는 기본 데이터 엘리먼트들로부터 파생시키는 것에 의한 데이터 축소 프로세스를 나타낸 도면.
도 3a, 도 3b, 도 3c, 도 3d, 및 도 3e는 본원에 기술되는 일부 실시예들에 따른, 기본 데이터 엘리먼트들을 그들의 이름에 기초하여 조직화하는 데 사용될 수 있는 상이한 데이터 조직화 시스템들을 나타낸 도면.
도 3f는 본원에 기술되는 일부 실시예들에 따른, 자기-기술 트리 노드 데이터 구조(self-describing tree node data structure)를 제시한 도면.
도 3g는 본원에 기술되는 일부 실시예들에 따른, 자기-기술 리프 노드 데이터 구조(self-describing leaf node data structure)를 제시한 도면.
도 3h는 본원에 기술되는 일부 실시예들에 따른, 탐색 룩어헤드(Navigation Lookahead) 필드를 포함하는 자기-기술 리프 노드 데이터 구조를 제시하는 도면.
도 4는 본원에 기술되는 일부 실시예들에 따른, 256 TB의 기본 데이터가 어떻게 트리 형태로 조직화될 수 있는지의 일 예를 도시하고, 트리가 메모리 및 저장소에서 어떻게 레이아웃될 수 있는지를 제시한 도면.
도 5a 내지 도 5c는 본원에 기술되는 실시예들을 사용하여 데이터가 어떻게 조직화될 수 있는지의 실제 예를 나타낸 도면.
도 6a 내지 도 6c는, 각각, 본원에 기술되는 일부 실시예들에 따른, 도 1a 내지 도 1c를 참조하여 기술된 내용 연관 매퍼(content-associative mapper)들에 대해 트리 데이터 구조들이 어떻게 사용될 수 있는지를 나타낸 도면.
도 7a는 본원에 기술되는 일부 실시예들에 따른, 재구성 프로그램에서 지정될 수 있는 변환들의 일 예를 나타낸 도면.
도 7b는 본원에 기술되는 일부 실시예들에 따른, 기본 데이터 엘리먼트들로부터 파생되는 후보 엘리먼트들의 결과들의 예들을 나타낸 도면.
도 8a 내지 도 8e는 본원에 기술되는 일부 실시예들에 따른, 입력 데이터를 고정 크기 엘리먼트들로 인수분해하고 엘리먼트들을 도 3d 및 도 3e를 참조하여 기술된 트리 데이터 구조로 조직화하는 것에 의해 데이터 축소가 어떻게 수행될 수 있는지를 나타낸 도면.
도 9a 내지 도 9c는 본원에 기술되는 일부 실시예들에 따른, 도 1c에 도시된 시스템에 기초한 데이터 분류(Data Distillation)TM 방식의 일 예를 나타낸 도면.
도 10a는 본원에 기술되는 일부 실시예들에 따른, 파생 엘리먼트를 산출하기 위해 재구성 프로그램에서 지정된 변환들이 기본 데이터 엘리먼트에 어떻게 적용되는지의 일 예를 제공한다.
도 10b 및 도 10c는 본원에 기술되는 일부 실시예들에 따른, 데이터 검색 프로세스들을 나타낸 것이다.
도 11a 내지 도 11g는 본원에 기술되는 일부 실시예들에 따른, 데이터 분류TM 메커니즘(소프트웨어, 하드웨어, 또는 이들의 조합을 사용하여 구현될 수 있음)을 포함하는 시스템들을 나타낸 도면.
도 11h는 본원에 기술되는 일부 실시예들에 따른, 데이터 분류TM 장치가 어떻게 샘플 범용 컴퓨팅 플랫폼과 인터페이싱할 수 있는지를 나타낸 도면.
도 11i는 블록 처리 저장 시스템(block processing storage system)에서의 데이터 축소를 위해 데이터 분류TM 장치가 어떻게 사용될 수 있는지를 예시한 도면.
도 12a 및 도 12b는 본원에 기술되는 일부 실시예들에 따른, 대역폭 제약 통신 매체를 통한 데이터의 전달을 위한 데이터 분류TM 장치의 사용을 나타낸 도면.
도 12c 내지 도 12k는 본원에 기술되는 일부 실시예들에 따른, 다양한 사용 모델들에 대해 데이터 분류TM 장치에 의해 생성되는 축소된 데이터의 다양한 컴포넌트들을 나타낸 도면.
도 12l 내지 도 12p는 본원에 기술되는 일부 실시예들에 따른, 상당히 더 큰 데이터 세트들을 매우 높은 수집 속도들로 수용할 수 있기 위해 분류 프로세스(Distillation process)가 어떻게 분산 시스템들 상에 배포되고 실행될 수 있는지를 나타낸 도면.
도 13 내지 도 17은 본원에 기술되는 일부 실시예들에 따른, 축소된 데이터에 대해 다차원 탐색 및 데이터 검색이 어떻게 수행될 수 있는지를 나타낸 도면.
도 18a 및 도 18b는 MPEG 1, 레이어 3 표준(MP3라고도 지칭됨)에 따른 오디오 데이터의 압축 및 압축해제를 위한 인코더 및 디코더의 블록도.
도 18c는 MP3 데이터에 대해 데이터 축소를 수행하기 위해 도 1a에 처음으로 도시된 데이터 분류 장치가 어떻게 향상될 수 있는지를 도시한 도면.
이하의 설명은 본 기술분야의 임의의 통상의 기술자가 본 발명을 제조 및 사용할 수 있게 하기 위해 제시되고, 특정의 적용분야 및 그의 요구사항들과 관련하여 제공된다. 개시된 실시예들에 대한 다양한 수정들이 본 기술분야의 통상의 기술자에게 즉각 명백할 것이며, 본원에 정의되는 일반 원리들은 본 발명의 사상 및 범주를 벗어나지 않고 다른 실시예들 및 적용분야들에 적용될 수 있다. 이와 같이, 본 발명은 도시된 실시예들로 제한되지 않고, 본원에 개시되는 원리들 및 특징들에 부합하는 가장 넓은 범주를 부여받아야 한다. 본 개시내용에서, 어구가 일단의 엔티티들과 함께 용어 "및/또는"을 사용할 때, 어구는, 달리 언급되지 않는 한, 일단의 엔티티들의 모든 가능한 조합들을 커버한다. 예를 들어, 어구 "X, Y 및/또는 Z"는 하기의 7개의 조합들을 커버한다: "X만", "Y만", "Z만", "X 및 Y이지만 Z는 아님", "X 및 Z이지만 Y는 아님", "Y 및 Z이지만 X는 아님", 그리고 "X, Y, 및 Z ".
내용 연관 시브를 사용하는 효율적인 무손실 데이터 축소
본원에 기술되는 일부 실시예들에서, 데이터 세트 전체에 걸쳐 전역적으로 중복성을 효율적으로 발견하고 이용하기 위해 데이터가 조직화되고 저장된다. 입력 데이터 스트림이 엘리먼트들이라고 불리는 구성 단편(constituent piece)들 또는 청크들로 분해되고, 엘리먼트들 간의 중복성이 엘리먼트 자체보다 더 미세한 단위로 검출 및 이용되며, 따라서 저장된 데이터의 총 풋프린트를 감소시킨다. 기본 데이터 엘리먼트들이라고 불리는 엘리먼트들의 세트가 식별되고 데이터 세트에 대한 공통의 공유 구성 블록들로서 사용되며, 기본 데이터 저장소 또는 시브라고 지칭되는 구조에 저장된다. 기본 데이터 엘리먼트는 단순히 특정 크기의 비트들, 바이트들, 또는 숫자들의 시퀀스이다. 기본 데이터 엘리먼트들은, 구현에 따라, 고정 크기 또는 가변 크기일 수 있다. 입력 데이터의 다른 구성 엘리먼트들은 기본 데이터 엘리먼트들로부터 파생되고 파생 엘리먼트들이라고 지칭된다. 이와 같이, 입력 데이터는 기본 데이터 엘리먼트들과 파생 엘리먼트들로 인수분해된다.
기본 데이터 저장소가 내용 연관 방식으로 탐색 및 액세스될 수 있도록, 기본 데이터 저장소는 기본 데이터 엘리먼트들을 정렬(order) 및 조직화한다. 어떤 입력 내용이 주어지면, 어떤 제한들이 있지만, 그 내용을 포함하는 기본 데이터 엘리먼트들을 검색하기 위해 기본 데이터 저장소가 쿼리될 수 있다. 입력 엘리먼트가 주어지면, 파생을 지정하는 데 최소한의 저장소를 필요로 하면서 입력 엘리먼트가 파생될 수 있는 기본 데이터 엘리먼트들 중 하나 또는 기본 데이터 엘리먼트들의 작은 세트를 신속하게 제공하기 위해, 기본 데이터 저장소가, 엘리먼트의 값 또는 엘리먼트 내의 특정 필드들의 값들을 사용하여, 탐색될 수 있다. 일부 실시예들에서, 기본 데이터 저장소 내의 엘리먼트들은 트리 형태로 조직화된다. 파생 엘리먼트는 기본 데이터 엘리먼트에 대해 변환들 - 이러한 변환들은 하나 이상의 기본 데이터 엘리먼트로부터 파생 엘리먼트를 어떻게 생성하는지를 기술하는, 재구성 프로그램에 지정되어 있음 - 을 수행함으로써 기본 데이터 엘리먼트로부터 파생된다. 거리 문턱값(Distance Threshold)은 파생 엘리먼트의 저장된 풋프린트의 크기에 대한 제한을 지정한다. 이 문턱값은 파생 엘리먼트들과 기본 데이터 엘리먼트들 간의 최대 허용 거리를 효과적으로 지정하고, 또한 파생 엘리먼트를 생성하는 데 사용될 수 있는 재구성 프로그램의 크기에 제한을 둔다.
파생 데이터의 검색은 파생에 의해 지정되는 하나 이상의 기본 데이터 엘리먼트에 대해 재구성 프로그램을 실행함으로써 달성된다.
본 개시내용에서, 앞서 기술된 범용 무손실 데이터 축소 기법은 데이터 분류TM 프로세스라고 지칭될 수 있다. 이는 화학에서의 증류- 혼합물을 그의 구성 엘리먼트들로 분리시키는 것 - 와 유사한 기능을 수행한다. 기본 데이터 저장소는 또한 시브 또는 데이터 분류TM 시브라고도 지칭된다.
이 방식에서, 입력 데이터 스트림은 엘리먼트들의 시퀀스로 인수분해되며, 각각의 엘리먼트는 기본 데이터 엘리먼트 또는 하나 이상의 기본 데이터 엘리먼트로부터 파생되는 파생 엘리먼트 중 어느 하나이다. 각각의 엘리먼트는, 기본 데이터 엘리먼트의 경우에, 기본 데이터 엘리먼트에 대한 참조를 포함하고, 파생 엘리먼트의 경우에, 파생에 관여된 하나 이상의 기본 데이터 엘리먼트에 대한 참조들, 및 재구성 프로그램의 설명을 포함하는, 무손실 축소된 표현으로 변환된다. 이와 같이, 입력 데이터 스트림이 무손실 축소된 표현으로 되어 있는 엘리먼트들의 시퀀스로 인수분해된다. 이 엘리먼트들의 시퀀스(무손실 축소된 표현으로 나타남)는 분류된 데이터 스트림(distilled data stream) 또는 분류된 데이터(distilled data)라고 지칭된다. 분류된 데이터 내의 엘리먼트들의 시퀀스는 입력 데이터 내의 엘리먼트들의 시퀀스에 일대일 대응관계를 갖는다 - 즉, 분류된 데이터 내의 엘리먼트들의 시퀀스에서의 n번째 엘리먼트는 입력 데이터 내의 엘리먼트들의 시퀀스에서의 n번째 엘리먼트에 대응한다 -.
본 개시내용에 기술되는 범용 무손실 데이터 축소 기법은, 분류된 데이터 스트림과 기본 데이터 저장소의 풋프린트들의 합이 보통 입력 데이터 스트림의 풋프린트보다 더 작도록, 입력 데이터 스트림을 수신하고 이를 분류된 데이터 스트림과 기본 데이터 저장소의 조합으로 변환한다. 본 개시내용에서, 분류된 데이터 스트림과 기본 데이터 저장소는 일괄하여 무손실 축소된 데이터(losslessly reduced data)라고 불리며, 또한 "축소된 데이터 스트림(reduced data stream)"또는 "축소된 데이터(reduced data)" 또는 "축소된 데이터(Reduced Data)"라고 서로 바꾸어 지칭될 것이다. 마찬가지로, 본 개시내용에 기술되는 무손실 데이터 축소 기법들에 의해 생성되고 무손실 축소된 포맷으로 나타나는 엘리먼트들의 시퀀스에 대해, 하기의 용어들이 서로 바꾸어 사용된다: "축소된 출력 데이터 스트림(reduced output data stream)", "축소된 출력 데이터(reduced output data)", "분류된 데이터 스트림", "분류된 데이터(distilled data)", 및 "분류된 데이터(Distilled Data)".
도 1a는 본원에 기술되는 일부 실시예들에 따른, 입력 데이터를 엘리먼트들로 인수분해하고 이들을 기본 데이터 저장소에 존재하는 기본 데이터 엘리먼트들로부터 파생시키는 데이터 축소 방법들 및 장치들을 나타낸 것이다. 이 도면은 데이터 축소 또는 데이터 분류TM 방법들 및 장치들의 전반적인 블록도를 나타내고 기능 컴포넌트들, 구조들, 및 동작들의 개요를 제공한다. 도 1a에 예시된 컴포넌트들 및/또는 동작은 소프트웨어, 하드웨어, 또는 이들의 조합을 사용하여 실현될 수 있다.
바이트들의 시퀀스가 입력 데이터 스트림으로부터 수신되고 입력 데이터(102)로서, 데이터 분류TM 장치라고도 지칭되는, 데이터 축소 장치(Data Reduction Apparatus)(103)에 제시된다. 파서 및 인수분해기(Parser & Factorizer)(104)는 들어오는 데이터를 파싱하고 이를 청크들 또는 후보 엘리먼트들로 분해한다. 인수분해기는 스트림을 후보 엘리먼트들로 슬라이싱하기 위해 입력 스트림에서의 어디에 단절(break)들을 삽입해야 하는지를 결정한다. 데이터에서의 2개의 연속적인 단절들이 식별되면, 후보 엘리먼트(105)가 파서 및 인수분해기에 의해 생성되고, 데이터 분류TM 시브라고도 지칭되는, 기본 데이터 저장소(106)에 제시된다.
데이터 분류TM 시브 또는 기본 데이터 저장소(106)는 모든 기본 데이터 엘리먼트들(도 1a에서 PDE들로서 부기되어 있음)를 포함하며, 그들을 그들의 값 또는 내용에 기초하여 정렬 및 조직화한다. 시브는 두 가지 종류의 액세스에 대한 지원을 제공한다. 첫째, 기본 데이터 엘리먼트들 각각이 기본 데이터 엘리먼트가 시브에서 존재하는 위치를 참조하여 직접 액세스될 수 있다. 둘째, 엘리먼트들이, 소프트웨어, 하드웨어, 또는 이들의 조합으로 구현될 수 있는, 내용 연관 매퍼(121)를 사용하여 내용 연관 방식으로 액세스될 수 있다. 시브에의 이 제2 형태의 액세스는, 후보 엘리먼트(105)와 정확하게 매칭하는 기본 데이터 엘리먼트를 식별하기 위해 또는 후보 엘리먼트가 파생될 수 있는 기본 데이터 엘리먼트들을 식별하기 위해, 개시된 실시예들에 의해 사용되는 중요한 특징이다. 구체적으로는, 후보 엘리먼트, 예컨대, 후보 엘리먼트(105)가 주어지면, 파생을 지정하는 데 최소한의 저장소를 필요로 하면서 후보 엘리먼트가 파생될 수 있는 기본 데이터 엘리먼트들(107) 중 하나 또는 기본 데이터 엘리먼트들(107)의 작은 세트를 신속하게 제공하기 위해, 기본 데이터 저장소(106)가 (후보 엘리먼트(105)의 값에 기초하여, 또는 후보 엘리먼트(105) 내의 특정 필드들의 값에 기초하여) 탐색될 수 있다.
시브 또는 기본 데이터 저장소(106)는 데이터 공간에 걸쳐 확산되어 있는 값들을 갖는 기본 데이터 엘리먼트들의 세트로 초기화될 수 있다. 대안적으로, 시브는 비어 있는 채로 시작될 수 있으며, 도 1a 내지 도 1c 및 도 2를 참조하여 본원에 기술되는 데이터 분류TM 프로세스에 따라, 데이터가 수집될 때 기본 데이터 엘리먼트들이 동적으로 시브에 추가될 수 있다.
파생기(Deriver)(110)는 후보 엘리먼트(105) 및 (기본 데이터 저장소(106)로부터 내용 연관 방식으로(content associatively) 검색되는) 파생에 적당한 검색된 기본 데이터 엘리먼트들(107)을 수신하고, 후보 엘리먼트(105)가 이 기본 데이터 엘리먼트들 중 하나 이상으로부터 파생될 수 있는지를 결정하며, (관련 기본 데이터 엘리먼트들에 대한 참조들 및 재구성 프로그램으로 이루어져 있는) 축소된 데이터 컴포넌트들(115)을 생성하고, 기본 데이터 저장소에 대한 업데이트들(114)을 제공한다. 후보 엘리먼트가 검색된 기본 데이터 엘리먼트의 중복이면, 파생기는 기본 데이터 저장소에 위치된 기본 데이터 엘리먼트에 대한 참조(또는 포인터) 그리고 또한 이것이 기본 데이터 엘리먼트라는 것의 표시자를 분류된 데이터(108)에 배치한다. 중복이 발견되지 않으면, 파생기는 하나 이상의 검색된 기본 데이터 엘리먼트에 대해 수행되는 하나 이상의 변환의 결과로서 후보 엘리먼트를 표현하고, 여기서 변환들의 시퀀스는 일괄하여 재구성 프로그램, 예컨대, 재구성 프로그램(119A)이라고 지칭된다. 각각의 파생은 그 자신의 독자적인 프로그램이 파생기에 의해 구성될 것을 필요로 할 수 있다. 재구성 프로그램은 기본 데이터 엘리먼트들에 적용될 수 있는 삽입(insertion), 삭제(deletion), 대체(replacement), 연결(concatenation), 산술(arithmetic), 및 논리 연산(logical operation)들과 같은 변환들을 지정한다. 파생 엘리먼트의 풋프린트(재구성 프로그램의 크기 + 요구된 기본 데이터 엘리먼트들에 대한 참조들의 크기로서 계산됨)가 (데이터 축소를 가능하게 하기 위해) 후보 엘리먼트와 관련하여 특정 지정된 거리 문턱값 내에 있으면, 후보 엘리먼트는 파생 엘리먼트로서 재규정(reformulate)되고 재구성 프로그램과 관련 기본 데이터 엘리먼트(또는 엘리먼트들)에 대한 참조들의 조합에 의해 대체된다 - 이들은 이 경우에 축소된 데이터 컴포넌트들(115)을 형성한다 -. 문턱값이 초과되면, 또는 적당한 기본 데이터 엘리먼트가 기본 데이터 저장소로부터 검색되지 않으면, 기본 데이터 저장소는 후보를 새로운 기본 데이터 엘리먼트로서 설치하라고 지시받을 수 있다. 이 경우에, 파생기는 새로 추가된 기본 데이터 엘리먼트에 대한 참조 그리고 또한 이것이 기본 데이터 엘리먼트라는 표시자를 분류된 데이터에 배치한다.
데이터의 검색에 대한 요청(예컨대, 검색 요청들(109))은 기본 데이터 엘리먼트를 포함하는 기본 데이터 저장소에서의 위치에 대한 참조, 또는 파생물의 경우에, 기본 데이터 엘리먼트에 대한 이러한 참조 및 연관된 재구성 프로그램의 조합(또는 다수의 기본 데이터 엘리먼트들에 기초한 파생물의 경우에, 다수의 기본 데이터 엘리먼트들에 대한 참조들과 연관된 재구성 프로그램의 조합)의 형태로 되어 있을 수 있다. 기본 데이터 저장소에서의 기본 데이터 엘리먼트들에 대한 하나 이상의 참조를 사용하여, 검색기(111)는 하나 이상의 기본 데이터 엘리먼트를 페치하기 위해 기본 데이터 저장소에 액세스하고 하나 이상의 기본 데이터 엘리먼트는 물론 재구성 프로그램을, 데이터 검색 요청에 응답하여 (요청된 데이터인) 재구성된 데이터(116)를 생성하고 이를 검색된 데이터 출력(113)에 전달하기 위해 하나 이상의 기본 데이터 엘리먼트에 대해 (재구성 프로그램에 지정된) 변환들을 실행하는, 재구성기(Reconstitutor)(112)에 제공할 수 있다.
이 실시예의 변형에서, 기본 데이터 엘리먼트들은 (허프만 코딩 및 Lempel Ziv 방법들을 비롯한, 종래 기술에 공지된 기법들을 사용하여) 압축된 형태로 시브에 저장되고 필요할 때 압축해제될 수 있다. 이것은 기본 데이터 저장소의 총 풋프린트를 감소시키는 장점이 있다. 유일한 제약조건은 내용 연관 매퍼(121)가 이전과 같이 기본 데이터 엘리먼트들에의 내용 연관 액세스(Content Associative Access)를 계속하여 제공해야만 한다는 것이다.
도 1b 및 도 1c는 본원에 기술되는 일부 실시예들에 따른, 도 1a에 예시된 방법들 및 장치들의 변형들을 나타낸 것이다. 도 1b에서, 재구성 프로그램들은 기본 데이터 저장소에 저장되고 기본 데이터 엘리먼트들처럼 취급될 수 있다. 재구성 프로그램(119A) 자체를 제공하는 대신에 재구성 프로그램에 대한 참조 또는 포인터(119B)가 분류된 데이터(108)에 제공된다. 재구성 프로그램이 다른 파생물들에 의해 공유되면 그리고 재구성 프로그램에 대한 참조 또는 포인터(+ 재구성 프로그램과 재구성 프로그램에 대한 참조를 구별하는 데 필요한 임의의 메타데이터)가 재구성 프로그램 자체보다 더 적은 저장 공간을 필요로 하면, 추가적인 데이터 축소가 달성된다.
도 1b에서, 재구성 프로그램들은 마치 기본 데이터 엘리먼트들처럼 취급되고 액세스되며, 기본 데이터 저장소에 기본 데이터 엘리먼트들로서 저장됨으로써, 기본 데이터 저장소로부터의 재구성 프로그램들의 내용 연관 탐색 및 검색을 가능하게 할 수 있다. 파생 엘리먼트를 생성하는 파생 프로세스 동안, 파생기(110)가 파생에 필요한 재구성 프로그램을 결정하면, 파생기(110)는 이어서 이 후보 재구성 프로그램이 기본 데이터 저장소에 이미 존재하는지 또는 이 후보 재구성 프로그램이 기본 데이터 저장소에 이미 존재하는 다른 엔트리로부터 파생될 수 있는지를 결정할 수 있다. 후보 재구성 프로그램이 기본 데이터 저장소에 이미 존재하면, 파생기(110)는 이미 존재하는(pre-existing) 엔트리에 대한 참조를 결정하고 참조를 분류된 데이터(108)에 포함시킬 수 있다. 후보 재구성 프로그램이 기본 데이터 저장소에 이미 존재하는 기존의 엔트리로부터 파생될 수 있으면, 파생기는 후보 재구성 프로그램의 파생물 또는 재규정(reformulation)을 분류된 데이터에 전달할 수 있다 - 즉, 파생기는 기본 데이터 저장소에 이미 존재하는 엔트리에 대한 참조를, 이미 존재하는 엔트리로부터 후보 재구성 프로그램을 파생시키는 증분적 재구성 프로그램(incremental Reconstitution Program)과 함께, 분류된 데이터에 배치한다 -. 후보 재구성 프로그램이 기본 데이터 저장소에 존재하지도 않고 기본 데이터 저장소 내의 엔트리들로부터 파생가능하지도 않으면, 파생기(110)는 재구성 프로그램을 기본 데이터 저장소에 추가하고(재구성 프로그램을 저장소에 추가하는 동작은 새로 추가된 엔트리에 대한 참조를 반환할 수 있음), 재구성 프로그램에 대한 참조를 분류된 데이터(108)에 포함시킬 수 있다.
도 1c는 본원에 기술되는 일부 실시예들에 따른, 도 1b에 예시된 방법들 및 장치들의 변형을 제시한 것이다. 구체적으로는, 재구성 프로그램들을 저장하고 쿼리하는 데 사용되는 도 1c에서의 메커니즘은 기본 데이터 엘리먼트들을 저장하고 쿼리하는 데 사용되는 메커니즘과 유사하지만, 재구성 프로그램들은 기본 데이터 엘리먼트들을 포함하는 구조와 별개의 구조에 유지된다. 이러한 구조에서의 엔트리들은 기본 재구성 프로그램(Prime Reconstitution Program)들(도 1c에서 PRP들로서 부기되어 있음)이라고 지칭된다. 기본 데이터 저장소(106)가 고속 내용 연관 룩업 동작들을 지원하는 내용 연관 매퍼(121)를 포함한다는 것을 상기한다. 도 1c에 예시된 실시예는 내용 연관 매퍼(121)와 유사한 내용 연관 매퍼(122)를 포함한다. 도 1c에서, 내용 연관 매퍼(122) 및 내용 연관 매퍼(121)는 기본 데이터 저장소 또는 시브(106)의 일부인 것으로 도시되어 있다. 다른 실시예들에서, 내용 연관 매퍼(122) 및 재구성 프로그램들이 기본 데이터 저장소 또는 시브(106)와 별도로 저장될 수 있다.
이 실시예의 변형에서, 기본 데이터 엘리먼트들은 (허프만 코딩 및 Lempel Ziv 방법들을 비롯한, 종래 기술에 공지된 기법들을 사용하여) 압축된 형태로 시브에 저장되고 필요할 때 압축해제될 수 있다. 마찬가지로, 기본 재구성 프로그램들은 (허프만 코딩 및 Lempel Ziv 방법들을 비롯한, 종래 기술에 공지된 기법들을 사용하여) 압축된 형태로 기본 재구성 프로그램 시브에 저장되고 필요할 때 압축해제될 수 있다. 이것은 기본 데이터 시브 및 기본 재구성 프로그램 시브의 총 풋프린트를 감소시키는 장점이 있다. 유일한 제약조건은 내용 연관 매퍼들(121 및 122)이 이전과 같이 기본 데이터 엘리먼트들 및 기본 재구성 프로그램들에의 내용 연관 액세스를 계속하여 제공해야만 한다는 것이다.
도 1d는 본원에 기술되는 일부 실시예들에 따른, 도 1a에 예시된 방법들 및 장치들의 변형을 제시한 것이다. 구체적으로는, 도 1d에 기술된 실시예에서, 기본 데이터 엘리먼트들은 분류된 데이터에 인라인으로(inline) 저장된다. 기본 데이터 시브 또는 기본 데이터 저장소(106)는 기본 데이터 엘리먼트들에의 내용 연관 액세스를 계속하여 제공하고 기본 데이터 엘리먼트들을 계속하여 논리적으로 포함한다. 이는 분류된 데이터에 인라인으로 위치되는 기본 데이터 엘리먼트들에 대한 참조들 또는 링크들을 유지한다. 예를 들어, 도 1d에서, 기본 데이터 엘리먼트(130)는 분류된 데이터(108)에 인라인으로 위치된다. 기본 데이터 시브 또는 기본 데이터 저장소(106)는 기본 데이터 엘리먼트(130)에 대한 참조(131)를 유지한다. 한번 더 말하지만, 이 설정에서, 파생 엘리먼트의 무손실 축소된 표현은 요구된 기본 데이터 엘리먼트에 대한 참조를 포함할 것이다. 데이터 검색 동안, 검색기(111)는 요구된 기본 데이터 엘리먼트를 그가 위치되는 곳으로부터 페치할 것이다.
도 1e는 본원에 기술되는 일부 실시예들에 따른, 도 1d에 예시된 방법들 및 장치들의 변형을 제시한 것이다. 구체적으로는, 도 1e에 기술된 실시예에서, 마치 도 1b에 예시된 설정에서와 같이, 재구성 프로그램들이 다른 기본 재구성 프로그램들로부터 파생되고, 점진적 재구성 프로그램 + 기본 재구성 프로그램에 대한 참조로서 지정될 수 있다. 이러한 기본 재구성 프로그램들은 기본 데이터 엘리먼트들처럼 취급되고 기본 데이터 시브에 논리적으로 설치된다. 게다가, 이 설정에서, 기본 데이터 엘리먼트들과 기본 재구성 프로그램들 둘 다는 분류된 데이터에 인라인으로 저장된다. 기본 데이터 시브 또는 기본 데이터 저장소(106)는 기본 데이터 엘리먼트들 및 기본 재구성 프로그램들에의 내용 연관 액세스를 계속하여 제공하고, 이 기본 데이터 엘리먼트들 및 기본 재구성 프로그램들을, 그들이 위치되는 곳에 대한 참조들 또는 링크들을 분류된 데이터에 인라인으로 유지하면서, 계속하여 논리적으로 포함한다. 예를 들어, 도 1e에서, 기본 데이터 엘리먼트(130)는 분류된 데이터(108)에 인라인으로 위치된다. 또한 도 1e에서, 기본 재구성 프로그램(132)은 분류된 데이터에 인라인으로 위치된다. 기본 데이터 시브 또는 기본 데이터 저장소(106)는 기본 데이터 엘리먼트(130)(PDE_i임)에 대한 참조(131)(Reference_to_PDE_i임), 및 기본 재구성 프로그램(132)(Prime_Recon_Program_l임)에 대한 참조(133)(Reference_to_PDE_k임)를 유지한다. 한번 더 말하지만, 이 설정에서, 파생 엘리먼트의 무손실 축소된 표현은 요구된 기본 데이터 엘리먼트 및 요구된 기본 재구성 프로그램에 대한 참조를 포함할 것이다. 데이터 검색 동안, 검색기(111)는 요구된 컴포넌트들을, 그들이 대응하는 분류된 데이터에서 위치되는 곳으로부터, 페치할 것이다.
도 1f는 본원에 기술되는 일부 실시예들에 따른, 도 1e에 예시된 방법들 및 장치들의 변형을 제시한 것이다. 구체적으로는, 도 1f에 기술된 실시예에서, 마치 도 1c에 예시된 설정과 같이, 기본 데이터 시브(108)는 개별적인 매퍼들 - 기본 데이터 엘리먼트들에 대한 내용 연관 매퍼(121) 및 기본 재구성 프로그램들에 대한 내용 연관 매퍼(122) - 을 포함한다.
도 1g는 도 1a 내지 도 1f에 예시된 방법들 및 장치들의 보다 일반화된 변형을 제시한 것이다. 구체적으로는, 도 1g에 기술된 실시예에서, 기본 데이터 엘리먼트들은 기본 데이터 시브에 또는 분류된 데이터에 인라인으로 위치될 수 있다. 일부 기본 데이터 엘리먼트들은 기본 데이터 시브에 위치될 수 있는 반면, 다른 것들은 분류된 데이터에 인라인으로 위치된다. 마찬가지로, 기본 재구성 프로그램들도 기본 데이터 시브에 또는 분류된 데이터에 인라인으로 위치될 수 있다. 일부 기본 재구성 프로그램들은 기본 데이터 시브에 위치될 수 있는 반면, 다른 것들은 분류된 데이터에 인라인으로 위치된다. 기본 데이터 시브는 모든 기본 데이터 엘리먼트들과 기본 재구성 프로그램들을 논리적으로 포함하고, 기본 데이터 엘리먼트 또는 기본 재구성 프로그램이 분류된 데이터에 인라인으로 위치되어 있는 경우에, 기본 데이터 시브는 그의 위치에 대한 참조를 제공한다.
입력 데이터를 엘리먼트들로 인수분해하고 이들을 기본 데이터 저장소에 존재하는 기본 데이터 엘리먼트들로부터 파생시키는 데이터 축소 방법들 및 장치들의 전술한 설명은 단지 예시 및 설명을 위해 제시된 것이다. 이 설명은 전수적인 것으로도 본 발명을 개시된 형태들로 제한하려는 것으로도 의도되어 있지 않다. 그에 따라, 많은 수정들 및 변형들이 본 기술분야의 통상의 기술자들에게 명백할 것이다.
도 1h는 본원에 기술되는 일부 실시예들에 따른, 데이터 분류TM 프로세스에 대한 방법 및 장치의 도 1a에서의 분류된 데이터(119A)의 구조를 기술하는 포맷 및 규격의 일 예를 제시한 것이다. 데이터 분류TM 프로세스가 입력 데이터를 기본 데이터 엘리먼트들 및 파생 엘리먼트들로 인수분해하기 때문에, 데이터의 무손실 축소된 표현에 대한 포맷은 이 엘리먼트들을 식별해주고 분류된 데이터 내의 이 엘리먼트들의 다양한 컴포넌트들을 기술한다. 자기-기술 포맷(self-describing format)은 분류된 데이터 내의 각각의 레코드를 식별해주고, 각각의 레코드가 기본 데이터 엘리먼트인지 파생 엘리먼트인지를 표시하며, 다양한 컴포넌트들, 즉 시브에 설치된 하나 이상의 기본 데이터 엘리먼트에 대한 참조들, (도 1b의 119B에서와 같이) 기본 데이터 저장소에 설치된 재구성 프로그램에 대한 참조 또는 (도 1c의 119C에서와 같이) 재구성 프로그램(RP) 저장소에 저장된 재구성 프로그램에 대한 참조, 및 인라인된 재구성 프로그램들(RP들)을 기술한다. 재구성 프로그램(RP) 저장소는 서로 바꾸어 기본 재구성 프로그램(PRP) 저장소라고도 지칭된다. 도 1h에서의 포맷은 다수의 기본 데이터 엘리먼트들에 대해 재구성 프로그램을 실행하는 것에 의해 파생을 지정하는 조항(provision)들을 갖고, 기본 데이터 엘리먼트들 각각 및 파생 엘리먼트의 크기들은 독립적으로 지정가능하다. 도 1h에서의 포맷은 또한 기본 데이터 저장소 내에 위치되는 것보다는 분류된 데이터에 인라인으로 위치되는 기본 데이터 엘리먼트를 지정하는 조항을 갖는다. 이것은, 엘리먼트의 유형이 분류된 데이터에 인라인으로 위치되는 기본 데이터 엘리먼트라는 것을 지정하는, Opcode 인코딩 7(Opcode encoding 7)에 의해 지정된다. 분류된 데이터는 이 포맷을 사용하여 데이터 저장 시스템에 저장된다. 이 포맷으로 된 데이터는, 데이터의 다양한 컴포넌트들이 페치되고 이어서 재구성될 수 있도록, 데이터 검색기(111)에 의해 소비된다.
도 1i 내지 도 1p는 도 1a 내지 도 1g에 도시된 데이터 축소 방법들 및 장치들의 변형들에 대한 입력 데이터의 무손실 축소된 형태로의 개념적 변환을 나타낸 것이다. 도 1i는 어떻게 입력 데이터의 스트림이 후보 엘리먼트들로 인수분해되고 이어서 후보 엘리먼트들이 기본 데이터 엘리먼트들 또는 파생 엘리먼트들 중 어느 하나인 것으로 간주되는지를 나타낸 것이다. 마지막으로, 데이터는 무손실 축소된 형태로 변환된다. 도 1i 내지 도 1n은 다양한 실시예들에 대한 무손실 축소된 형태의 변형들을 나타낸 것이다.
도 1i 및 도 1j는 도 1a에 예시된 방법들 및 장치들에 의해 생성되는 데이터의 무손실 축소된 형태의 예들을 나타낸 것이다. 도 1i에서의 무손실 축소된 형태는 내용 연관 매퍼를 포함하고, 데이터의 계속적인 추가 수집 및 기존의 기본 데이터 엘리먼트들과의 대조에 따른 이 데이터의 축소를 가능하게 하는 형태인 반면, 도 1j에서의 무손실 축소된 형태는 더 이상 내용 연관 매퍼를 보유하지 않아서, 데이터의 풋프린트가 보다 작게 된다. 도 1k 및 도 1l은 도 1c에 예시된 방법들 및 장치들에 의해 생성되는 데이터의 무손실 축소된 형태의 예들을 나타낸 것이다. 도 1k에서의 무손실 축소된 형태는 내용 연관 매퍼들을 포함하고, 데이터의 계속적인 추가 수집 및 기존의 기본 데이터 엘리먼트들 및 기본 재구성 프로그램들과의 대조에 따른 이 데이터의 축소를 가능하게 하는 형태인 반면, 도 1l에서의 무손실 축소된 형태는 더 이상 내용 연관 매퍼들을 보유하지 않아서, 데이터의 풋프린트가 보다 작게 된다.
도 1m 및 도 1n은 도 1f에 예시된 방법들 및 장치들에 의해 생성되는 데이터의 무손실 축소된 형태의 예들을 나타낸 것이고, 여기서 기본 데이터 엘리먼트들 및 기본 재구성 프로그램들은 분류된 데이터에 인라인으로 위치된다. 도 1m에서의 무손실 축소된 형태는 내용 연관 매퍼들을 포함하고, 데이터의 계속적인 추가 수집 및 기존의 기본 데이터 엘리먼트들 및 기본 재구성 프로그램들과의 대조에 따른 이 데이터의 축소를 가능하게 하는 형태인 반면, 도 1n에서의 무손실 축소된 형태는 더 이상 내용 연관 매퍼들을 보유하지 않아서, 데이터의 풋프린트가 보다 작게 된다. 도 1o 및 도 1p는 도 1g에 예시된 방법들 및 장치들에 의해 생성되는 데이터의 무손실 축소된 형태의 예들을 나타낸 것이고, 여기서 기본 데이터 엘리먼트들 및 기본 재구성 프로그램들은 분류된 데이터에 인라인으로 또는 기본 데이터 시브에 위치될 수 있다. 도 1o에서의 무손실 축소된 형태는 내용 연관 매퍼들을 포함하고, 데이터의 계속적인 추가 수집 및 기존의 기본 데이터 엘리먼트들 및 기본 재구성 프로그램들과의 대조에 따른 이 데이터의 축소를 가능하게 하는 형태인 반면, 도 1p에서의 무손실 축소된 형태는 더 이상 내용 연관 매퍼들을 보유하지 않아서, 데이터의 풋프린트가 보다 작게 된다.
도 1a 내지 도 1p에 도시된 실시예들의 변형들에서, 축소된 데이터의 다양한 컴포넌트들은 종래 기술에 공지된 기법들(허프만 코딩 및 Lempel Ziv 방법들 등)을 사용하여 추가로 축소 또는 압축되고 이 압축된 형태로 저장될 수 있다. 이 컴포넌트들은 차후에 데이터 분류 장치(Data Distillation Apparatus)에서 사용하기 위해 필요할 때 압축해제될 수 있다. 이것은 데이터의 총 풋프린트를 추가로 감소시키는 이점이 있다.
도 2는 본원에 기술되는 일부 실시예들에 따른, 입력 데이터를 엘리먼트들로 인수분해하고 이 엘리먼트들을 기본 데이터 저장소에 존재하는 기본 데이터 엘리먼트들로부터 파생시키는 것에 의한 데이터 축소 프로세스를 나타낸 것이다. 입력 데이터가 도착할 때, 그것이 파싱되고 일련의 후보 엘리먼트들로 인수분해되거나 분해될 수 있다(동작(202)). 다음 후보 엘리먼트가 입력으로부터 소비되고(동작(204)), 후보 엘리먼트가 파생될 수 있는 임의의 적당한 엘리먼트들이 있는지를 알아보기 위해 후보 엘리먼트의 내용에 기초하여 기본 데이터 저장소의 내용 연관 룩업(content-associative lookup)이 수행된다(동작(206)). 기본 데이터 저장소가 이러한 엘리먼트들을 발견하지 못하면(동작(208)의 "아니오" 분기), 후보 엘리먼트가 새로운 기본 데이터 엘리먼트로서 할당되고 시브에 입력되며, 후보 엘리먼트에 대해 생성된 분류된 데이터 내의 엔트리는 새로 생성된 기본 데이터 엘리먼트에 대한 참조일 것이다(동작(216)). 기본 데이터 저장소의 내용 연관 룩업이 후보가 파생될 가능성이 있을 수 있는 하나 이상의 적당한 엘리먼트를 산출하면(동작(208)의 "예" 분기), 검색된 기본 데이터 엘리먼트들로부터 후보 엘리먼트를 파생시키기 위해 검색된 기본 데이터 엘리먼트들에 대해 분석 및 계산이 수행된다. 일부 실시예들에서, 적당한 기본 데이터 엘리먼트들에 대한 메타데이터만이 먼저 페치되고, 메타데이터에 대해 분석이 수행되며, 적당한 기본 데이터 엘리먼트들은 유용한 것으로 간주되는 경우에만 차후에 페치되는 것에 유의한다(이 실시예들에서, 기본 데이터 엘리먼트에 대한 메타데이터는 기본 데이터 엘리먼트의 내용에 관한 어떤 정보를 제공하며, 그로써 시스템이 메타데이터에 기초하여 매칭하는 것들을 신속하게 배제시키거나 파생 가능성(derivability)을 평가할 수 있게 한다). 다른 실시예들에서, 기본 데이터 저장소는 기본 데이터 엘리먼트들을 직접(즉, 기본 데이터 엘리먼트를 검색하기 전에 메타데이터를 분석하기 위해 메타데이터를 먼저 검색하는 일 없이) 검색하고, 따라서 검색된 기본 데이터 엘리먼트들에 대해 분석 및 계산이 수행된다.
후보가 이 엘리먼트들 중 임의의 것의 중복인지를 알아보기 위해 제1 검사가 수행된다(동작(210)). 이 검사는 임의의 적당한 해싱 기법을 사용하여 가속화될 수 있다. 후보가 기본 데이터 저장소로부터 검색되는 기본 데이터 엘리먼트와 동일하면(동작(210)의 "예" 분기), 후보 엘리먼트에 대해 생성되는 분류된 데이터 내의 엔트리가 이 기본 데이터 엘리먼트에 대한 참조 및 이 엔트리가 기본 데이터 엘리먼트라는 표시로 대체된다(동작(220)). 중복이 발견되지 않으면(동작(210)의 "아니오" 분기), 후보 엘리먼트에 기초하여 기본 데이터 저장소로부터 검색되는 엔트리들은 후보 엘리먼트가 파생될 가능성이 있는 엔트리들로서 간주된다. 이하는 기본 데이터 저장소의 중요하고, 새로운, 비자명한 특징이다: 기본 데이터 저장소에서 중복이 발견되지 않을 때, 기본 데이터 저장소는, 비록 후보 엘리먼트와 동일하지는 않지만, 기본 데이터 엘리먼트(들)에 하나 이상의 변환을 적용함으로써 후보 엘리먼트가 파생될 가능성이 있을 수 있는 엘리먼트들인 기본 데이터 엘리먼트들을 반환할 수 있다. 프로세스는 이어서 가장 적당한 기본 데이터 엘리먼트 또는 적당한 기본 데이터 엘리먼트들의 세트로부터 후보 엘리먼트를 파생시키기 위해 분석 및 계산을 수행할 수 있다(동작(212)). 일부 실시예들에서, 파생은 후보 엘리먼트를 하나 이상의 기본 데이터 엘리먼트에 대해 수행되는 변환들의 결과로서 표현하며, 이러한 변환들은 일괄하여 재구성 프로그램이라고 지칭된다. 각각의 파생은 그 자신의 독자적인 프로그램이 구성될 것을 필요로 할 수 있다. 재구성 프로그램을 구성하는 것에 부가하여, 프로세스는 또한 후보 엘리먼트의 재규정을 저장하고 재규정으로부터 후보 엘리먼트를 재구성하는 데 필요한 저장 자원들 및/또는 계산 자원들의 레벨을 일반적으로 나타내는 거리 메트릭을 계산할 수 있다. 일부 실시예들에서, 파생 엘리먼트의 풋프린트는 후보와 기본 데이터 엘리먼트(들) 간의 거리의 척도로서 사용된다 - 구체적으로는, 거리 메트릭은 재구성 프로그램의 크기와 파생에 관여된 하나 이상의 기본 데이터 엘리먼트에 대한 참조들의 크기의 합으로서 정의될 수 있다 -. 가장 짧은 거리를 갖는 파생이 선택될 수 있다. 이 파생에 대한 거리는 거리 문턱값과 비교되고(동작(214)), 거리가 거리 문턱값을 초과하지 않으면, 파생이 채용된다(동작(214)의 "예" 분기). 데이터 축소를 달성하기 위해, 거리 문턱값은 항상 후보 엘리먼트의 크기 미만이어야만 한다. 예를 들어, 파생물이 그의 풋프린트가 후보 엘리먼트의 풋프린트의 절반 이하인 경우에만 채용되고, 그로써 적당한 파생이 존재하는 각각의 후보 엘리먼트에 대해 2배 이상의 축소를 보장하도록, 거리 문턱값이 후보 엘리먼트의 크기의 50%로 설정될 수 있다. 거리 문턱값은 사용자 지정 입력에 기초한 또는 시스템에 의해 선택된, 미리 결정된 퍼센트 또는 비율일 수 있다. 거리 문턱값은 시스템의 정적 또는 동적 파라미터들에 기초하여 시스템에 의해 결정될 수 있다. 파생이 채용되면, 후보 엘리먼트는 재규정되고 재구성 프로그램과 하나 이상의 기본 데이터 엘리먼트에 대한 참조들의 조합에 의해 대체된다. 후보 엘리먼트에 대해 생성되는 분류된 데이터 내의 엔트리는 파생으로 대체된다 - 즉, 파생에 관여된 하나 이상의 기본 데이터 엘리먼트에 대한 참조들 + 재구성 프로그램과 함께, 이것이 파생 엘리먼트라는 표시로 대체된다 -(동작(218)). 다른 한편으로, 최상의 파생에 대한 거리가 거리 문턱값을 초과하면(동작(214)의 "아니오" 분기), 가능한 파생물들 중 어느 것도 채용되지 않을 것이다. 그 경우에, 후보 엘리먼트는 새로운 기본 데이터 엘리먼트로서 할당되고 시브에 입력될 수 있으며, 후보 엘리먼트에 대해 생성되는 분류된 데이터 내의 엔트리는, 이것이 기본 데이터 엘리먼트라는 표시와 함께, 새로 생성된 기본 데이터 엘리먼트에 대한 참조일 것이다(동작(216)).
마지막으로, 프로세스는 임의의 부가 후보 엘리먼트들이 있는지를 검사하고(동작(222)), 후보 엘리먼트들이 더 있으면(동작(222)의 "예" 분기), 동작(204)으로 복귀하거나, 후보 엘리먼트들이 더 이상 없으면, 프로세스를 종료할 수 있다(동작(222)의 "아니오" 분기).
각종의 방법들이 도 2에서의 동작(202)을 수행하는 데, 즉 들어오는 데이터를 파싱하고 이를 후보 엘리먼트들로 분해하는 데 이용될 수 있다. 인수분해 알고리즘은 스트림을 후보 엘리먼트들로 슬라이싱하기 위해 바이트 스트림에서의 어디에 단절들을 삽입해야 하는지를 결정할 필요가 있다. 가능한 기법들은 스트림을 고정 크기 블록들(4096 바이트의 페이지들 등)으로 분해하는 것, 또는 엘리먼트들의 경계들로 되는 적당한 핑거프린트들을 데이터 스트림에 위치시키기 위해 핑거프린팅 방법(입력 스트림의 서브스트링들에 랜덤 소수 다항식들을 적용하는 기법들 등)을 적용하는 것(이 기법은 가변 크기 엘리먼트들을 가져올 수 있음), 또는 헤더들 또는 어떤 미리 선언된 구조를 검출하기 위해 입력을 파싱하고 이 구조에 기초하여 엘리먼트들을 확정(delineate)하는 것(이들로 제한되지 않음)을 포함한다. 스키마(schema)를 통해 선언되는 특정 구조를 검출하기 위해 입력이 파싱될 수 있다. 데이터에 미리 선언된 패턴들, 문법들, 또는 정규 표현식(regular expression)들이 존재하는 것을 검출하기 위해 입력이 파싱될 수 있다. 데이터에서의 2개의 연속적인 단절들이 식별되면, 후보 엘리먼트가 생성되고(후보 엘리먼트는 2개의 연속적인 단절들 사이에 위치되는 데이터임) 내용 연관 룩업을 위해 기본 데이터 저장소에 제시된다. 가변 크기 엘리먼트들이 생성되면, 후보 엘리먼트의 길이가 지정되고 후보 엘리먼트와 함께 메타데이터로서 전달될 필요가 있다.
기본 데이터 저장소의 하나의 중요한 기능은 그에 제시되는 후보 엘리먼트에 기초하여 내용 연관 룩업을 제공하고, 파생을 지정하는 데 최소한의 저장소를 필요로 하면서 후보 엘리먼트가 파생될 수 있는 기본 데이터 엘리먼트들 중 하나 또는 기본 데이터 엘리먼트들의 작은 세트를 신속하게 제공하는 것이다. 큰 데이터 세트가 주어지면 이것은 어려운 문제이다. 수 테라바이트의 데이터가 주어지면, 심지어 킬로바이트 크기의 엘리먼트들에 대해서도, 검색하고 선택할 수십억개의 엘리먼트들이 있다. 문제는 보다 큰 데이터 세트들에서 훨씬 더 심각하다. 적당한 기본 데이터 엘리먼트들의 작은 세트를 신속하게 제공할 수 있기 위해, 적당한 기법을 사용하여 엘리먼트들을 조직화하고 정렬하며 이어서 엘리먼트들의 그 조직화 내에서 유사성과 파생가능성을 검출하는 것이 중요하게 된다.
시브 내의 엔트리들은, 모든 엔트리들이 값에 의해 오름차순 또는 내림차순으로 배열될 수 있도록, 각각의 엘리먼트(즉, 기본 데이터 엘리먼트)의 값에 기초하여 정렬될 수 있다. 대안적으로, 엔트리들은 엘리먼트 내의 특정 필드들의 값에 기초하는 주축(principal axis)을 따라 그리고 뒤이어서 엘리먼트의 나머지 내용을 사용하는 종속축(subordinate axis)들에 의해 정렬될 수 있다. 이와 관련하여, 필드는 엘리먼트의 내용으로부터의 연속적인 바이트들의 세트이다. 핑거프린트의 위치가 필드의 위치를 식별해주도록 필드들은 엘리먼트의 내용에 핑거프린팅 방법을 적용하는 것에 의해 위치 확인될 수 있다. 대안적으로, 필드를 위치 확인하기 위해 엘리먼트의 내용에 대한 특정 고정 오프셋들이 선택될 수 있다. 특정 선언된 구조를 검출하기 위해 엘리먼트를 파싱하는 것 및 그 구조 내에서 필드들을 위치 확인하는 것(이들로 제한되지 않음)을 비롯한, 다른 방법들이 또한 필드를 위치 확인하는 데 이용될 수 있다.
또 다른 형태의 조직화에서, 엘리먼트 내의 특정 필드들 또는 필드들의 조합들이 차원들로서 간주될 수 있고, 따라서 이 차원들과 그에 뒤이은 각각의 엘리먼트의 나머지 내용의 연결(concatenation)이 데이터 엘리먼트들을 정렬하고 조직화하는 데 사용될 수 있다. 일반적으로, 필드들과 차원들 간의 대응관계 또는 매핑은 임의적으로 복잡할 수 있다. 예를 들어, 일부 실시예들에서, 정확하게 하나의 필드가 정확히 하나의 차원에 매핑될 수 있다. 다른 실시예들에서, 다수의 필드들, 예컨대, F1, F2, 및 F3의 조합이 하나의 차원에 매핑될 수 있다. 필드들을 조합하는 것은 2개의 필드들을 연결(concatenate)하는 것에 의해 또는 임의의 다른 적당한 함수를 그들에 적용하는 것에 의해 달성될 수 있다. 중요한 요구사항은 엘리먼트들을 조직화하는 데 사용되는 엘리먼트의 필드들, 차원들, 및 나머지 내용의 배열에 따라 모든 기본 데이터 엘리먼트들이 그들의 내용에 의해 일의적으로 식별되고 시브에서 정렬될 수 있어야만 한다는 것이다.
일부 실시예들에서, 엘리먼트의 내용은 다음과 같은 표현식으로 표현될 수 있고: 엘리먼트 = Head .* sig1 .* sig2 .* ... sigI .*... sigN .* Tail, 여기서 "Head"는 엘리먼트의 선두 바이트(leading byte)들을 포함하는 바이트들의 시퀀스이고, "Tail"은 엘리먼트의 후미 바이트(concluding byte)들을 포함하는 바이트들의 시퀀스이며, "sig1", "sig2", "sigI", 및 "sigN"은 엘리먼트를 특징지우는 엘리먼트의 내용의 보디 내의 특정 길이들의 다양한 시그니처들 또는 패턴들 또는 정규 표현식들 또는 바이트들의 시퀀스들이다. 다양한 시그니처들 사이의 표현식 ".*"은 와일드카드 표현식이다 - 즉, 이는 표현식 ".*"에 뒤따르는 시그니처 이외의 임의의 값의 임의의 수의 중간 바이트(intervening byte)들을 허용하는 정규 표현식 표기법이다. 일부 실시예들에서, N-튜플 (sig1, sig2, ... sigI,... sigN)은 엘리먼트의 스켈레탈 데이터 구조(Skeletal Data Structure) 또는 스켈레톤(Skeleton)이라고 지칭되고, 엘리먼트의 축소된 핵심 서브셋(essential subset) 또는 핵심(essence)으로서 간주될 수 있다. 다른 실시예들에서, (N+2)-튜플 (Head, sig1, sig2, ... sigI,... sigN, Tail)이 엘리먼트의 스켈레탈 데이터 구조 또는 스켈레톤이라고 지칭된다. 대안적으로, Head 또는 Tail 중 어느 하나를 나머지 시그니처들과 함께 포함하는 N+1 튜플이 사용될 수 있다.
엘리먼트 내용 내에서의 스켈레탈 데이터 구조의 다양한 컴포넌트들(또는 시그니처들)의 위치들을 결정하기 위해 핑거프린팅 방법이 엘리먼트의 내용에 적용될 수 있다. 대안적으로, 컴포넌트를 위치 확인하기 위해 엘리먼트의 내용에 대한 특정 고정 오프셋들이 선택될 수 있다. 특정 선언된 구조를 검출하기 위해 엘리먼트를 파싱하는 것 및 그 구조 내에서 컴포넌트들을 위치 확인하는 것(이들로 제한되지 않음)을 비롯한, 다른 방법들이 또한 스켈레탈 데이터 구조의 컴포넌트를 위치 확인하는 데 이용될 수 있다. 기본 데이터 엘리먼트들은 시브에서 그들의 스켈레탈 데이터 구조에 기초하여 정렬될 수 있다. 환언하면, 엘리먼트의 스켈레탈 데이터 구조의 다양한 컴포넌트들은 차원들로서 간주될 수 있고, 따라서 이 차원들과 그에 뒤이은 각각의 엘리먼트의 나머지 내용의 연결이 시브에서 기본 데이터 엘리먼트들을 정렬하고 조직화하는 데 사용될 수 있다.
일부 실시예들은 입력 데이터를 후보 엘리먼트들로 인수분해하고, 여기서 각각의 후보 엘리먼트의 크기는 전역 데이터 세트 내의 모든 이러한 엘리먼트들에 액세스하는 데 필요한 참조의 크기보다 실질적으로 더 크다. 이러한 데이터 청크들로 분해되는 (그리고 내용 연관 방식으로 액세스되고 있는) 데이터에 대한 하나의 관찰은 실제 데이터가 데이터 청크가 지정할 수 있는 총 가능한 값들과 관련하여 매우 희박하다는 것이다. 예를 들어, 1 제타바이트 데이터 세트를 생각해본다. 데이터 세트 내의 모든 바이트를 주소지정하기 위해 약 70 비트가 필요하다. 128 바이트(1024 비트)의 청크 크기에서, 1 제타바이트 데이터 세트에 대략 263개의 청크들이 있고, 따라서 청크들 모두를 주소지정하기 위해 63 비트(8 바이트 미만)가 필요하다. 1024 비트의 엘리먼트 또는 청크가 21024개의 가능한 값들 중 하나를 가질 수 있는 반면, 데이터 세트 내의 주어진 청크들의 실제 값들의 수는 최대 263인 것에 유의한다(청크들 모두가 구별되는 경우). 이것은 실제 데이터가 엘리먼트의 내용에 의해 도달되거나 명명될 수 있는 값들의 수와 관련하여 극히 희박하다는 것을 나타낸다. 이것은, 효율적인 내용 기반 룩업을 가능하게 하는 방식으로 매우 희박한 데이터를 조직화하는 데 아주 적합한, 트리 구조의 사용을 가능하게 하고, 새로운 엘리먼트들이 트리 구조에 효율적으로 추가될 수 있게 하며, 트리 구조 자체에 필요한 증분적 저장의 면에서 비용 효과적이다. 1 제타바이트 데이터 세트에 단지 263개의 구별되는 청크들만이 있고, 따라서 그들을 구별하기 위해 정보의 63개의 차별화 비트만을 필요로 하지만, 관련성있는 차별화 비트들이 엘리먼트의 1024 비트 전체에 걸쳐 확산되고 각각의 엘리먼트마다 상이한 위치들에 있을 수 있다. 따라서, 모든 엘리먼트들을 완전히 차별화하기 위해, 내용 중의 고정된 63 비트만 검사하는 것으로는 불충분하고, 특히 데이터 세트 내의 모든 엘리먼트에의 진정한 내용 연관 액세스를 제공하는 해결책에서는, 오히려 엘리먼트의 내용 전체가 엘리먼트들을 소팅(sort)하는 데 참여할 필요가 있다. 데이터 분류TM 프레임 워크에서, 데이터를 정렬 및 조직화하는 데 사용되는 프레임워크 내에서 파생가능성을 검출할 수 있는 것이 바람직하다. 전술한 내용 전부를 염두에 두고서, (보다 많은 내용이 검사될 때 데이터를 점진적으로 차별화하는) 내용에 기초한 트리 구조는 인수분해된 데이터 세트 내의 모든 엘리먼트들을 정렬 및 차별화하는 데 적당한 구성이다. 이러한 구조는 파생가능 엘리먼트들의 그룹들로서 또는 파생가능성의 유사한 특성들을 갖는 엘리먼트들의 그룹들로서 취급될 수 있는 수많은 중간 레벨의 서브트리(subtree)들을 제공한다. 이러한 구조는 각각의 서브트리를 특징지우는 메타데이터로 또는 데이터의 각각의 엘리먼트를 특징지우는 메타데이터로 계층적으로 보강될 수 있다. 이러한 구조는, 데이터에서의 실제 값들의 밀도, 근접성, 및 분포를 비롯한, 구조가 포함하는 데이터 전체의 구성상태(composition)를 효과적으로 전달할 수 있다.
일부 실시예들은 시브에서의 기본 데이터 엘리먼트들을 트리 형태로 조직화한다. 각각의 기본 데이터 엘리먼트는, 기본 데이터 엘리먼트의 내용 전체로부터 구성되는, 구별되는 "이름(Name)"을 갖는다. 이 이름은 기본 데이터 엘리먼트를 일의적으로 식별해주고 트리 내의 다른 모든 엘리먼트들과 관련하여 기본 데이터 엘리먼트를 차별화하는 데 충분하도록 설계되어 있다. 이름이 기본 데이터 엘리먼트의 내용으로부터 구성될 수 있는 몇 가지 방법들이 있다. 이름이 단순히 기본 데이터 엘리먼트의 모든 바이트들로 이루어져 있을 수 있으며, 이 바이트들은 그들이 기본 데이터 엘리먼트에서 존재하는 것과 동일한 순서로 이름에 나타난다. 다른 실시예에서, 차원들이라고 지칭되는 특정 필드들 또는 필드들의 조합들(여기서 필드들 및 차원들은 앞서 기술된 바와 같음)은 이름의 선두 바이트들을 형성하는 데 사용되고, 기본 데이터 엘리먼트의 나머지 내용은 나머지 이름을 형성하며, 따라서 기본 데이터 엘리먼트의 내용 전체가 엘리먼트의 완전하고 고유한 이름을 생성하는 데 참여하고 있다. 또 다른 실시예에서, 엘리먼트의 스켈레탈 데이터 구조의 필드들이 차원들로서 선택되고(여기서 필드들 및 차원들은 앞서 기술된 바와 같음), 이름의 선두 바이트들을 형성하는 데 사용되며, 기본 데이터 엘리먼트의 나머지 내용은 나머지 이름을 형성하고, 따라서 기본 데이터 엘리먼트의 내용 전체가 엘리먼트의 완전하고 고유한 이름을 생성하는 데 참여하고 있다.
각각의 기본 데이터 엘리먼트의 이름은 트리에서 기본 데이터 엘리먼트들을 정렬하고 조직화하는 데 사용된다. 가장 실용적인 데이터 세트들, 심지어 크기가 매우 큰 데이터 세트들(이를테면 4 KB 크기의 258개의 엘리먼트들로 이루어진, 1 제타바이트 데이터 세트 등)에 대해, 이름의 바이트들의 작은 서브셋이 종종 트리에서 대부분의 기본 데이터 엘리먼트들을 소팅 및 정렬하는 역할을 할 것이다.
도 3a, 도 3b, 도 3c, 도 3d, 및 도 3e는 본원에 기술되는 일부 실시예들에 따른, 기본 데이터 엘리먼트들을 그들의 이름에 기초하여 조직화하는 데 사용될 수 있는 상이한 데이터 조직화 시스템들을 나타낸 것이다.
도 3a는 각각의 기본 데이터 엘리먼트의 이름으로부터의 연속적인 바이트들의 값들에 기초하여 기본 데이터 엘리먼트들이 점진적으로 더 작은 그룹들로 조직화되는 트리 데이터 구조를 나타낸 것이다. 도 3a에 도시된 예에서, 각각의 기본 데이터 엘리먼트는, 기본 데이터 엘리먼트의 내용 전체로부터 구성되는, 구별되는 이름을 가지며, 이 이름은 단순히 기본 데이터 엘리먼트의 모든 바이트들로 이루어져 있고, 이 바이트들은 그들이 기본 데이터 엘리먼트에서 존재하는 것과 동일한 순서로 이름에 나타난다. 트리의 루트 노드는 기본 데이터 엘리먼트들 전부를 표현한다. 트리의 다른 노드들은 기본 데이터 엘리먼트들의 서브셋들 또는 그룹들을 표현한다. 트리의 루트 노드 또는 제1 레벨(도 3a에서 루트(302)로서 부기되어 있음)에서 시작하여, 기본 데이터 엘리먼트들은 그들의 이름(도 3a에서 N1로서 부기됨)의 최상위 바이트의 값에 기초하여 서브트리들로 그룹화된다. 이름의 최상위 바이트에 동일한 값을 갖는 모든 기본 데이터 엘리먼트들은 함께 공통 서브트리로 그룹화되고, 그 값에 의해 표기되는 링크는 루트 노드로부터 그 서브트리를 표현하는 노드까지 존재할 것이다. 예를 들어, 도 3a에서, 노드(303)는 각각이 그 각자의 이름들의 최상위 바이트(N1)에 동일한 값 2를 갖는 기본 데이터 엘리먼트들의 서브트리 또는 그룹을 표현한다. 도 3a에서, 이 그룹은 기본 데이터 엘리먼트들(305, 306, 307)을 포함한다.
트리의 제2 레벨에서, 각각의 기본 데이터 엘리먼트의 이름의 두 번째 최상위 바이트는 기본 데이터 엘리먼트들의 각각의 그룹을 보다 작은 서브그룹들로 추가로 분할하는 데 사용된다. 예를 들어, 도 3a에서, 노드(303)에 의해 표현되는 기본 데이터 엘리먼트들의 그룹은 두 번째 최상위 바이트(N2)를 사용하여 서브그룹들로 추가로 세분화된다. 노드(304)는 최상위 바이트(N1)에 값 2를 그리고 또한 그 각자의 이름들의 두 번째 최상위 바이트(N2)에 값 1을 갖는 기본 데이터 엘리먼트들의 서브그룹을 표현한다. 이 서브그룹은 기본 데이터 엘리먼트들(305 및 306)을 포함한다.
세분화 프로세스는 트리의 각각의 레벨에서 부모 노드로부터 각각의 자식 노드로의 링크들을 계속하여 생성하고, 여기서 자식 노드는 부모 노드에 의해 표현되는 기본 데이터 엘리먼트들의 서브셋을 나타낸다. 이 프로세스는 트리의 리프들에 개개의 기본 데이터 엘리먼트들만이 있을 때까지 계속된다. 리프 노드는 리프들의 그룹을 나타낸다. 도 3a에서, 노드(304)는 리프 노드이다. 노드(304)에 의해 표현되는 기본 데이터 엘리먼트들의 그룹은 기본 데이터 엘리먼트들(305 및 306)을 포함한다. 도 3a에서, 이 그룹은 이름들의 세 번째 최상위 바이트를 사용하여 개개의 기본 데이터 엘리먼트들(305 및 306)로 추가로 세분화된다. N3 = 3의 값은 기본 데이터 엘리먼트(305)로 인도하는 반면, N3 = 5의 값은 기본 데이터 엘리먼트(306)로 인도한다. 이 예에서, 완전한 이름들로부터, 기본 데이터 엘리먼트들(305 및 306)을 완전히 식별하는 데 3개의 유효 바이트(significant byte)들만으로 충분한다. 마찬가지로, 기본 데이터 엘리먼트(307)를 식별하는 데 이름으로부터의 2개의 유효 바이트들만으로 충분하다.
이 예는, 주어진 기본 데이터 엘리먼트들의 혼합체(mix)에서, 어떻게 이름의 바이트들의 서브셋만이 트리에서 기본 데이터 엘리먼트를 식별해주는 역할을 하고, 고유한 기본 데이터 엘리먼트에 도달하는 데 이름 전체가 필요하지 않은지를 나타낸다. 또한, 기본 데이터 엘리먼트들 또는 기본 데이터 엘리먼트들의 그룹들 각각은 그들을 일의적으로 식별할 수 있기 위해 상이한 수의 유효 바이트들을 필요로 할 수 있다. 이와 같이, 루트 노드로부터 기본 데이터 엘리먼트까지의 트리의 깊이는 기본 데이터 엘리먼트마다 다를 수 있다. 게다가, 트리에서, 각각의 노드는 아래쪽에 있는 서브트리들로 내려가는 상이한 수의 링크들을 가질 수 있다.
이러한 트리에서, 각각의 노드는 이 노드에 어떻게 도달할지를 지정하는 바이트들의 시퀀스로 이루어진 이름을 갖는다. 예를 들어, 노드(304)의 이름은 "21"이다. 또한, 트리에서의 엘리먼트들의 현재 분포에서 엘리먼트를 일의적으로 식별해주는 엘리먼트의 이름으로부터의 바이트들의 서브셋은 루트 노드로부터 이 기본 데이터 엘리먼트로의 "경로"이다. 예를 들어, 도 3a에서, 213의 값을 갖는 경로(301)는 기본 데이터 엘리먼트(305)를 식별해준다.
여기에서 기술되는 트리 구조는, 트리에서의 엘리먼트의 이름의 모든 차별화 바이트가 트리에 하나의 깊이 레벨을 추가하기 때문에, 깊은 트리(즉, 다수의 레벨들을 갖는 트리)를 생성할 수 있다.
도 3a 내지 도 3e에서의 트리 데이터 구조들이 왼쪽에서 오른쪽으로 그려져 있다는 것에 유의한다. 따라서, 도면의 왼쪽으로부터 도면의 오른쪽으로 이동함에 따라, 트리의 상위 레벨들로부터 트리의 하위 레벨들로 이동한다. 주어진 노드의 아래쪽으로(즉, 도 3a 내지 도 3e에서의 주어진 노드의 오른쪽으로), 이름으로부터 차별화 바이트의 특정 값에 의해 선택되는 임의의 자식에 대해, 그 자식 아래쪽에 있는 서브트리들에 존재하는 모든 엘리먼트들은 엘리먼트의 이름에서의 그 대응하는 바이트에 동일한 값을 가질 것이다.
이제부터, 입력 후보 엘리먼트가 주어진 경우, 트리 구조의 내용 연관 룩업 방법을 기술한다. 이 방법은 후보 엘리먼트의 이름을 사용하여 트리 구조를 탐색(navigation)하는 것, 그에 뒤이어서 전체적인 내용 연관 룩업의 결과로서 무엇을 반환할지를 결정하기 위한 차후의 분석 및 스크리닝(screening)을 포함한다. 환언하면, 트리 탐색 프로세스는 제1 결과물을 반환하고, 이어서 전체적인 내용 연관 룩업의 결과를 결정하기 위해 그 결과물에 대해 분석 및 스크리닝이 수행된다.
트리 탐색 프로세스를 시작하기 위해, 후보 엘리먼트의 이름으로부터 최상위 바이트의 값이 루트 노드로부터 기본 데이터 엘리먼트들의 이름들의 최상위 바이트에 있는 그 동일한 값을 갖는 기본 데이터 엘리먼트들의 서브트리를 나타내는 후속 노드까지의 링크(그 값에 의해 표기됨)를 선택하는 데 사용될 것이다. 이 노드로부터 시작하여, 후보 엘리먼트의 이름으로부터의 두 번째 바이트가 검사되고, 그 값에 의해 표기되는 링크가 선택되며, 따라서 트리 내로 한 레벨 더 깊게(또는 더 하위로) 전진하고 기본 데이터 엘리먼트들의 이름들로부터의 적어도 2개의 유효 바이트들을 후보 엘리먼트와 현재 공유하는 기본 데이터 엘리먼트들의 보다 작은 서브그룹을 선택한다. 이 프로세스는 단일 기본 데이터 엘리먼트에 도달할 때까지 또는 링크들 중 어느 것도 후보 엘리먼트의 이름으로부터의 대응하는 바이트의 값과 매칭하지 않을 때까지 계속된다. 이 조건들 중 어느 하나에서, 트리 탐색 프로세스가 종료된다. 단일 기본 데이터 엘리먼트에 도달하면, 단일 기본 데이터 엘리먼트가 트리 탐색 프로세스의 결과물로서 반환될 수 있다. 그렇지 않은 경우, 하나의 대안은 "미스(miss)"를 보고하는 것이다. 다른 대안은 탐색이 종료된 노드에 루트가 있는 서브트리에 있는 다수의 기본 데이터 엘리먼트들을 반환하는 것이다.
트리 탐색 프로세스가 종료되면, 무엇이 내용 연관 룩업의 결과로서 반환되어야만 하는지를 결정하기 위해 트리 탐색 프로세스의 결과물을 분석하고 스크리닝하는 데 다른 기준들 및 요구사항들이 사용될 수 있다. 예를 들어, 트리 탐색 프로세스에 의해 단일 기본 데이터 엘리먼트 또는 다수의 기본 데이터 엘리먼트들이 반환될 때, 그들이 내용 연관 룩업의 결과로서 반환될 자격을 갖기 전에 특정 최소 수의 바이트들을 후보 엘리먼트의 이름과 공유해야 한다(그렇지 않으면, 내용 연관 룩업은 미스를 반환함)는 부가 요구사항이 있을 수 있다. 스크리닝 요구사항의 다른 예는, (트리 탐색이 종료된 노드에 루트가 있는) 다수의 기본 데이터 엘리먼트들이 트리 탐색 프로세스의 결과물로서 반환되도록 트리 탐색 프로세스가 단일 기본 데이터 엘리먼트에 도달하지 않고 종료되면, 이 다수의 기본 데이터 엘리먼트들이 이 엘리먼트들의 수가 특정 지정된 한계보다 작은 경우에만(그렇지 않으면, 내용 연관 룩업이 미스를 반환함) 전체적인 내용 연관 룩업의 결과로서 반환될 자격을 가진다는 것일 수 있다. 내용 연관 룩업의 결과를 결정하기 위해 다수의 요구사항들의 조합들이 이용될 수 있다. 이러한 방식으로, 룩업 프로세스는 "미스"를 보고하거나 단일 기본 데이터 엘리먼트를 반환할 것이고, 또는 단일 기본 데이터 엘리먼트가 아닌 경우, 후보 엘리먼트를 파생시키기 위한 좋은 출발점이 될 가능성이 있는 기본 데이터 엘리먼트들의 세트를 반환한다.
이하에서 기술되는 도 3b 내지 도 3e는 도 3a에 예시된 트리 데이터 구조에 대한 변형들 및 수정들에 관한 것이다. 이 변형들이 도 3a에 예시된 트리 데이터 구조에 비해 개선들 및 장점들을 제공하지만, 데이터 구조를 탐색하는 프로세스는 도 3a를 참조하여 앞서 기술된 프로세스와 유사하다. 즉, 도 3b 내지 도 3e에 도시된 트리 데이터 구조들에 대한 트리 탐색이 종료되고, 전체적인 내용 연관 룩업의 결과를 결정하기 위해 차후의 분석 및 스크리닝이 수행된 후에, 전체적인 프로세스는 미스, 단일 기본 데이터 엘리먼트, 또는 후보 엘리먼트를 파생시키기 위한 좋은 출발점이 될 가능성이 있는 기본 데이터 엘리먼트들의 세트를 반환한다.
도 3b는 기본 데이터 엘리먼트들을 그들의 이름에 기초하여 조직화하는 데 사용될 수 있는 다른 데이터 조직화 시스템을 나타낸 것이다. 도 3b에 도시된 예에서, 각각의 기본 데이터 엘리먼트는, 기본 데이터 엘리먼트의 내용 전체로부터 구성되는, 구별되는 이름을 가지며, 이 이름은 단순히 기본 데이터 엘리먼트의 모든 바이트들로 이루어져 있고, 이 바이트들은 그들이 기본 데이터 엘리먼트에서 존재하는 것과 동일한 순서로 이름에 나타난다. 도 3b는 단일의 링크가 세분화된 것들 또는 다음 레벨의 그룹들을 생성하기 위해 아래쪽에 있는 서브트리에서의 기본 데이터 엘리먼트들의 이름으로부터의 (도 3a에서의 트리에서 사용되는 단일 바이트보다는) 다수의 바이트들을 이용하는 보다 콤팩트한 구조를 나타내고 있다. 부모 노드들로부터 자식 노드들로의 링크들은 이제 다수의 바이트들에 의해 표기된다. 게다가, 임의의 주어진 부모 노드로부터, 각각의 링크는 그 링크와 연관된 서브트리를 차별화하고 식별하기 위해 상이한 수의 바이트들을 이용할 수 있다. 예를 들어, 도 3b에서, 루트 노드로부터 노드(308)로의 링크는 이름으로부터의 4 바이트(N1N2N3N4 = 9845)를 사용하여 차별화되는 반면, 루트 노드로부터 노드(309)로의 링크는 이름으로부터의 3 바이트(N1N2N3 = 347)를 사용하여 차별화된다.
(주어진 후보 엘리먼트로부터의 내용을 사용하는) 트리 탐색 동안, 트리에서의 임의의 부모 노드에 도달할 때, 트리 탐색 프로세스는 어느 링크를 선택할지를 명확하게 결정하기 위해 후보 엘리먼트의 이름으로부터의 충분한 바이트들이 검사되도록 보장할 필요가 있다는 것에 유의한다. 주어진 링크를 선택하기 위해, 후보의 이름으로부터의 바이트들이 그 특정의 링크로의 전환(transition)을 표기하는 모든 바이트들과 매칭해야만 한다. 한번 더 말하지만, 이러한 트리에서, 트리의 각각의 노드는 이 노드에 어떻게 도달할지를 지정하는 바이트들의 시퀀스로 이루어진 이름을 갖는다. 예를 들어, 노드(309)의 이름은 "347"일 수 있는데, 그 이유는 "347"이 이름의 3개의 선두 바이트들이 "347"인 기본 데이터 엘리먼트들의 그룹(예컨대, 엘리먼트들(311 및 312))을 나타내기 때문이다. 이름의 3개의 선두 바이트들이 347인 후보 엘리먼트를 사용하여 트리를 룩업할 때, 이 데이터 패턴은 트리 탐색 프로세스로 하여금 도 3b에 도시된 바와 같이 노드(309)에 도달하게 한다. 한번 더 말하지만, 트리에서의 엘리먼트들의 현재 혼합체에서 엘리먼트를 일의적으로 식별해주는 엘리먼트의 이름으로부터의 바이트들의 서브셋은 루트 노드로부터 이 기본 데이터 엘리먼트로의 "경로"이다. 예를 들어, 도 3b에서, 바이트들의 시퀀스 3475는 기본 데이터 엘리먼트(312)로 인도하고, 그 예에 도시된 기본 데이터 엘리먼트들의 혼합체에서 기본 데이터 엘리먼트(312)를 일의적으로 식별해준다.
다양하고 희박한 데이터에 대해, 도 3b에서의 트리 구조는 도 3a의 트리 구조보다 더 유연하고 콤팩트한 것으로 판명될 수 있다.
도 3c는 기본 데이터 엘리먼트들을 그들의 이름에 기초하여 조직화하는 데 사용될 수 있는 다른 데이터 조직화 시스템을 나타낸 것이다. 도 3c에 도시된 예에서, 각각의 기본 데이터 엘리먼트는, 기본 데이터 엘리먼트의 내용 전체로부터 구성되는, 구별되는 이름을 가지며, 이 이름은 단순히 기본 데이터 엘리먼트의 모든 바이트들로 이루어져 있고, 이 바이트들은 그들이 기본 데이터 엘리먼트에서 존재하는 것과 동일한 순서로 이름에 나타난다. 도 3c는 다양한 링크들로 인도하는 기본 데이터 엘리먼트들의 이름으로부터의 값들을 지정하기 위해 (필요한 경우 및/또는 유용한 경우) 정규 표현식들을 사용하여 트리를 추가로 콤팩트하게 만들고 엘리먼트들을 서브트리에 그룹화하는 (도 3b에 기술된 조직화에 대한) 다른 변형을 나타내고 있다. 정규 표현식들의 사용은 동일한 서브트리 하에 있는 대응하는 바이트들에 동일한 표현식을 공유하는 엘리먼트들의 효율적인 그룹화를 가능하게 하고; 이것에 뒤이어서 서브트리 내의 구별되는 기본 데이터 엘리먼트들의 보다 로컬적인 명확화가 행해질 수 있다. 또한, 정규 표현식들의 사용은 엘리먼트를 아래쪽에 있는 임의의 서브트리에 매핑하는 데 필요한 바이트들의 값들을 기술하는 보다 콤팩트한 방법을 가능하게 한다. 이것은 트리를 지정하는 데 필요한 바이트들의 수를 추가로 감소시킨다. 예를 들어, 정규 표현식(318)은 28 개의 연속적인 "F"들의 패턴을 지정하고; 트리 탐색 동안 이 링크를 따라가면, 정규 표현식(318)에 따른 28개의 연속적인 "F"들을 갖는 패턴(320)을 포함하는, 엘리먼트(314)에 도달할 수 있다. 마찬가지로, 엘리먼트(316)에 도달하는 경로는 16 개의 연속적인 "0"들을 갖는 패턴을 지정하는 정규 표현식을 사용하는 링크 또는 브랜치(branch)를 갖는다. 이러한 트리에 대해, 트리 탐색 프로세스는 어느 링크를 선택할지를 결정하기 위해 이러한 정규 표현식을 검출하고 실행할 필요가 있다.
도 3d는 기본 데이터 엘리먼트들을 그들의 이름에 기초하여 조직화하는 데 사용될 수 있는 다른 데이터 조직화 시스템을 나타낸 것이다. 도 3d에 도시된 예에서, 각각의 기본 데이터 엘리먼트는, 기본 데이터 엘리먼트의 내용 전체로부터 구성되는, 구별되는 이름을 갖는다. 선택된 핑거프린트로 평가되는 내용을 포함하는 필드들의 위치들을 식별하기 위해 핑거프린팅 방법이 각각의 엘리먼트에 적용된다. 엘리먼트에서 발견되는 첫 번째 핑거프린트의 위치에 있는 필드는 차원으로서 취급되고, 이 필드로부터의 특정 수의 바이트들(이를테면, x 바이트, 여기서 x는 엘리먼트 내의 바이트들의 수보다 상당히 더 작음)이 추출되고 엘리먼트의 이름의 선두 바이트들로서 사용되며, 이름의 나머지 바이트들은 기본 데이터 엘리먼트의 나머지 바이트들로 이루어져 있고 그들이 기본 데이터 엘리먼트에서 존재하는 것과 동일한 순환 순서로 나타난다. 이 이름은 기본 데이터 엘리먼트들을 트리 형태로 조직화하는 데 사용된다. 이 예에서, 엘리먼트에서 어떤 핑거프린트도 검출되지 않을 때, 이름은 단순히 엘리먼트의 모든 바이트들을, 그 바이트들이 엘리먼트에서 존재하는 순서로, 사용하는 것에 의해 규정(formulate)된다. (어떤 핑거프린트도 발견되지 않았다는 표시에 의해 표기되는) 개별 서브트리는 모든 이러한 엘리먼트들을 그들의 이름들에 기초하여 보유하고 조직화한다.
예를 들어, 도 3d에 도시된 바와 같이, 핑거프린팅 기법은 "차원 1"로서 선택될 필드를 식별해주는 바이트 Bi+1에서 핑거프린트 위치 "핑거프린트 1"을 획득하기 위해 (t 바이트의 데이터, 즉 B1B2B3 ... Bt를 포함하는) 엘리먼트(338)에 적용될 수 있다. 다음에, "차원 1"을 형성하기 위해 "핑거프린트 1"에 의해 식별되는 위치로부터의 x 바이트가 추출될 수 있고, 이 x 바이트가 도 3d에서의 각각의 엘리먼트의 이름의 선두 바이트들 N1N2 ... Nx로서 사용될 수 있다. 그 후에, (Bi+x+1로부터 시작하고, 나중에 B1B2B3 ... Bi로 랩어라운드되는) 엘리먼트(338)로부터의 나머지 t-x 바이트가 연결되고 이름의 나머지 바이트들 Nx+1 Nx+2 ... Nt로서 사용된다. 엘리먼트에서 어떤 핑거프린트도 발견되지 않을 때, 이름 N1 N2.....Nt는 단순히 엘리먼트(338)로부터의 B1B2B3...Bt이다. 기본 데이터 엘리먼트들이 트리에서 그들의 이름들을 사용하여 소팅되고 조직화된다. 예를 들어, 경로 13654 ... 06을 사용하여 트리의 2개의 레벨들을 순회(traverse)한 후에 기본 데이터 엘리먼트(PDE)(330)가 식별되고 도달되며, 여기서 바이트들 13654 ... 0은 차원 1로부터의 바이트들인 N1 N2.....Nx이다. 루트로부터 링크(334)(어떤 핑거프린트도 발견되지 않았다는 표시로 표기됨)를 따라 도착된 노드(335)에 있는 개별 서브트리는 선택된 핑거프린트로 평가되지 않은 내용을 갖는 모든 기본 데이터 엘리먼트들을 보유하고 조직화한다. 이와 같이, 이 조직화에서, 일부 링크들, 예컨대, 링크(336)는 엘리먼트에서와 동일한 순서로 나타나는 엘리먼트의 바이트들로 이루어진 이름을 사용하여 엘리먼트들을 조직화할 수 있는 반면, 다른 링크들, 예컨대, 링크(340)는 핑거프린트들을 사용하여 규정되는 이름을 사용하여 엘리먼트들을 조직화할 수 있다.
후보 엘리먼트를 수신할 때, 프로세스는 후보 엘리먼트의 이름을 결정하기 위해 앞서 기술된 동일한 기법을 적용하고, 내용 연관 룩업을 위해 트리를 탐색하는 데 이 이름을 사용한다. 이와 같이, 동일하고 일관된 취급이 기본 데이터 엘리먼트들(그들을 트리에 설치할 때) 및 후보 엘리먼트들(그들을 파서 및 인수분해기로부터 수신할 때)에 적용되어 그들의 이름들을 생성한다. 트리 탐색 프로세스는 트리를 탐색하기 위해 후보 엘리먼트의 이름을 사용한다. 이 실시예에서, 후보 엘리먼트에서 어떤 핑거프린트도 발견되지 않으면, 트리 탐색 프로세스는 핑거프린트로 평가되지 않는 내용을 갖는 기본 데이터 엘리먼트들을 조직화하고 포함하는 서브트리까지 탐색한다.
도 3e는 기본 데이터 엘리먼트들을 그들의 이름에 기초하여 조직화하는 데 사용될 수 있는 다른 데이터 조직화 시스템을 나타낸 것이다. 도 3e에 도시된 예에서, 각각의 기본 데이터 엘리먼트는, 기본 데이터 엘리먼트의 내용 전체로부터 구성되는, 구별되는 이름을 갖는다. 2개의 핑거프린트들 중 어느 하나로 평가되는 내용을 포함하는 필드들의 위치들을 식별하기 위해 핑거프린팅 방법이 각각의 엘리먼트에 적용된다. 엘리먼트에서의 첫 번째 핑거프린트(도 3e에서의 핑거프린트 1)의 첫 번째 출현의 위치에 있는 필드는 제1 차원(차원 1)으로서 취급되고, 두 번째 핑거프린트(도 3e에서의 핑거프린트 2)의 첫 번째 출현에 위치된 필드는 제2 차원(차원 2)으로서 취급된다. 엘리먼트에서 2개의 구별되는 핑거프린트들을 찾기 위해 핑거프린팅을 사용하는 것으로부터 네 가지 가능한 시나리오들이 얻어진다: (1) 엘리먼트에서 핑거프린트들 둘 다가 발견되는 것, (2) 핑거프린트 1은 발견되지만 핑거프린트 2는 발견되지 않는 것, (3) 핑거프린트 2는 발견되지만 핑거프린트 1은 발견되지 않는 것, 및 (4) 어떤 핑거프린트도 발견되지 않는 것. 기본 데이터 엘리먼트들은 시나리오들 각각에 대응하는 4개의 서브트리들로 그룹화될 수 있다. 도 3e에서, "FP1"은 핑거프린트 1의 존재를 나타내고, "FP2"는 핑거프린트 2의 존재를 나타내며, "~FP1"은 핑거프린트 1의 부존재를 나타내고, "~FP2"는 핑거프린트 2의 부존재를 나타낸다.
네 가지 시나리오들 각각에 대해, 엘리먼트의 이름은 다음과 같이 생성된다: (1) 핑거프린트들 둘 다가 발견될 때, "핑거프린트 1"에 의해 식별되는 위치로부터의 x 바이트는 "차원 1"을 형성하기 위해 추출될 수 있고, "핑거프린트 2"에 의해 식별되는 위치로부터의 y 바이트는 "차원 2"를 형성하기 위해 추출될 수 있으며, 이 x+y 바이트들은 도 3e에서의 각각의 이러한 엘리먼트의 이름의 선두 바이트들 N1N2....Nx+y로서 사용될 수 있다. 그 후에, 엘리먼트(348)로부터의 나머지 t-(x+y) 바이트가 순환 방식으로(제1 차원으로부터의 바이트들 이후에 시작함) 추출되고 연결되며 이름의 나머지 바이트들 Nx+y+1 Nx+y+2 ... Nt로서 사용된다. (2) 핑거프린트 1은 발견되지만 핑거프린트 2는 발견되지 않을 때, "핑거프린트 1"에 의해 식별되는 위치로부터의 x 바이트는 선두 차원(leading dimension)을 형성하기 위해 추출될 수 있고, 이 x 바이트는 각각의 이러한 엘리먼트의 이름의 선두 바이트들 N1N2 ... Nx로서 사용될 수 있다. 그 후에, (Bi+x+1로부터 시작하고, 나중에 B1B2B3 ... Bi로 랩어라운드되는) 엘리먼트(348)로부터의 나머지 t-x 바이트가 연결되고 이름의 나머지 바이트들 Nx+1 Nx+2 ... Nt로서 사용된다. (3) 핑거프린트 2는 발견되지만 핑거프린트 1은 발견되지 않을 때, "핑거프린트 2"에 의해 식별되는 위치로부터의 y 바이트는 선두 차원을 형성하기 위해 추출될 수 있고, 이 y 바이트는 각각의 이러한 엘리먼트의 이름의 선두 바이트들 N1N2 ... Ny로서 사용될 수 있다. 그 후에, (Bj+y+1로부터 시작하고, 나중에 B1B2B3 ... Bj로 랩어라운드되는) 엘리먼트(348)로부터의 나머지 t-y 바이트가 연결되고 이름의 나머지 바이트들 Ny+1 Ny+2 ... Nt로서 사용된다. (4) 엘리먼트에서 어떤 핑거프린트도 발견되지 않을 때, 이름 N1 N2.....Nt는 단순히 엘리먼트(348)로부터의 B1B2B3...Bt이다. 이와 같이, 이러한 네 가지 시나리오들 각각에 대해 개별 서브트리가 존재한다. 네 가지 시나리오들에 대해 엘리먼트(348)에 대한 이름(N1N2N3 ...Nt)을 추출하는 프로세스는 다음과 같이 요약될 수 있다:
(1) 핑거프린트 1과 핑거프린트 2 둘 다가 발견됨:
차원 1로부터의 N1 - Nx <- Bi+1 - Bi+x = x 바이트
차원 2로부터의 Nx+1 - Nx+y <- Bj+1 - Bj+y = y 바이트
Nx+y+1 .. Nt = (크기 t 바이트의 후보 엘리먼트로부터의) 나머지 바이트들 = Bi+x+1Bi+x+2Bi+x+3 ... BjBj+y+1Bj+y+2Bj+y+3 ... BtB1B2B3 ... Bi
(2) 핑거프린트 1은 발견되지만, 핑거프린트 2는 발견되지 않음:
차원 1로부터의 N1 - Nx <- Bi+1 - Bi+x = x 바이트
Nx+1 .. Nt = (크기 t 바이트의 후보 엘리먼트로부터의) 나머지 바이트들 = Bi+x+1Bi+x+2Bi+x+3 ... BtB1B2B3 ... Bi
(3) 핑거프린트 2는 발견되지만, 핑거프린트 1은 발견되지 않음:
차원 2로부터의 N1 - Ny <- Bj+1 - Bj+y = y 바이트
Ny+1 .. Nt = (크기 t 바이트의 후보 엘리먼트로부터의) 나머지 바이트들 = Bj+y+1Bj+y+2Bj+y+3 ... BtB1B2B3 ... Bj
(4) 어떤 핑거프린트도 발견되지 않음:
N1 - Nx <- B1 - Bt
후보 엘리먼트를 수신할 때, 프로세스는 후보 엘리먼트의 이름을 결정하기 위해 앞서 기술된 동일한 기법을 적용한다. 이 실시예에서, (핑거프린트 1과 핑거프린트 2가 발견되는지 여부에 따라) 앞서 기술된 네 가지 이름 구성 방법들이, 기본 데이터 엘리먼트들이 시브에 입력될 때 기본 데이터 엘리먼트들에 적용된 것처럼, 후보 엘리먼트에 적용된다. 이와 같이, 동일하고 일관된 취급이 기본 데이터 엘리먼트들(그들을 트리에 설치할 때) 및 후보 엘리먼트들(그들을 파서 및 인수분해기로부터 수신할 때)에 적용되어 그들의 이름들을 생성한다. 트리 탐색 프로세스는 내용 연관 룩업을 위해 트리를 탐색하는 데 후보 엘리먼트의 이름을 사용한다.
내용 연관 룩업이 성공적이면, 내용 연관 룩업은 특정 차원들의 위치들에 동일한 패턴을 갖는 기본 데이터 엘리먼트들을 후보 엘리먼트로서 산출할 것이다. 예를 들어, 후보 엘리먼트에서 핑거프린트들 둘 다가 발견되면, 트리 탐색 프로세스는, 루트 노드로부터 시작하여, 트리의 링크(354)를 따라 갈 것이다. 후보 엘리먼트가 패턴 "99 ... 3"을 "차원 1"로서 갖고 패턴 "7 ... 5"를 차원 2로서 가지면, 트리 탐색 프로세스는 노드(334)에 도착할 것이다. 이것은, 파생에 대한 유망한 대상들인, 2개의 기본 데이터 엘리먼트들(PDE(352) 및 PDE(353))를 포함하는 서브트리에 도달한다. 어느 기본 데이터 엘리먼트가 파생에 가장 적합한지를 결정하기 위해, (메타데이터를 먼저 검사하고, 필요한 경우, 실제 기본 데이터 엘리먼트들을 페치하고 검사하는 것에 의해) 부가의 분석 및 스크리닝이 수행된다. 이와 같이, 본원에 기술되는 실시예들은 시브에서 사용될 수 있는 각종의 트리 구조들을 식별한다. 이러한 구조들 또는 그의 변형들의 조합들이 기본 데이터 엘리먼트들을 조직화하는 데 이용될 수 있다. 일부 실시예들은 기본 데이터 엘리먼트들을 트리 형태로 조직화하고, 여기서 엘리먼트의 내용 전체가 엘리먼트의 이름으로 사용된다. 그렇지만, 바이트들이 엘리먼트의 이름에 나타나는 순서가 꼭 바이트들이 엘리먼트에 나타나는 순서일 필요는 없다. 엘리먼트의 특정 필드들은 차원으로 추출되고 이름의 선두 바이트들을 형성하는 데 사용되며, 엘리먼트의 나머지 바이트들은 나머지 이름을 구성한다. 이 이름들을 사용하여, 엘리먼트들은 시브에서 트리 형태로 정렬된다. 이름의 선두 숫자(leading digit)들은 트리의 상위 브랜치들(또는 링크들)를 차별화하는 데 사용되고, 나머지 숫자들은 트리의 모든 브랜치들(또는 링크들)을 점진적으로 차별화하는 데 사용된다. 트리의 각각의 노드는 그 노드로부터 나오는 상이한 수의 링크들을 가질 수 있다. 또한, 노드로부터의 각각의 링크는 상이한 수의 바이트들에 의해 차별화 및 표기될 수 있고, 이 바이트들의 설명은 정규 표현식들 및 그들의 규격을 표현하는 다른 강력한 방법들을 사용하여 달성될 수 있다. 이 특징들 모두는 컴팩트한 트리 구조를 가져온다. 개개의 기본 데이터 엘리먼트들에 대한 참조들은 트리의 리프 노드들에 존재한다.
일 실시예에서, 핑거프린팅 방법이 기본 데이터 엘리먼트를 구성하는 바이트들에 적용될 수 있다. 핑거프린트에 의해 식별되는 위치에 있는 다수의 바이트들은 엘리먼트 이름의 컴포넌트를 구성하는 데 사용될 수 있다. 차원을 제공하기 위해 하나 이상의 컴포넌트가 조합될 수 있다. 다수의 차원들을 식별하기 위해 다수의 핑거프린트들이 사용될 수 있다. 이 차원들은 연결되고 엘리먼트의 이름의 선두 바이트들로서 사용되며, 엘리먼트의 나머지 바이트들은 엘리먼트의 나머지 이름을 구성한다. 차원들이 핑거프린트들에 의해 식별되는 위치들에 위치되기 때문에, 이는 이름이 각각의 엘리먼트로부터의 일관된 내용으로 형성될 가능성을 증대시킨다. 핑거프린트에 의해 위치 확인되는 필드들에 동일한 내용 값을 갖는 엘리먼트들은 트리의 동일한 레그(leg)를 따라 함께 그룹화될 것이다. 이러한 방식으로, 유사한 엘리먼트들이 트리 데이터 구조로 함께 그룹화될 것이다. 어떤 핑거프린트도 발견되지 않은 엘리먼트들은, 그들의 이름들의 대안적인 규정을 사용하여, 별도의 서브트리에 함께 그룹화될 수 있다.
일 실시예에서, 엘리먼트 내용 내에서의 스켈레탈 데이터 구조(앞서 기술됨)의 다양한 컴포넌트들(또는 시그니처들)의 위치들을 결정하기 위해 핑거프린팅 방법이 엘리먼트의 내용에 적용될 수 있다. 대안적으로, 컴포넌트를 위치 확인하기 위해 엘리먼트의 내용에 대한 특정 고정 오프셋들이 선택될 수 있다. 특정 선언된 구조를 검출하기 위해 엘리먼트를 파싱하는 것 및 그 구조 내에서 컴포넌트들을 위치 확인하는 것(이들로 제한되지 않음)을 비롯한, 다른 방법들이 또한 엘리먼트의 스켈레탈 데이터 구조의 컴포넌트를 위치 확인하는 데 이용될 수 있다. 엘리먼트의 스켈레탈 데이터 구조의 다양한 컴포넌트들은 차원들로서 간주될 수 있고, 따라서 이 차원들과 그에 뒤이은 각각의 엘리먼트의 나머지 내용의 연결이 각각의 엘리먼트의 이름을 생성하는 데 사용된다. 이름은 기본 데이터 엘리먼트들을 트리 형태로 정렬하고 조직화하는 데 사용된다.
다른 실시예에서, 엘리먼트에서 특정 구조를 검출하기 위해 엘리먼트가 파싱된다. 이 구조에서의 특정 필드들은 차원들로서 식별된다. 다수의 이러한 차원들은 연결되고 이름의 선두 바이트들로서 사용되며, 엘리먼트의 나머지 바이트들은 엘리먼트의 나머지 이름을 구성한다. 차원들이 엘리먼트를 파싱하는 것 및 그의 구조를 검출하는 것에 의해 식별되는 위치들에 위치되기 때문에, 이는 이름이 각각의 엘리먼트로부터의 일관된 내용으로 형성될 가능성을 증대시킨다. 파싱에 의해 위치 확인되는 필드들에 동일한 내용 값을 갖는 엘리먼트들은 트리의 동일한 레그를 따라 함께 그룹화될 것이다. 이러한 방식으로, 한번 더 말하자면, 유사한 엘리먼트들이 트리 데이터 구조로 함께 그룹화될 것이다.
일부 실시예들에서, 트리 데이터 구조 내의 각각의 노드는 자기-기술 규격을 포함한다. 트리 노드들은 하나 이상의 자식을 갖는다. 각각의 자식 엔트리는 자식에의 링크 상의 차별화 바이트들에 관한 정보, 및 자식 노드에 대한 참조를 포함한다. 자식 노드는 트리 노드 또는 리프 노드일 수 있다. 도 3f는 본원에 기술되는 일부 실시예들에 따른, 자기-기술 트리 노드 데이터 구조를 제시한다. 도 3f에 도시된 트리 노드 데이터 구조는 (A) 루트 노드로부터 이 트리 노드까지의 경로에 관한 정보 - 이 트리 노드에 도달하는 이름으로부터의 실제 바이트 시퀀스, 루트 노드로부터 이 노드에 도달하기 위해 소비되는 이름의 바이트 수, 이 소비된 바이트 수가 어떤 미리 지정된 문턱값 초과인지의 표시, 및 이 노드까지의 경로를 기술하고 트리의 내용 연관 탐색은 물론 트리의 구성에 관한 결정에 유용한 다른 메타데이터와 같은 컴포넌트들의 전부 또는 그 서브셋을 포함함 -, (B) 노드가 갖는 자식들의 수, 및 (C) 각각의 자식에 대해(여기서 각각의 자식은 트리의 브랜치에 대응함), (1) 자식 ID, (2) 트리의 이 링크를 따라 전환하기 위해 이름의 후속 바이트들로부터 필요한 차별화 바이트들의 수, (3) 이 링크를 따라가는 이름으로부터의 바이트들의 실제 값에 대한 규격, 및 (4) 자식 노드에 대한 참조를 지정한다.
도 3g는 본원에 기술되는 일부 실시예들에 따른, 자기-기술 리프 노드 데이터 구조를 제시한 것이다. 리프 노드들은 하나 이상의 자식을 갖는다. 각각의 자식은 기본 데이터 엘리먼트에의 링크이다. 각각의 자식 엔트리는 기본 데이터 엘리먼트에의 링크 상의 차별화 바이트들에 관한 정보, 기본 데이터 엘리먼트에 대한 참조, 중복들 및 파생물들의 카운트 및 기본 데이터 엘리먼트에 대한 다른 메타데이터를 포함한다. 도 3g에 도시된 리프 노드 데이터 구조는 (A) 루트 노드로부터 이 리프 노드까지의 경로에 관한 정보 - 이 리프 노드에 도달하는 이름으로부터의 실제 바이트 시퀀스, 루트 노드로부터 이 노드에 도달하기 위해 소비되는 이름의 바이트 수, 이 소비된 바이트 수가 어떤 미리 지정된 문턱값 초과인지의 표시, 및 이 노드까지의 경로를 기술하고 트리의 내용 연관 탐색은 물론 트리의 구성에 관한 결정에 유용한 다른 메타데이터와 같은 컴포넌트들의 전부 또는 그 서브셋을 포함함 -, (B) 노드가 갖는 자식들의 수, 및 (C) 각각의 자식에 대해(여기서 각각의 자식은 리프 노드 하에 있는 기본 데이터 엘리먼트에 대응함), (1) 자식 ID, (2) 트리의 이 링크를 따라 기본 데이터 엘리먼트로 전환하기 위해 이름의 후속 바이트들로부터 필요한 차별화 바이트들의 수, (3) 이 레그를 따라가는 이름으로부터의 바이트들의 실제 값에 대한 규격, (4) 트리의 이 경로에서 트리를 종료시키는 기본 데이터 엘리먼트에 대한 참조, (5) 몇 개의 중복들 및 파생물들이 이 기본 데이터 엘리먼트를 가리키고 있는지의 카운트(이것은 저장 시스템에서 데이터를 삭제할 때 엔트리가 시브로부터 삭제될 수 있는지를 확인하는 데 사용됨), 및 (6) 기본 데이터 엘리먼트의 크기 등을 비롯한 기본 데이터 엘리먼트에 대한 다른 메타데이터를 지정한다.
새로운 기본 데이터 엘리먼트들이 트리에 설치되는 효율성을 증대시키기 위해, 일부 실시예들은 트리의 리프 노드에 유지되는 각각의 기본 데이터 엘리먼트에 대한 리프 노드 데이터 구조에 부가 필드를 포함한다. 새로운 엘리먼트가 트리에 삽입되어야만 할 때, 서브트리에서의 어디에 새로운 엘리먼트를 삽입할지 또는 서브트리의 추가 파티셔닝을 트리거할지를 결정하기 위해, 문제의 서브트리에서의 기본 데이터 엘리먼트들 각각의 이름 또는 내용의 부가 바이트들이 필요할 수 있다는 것에 유의한다. 이 부가 바이트들의 필요성은 새로운 엘리먼트와 관련하여 문제의 기본 데이터 엘리먼트들 각각에 대한 관련 차별화 바이트들을 추출하기 위해 이 엘리먼트들 중 몇몇을 페치하는 것을 필요로 할 수 있다. 이 작업을 위해 필요한 IO의 수를 줄이고 최적화(대부분의 경우에, 완전히 제거)하기 위해, 리프 노드에서의 데이터 구조는 그 리프 노드 하에 있는 각각의 기본 데이터 엘리먼트의 이름으로부터의 특정 수의 부가 바이트들을 포함한다. 이 부가 바이트들은 탐색 룩어헤드 바이트들이라고 지칭되고, 기본 데이터 엘리먼트를 새로운 들어오는 엘리먼트와 관련하여 소팅하는 데 도움이 된다. 주어진 기본 데이터 엘리먼트에 대한 탐색 룩어헤드 바이트들은 기본 데이터 엘리먼트를 시브에 설치할 때 리프 노드 구조에 설치된다. 이 목적을 위해 보유될 바이트들의 수는, 관여된 서브트리의 깊이 및 그 서브트리에서의 기본 데이터 엘리먼트들의 밀도를 비롯한, 각종의 기준들을 사용하여 정적으로 또는 동적으로 선택될 수 있다. 예를 들어, 기본 데이터 엘리먼트가 트리의 얕은 레벨들에 설치되는 것에 대해, 해결책은 매우 깊은 트리에 존재하는 기본 데이터 엘리먼트들에 대해서보다 더 긴 탐색 룩어헤드 필드들을 추가할 수 있다. 또한, 새로운 엘리먼트가 시브에 설치되고 있을 때, 그리고 기존의 대상 서브트리에 많은 기본 데이터 엘리먼트들이 이미 있으면(즉각적인 재파티셔닝의 가능성이 증가됨), 새로운 기본 데이터 엘리먼트가 서브트리에 설치되고 있을 때 새로운 기본 데이터 엘리먼트에 대해 부가의 탐색 룩어헤드 바이트들이 유지될 수 있다.
도 3h는 탐색 룩어헤드 필드를 포함하는 리프 노드에 대한 리프 노드 데이터 구조를 제시한다. 이 데이터 구조는 (A) 루트 노드로부터 이 리프 노드까지의 경로에 관한 정보 - 이 리프 노드에 도달하는 이름으로부터의 실제 바이트 시퀀스, 루트 노드로부터 이 노드에 도달하기 위해 소비되는 이름의 바이트 수, 이 소비된 바이트 수가 어떤 미리 지정된 문턱값 초과인지의 표시, 및 이 노드까지의 경로를 기술하고 트리의 내용 연관 탐색은 물론 트리의 구성에 관한 결정에 유용한 다른 메타데이터와 같은 컴포넌트들의 전부 또는 그 서브셋을 포함함 -, (B) 노드가 갖는 자식들의 수, 및 (C) 각각의 자식에 대해(여기서 각각의 자식은 리프 노드 하에 있는 기본 데이터 엘리먼트에 대응함), (1) 자식 ID, (2) 트리의 이 링크를 따라 기본 데이터 엘리먼트로 전환하기 위해 이름의 후속 바이트들로부터 필요한 차별화 바이트들의 수, (3) 이 레그를 따라가는 바이트들의 실제 값에 대한 규격, (4) 트리의 이 경로에서 트리를 종료시키는 기본 데이터 엘리먼트에 대한 참조, (5) 기본 데이터 엘리먼트에 대해 몇 바이트의 탐색 룩어헤드가 유지되는지는 물론 그 바이트들의 실제 값들을 지정하는 탐색 룩어헤드 필드들, (6) 몇 개의 중복들 및 파생물들이 이 기본 데이터 엘리먼트를 가리키고 있는지의 카운트(이것은 저장 시스템에서 데이터를 삭제할 때 엔트리가 시브로부터 삭제될 수 있는지를 확인하는 데 사용됨), 및 (7) 기본 데이터 엘리먼트의 크기 등을 비롯한 기본 데이터 엘리먼트에 대한 다른 메타데이터를 지정한다.
일부 실시예들에서, 트리의 다양한 브랜치들은 다양한 데이터 엘리먼트들을, 자식 서브트리로 인도하는 링크를 따라 있는 차별화 바이트들을 범위 구분자(range delimiter)로서 해석하는 것에 의해 형성되는 그룹들 또는 범위들에, 매핑하는 데 사용된다. 그 자식 서브트리에 있는 모든 엘리먼트들은 엘리먼트에서의 대응하는 바이트들의 값들이 특정의 자식 서브트리에의 링크에 대해 지정되는 차별화 바이트들에 대한 값들 이하이도록 되어 있다. 이와 같이, 각각의 서브트리는 이제 특정 범위 내에 속하는 값들을 갖는 엘리먼트들의 그룹을 나타낼 것이다. 주어진 서브트리 내에서, 트리의 각각의 후속 레벨은 엘리먼트들의 세트를 보다 작은 범위들로 점진적으로 분할할 것이다. 이 실시예는 도 3f에 도시된 자기-기술 트리 노드 구조의 컴포넌트들에 상이한 해석을 제공한다. 도 3f에서의 N개의 자식들은 트리 노드 데이터 구조에서 그들의 차별화 바이트들의 값에 의해 정렬되고, 비중첩 범위들의 순서 시퀀스(ordered sequence)를 나타낸다. N개의 노드에 대해, N+1개의 범위들이 있다 - 최하위 또는 제1 범위는 가장 작은 엔트리 이하인 값들로 이루어져 있고 제N+1 범위는 제N 엔트리 초과의 값들로 이루어져 있다 -. 제N+1 범위는 범위를 벗어난 것으로 취급될 것이고, 따라서 N개의 링크들은 아래쪽에 있는 N개의 서브트리들 또는 범위들로 인도한다.
예를 들어, 도 3f에서, 자식 1은 최하위 범위를 정의하고, 그의 범위를 차별화하기 위해 (값 abef12d6743a의) 6 바이트를 사용한다 - 자식 1에 대한 범위는 00000000부터 abef12d6743a까지이다 -. 후보 엘리먼트의 대응하는 6 바이트가 이 범위 내에 속하면(경계 값들을 포함함), 이 자식에 대한 링크가 선택될 것이다. 후보 엘리먼트의 대응하는 6개의 선두 바이트들이 범위 구분자 abef12d6743a보다 크면, 자식 1은 선택되지 않을 것이다. 후보가 자식 2에 대한 범위 내에 속하는지를 검사하기 위해, 2개의 조건들이 충족되어야만 한다 - 첫째, 후보가 직전 자식(이 예에서, 자식 1)에 대한 범위 밖에 있어야만 하고, 둘째, 그의 이름에 있는 대응하는 바이트들이 자식 2에 대한 범위 구분자보다 작거나 같아야 한다 -. 이 예에서, 자식 2에 대한 범위 구분자는 2 바이트의 값 dcfa에 의해 기술된다. 그러므로, 후보 엘리먼트에 대한 2개의 대응하는 바이트들은 dcfa보다 작거나 같아야만 한다. 이 방법을 사용하여, 후보 엘리먼트가 N+1개의 범위들 중 어느 것에 속하는지를 체크하기 위해 후보 엘리먼트 및 트리 노드 내의 모든 자식들이 검사될 수 있다. 도 3f에 도시된 예에 대해, 후보 엘리먼트의 이름의 4개의 대응하는 바이트들이, f3231929인, 자식 N에 대한 링크에 대한 차별화 바이트들의 값보다 크면, 미스 조건(miss condition)이 검출될 것이다.
이 새로운 범위 노드를 수용하기 위해 트리 탐색 프로세스가 수정될 수 있다. 범위 노드에 도착할 때, 그 노드로부터 나오는 주어진 링크를 선택하기 위해, 후보의 이름으로부터의 바이트들이 그 특정의 링크에 대해 정의된 범위 내에 속해야만 한다. 후보의 이름으로부터의 바이트들의 값이 모든 링크들에서의 대응하는 바이트들의 값보다 더 크면, 후보 엘리먼트는 아래쪽에 있는 서브트리에 걸쳐 있는 모든 범위들 밖에 있다 - 이 경우("범위 밖(out of range) 조건"이라고 지칭됨)에, 미스 조건이 검출되고 트리 탐색 프로세스가 종료된다 -. 후보 엘리먼트의 이름의 선두 바이트들이 자식 서브트리로 인도하는 링크를 따라 대응하는 차별화 바이트들에 의해 결정되는 범위 내에 있으면, 트리 탐색은 아래쪽에 있는 그 서브트리까지 계속된다. 트리 탐색이 "범위 밖 조건"으로 인해 종료되지 않는 한, 트리 탐색은 리프 노드 데이터 구조에 도달할 때까지 트리를 따라 점진적으로 더 깊게 계속될 수 있다.
이러한 종류의 범위 노드는 도 3a 내지 도 3e에 기술된 트리 노드들과 관련하여 트리 구조에서 이용될 수 있다. 일부 실시예들에서, 트리 구조의 특정 수의 레벨들의 상위 노드들은 트리 노드들일 수 있고, 트리 순회(tree traversal)는 후보 엘리먼트의 이름의 선두 바이트들과 트리의 링크를 따라 있는 대응하는 바이트들 사이의 정확한 매칭들에 기초한다. 후속 노드들은 후보 엘리먼트의 이름의 대응하는 바이트들이 속하는 범위에 의해 좌우되는 트리 순회를 갖는 범위 노드들일 수 있다. 트리 탐색 프로세스의 종료 시에, 본 문서에서 앞서 기술된 바와 같이, 전체적인 내용 연관 룩업의 결과로서 무엇을 반환할지를 결정하기 위해 각종의 기준들이 사용될 수 있다.
트리 노드들 및 리프 노드들을 표현하고 사용하는 방법들 및 장치들의 전술한 설명들은 단지 예시 및 설명을 위해 제시되었다. 이 설명은 전수적인 것으로도 본 발명을 개시된 형태들로 제한하려는 것으로도 의도되어 있지 않다. 그에 따라, 많은 수정들 및 변형들이 본 기술분야의 통상의 기술자들에게 명백할 것이다.
후보 엘리먼트를 입력으로서 제시받을 때, 앞서 기술된 트리 노드 구조 및 리프 노드 구조가 순회될 수 있고, 트리의 내용 연관 룩업이 후보 엘리먼트의 내용에 기초하여 수행될 수 있다. 후보 엘리먼트의 이름은, 기본 데이터 엘리먼트가 시브에 설치될 때 기본 데이터 엘리먼트의 이름이 기본 데이터 엘리먼트의 내용으로 구성되는 것처럼, 후보 엘리먼트의 바이트들로부터 구성될 것이다. 입력 후보 엘리먼트가 주어지면, 트리의 내용 연관 룩업 방법은 후보 엘리먼트의 이름을 사용하여 트리 구조를 탐색하는 것, 그에 뒤이어서 전체적인 내용 연관 룩업의 결과로서 무엇을 반환할지를 결정하기 위한 차후의 분석 및 스크리닝을 포함한다. 환언하면, 트리 탐색 프로세스는 제1 결과물을 반환하고, 이어서 전체적인 내용 연관 룩업의 결과를 결정하기 위해 그 결과물에 대해 분석 및 스크리닝이 수행된다.
후보와 동일한 이름의 선두 바이트들(또는 동일한 범위 내에 속하도록 되어 있는 바이트들)을 갖는 임의의 기본 데이터 엘리먼트들이 있으면, 트리는 링크에 의해 표기된 엘리먼트들의 서브트리의 형태로 기본 데이터 엘리먼트들의 그 서브셋을 식별해줄 것이다. 일반적으로, 각각의 트리 노드 또는 리프 노드는 트리 탐색 프로세스가 입력 엘리먼트의 이름의 대응하는 바이트들에 기초하여 트리에서의 다음 하위 레벨로 탐색해가기 위해 어느 나가는 링크(outgoing link)가 선택되어야 하는지를 결정할 수 있게 하는 정보, 및 트리가 선택된 링크를 따라 탐색될 때 도달되는 노드의 ID(identity)를 저장할 수 있다. 각각의 노드가 이 정보를 포함하면, 트리 탐색 프로세스는 어떤 매칭도 발견되지 않을 때까지(이 시점에서 트리 탐색 프로세스는 현재 노드에 루트가 있는 서브트리에 존재하는 기본 데이터 엘리먼트들의 세트를 반환할 수 있음) 또는 기본 데이터 엘리먼트에 도달할 때까지(이 시점에서 트리 탐색 프로세스는 기본 데이터 엘리먼트 및 임의의 연관된 메타데이터를 반환할 수 있음) 트리에서의 각각의 레벨을 재귀적으로 탐색할 수 있다.
트리 탐색 프로세스가 종료되면, 무엇이 전체적인 내용 연관 룩업의 결과로서 반환되어야만 하는지를 결정하기 위해 트리 탐색 프로세스의 결과물을 분석하고 스크리닝하는 데 다른 기준들 및 요구사항들이 사용될 수 있다. 첫째, 후보와 공통인 이름으로부터의 가장 많은 수의 선두 바이트들을 갖는 기본 데이터 엘리먼트를 선택할 수 있다. 둘째, 트리 탐색 프로세스에 의해 단일 기본 데이터 엘리먼트 또는 다수의 기본 데이터 엘리먼트들이 반환될 때, 그들이 내용 연관 룩업의 결과로서 반환될 자격을 갖기 전에 특정 최소 수의 바이트들을 후보 엘리먼트의 이름과 공유해야 한다(그렇지 않으면, 내용 연관 룩업은 미스를 반환함)는 부가 요구사항이 있을 수 있다. 스크리닝 요구사항의 다른 예는, (트리 탐색이 종료된 노드에 루트가 있는) 다수의 기본 데이터 엘리먼트들이 트리 탐색 프로세스의 결과물로서 반환되도록 트리 탐색 프로세스가 단일 기본 데이터 엘리먼트에 도달하지 않고 종료되면, 이 다수의 기본 데이터 엘리먼트들이 이 엘리먼트들의 수가 4개 내지 16개의 엘리먼트들과 같은 특정 지정된 한계보다 작은 경우에만(그렇지 않으면, 내용 연관 룩업이 미스를 반환함) 전체적인 내용 연관 룩업의 결과로서 반환될 자격을 가진다는 것일 수 있다. 내용 연관 룩업의 결과를 결정하기 위해 다수의 요구사항들의 조합들이 이용될 수 있다. 다수의 후보들이 아직 남아 있으면, 어느 기본 데이터 엘리먼트들이 가장 적당한지 결정하기 위해 탐색 룩어헤드 바이트들 그리고 또한 연관된 메타데이터를 검사할 수 있다. 선택을 단일 기본 데이터 엘리먼트로 여전히 좁힐 수 없는 경우, 다수의 기본 데이터 엘리먼트들을 Derive 함수에 제공할 수 있다. 이러한 방식으로, 룩업 프로세스는 "미스"를 보고하거나 단일 기본 데이터 엘리먼트를 반환할 것이고, 또는 단일 기본 데이터 엘리먼트가 아닌 경우, 후보 엘리먼트를 파생시키기 위한 좋은 출발점이 될 가능성이 있는 기본 데이터 엘리먼트들의 세트를 반환한다.
트리는 효율적인 내용 연관 액세스를 위해 설계될 필요가 있다. 균형 잡힌 트리는 대부분의 데이터에 대해 비슷한 액세스 깊이(depth of access)를 제공할 것이다. 트리의 상위 몇 레벨들이 종종 프로세서 캐시에 존재하고, 다음 몇 레벨들이 고속 메모리에 존재하며, 후속 레벨들이 플래시 저장소에 존재할 것으로 예상된다. 매우 큰 데이터 세트들에 대해, 하나 이상의 레벨이 플래시 저장소 및 심지어 디스크에 존재할 필요가 있을 수 있다.
도 4는 본원에 기술되는 일부 실시예들에 따른, 256 TB의 기본 데이터가 어떻게 트리 형태로 조직화될 수 있는지의 일 예를 도시하고, 트리가 메모리 및 저장소에서 어떻게 레이아웃될 수 있는지를 제시한 것이다. 노드당 64(26임)개의 자식들의 평균 팬아웃을 가정하면, 기본 데이터 엘리먼트에 대한 참조는 (즉, 5번의 링크 순회 또는 홉(hop) 이후에) (평균적으로) 트리의 제6 레벨에 존재하는 (예컨대, 도 3h에 기술된 바와 같은) 리프 노드 데이터 구조에 도달하는 것에 의해 액세스될 수 있다. 따라서, 트리의 제6 레벨에 있는 이러한 구조는, 5번의 홉 이후에, 다른 230개의 이러한 노드들 - 각각의 노드는 평균 64개의 자식들을 가짐(이 자식들은 기본 데이터 엘리먼트들에 대한 참조들임) - 과 함께 존재할 것이고, 따라서 대략 640억개의 기본 데이터 엘리먼트들을 수용할 것이다. 4 KB의 엘리먼트 크기에서, 이것은 256 TB의 기본 데이터 엘리먼트들을 수용한다.
트리는 트리의 6개의 레벨들이 다음과 같이 순회될 수 있도록 레이아웃될 수 있다: 온칩 캐시에 존재하는 3개의 레벨들(대략 256 K개의 노드들로의 링크들에 대한 전환들을 지정하는 대략 4000개의 "상위 레벨"트리 노드 데이터 구조들을 포함함), 메모리에 존재하는 2개의 레벨들(대략 10억 개의 리프 노드들로의 링크들에 대한 전환들을 지정하는 1600만 개의 "중간 레벨" 트리 노드 데이터 구조들을 포함함), 및 플래시 저장소에 존재하는 제6 레벨(10억 개의 리프 노드 데이터 구조들을 수용함). 플래시 저장소에 있는 트리의 이 제6 레벨에 존재하는 10억 개의 리프 노드 데이터 구조들은 640억 개의 기본 데이터 엘리먼트들(리프 노드당 평균 64개의 엘리먼트들)에 대한 참조들을 제공한다.
도 4에 도시된 예에서, 제4 레벨 및 제5 레벨에서, 각각의 노드는 엘리먼트당 평균 16 바이트(자식 ID에 대해 1 바이트, 예컨대, PDE에 대한 6 바이트 참조 + 바이트 카운트에 대한 1 바이트 + 실제 전환 바이트들은 물론 어떤 메타데이터를 지정하는 평균 8 바이트)를 사용한다. 제6 레벨에서, 각각의 리프 노드는 엘리먼트당 평균 48 바이트(자식 ID에 대해 1 바이트, 바이트 카운트에 대해 1 바이트, 실제 전환 바이트들을 지정하는 8 바이트, 기본 데이터 엘리먼트에 대한 6-바이트 참조, 이 기본 데이터 엘리먼트로부터의 파생물들의 카운트에 대해 1 바이트, 16 바이트의 탐색 룩어헤드, 기본 데이터 엘리먼트의 크기에 대해 2 바이트는 물론, 13 바이트의 다른 메타데이터)를 사용하고, 따라서 트리에 대해 요구되는 플래시 저장소의 총 용량(기본 데이터 엘리먼트들에 대한 참조들을 포함하고 임의의 메타데이터를 포함함)은 약 3 테라바이트이다. 트리의 상위 노드들에 대해 요구되는 총 용량은 (보다 적은 노드가 있고, 자식 노드에 대한 보다 엄격한 참조를 지정하는 데 보다 적은 바이트들이 필요하며, 노드당 보다 적은 메타데이터가 요구되기 때문에) 이 크기의 보다 작은 비율이다. 이 예에서, 상위 트리 노드들은 엘리먼트당 평균 8 바이트(자식 ID에 대해 1 바이트, 바이트 카운트에 대해 1 바이트, 게다가 실제 전환 바이트들을 지정하는 평균 3 내지 4 바이트, 및 자식 노드에 대한 2 내지 3 바이트 참조)를 사용한다. 전반적으로, 이 예에서, 256 TB의 기본 데이터를 갖는 합성 데이터 세트(synthetic dataset)가 3 TB(또는 256 TB의 1.17%)의 부가 장치를 사용하여 10억 개의 그룹들로 소팅된다.
256 TB의 기본 데이터가 각각 4 KB인 640억 개의 기본 데이터 엘리먼트들을 포함하는 도 4에 도시된 예에서, 640억 개의 기본 데이터 엘리먼트들을 완전히 차별화하기 위해 5 바이트(또는 36 비트) 미만의 주소를 필요로 한다. 내용 연관 관점에서 볼 때, 데이터의 혼합체가 평균 4 바이트의 순차적 이름(progressive Name)이 처음 3개의 레벨들 각각에서 소비되고, 8 바이트가 다음 3개의 레벨들 각각에서 소비되도록 되어 있으면, 총 36 바이트(288 비트)의 이름은 (평균적으로) 640억 개의 기본 데이터 엘리먼트들 전부를 차별화할 것이다. 이 36 바이트는 각각의 엘리먼트를 구성하는 4 KB의 1% 미만일 것이다. 4 KB의 기본 데이터 엘리먼트가 그의 바이트들의 1%(또는 심지어 5 내지 10 %)에 의해 식별될 수 있는 경우, (바이트들의 대부분을 이루고 있는) 나머지 바이트들은 교란(perturbation)을 허용할 수 있으며, 이러한 교란을 갖는 후보는 여전히 이 기본 데이터 엘리먼트에 도달할 수 있고 그것으로부터의 파생을 위해 고려될 수 있을 것이다.
(아래쪽에 있는 다양한 서브트리들을 차별화하기 위해) 임의의 주어진 링크에서 필요한 바이트 수가 데이터 세트를 구성하는 엘리먼트들의 혼합체에서의 실제 데이터에 의해 좌우될 것임에 유의한다. 마찬가지로, 주어진 노드로부터의 링크들의 수가 또한 데이터에 따라 다를 것이다. 자기-기술 트리 노드 및 리프 노드 데이터 구조들은 각각의 링크에 필요한 바이트들의 실제 수 및 값들은 물론 임의의 노드로부터 나오는 링크들의 수를 선언할 것이다.
입력을 가능한 한 많은 차별화된 그룹들로 소팅하도록, 트리의 다양한 레벨들에서 사용되는 캐시, 메모리, 및 저장소의 양을 증분적 저장소의 할당된 버짓(budget) 내로 제한하기 위해, 추가 제어가 행해질 수 있다. 엘리먼트들을 완전히 차별화하기 위해 매우 깊은 서브트리들을 필요로 하는 데이터의 밀도들 및 포켓(pocket)들이 있는 상황을 핸들링하기 위해, 이러한 밀도들이 보다 큰 관련 엘리먼트들의 세트를 트리의 특정 깊이(예컨대, 제6 레벨)에 있는 플랫 그룹(flat group)으로 그룹화하는 것 및 이들에 대해 간소화된 탐색 및 파생을 수행하는 것에 의해(최상의 기본 데이터 엘리먼트를 결정하기 위해 먼저 탐색 룩어헤드 및 메타데이터를 검사하는 것, 또는 (폴백으로서) 나머지 데이터에 대해 방법에 의해 제공되는 완전 파생(full derivation)보다는 중복들만을 찾는 것에 의해) 효율적으로 핸들링될 수 있을 것이다. 이것은 매우 깊은 트리들의 생성을 피할 것이다. 다른 대안은, 이 레벨들이 이용가능 메모리에 들어가는 한, (많은 레벨들을 갖는) 깊은 트리들을 허용하는 것이다. 보다 깊은 레벨들이 플래시 또는 디스크로 넘치는 순간, 그렇지 않았으면 플래시 또는 디스크에 저장된 트리 노드들의 보다 깊은 레벨들에의 다수의 연속적인 액세스들에 의해 야기될 대기시간을 최소화하기 위해 그 레벨로부터 계속하여 트리를 플래트닝(flatten)하기 위해 조치들이 취해질 수 있다.
엘리먼트의 이름으로부터 전체 바이트들의 비교적 작은 비율이 각각의 기본 데이터 엘리먼트를 식별하는 데 종종 충분할 것으로 예상된다. 본원에 기술되는 실시예들을 사용하여 각종의 현실 세계 데이터 세트들에 대해 수행된 연구들은 기본 데이터 엘리먼트의 바이트들의 작은 서브셋이 해결책을 가능하게 하기 위해 대부분의 엘리먼트들을 정렬하는 역할을 한다는 것을 확인해준다. 이와 같이, 이러한 해결책은 그의 동작을 위해 필요로 하는 저장소의 양의 면에서 효율적이다.
도 4로부터의 예에 대해 필요한 액세스들의 면에서, 입력(또는 후보 엘리먼트)의 매 들어오는 4 KB 청크마다 한 번씩, 이 방식은 트리 구조를 쿼리하고 리프 노드에 도달하기 위해 하기의 액세스들을 필요로 할 것이다: 세 번의 캐시 참조들, 두 번의 메모리 참조들(또는 어쩌면 다수의 메모리 참조들), 그리고 리프 노드 데이터 구조에 액세스하기 위한 플래시 저장소로부터의 한 번의 IO. 저장소로부터의 이 한 번의 IO는 문제의 기본 데이터 엘리먼트에 전용된 48 바이트를 포함하는 약 64개의 엘리먼트들의 그룹에 대한 리프 노드 데이터 구조에 대한 정보를 보유하는 4 KB 페이지를 페치할 것이다. 이 48 바이트는 문제의 기본 데이터 엘리먼트에 대한 메타데이터를 포함할 것이다. 이것은 트리 룩업 프로세스를 종결시킨다. 차후에, 필요한 IO들의 횟수는 후보 엘리먼트가 중복, 파생물, 또는 시브에 설치될 새로운 기본 데이터 엘리먼트로 판명되는지에 의존할 것이다.
기본 데이터 엘리먼트의 중복인 후보 엘리먼트는 중복을 검증하기 위해 기본 데이터 엘리먼트를 페치하기 위해 한 번의 IO를 필요로 할 것이다. 중복이 검증되면, 트리에서의 메타데이터를 업데이트하기 위해 IO가 한 번 더 있을 것이다. 그러므로, 중복 엘리먼트들의 수집은 트리 룩업 이후에 두 번의 IO를 필요로 하여, 총 세 번의 IO를 필요로 할 것이다.
트리 룩업에 실패하고 중복도 아니고 파생물도 아닌 후보 엘리먼트는 엘리먼트를 새로운 기본 데이터 엘리먼트로서 시브에 저장하기 위해 IO를 한 번 더 필요로 하고, 트리에서의 메타데이터를 업데이트하기 위해 또 한 번의 IO를 필요로 한다. 이와 같이, 트리 룩업에 실패하는 후보 엘리먼트의 수집은 트리 룩업 이후에 두 번의 IO를 필요로 하여, 총 세 번의 IO에 이를 것이다. 그렇지만, 저장소 IO를 필요로 하지 않고 트리 룩업 프로세스가 종료되는 후보 엘리먼트들에 대해, 이러한 후보 엘리먼트들을 수집하기 위해 총 두 번의 IO만 있으면 된다.
(중복이 아니라) 파생물인 후보 엘리먼트는 파생을 계산하는 데 필요한 기본 데이터 엘리먼트를 페치하기 위해 먼저 한 번의 IO를 필요로 할 것이다. 가장 빈번한 파생들이 (다수가 아닌) 단일 기본 데이터 엘리먼트로부터의 파생일 것으로 예상되기 때문에, 기본 데이터 엘리먼트를 페치하는 데 한 번의 IO만 있으면 될 것이다. 파생을 성공적으로 완료한 후에, 재구성 프로그램 및 파생 상세를 저장되어 있는 엘리먼트에 대해 생성된 엔트리에 저장하는 데 IO가 한 번 더 필요할 것이고, 새로운 파생물을 반영하기 위해 트리에 있는 메타데이터(카운트, 기타 등등)를 업데이트하기 위해 또 한 번의 IO가 필요할 것이다. 그러므로, 파생물이 되는 후보 엘리먼트의 수집은 첫 번째 트리 룩업 이후에 3 번의 추가 IO를 필요로 하여, 총 네 번의 IO를 필요로 한다.
요약하면, (매우 큰 데이터 세트에 걸쳐 전역적으로 중복성을 이용하면서) 후보 엘리먼트를 수집하고 데이터 분류TM 방법을 그것에 적용하는 것은 약 세 번 내지 네 번의 IO들을 필요로 한다. 전통적인 데이터 중복 제거 기법들에서 필요한 것과 비교할 때, 이것은 전형적으로 후보 엘리먼트당 IO가 하나 더 많은 것에 불과하며, 그로 인해 엘리먼트 자체보다 더 미세한 단위로 데이터 세트에 걸쳐 전역적으로 중복성이 이용될 수 있다.
초당 250,000번의 랜덤 IO 액세스들(4 KB의 페이지들에의 랜덤 액세스들의 1 GB/초의 대역폭을 의미함)을 제공하는 저장 시스템은 초당 약 62,500개(250,000을 각각이 4 KB의 평균 크기를 갖는 입력 청크당 4번의 IO로 나눔)의 입력 청크들을 수집하고 그에 대해 데이터 분류TM 방법을 수행할 수 있다. 이것은 저장 시스템의 모든 대역폭을 다 사용하면서 250 MB/초의 수집 속도를 가능하게 한다. 저장 시스템의 대역폭의 절반만이 사용되더라도(따라서 다른 절반은 저장된 데이터에의 액세스를 위해 이용가능함), 이러한 데이터 분류TM 시스템은 125 MB/초의 수집 속도를 여전히 제공할 수 있다. 이와 같이, 충분한 처리 능력이 주어지면, 데이터 분류TM 시스템은 데이터 세트 전체에 걸쳐(엘리먼트 자체보다 더 미세한 단위로) IO들의 효율적 사용으로 중복성을 이용할 수 있고, 최신의 저장 시스템들에서 초당 수백 메가바이트의 수집 속도로 데이터 축소를 제공할 수 있다.
이와 같이, 테스트 결과에 의해 확인되는 바와 같이, 본원에 기술되는 실시예들은 IO 액세스의 효율적 사용에 의해 그리고 장치에 대해 최소한의 증분적 저장소가 필요한 것에 의해 대용량의 데이터 저장소로부터 엘리먼트들을 탐색하는 복잡한 작업(파생을 지정하는 데 최소한의 저장소를 필요로 하면서 엘리먼트들로부터 입력 엘리먼트가 파생될 수 있음)을 달성한다. 이와 같이 구성된 이 프레임워크는 엘리먼트의 총 바이트의 보다 작은 비율을 사용하여 파생에 적당한 엘리먼트를 찾는 것을 실현가능하게 하여, 대부분의 바이트가 교란 및 파생을 위해 이용가능하게 된다. 이 방식이 많은 데이터에 대해 효과적으로 작동하는 이유를 설명하는 중요한 이해는 트리가 시브에서 엘리먼트들을 식별해주는 차별화 및 구분 바이트들을 위치 확인할 수 있게 하는 다루기 쉬운 미세 단위 구조를 제공하고, 이 바이트들 각각이 데이터에서는 상이한 깊이들 및 위치들에 있지만, 트리 구조에서는 효율적으로 격리 및 저장될 수 있다는 것이다.
도 5a 내지 도 5c는 본원에 기술되는 실시예들을 사용하여 데이터가 어떻게 조직화될 수 있는지의 실제 예를 나타낸 것이다. 도 5a는 512 바이트의 입력 데이터, 및 인수분해의 결과(예컨대, 도 2에서의 동작(202)을 수행한 결과)를 나타낸 것이다. 이 예에서, 연속적인 단절들이 후보 엘리먼트들을 식별해주도록, 데이터에서의 단절들을 결정하기 위해 핑거프린팅이 적용된다. 교대로 있는 후보 엘리먼트들은 굵은 보통 글꼴로 나타내어져 있다. 예를 들어, 첫 번째 후보 엘리먼트는 "b8ac83d9dc7caf18f2f2e3f783a0ec69774bb50bbe1d3ef1ef8a82436ec43283 bc1c0f6a82e19c224b22f9b2"이고, 다음 후보 엘리먼트는 "ac83d9619ae5571ad2bbcc15d3e493eef62054b0 5b2dbccce933483a6d3daab3cb19567dedbe33e952a966c49f3297191cf22aa3 1b98b9dcd0fb54a7f761415e"이며, 이하 마찬가지이다. 도 5a에서의 입력은 도시된 바와 같은 12개의 가변 크기 후보 엘리먼트들로 인수분해된다. 각각의 청크의 선두 바이트들은 시브에서 엘리먼트들을 정렬하고 조직화하는 데 사용된다. 도 5b는 도 5a에 도시된 12개의 후보 엘리먼트들이 그들의 이름을 사용하여 그리고 도 3b에 기술된 트리 구조를 사용하여 시브에서 트리 형태로 기본 데이터 엘리먼트들로서 어떻게 조직화될 수 있는지를 나타낸 것이다. 각각의 엘리먼트는, 엘리먼트의 내용 전체로부터 구성된, 구별되는 이름을 갖는다. 이 예에서, 12개의 후보 엘리먼트들 사이의 단절들을 결정하기 위해 핑거프린팅이 적용되기 때문에, 각각의 후보 엘리먼트의 선두 바이트들은 이미 앵커 핑거프린트(anchor fingerprint)에 정렬되어 있을 것이고; 그러므로, 각각의 이름의 선두 바이트들은 이 핑거프린트에 앵커링된 제1 차원의 내용으로부터 이미 구성되어 있을 것이다. 이름의 선두 바이트들은 다양한 엘리먼트들을 조직화한다. 예를 들어, 엘리먼트의 이름에서의 첫 번째 바이트가 "0x22"이면, 기본 데이터 엘리먼트 #1을 선택하기 위해 최상위 링크가 취해진다. 도 5b에서의 다양한 링크들이 도 3b에 예시된 트리 데이터 구조를 참조하여 설명되는 바와 같이 가변 수의 바이트들을 사용하여 차별화되는 것에 유의한다.
도 5c는 도 5a에 도시된 12개의 후보 엘리먼트들이 어떻게 도 3d를 참조하여 기술된 트리 데이터 구조를 사용하여 조직화될 수 있는지를 나타낸 것이다. 엘리먼트의 내용 내에서 2차 핑거프린트(secondary fingerprint)를 식별하기 위해 핑거프린팅이 각각의 엘리먼트의 내용에 추가로 적용된다. 엘리먼트들을 조직화하는 데 사용되는 이름의 선두 바이트들을 형성하기 위해, 첫 번째 핑거프린트(각각의 엘리먼트의 경계에 이미 존재함) 및 두 번째 핑거프린트의 위치로부터 추출된 내용의 바이트들이 연결된다. 환언하면, 엘리먼트의 이름은 다음과 같이 구성된다: 2개의 차원들 또는 필드들(각각, 앵커 핑거프린트 및 2차 핑거프린트에 의해 위치 확인됨)로부터의 데이터의 바이트들이, 이름의 선두 바이트들 및 그에 뒤따르는 나머지 바이트들을 형성하기 위해, 연결된다. 이름을 이와 같이 구성한 것의 결과로서, 바이트들의 상이한 시퀀스는 (도 5b와 대비하여) 도 5c에서의 다양한 기본 데이터 엘리먼트들을 가져온다. 예를 들어, 기본 데이터 엘리먼트 #4에 도달하기 위해, 트리 탐색 프로세스는 먼저 제1 차원(즉, 첫 번째 핑거프린트)에 있는 필드의 선두 바이트들인 "46093f9d"에 대응하는 링크를 취하고, 이어서 제2 차원(즉, 두 번째 핑거프린트)에 위치된 필드의 선두 바이트인 "c4"에 대응하는 링크를 취한다.
도 6a 내지 도 6c는, 각각, 본원에 기술되는 일부 실시예들에 따른, 도 1a 내지 도 1c를 참조하여 기술된 내용 연관 매퍼들(121 및 122)에 대해 트리 데이터 구조들이 어떻게 사용될 수 있는지를 나타낸 것이다.
(기본 데이터 엘리먼트들로부터 후보 엘리먼트를 파생시키려고 시도하기 위해) 적당한 기본 데이터 엘리먼트들을 찾아내는 어려운 문제가 해결되면, 문제는 기본 데이터 엘리먼트들 중 하나 또는 기본 데이터 엘리먼트들의 작은 서브셋을 검사하고 파생을 지정하는 데 최소한의 저장소를 필요로 하면서 기본 데이터 엘리먼트들로부터 후보 엘리먼트를 최적으로 파생시키는 것으로 좁혀진다. 다른 목적들은 저장 시스템에의 액세스 횟수를 최소로 유지하고 파생 시간 및 재구성 시간을 용인가능하게 유지하는 것을 포함한다.
파생기는 하나 이상의 기본 데이터 엘리먼트에 대해 수행되는 변환들의 결과로서 후보 엘리먼트를 표현해야만 하고, 이 변환들을 데이터 검색 시에 파생물을 재생성하는 데 사용될 재구성 프로그램으로서 지정해야만 한다. 각각의 파생은 그 자신의 독자적인 프로그램이 구성될 것을 필요로 할 수 있다. 파생기의 기능은 이 변환들을 식별하고 가장 작은 풋프린트를 갖는 재구성 프로그램을 생성하는 것이다. 하나 이상의 기본 데이터 엘리먼트에 대해 또는 각각의 엘리먼트의 특정 필드들에 대해 수행되는 산술, 대수, 또는 논리 연산들을 비롯한, 각종의 변환들이 이용할 수 있다. 그에 부가하여, 하나 이상의 기본 데이터 엘리먼트에서의 바이트들의 연결, 삽입, 대체, 및 삭제와 같은, 바이트 조작 변환들을 사용할 수 있다.
도 7a는 본원에 기술되는 일부 실시예들에 따른, 재구성 프로그램에서 지정될 수 있는 변환들의 일 예를 제공한다. 이 예에서 지정되는 변환들의 어휘(vocabulary)는 엘리먼트에서의 지정된 길이의 필드들에 대한 산술 연산들은 물론, 기본 데이터 엘리먼트에서의 지정된 오프셋들에서 바이트들의 선언된 길이의 삽입, 삭제, 첨부(append), 및 대체를 포함한다. 후보 엘리먼트와 하나 이상의 기본 데이터 엘리먼트 간의 유사점들과 차이점들을 검출하고 재구성 프로그램을 구성하기 위해 각종의 기법들 및 동작들이 파생기에 의해 사용될 수 있다. 파생기는 그의 기능을 수행하기 위해 기반이 되는 하드웨어에서 이용가능한 어휘를 이용할 수 있다. 작업의 최종 결과는 재구성 프로그램에 대해 지정된 어휘에서의 변환들을 지정하고 최소 양의 증분적 저장소를 사용하여 그리고 고속 데이터 검색도 가능하게 하는 방식으로 그렇게 하는 것이다.
파생기는, 시스템의 비용-성능 제약조건들 내에서 가능한 최상의 분석을 제공하기 위해, 기반이 되는 머신의 처리 능력을 이용하고 머신에 할당된 처리 버짓 내에서 동작할 수 있다. 마이크로프로세서 코어들이 보다 용이하게 이용가능하다면, 그리고 저장소에의 IO 액세스들이 비용이 많이 든다면, 데이터 분류TM 해결책은 몇 개의 기본 데이터 엘리먼트들로부터 후보 엘리먼트의 내용의 로컬 분석 및 파생을 효율적으로 수행하기 위해 최신의 마이크로프로세서들의 처리 능력을 이용하도록 설계되어 있다. (매우 큰 데이터에 대한) 데이터 분류TM 해결책의 성능이 계산 처리에 의해서가 아니라 전형적인 저장 시스템의 IO 대역폭에 의해 속도 제한될 것으로 예상된다. 예를 들어, 250,000 IO/초를 지원하는 전형적인 플래시 기반 저장 시스템에서 초당 수백 메가바이트의 수집 속도를 지원하기 위해 요구된 계산 및 분석을 수행하는 데 몇 개의 마이크로프로세서 코어들로 충분할 것으로 예상된다. Intel Xeon 프로세서 E5-2687W(10개의 코어, 3.1 GHz, 25 MB 캐시)와 같은 최신 마이크로프로세서로부터의 2개의 이러한 마이크로프로세서 코어들이 프로세서에서 이용가능한 총 계산 능력의 일부(2/10)인 것에 유의한다.
도 7b는 본원에 기술되는 일부 실시예들에 따른, 기본 데이터 엘리먼트들로부터 파생되는 후보 엘리먼트들의 결과들의 예들을 나타낸 것이다. 구체적으로는, 데이터 패턴 "Elem"은 기본 데이터 저장소에 저장되는 기본 데이터 엘리먼트이고, 데이터 패턴 "Cand"은 기본 데이터 엘리먼트로부터 파생되어야 하는 후보 엘리먼트이다. "Cand"과 "Elem" 사이의 18개의 공통 바이트들이 하이라이트되어 있다. 재구성 프로그램(702)은 데이터 패턴 "Cand"가 데이터 패턴 "Elem"으로부터 어떻게 파생될 수 있는지를 지정한다. 도 7b에 도시된 바와 같이, 재구성 프로그램(702)은 1 바이트 대체, 6 바이트 삽입, 3 바이트 삭제, 7 바이트 벌크 대체를 사용하여 "Elem"으로부터 "Cand"을 어떻게 파생시켜야 하는지를 나타내고 있다. 파생물을 지정하는 비용은 20 바이트 + 3 바이트 참조 = 23 바이트이며, 이는 원래 크기의 65.71%이다. 도시된 재구성 프로그램(702)이 프로그램의 사람 판독가능 표현이며, 프로그램이 본원에 기술되는 실시예들에 의해 실제로 어떻게 저장되는지가 아닐 수 있다는 것에 유의한다. 마찬가지로, 곱셈 및 덧셈과 같은 산술 연산들에 기초한 다른 재구성 프로그램들이 또한 도 7b에 도시되어 있다. 예를 들어, "Elem"이 bc1c0f6a790c82e19c224b22f900ac83d9619ae5571ad2bbec152054ffffff83이고 "Cand"가 bc1c0f6a790c82e19c224b22f91c4da1aa0369a0461ad2bbec152054ffffff83이면, 곱하기 (00ac83d9619ae557)*2a = [00]1c4da1aa0369a046을 사용하여 8-바이트 차이가 파생될 수 있다. 파생물을 지정하는 비용 : 4 바이트 + 3 바이트 참조 = 7 바이트이고, 이는 원래 크기의 20.00%이다. 대안적으로, "Elem"이 bc1c0f6a790c82e19c224b22f9b2ac83ffffffffffffffffffffffffffffb283이고 "Cand"가 bc1c0f6a790c82e19c224b22f9b2ac8300000000000000000000000000002426이면, 16-바이트 차이는 도시된 바와 같이 덧셈을 사용하여, 예컨대, 오프셋 16에서 시작하는 16-바이트 영역에 0x71a3을 가산하고 캐리를 버리는 것에 의해 파생될 수 있다. 파생물을 지정하는 비용은 5 바이트 + 3 바이트 참조 = 8 바이트이며, 이는 원래 크기의 22.85%이다. 도 7a에서의 샘플 인코딩들이 단지 예시를 위해 선택되었다는 것에 유의한다. 도 7b에서의 예들은 32 바이트의 데이터 크기들을 가지며, 따라서 엘리먼트 내의 길이 및 오프셋 필드들에 대해 5 비트로 충분하다. 큰 엘리먼트들(예컨대, 4 KB 엘리먼트)에 대해, 이 필드들의 크기들은 12 비트로 증가될 필요가 있을 것이다. 마찬가지로, 샘플 인코딩은 3 바이트 또는 24 비트의 참조 크기를 수용한다. 이것은 1600만 개의 기본 데이터 엘리먼트들이 참조될 수 있게 한다. 참조가, 이를테면, 256 TB의 데이터에서 임의의 위치를 주소지정할 수 있을 필요가 있는 경우, 참조는 크기가 6 바이트일 필요가 있다. 이러한 데이터 세트가 4 KB 엘리먼트들로 인수분해될 때, 참조를 지정하는 데 필요한 6 바이트가 4 KB 엘리먼트의 크기의 작은 비율일 것이다.
(하나 이상의 기본 데이터 엘리먼트로부터 파생되는) 파생 엘리먼트를 지정하는 데 필요한 정보의 크기는 재구성 프로그램의 크기와 요구된 (하나 이상의) 기본 데이터 엘리먼트를 지정하는 데 필요한 참조들의 크기의 합이다. 후보 엘리먼트를 파생 엘리먼트로서 지정하는 데 필요한 정보의 크기는 후보와 기본 데이터 엘리먼트 사이의 거리라고 지칭된다. 후보가 기본 데이터 엘리먼트들의 다수의 세트들 중 임의의 한 세트로부터 실현가능하게 파생될 수 있을 때, 가장 짧은 거리를 갖는 기본 데이터 엘리먼트들의 세트가 대상으로서 선택된다.
후보 엘리먼트가 하나 초과의 기본 데이터 엘리먼트로부터 (이들 각각으로부터 파생되는 추출물들을 어셈블하는 것에 의해) 파생될 필요가 있을 때, 파생기는 저장 시스템에의 부가 액세스들의 비용을 고려하고 이 비용을 보다 작은 재구성 프로그램 및 보다 작은 거리의 이점과 비교 검토할 필요가 있다. 후보에 대한 최적의 재구성 프로그램이 생성되면, 그의 거리가 거리 문턱값과 비교되고; 그 거리가 문턱값을 초과하지 않으면, 파생이 채용된다. 파생이 채용되면, 후보 엘리먼트는 파생 엘리먼트로서 재규정되고 기본 데이터 엘리먼트와 재구성 프로그램의 조합으로 대체된다. 후보 엘리먼트에 대해 생성되는 분류된 데이터 내의 엔트리는 재구성 프로그램 및 관련 기본 데이터 엘리먼트들에 대한 하나 이상의 참조로 대체된다. 최상의 파생에 대한 거리가 거리 문턱값을 초과하면, 파생물이 채용되지 않을 것이다.
데이터 축소를 달성하기 위해, 거리 문턱값은 항상 후보 엘리먼트의 크기 미만이어야만 한다. 예를 들어, 파생물이 그의 풋프린트가 후보 엘리먼트의 풋프린트의 절반 이하인 경우에만 채용되고, 그로써 적당한 파생이 존재하는 각각의 후보 엘리먼트에 대해 2배 이상의 축소를 보장하도록, 거리 문턱값이 후보 엘리먼트의 크기의 50%로 설정될 수 있다. 거리 문턱값은 사용자 지정 입력에 기초한 또는 시스템에 의해 선택된, 미리 결정된 퍼센트 또는 비율일 수 있다. 거리 문턱값은 시스템의 정적 또는 동적 파라미터들에 기초하여 시스템에 의해 결정될 수 있다.
도 8a 내지 도 8e는 본원에 기술되는 일부 실시예들에 따른, 입력 데이터를 고정 크기 엘리먼트들로 인수분해하고 엘리먼트들을 도 3d 및 도 3e를 참조하여 기술된 트리 데이터 구조로 조직화하는 것에 의해 데이터 축소가 어떻게 수행될 수 있는지를 나타낸 것이다. 도 8a는 입력 데이터가 어떻게 32-바이트 청크들로 간단히 인수분해될 수 있는지를 나타낸 것이다. 구체적으로는, 도 8a는 처음 10개의 청크들을 나타내고, 이어서 나중에 이를테면 4200만개의 청크들인 것으로 보이는 청크들을 몇 개 더 나타내고 있다. 도 8b는 이름의 선두 바이트들이 엘리먼트의 내용에서의 3개의 차원들(앵커 핑거프린트, 2차 핑거프린트, 및 3차 핑거프린트(tertiary fingerprint)의 위치들에 대응함)로부터의 내용으로 이루어져 있도록 구성된 이름들을 사용하여 시브에서 기본 데이터 엘리먼트들을 조직화하는 것을 나타낸 것이다. 구체적으로는, 도 8b에서, 각각의 32 바이트 청크는 32 바이트(고정 크기 블록)의 후보 엘리먼트가 된다. 핑거프린팅 방법이 엘리먼트의 내용에 적용된다. 각각의 엘리먼트는 다음과 같이 구성되는 이름을 갖는다: 엘리먼트의 3개의 차원들 또는 필드들(각각, 앵커 핑거프린트, 2차 핑거프린트, 및 3차 핑거프린트에 의해 위치 확인됨)로부터의 데이터의 바이트들이, 이름의 선두 바이트들 및 그에 뒤따르는 엘리먼트의 나머지 바이트들을 형성하기 위해, 연결된다. 이름은 시브에서 엘리먼트들을 조직화하는 데 사용된다. 도 8b에 도시된 바와 같이, 처음 10개의 청크들은 중복들 또는 파생물들을 포함하지 않으며, 시브에 엘리먼트들로서 연속적으로 설치된다. 도 8b는 열 번째 청크가 소비된 이후의 시브를 나타낸 것이다. 도 8c는 데이터 입력의 부가의 수백만 개의 엘리먼트들을 소비한 후에, 예컨대, 다음 4200만 개의 청크들이 제시된 후에, 차후의 시점에서의 시브의 내용을 나타낸 것이다. 중복들 또는 파생물들이 있는지 시브가 검사된다. 엘리먼트들로부터 파생될 수 없는 청크들은 시브에 설치된다. 도 8c는 4200만 개의 청크들 - 이를테면 16,000,010개의 엘리먼트들(3 바이트의 참조 주소를 사용해 논리적으로 주소지정가능함)을 포함하고, 나머지 26,000,000개의 청크들은 파생물들로 됨 - 이 소비된 후의 시브를 나타낸 것이다. 도 8d는 시브에 차후에 제시되고 시브에서 엔트리(엘리먼트 번호 24,789로 도시됨)의 중복으로서 식별되는 새로운 입력의 일 예를 나타낸 것이다. 이 예에서, 시브는 엘리먼트 24,789(청크 9)를 청크 42,000,011에 가장 적당한 엘리먼트로서 식별한다. derive 함수는 새로운 청크가 정확한 중복인 것으로 결정하고 이를 엘리먼트 24,789에 대한 참조로 대체한다. 파생물을 표현하는 비용은 35B 원본에 비해 3 바이트 참조이고, 이는 원래 크기의 8.57%이다. 도 8d는 시브에서 (엘리먼트 번호 187, 126으로 도시된) 엔트리의 파생물로 변환되는 입력(청크 42,000,012)의 제2 예를 나타낸 것이다. 이 예에서, 시브는 정확한 매칭들이 없다고 결정한다. 시브는 엘리먼트들 187,125 및 187,126(청크 8 및 1)을 가장 적당한 엘리먼트들로서 식별한다. 새로운 엘리먼트는 가장 적당한 엘리먼트로부터 파생된다. 엘리먼트 187,125에 대한 파생과 엘리먼트 187,126에 대한 파생이 도 8d에 예시되어 있다. 엘리먼트 187,125에 대한 파생물을 표현하는 비용은 39 바이트 + 3 바이트 참조 = 42 바이트이며, 이는 원래 크기의 120.00%이다. 엘리먼트 187,126에 대한 파생물을 표현하는 비용은 12 바이트 + 3 바이트 참조 = 15 바이트이며, 이는 원래 크기의 42.85%이다. (엘리먼트 187,126에 대한) 최상의 파생이 선택된다. 재구성 크기가 문턱값과 비교된다. 예를 들어, 문턱값이 50 %이면, 이 파생물(42.85%)이 채용된다. 도 8e는, 파생물이 2개의 기본 데이터 엘리먼트들로부터 파생시킴으로써 실제로 생성되는 하나의 예를 비롯한, 기본 데이터 엘리먼트들로부터 파생되는 데이터 청크들의 2개의 부가 예들을 제공한다. 제1 예에서, 청크 42,000,013이 제시된다. 시브는 엘리먼트 9,299,998(청크 10)을 가장 적당한 엘리먼트로서 식별한다. 엘리먼트 9,299,998에 대한 파생이 도 8e에 도시되어 있다. 파생물을 표현하는 비용은 4 바이트 + 3 바이트 참조 = 7 바이트이며, 이는 원래 크기의 20.00%이다. 재구성 크기가 문턱값과 비교된다. 예를 들어, 문턱값이 50 %이면, 이 파생물(20.00%)이 채용된다. 제2 예에서, 청크 42,000,014이 제시된다. 이 예에서, 청크 42,000,014는 청크의 한쪽 절반이 엘리먼트 9,299,997로부터 가장 잘 추출될 수 있는 반면 청크의 다른 쪽 절반이 엘리먼트 9,299,998로부터 가장 잘 추출될 수 있도록 되어 있다. 그러므로, 추가 데이터 축소를 산출하기 위해 다중 엘리먼트 파생물이 생성된다. 다중 엘리먼트 파생은 도 8e에 도시되어 있다. 이 다중 엘리먼트 파생물을 표현하는 비용은 3 바이트 참조 + 3 바이트 + 3 바이트 참조 = 9 바이트이며, 이는 원래 크기의 25.71% 이다. 재구성 크기가 문턱값과 비교된다 - 예컨대, 문턱값이 50 %이면, 이 파생물(25.71 %)이 채용된다. 단일 엘리먼트 파생물로부터의 최상의 결과물이 45.71%일 것임에 유의한다.
도 8a 내지 도 8e는 데이터 분류TM 시스템의 중요한 장점을 나타내고 있다: 고정 크기 블록들을 소비 및 생성하면서 데이터 축소를 수행하는 데 효과적일 수 있다는 것. 고정 크기 블록들이 고성능 저장 시스템에서 매우 요망된다는 것에 유의한다. 모든 기본 데이터 엘리먼트들이 고정 크기를 갖도록, 데이터 분류TM 장치를 사용하여, 고정 크기의 수많은 블록들로 이루어진 큰 들어오는 입력 파일이 고정 크기의 수많은 엘리먼트들로 인수분해될 수 있다. 각각의 파생 엘리먼트에 대한 어쩌면 가변 크기인 재구성 프로그램들이 함께 패킹되고, 고정 크기 블록들로 차후에 청킹될 수 있는, 분류된 데이터 파일에 인라인으로 유지될 수 있다. 이와 같이, 모든 실제적인 목적을 위해, 저장 시스템에서 고정 크기 블록들을 소비 및 생성하면서 강력한 데이터 축소가 수행될 수 있다.
도 9a 내지 도 9c는 도 1c에 처음으로 도시된 데이터 분류TM 방식의 일 예를 나타낸 것이다: 이 방식은 내용 연관 방식으로 액세스될 수 있는 별도의 기본 재구성 프로그램 저장소를 이용한다. 이러한 구조는 기본 재구성 프로그램 저장소에 이미 존재하는 재구성 프로그램을 구성하는 파생물의 검출을 가능하게 한다. 이러한 파생물은 기존의 재구성 프로그램을 참조하여 재규정될 수 있다. 이것은 재구성 프로그램들 간의 중복성의 검출을 가능하게 한다. 도 9a에서, 입력 데이터가 수집된다. 핑거프린팅 방법이 데이터에 적용되고, 청크 경계들이 핑거프린트 위치들에 설정된다. 입력은 도시된 바와 같이 8개의 후보 엘리먼트들로 인수분해된다(교대로 있는 청크들이 도 9a에서 굵은 보통 글꼴로 도시되어 있음). 도 9b에서, 8개의 후보 엘리먼트들이 시브에 조직화되어 있는 것으로 도시되어 있다. 각각의 엘리먼트는, 엘리먼트의 내용 전체로부터 구성된, 구별되는 이름을 갖는다. 이 예에서, 엘리먼트의 이름은 다음과 같이 구성된다: 2개의 차원들 또는 필드들(각각, 앵커 핑거프린트 및 2차 핑거프린트에 의해 위치 확인됨)로부터의 데이터의 바이트들이, 이름의 선두 바이트들 및 그에 뒤따르는 나머지 바이트들을 형성하기 위해, 연결된다. 이름은 시브에서 엘리먼트들을 정렬하는 데 사용되고, 또한 트리 구조를 통해 그에의 내용 연관 액세스를 제공한다. 도 9b는 또한 기본 재구성 프로그램들을 포함하는 제2 내용 연관 구조를 나타내고 있다. 도 9c는 중복 재구성들을 나타낸 것이다. 임의의 기본 데이터 엘리먼트의 중복이 아닌 55-바이트 후보 엘리먼트(도 9c에 도시됨)가 도착한다고 가정한다. 엘리먼트 3이 가장 적당한 엘리먼트로서 선택된다 - 처음 2개의 차원들은 PDE 2와 PDE 3에서 동일하지만, 88a7로 시작하는 나머지 바이트들은 엘리먼트 3과 매칭한다 -. 새로운 입력은 12-바이트 재구성 프로그램(RP)을 사용해 엘리먼트 3으로부터 파생된다. 인코딩들은 도 7a에 도시된 바와 같다. 이 예에 대해, 최대 엘리먼트 크기가 64 비트이고 모든 오프셋들 및 길이들이, 도 7a에 도시된 5-비트 길이들 및 오프셋들과 달리, 6-비트 값들로서 인코딩된다는 것에 유의한다. RP 저장소가 탐색되고, 이 새로운 RP가 발견되지 않는다. 이 RP는 기본 RP 저장소에 삽입되고, 그의 값에 기초하여 정렬된다. 새로운 엘리먼트는 기본 데이터 엘리먼트 3에 대한 참조 및 새로 생성된 기본 재구성 프로그램에 대한 참조로서 RP 저장소에서의 참조 4에 재규정된다. 이 파생된 엘리먼트에 대한 총 저장소 크기는: 3-바이트 PDE 참조, 3-바이트 RP 참조, 12-바이트 RP = 18 바이트이고, 이는 그것을 PDE로서 저장하는 것에 비해 크기의 31.0%이다. 나중에, 55-바이트 후보 엘리먼트의 사본이 도착한다고 가정한다. 이전과 마찬가지로, 엘리먼트 3에 기초하여 12-바이트 RP가 생성된다. RP 저장소가 탐색되고, 기본 RP ID = 3 및 RP 참조 = 4를 갖는 RP가 발견된다. 이 후보 엘리먼트는 시스템에서 기본 데이터 엘리먼트 3에 대한 참조 및 재구성 프로그램 4에 대한 참조로서 표현된다. 이 파생된 엘리먼트에 대해 부가된 총 저장소 크기는 이제: 3-바이트 PDE 참조, 3-바이트 RP 참조 = 6 바이트이고, 이는 그것을 PDE로서 저장하는 것에 비해 크기의 10.3%이다.
도 10a는 본원에 기술되는 일부 실시예들에 따른, 파생 엘리먼트를 산출하기 위해 재구성 프로그램에서 지정된 변환들이 기본 데이터 엘리먼트에 어떻게 적용되는지의 일 예를 제공한다. 이 예는, 도시된 재구성 프로그램에 의해 지정된 바와 같은 네 가지 변환들(삽입, 대체, 삭제, 및 첨부)을 적용함으로써, 187,126으로 번호가 매겨진 기본 데이터 엘리먼트(이 기본 데이터 엘리먼트가 또한 도 8c에서 시브에 도시되어 있음)로부터 생성되도록 지정된 파생 엘리먼트를 나타낸다. 도 10a에 도시된 바와 같이, 엘리먼트 187,126이 시브로부터 로딩되고, 엘리먼트 187,126로부터 청크 42,000,012를 파생시키기 위해 재구성 프로그램이 실행된다. 도 10b 및 도 10c는 본원에 기술되는 일부 실시예들에 따른, 데이터 검색 프로세스들을 나타낸 것이다. 각각의 데이터 검색 요청은 기본적으로, 무손실 축소된 포맷으로 검색 엔진에 제시되는, 분류된 데이터에서의 엘리먼트의 형태를 취한다. 각각의 엘리먼트에 대한 무손실 축소된 포맷은 연관된 기본 데이터 엘리먼트(들) 및 재구성 프로그램에 대한 참조들을 포함한다. 데이터 분류TM 장치의 검색기는 기본 데이터 엘리먼트들 및 재구성 프로그램을 페치하고 이들을 재구성을 위해 재구성기에 제공한다. 분류된 데이터의 엘리먼트에 대한 관련 기본 데이터 엘리먼트들 및 재구성 프로그램이 페치된 후에, 재구성기는 엘리먼트를 그의 원래의 축소되지 않은 형태로 생성하기 위해 재구성 프로그램을 실행한다. 재구성을 실행하기 위해 데이터 검색 프로세스에 의해 요구되는 노력은 재구성 프로그램의 크기 및 기본 데이터 엘리먼트들의 크기와 관련하여 선형적이다. 그러므로, 높은 데이터 검색 속도가 시스템에 의해 달성될 수 있다.
엘리먼트를 분류된 데이터에서의 무손실 축소된 형태로부터 그의 원래의 축소되지 않은 형태로 재구성하기 위해, 기본 데이터 엘리먼트(들) 및 엘리먼트에 대해 지정된 재구성 프로그램만 페치되면 된다는 것은 분명하다. 이와 같이, 주어진 엘리먼트를 재구성하기 위해, 어떤 다른 엘리먼트들도 액세스되거나 재구성될 필요가 없다. 이것은 재구성 및 검색을 위한 요청들의 랜덤한 시퀀스를 제공할 때에도 데이터 분류TM 장치를 효율적으로 만든다. Lempel Ziv 방법과 같은 전통적인 압축 방법들이 원하는 블록을 포함하는 데이터 윈도우 전체를 패치하고 압축해제할 필요가 있다는 것에 유의한다. 예를 들어, 저장 시스템이 32 KB의 윈도우를 사용하여 4 KB 데이터 블록들을 압축하고, 이어서 주어진 4KB 블록을 페치하여 압축해제하기 위해 Lempel-Ziv 방법을 이용하면, 32KB의 윈도우 전체가 페치되고 압축해제될 필요가 있다. 이것은 성능 불이익을 가져오는데, 그 이유는 원하는 데이터를 전달하기 위해 보다 많은 대역폭이 소비되고 보다 많은 데이터가 압축해제될 필요가 있기 때문이다. 데이터 분류TM 장치는 이러한 불이익을 초래하지 않는다.
데이터 분류TM 장치는 시스템에서 데이터 전체에 걸쳐 전역적으로 중복성을 효율적으로 발견하고 활용하는 방식으로 데이터를 조직화하고 저장하는 각종의 방식들로 컴퓨터 시스템들에 통합될 수 있다. 도 11a 내지 도 11g는 본원에 기술되는 일부 실시예들에 따른, 데이터 분류TM 메커니즘(소프트웨어, 하드웨어, 또는 이들의 조합을 사용하여 구현될 수 있음)을 포함하는 시스템들을 나타낸 것이다. 도 11a는 프로세서들, 메모리 및 데이터 저장 컴포넌트들로 이루어진 하드웨어 플랫폼 상에서 실행 중인 시스템 소프트웨어 상에서 실행되는 소프트웨어 애플리케이션들을 갖는 범용 컴퓨팅 플랫폼을 제시한다. 도 11b는 플랫폼의 애플리케이션 계층에 통합된 데이터 분류TM 장치를 나타낸 것으로서, 각각의 특정 애플리케이션은 그 애플리케이션에 대한 데이터 세트 내에서의 중복성을 이용하기 위해 장치를 사용한다. 도 11c는 그 상에서 실행되는 모든 애플리케이션들에 대한 데이터 가상화 계층 또는 서비스를 제공하기 위해 이용되는 데이터 분류TM 장치를 나타낸 것이다. 도 11d 및 도 11e는 샘플 컴퓨팅 플랫폼의 운영 시스템, 파일 시스템 및 데이터 관리 서비스들과 데이터 분류TM 장치 간의 두 가지 상이한 형태의 통합을 나타낸 것이다. 다른 통합 방법들은 도 11f에 도시된 바와 같이 플래시 기반 데이터 저장 서브시스템들에서 이용되는 것과 같은 하드웨어 플랫폼에서의 임베디드 컴퓨팅 스택과의 통합(이들로 제한되지 않음)을 포함한다.
도 11g는 도 11d에 도시된 샘플 컴퓨팅 플랫폼과 데이터 분류TM 장치 간의 통합의 부가 상세를 제시한다. 도 11g는 범용 프로세서 상에서 소프트웨어로서 실행되는 파서 및 인수분해기, 파생기, 검색기, 및 재구성기를 갖는 데이터 분류TM 장치의 컴포넌트들과, 저장 계층구조의 몇몇 레벨들에 걸쳐 존재하는 내용 연관 매핑 구조를 나타낸 것이다. 기본 데이터 저장소는 (플래시 기반 저장 드라이브와 같은) 저장 매체에 존재할 수 있다.
도 11h는 데이터 분류TM 장치가 어떻게 샘플 범용 컴퓨팅 플랫폼과 인터페이싱할 수 있는지를 나타낸 것이다.
파일 시스템(또는 파일시스템)은 파일(예컨대, 텍스트 문서, 스프레드시트, 실행 파일, 멀티미디어 파일 등)을 식별자(예컨대, 파일 이름, 파일 핸들 등)와 연관시키고, 동작들(예컨대, 판독, 기입, 삽입, 첨부, 삭제 등)이 파일과 연관된 식별자를 사용하여 파일에 대해 수행될 수 있게 한다. 파일 시스템에 의해 구현되는 네임스페이스(namespace)는 플랫(flat)이거나 계층적(hierarchical)일 수 있다. 그에 부가하여, 네임스페이스가 계층화될 수 있다 - 예컨대, 최상위 계층 식별자(top-layer identifier)가 완전히 해석(resolve)될 때까지 최상위 계층 식별자가 연속적인 하위 계층들에서의 하나 이상의 식별자로 해석될 수 있다 -. 이러한 방식으로, 파일 시스템은 파일의 내용을 물리적으로 저장하는 물리적 데이터 저장 디바이스(들) 및/또는 저장 매체(예컨대, 컴퓨터 메모리, 플래시 드라이브, 디스크 드라이브, 네트워크 저장 디바이스, CD-ROM, DVD 등)의 추상화를 제공한다.
파일 시스템에 정보를 저장하는 데 사용되는 물리적 저장 디바이스들 및/또는 저장 매체는 하나 이상의 저장 기술을 사용할 수 있고, 동일한 네트워크 위치에 위치될 수 있거나 상이한 네트워크 위치들에 걸쳐 분산될 수 있다. 파일과 연관된 식별자 및 파일에 대해 수행되도록 요청되는 하나 이상의 동작(들)이 주어지면, 파일 시스템은 (1) 하나 이상의 물리적 저장 디바이스 및/또는 저장 매체를 식별할 수 있고, (2) 파일 시스템에 의해 식별된 물리적 저장 디바이스들 및/또는 저장 매체로 하여금 식별자와 관련된 파일에 대해 수행되도록 요청된 동작을 수행하게 한다.
판독 또는 기입 동작이 시스템에서 수행될 때마다, 상이한 소프트웨어 및/또는 하드웨어 컴포넌트들이 관여될 수 있다. "리더(Reader)"라는 용어는 주어진 판독 동작이 시스템에서 수행될 때 관여되는 시스템 내의 소프트웨어 및/또는 하드웨어 컴포넌트들의 컬렉션을 지칭할 수 있고, "라이터(Writer)"라는 용어는 주어진 기입 동작이 시스템에서 수행될 때 관여되는 시스템 내의 소프트웨어 및/또는 하드웨어 컴포넌트들의 컬렉션을 지칭할 수 있다. 본원에 기술되는 데이터 축소 방법들 및 장치들의 일부 실시예들은 주어진 판독 또는 기입 동작이 수행될 때 관여되는 시스템의 하나 이상의 소프트웨어 및/또는 하드웨어 컴포넌트에 의해 이용되거나 그에 통합될 수 있다. 상이한 리더들 및 라이터들은 상이한 데이터 축소 구현들을 이용하거나 포함할 수 있다. 그렇지만, 특정의 데이터 축소 구현을 이용하거나 포함하는 각각의 라이터는 동일한 데이터 축소 구현을 역시 이용하거나 포함하는 리더에 대응할 것이다. 시스템에서 수행되는 일부 판독 및 기입 동작들이 데이터 축소 장치를 이용하지 않거나 포함하지 않을 수 있다는 것에 유의한다. 예를 들어, 데이터 분류TM 장치 또는 데이터 축소 장치(103)는, 기본 데이터 엘리먼트들을 검색하거나 새로운 기본 데이터 엘리먼트들을 기본 데이터 저장소에 추가할 때, 데이터 축소없이 직접 판독 및 기입 동작들을 수행할 수 있다.
구체적으로는, 도 11h에서, 라이터(150W)는 일반적으로 주어진 기입 동작이 수행될 때 관여되는 시스템의 소프트웨어 및/또는 하드웨어 컴포넌트를 지칭할 수 있고, 리더(150R)는 일반적으로 주어진 판독 동작이 수행될 때 관여되는 시스템의 소프트웨어 및/또는 하드웨어 컴포넌트를 지칭할 수 있다. 도 11h에 도시된 바와 같이, 라이터(150W)는 입력 데이터를 데이터 분류TM 장치 또는 데이터 축소 장치(103)에 제공하고, 데이터 분류TM 장치 또는 데이터 축소 장치(103)로부터 분류된 데이터(108)를 수신한다. 리더(150R)는 검색 요청들(109)을 데이터 분류TM 장치 또는 데이터 축소 장치(103)에 제공하고, 검색된 데이터 출력(113)을 데이터 분류TM 장치 또는 데이터 축소 장치(103)로부터 수신한다.
도 11h에 대한 구현 예들은 데이터 분류TM 장치 또는 데이터 축소 장치(103)를 애플리케이션, 운영 체제 커널, 파일 시스템, 데이터 관리 모듈, 디바이스 드라이버, 또는 플래시 또는 디스크 드라이브의 펌웨어에 포함시키거나 이용하는 것을 포함하지만, 이들로 제한되지 않는다. 이것은 도 11b 내지 도 11f에 기술된 각종의 구성들 및 사용들에 걸쳐 있다.
도 11i는 블록 처리 저장 시스템에서의 데이터 축소를 위해 데이터 분류™ 장치가 어떻게 사용될 수 있는지를 예시하고 있다. 이러한 블록 처리 시스템에서, 데이터는 블록 단위로 저장되고, 각각의 블록은 논리 블록 주소(Logical Block Address) 또는 LBA에 의해 식별된다. 새로운 데이터(fresh data)가 특정의 LBA에 의해 식별된 블록에 덮어쓰기될 수 있도록 블록들이 계속하여 수정 및 덮어쓰기된다. 시스템에서 각각의 블록은 후보 엘리먼트로서 취급되고 데이터 분류™ 장치는 후보 엘리먼트를 기본 데이터 엘리먼트(특정의 기본 데이터 엘리먼트 블록에 저장됨)에 대한 참조 그리고 파생 엘리먼트의 경우에 재구성 프로그램(특정의 재구성 프로그램 블록에 저장됨)에 대한 참조로 이루어진 무손실 축소된 형태로 축소시키는 데 사용될 수 있다. 도 11i는 LBA에 의해 식별된 블록의 내용을 무손실 축소된 형태의 대응하는 엘리먼트에 매핑하는 데이터 구조(1151)를 소개한다. 각각의 LBA에 대해 연관된 엘리먼트의 규격이 존재할 것이다. 고정 크기 블록(fixed sized block)들을 이용하는 시스템의 경우, 들어오는 블록들, 기본 데이터 엘리먼트 블록들(1152), 그리고 또한 재구성 프로그램 블록들(1153) 전부가 고정된 크기로 되어 있는 것이 편리하다. 이 시스템에서, 각각의 기본 데이터 엘리먼트가 개별 블록으로서 저장될 수 있다. 다수의 재구성 프로그램이, 역시 동일한 고정된 크기인, 재구성 프로그램 블록으로 패킹(pack)될 수 있다. 데이터 구조는 또한 기본 데이터 엘리먼트들 및 재구성 프로그램들 각각에 대한 리프 노드 데이터 구조에 존재하는 카운트 필드에 대한 참조 및 연관된 메타데이터를 포함하며, 따라서 블록이 새로운 데이터로 덮어쓰기될 때, LBA에 존재하는 이전 데이터가 효과적으로 관리될 수 있다 - (덮어쓰기되고 있는) 기존의 기본 데이터 엘리먼트 및 재구성 프로그램에 대한 카운트 필드가 감분되어야만 하고, 마찬가지로 LBA에 들어오는 데이터에 의해 참조되는 기본 데이터 엘리먼트에 대한 카운트도 증분되어야만 한다. 카운트 필드에 대한 참조를 이 데이터 구조(1151)에 유지하는 것에 의해, 덮어쓰기들이 신속하게 관리될 수 있고, 따라서 데이터 분류™ 장치에 의해 제공되는 데이터 축소를 최대한으로 이용하는 고성능 블록 처리 저장 시스템을 가능하게 한다.
도 12a는 본원에 기술되는 일부 실시예들에 따른, 대역폭 제약 통신 매체를 통한 데이터의 전달을 위한 데이터 분류TM 장치의 사용을 나타낸 것이다. 도시된 설정에서, 통신 노드 A는 통신 노드 B로 송신될 일단의 파일들을 생성한다. 노드 A는 입력 파일들을, 기본 데이터 저장소에 설치된 기본 데이터 엘리먼트들에 대한 참조들을 물론, 파생 엘리먼트들에 대한 재구성 프로그램들을 포함하는, 분류된 데이터 또는 분류된 파일(Distilled File)들로 변환하기 위해 데이터 분류TM 장치를 이용한다. 노드 A는 이어서 분류된 파일들을 기본 데이터 저장소와 함께 노드 B로 송신한다(기본 데이터 저장소는 분류된 파일들을 송신하기 전에, 그와 동시에, 또는 그 이후에 송신될 수 있고; 더욱이, 기본 데이터 저장소는 동일한 통신 채널을 통해 또는 분류된 파일들을 송신하는 데 사용되는 통신 채널과 상이한 통신 채널을 통해 송신될 수 있다). 노드 B는 자신 쪽에서 기본 데이터 저장소를 대응하는 구조에 설치하고, 이어서 노드 A에 의해 생성된 원래의 파일들의 세트를 산출하기 위해 노드 B의 데이터 분류TM 장치에 존재하는 검색기 및 재구성기를 통해 분류된 파일들을 피드한다. 이와 같이, 축소된 데이터만을 송신하기 위해 매체의 양단에서 데이터 분류TM 장치를 이용함으로써, 대역폭 제약 통신 매체를 보다 효율적으로 사용할 수 있다. 심지어 큰 파일들 또는 파일들의 그룹들이 효율적으로 전송될 수 있도록, 데이터 분류TM를 사용하는 것이 (Lempel-Ziv와 같은, 종래의 기법들을 사용하여 실현가능한 것을 넘어서는) 보다 큰 범위에 걸쳐 중복성을 이용하는 것을 가능하게 한다는 것에 유의한다.
이제부터, 작업 그룹(workgroup)들이 다수의 노드들에 걸쳐 확산되어 있는 데이터를 협업적으로 공유하는 원거리 네트워크 설치에서의 데이터 분류TM 장치의 사용에 대해 논의한다. 데이터가 처음으로 생성될 때, 도 12a에 예시된 바와 같이 데이터가 축소되고 전달될 수 있다. 원거리 네트워크들은 데이터에의 빠른 로컬 액세스를 가능하게 하기 위해 각각의 사이트에 데이터의 사본들을 유지한다. 데이터 분류TM 장치의 사용은 각각의 사이트에서의 풋프린트를 감소시킬 수 있다. 게다가, 사이트들 중 임의의 사이트에서 새로운 데이터의 차후의 수집 시에, 새로운 데이터를 축소시키기 위해 새로운 데이터와 이미 존재하는 기본 데이터 저장소의 내용 사이의 임의의 중복성이 이용될 수 있다.
이러한 설치에서, 각각의 사이트에서의 기본 데이터 저장소가 일관성있게 유지되도록, 임의의 주어진 사이트에서의 데이터에 대한 임의의 수정들이 모든 다른 사이트들로 전달될 필요가 있다. 그러므로, 도 12b에 도시된 바와 같이, 기본 데이터 엘리먼트들의 설치 및 삭제와 같은 업데이트들은 물론, 메타데이터 업데이트들이 본원에 기술되는 일부 실시예들에 따른 각각의 사이트에서의 기본 데이터 저장소로 전달될 수 있다. 예를 들어, 새로운 기본 데이터 엘리먼트를 주어진 사이트에서의 시브에 설치할 때, 기본 데이터 엘리먼트가 모든 다른 사이트들로 전달될 필요가 있다. 각각의 사이트는 기본 데이터 엘리먼트의 값을 사용하여 내용 연관 방식으로 시브에 액세스하고 새로운 엔트리가 시브에서의 어디에 추가될 필요가 있는지를 결정할 수 있다. 마찬가지로, 주어진 사이트에서의 시브로부터 기본 데이터 엘리먼트를 삭제할 때, 삭제를 반영하기 위해 모든 다른 사이트들이 업데이트될 필요가 있다. 이것이 달성될 수 있는 하나의 방법은, 각각의 사이트가 리프 노드에서의 어느 엔트리가 삭제될 필요가 있는지를 결정하기 위해 기본 데이터 엘리먼트를 사용하여 내용 연관 방식으로 시브에 액세스할 수 있도록, 트리에서의 관련 링크들에 대한 필요한 업데이트들은 물론 그 기본 데이터 엘리먼트의 저장소로부터의 삭제와 함께, 기본 데이터 엘리먼트를 모든 사이트들로 전달하는 것이다. 다른 방법은 기본 데이터 엘리먼트가 존재하는 리프 노드에서의 기본 데이터 엘리먼트의 엔트리에 대한 참조를 모든 사이트들에 전달하는 것이다.
따라서, 원거리 네트워크의 다양한 사이트들에 걸쳐 저장된 데이터의 풋프린트를 감소시키는 것은 물론 네트워크의 통신 링크들을 효율적으로 사용하기 위해 데이터 분류TM 장치가 사용될 수 있다.
도 12c 내지 도 12k는 본원에 기술되는 일부 실시예들에 따른, 다양한 사용 모델들에 대해 데이터 분류TM 장치에 의해 생성되는 축소된 데이터의 다양한 컴포넌트들을 나타낸 것이다.
도 12c는 데이터 분류TM 장치(1203)가 어떻게 입력 파일들(1201)의 세트를 수집하고, 분류 프로세스의 완료 이후에, 분류된 파일들(1205)의 세트 및 기본 데이터 시브 또는 기본 데이터 저장소(1206)를 생성하는지를 도시한다. 도 12c의 기본 데이터 시브 또는 기본 데이터 저장소(1206) 자체는, 도 12d에 도시된 바와 같이, 2개의 컴포넌트들, 즉 매퍼(1207) 및 기본 데이터 엘리먼트(또는 PDE)(1208)로 이루어져 있다.
매퍼(1207) 자체는 그 안에 2개의 컴포넌트들, 즉 트리 노드 데이터 구조들의 세트 및 전체적인 트리를 정의하는 리프 노드 데이터 구조들의 세트를 갖는다. 트리 노드 데이터 구조들의 세트는 하나 이상의 파일에 배치될 수 있다. 마찬가지로, 리프 노드 데이터 구조들의 세트도 하나 이상의 파일에 배치될 수 있다. 일부 실시예들에서, 트리 노드들 파일(Tree Nodes File)이라고 불리는 단일 파일은 주어진 데이터 세트(입력 파일들(1201))에 대한 기본 데이터 엘리먼트들에 대해 생성된 트리에 대한 트리 노드 데이터 구조들의 세트 전체를 보유하고, 리프 노드들 파일(Leaf Nodes File)이라고 불리는 다른 단일 파일은 그 데이터 세트에 대한 기본 데이터 엘리먼트들에 대해 생성된 트리에 대한 리프 노드 데이터 구조들의 세트 전체를 보유한다.
도 12d에서, 기본 데이터 엘리먼트들(1208)은 주어진 데이터 세트(입력 파일들(1201))에 대해 생성된 기본 데이터 엘리먼트들의 세트를 포함한다. 기본 데이터 엘리먼트들의 세트는 하나 이상의 파일에 배치될 수 있다. 일부 실시예들에서, PDE 파일이라고 불리는 단일 파일은 주어진 데이터 세트에 대해 생성된 기본 데이터 엘리먼트들의 세트 전체를 보유한다.
트리 노드들 파일 내의 트리 노드들은 트리 노드들 파일 내의 다른 트리 노드들에 대한 참조들을 포함할 것이다. 트리 노드들 파일 내의 트리 노드들의 가장 깊은 계층(또는 최하위 레벨들)은 리프 노드들 파일 내의 리프 노드 데이터 구조들에서의 엔트리들에 대한 참조들을 포함할 것이다. 리프 노드들 파일 내의 리프 노드 데이터 구조들에서의 엔트리들은 PDE 파일 내의 기본 데이터 엘리먼트들에 대한 참조들을 포함할 것이다.
트리 노드들 파일, 리프 노드들 파일 및 PDE 파일은 장치에 의해 생성되는 모든 컴포넌트들의 상세들을 나타내는 도 12e에 예시되어 있다. 도 12e는 분류된 파일들(1205)의 세트 및 기본 데이터 시브의 다양한 컴포넌트들, 즉 트리 노드들 파일(1209), 리프 노드들 파일(1210) 및 PDE 파일(1211)을 생성하기 위해 데이터 분류TM 장치에 의해 축소되는 file1, file2, file3,....fileN이라고 명명된 N개의 파일들을 포함하는 입력 파일들(1201)의 세트를 나타내고 있다. 분류된 파일들(1205)은 file1.dist, file2.dist, file3.dist....fileN.dist라고 명명된 N개의 파일들로 이루어져 있다. 데이터 분류TM 장치는 입력 데이터를 그의 구성 엘리먼트들로 인수분해하고, 2개의 카테고리의 데이터 엘리먼트들 - 기본 데이터 엘리먼트들과 파생 엘리먼트들 - 을 생성한다. 분류된 파일들은 무손실 축소된 포맷으로 된 데이터 엘리먼트들의 설명들을 포함하고, PDE 파일 내의 기본 데이터 엘리먼트들에 대한 참조들을 포함한다. 입력 파일들(1201) 내의 각각의 파일은 분류된 파일들(1205) 내의 대응하는 분류된 파일을 갖는다. 예를 들어, 입력 파일들(1201) 내의 file1(1212)은 분류된 파일들(1205) 내의 file1.dist(1213)라고 명명된 분류된 파일에 대응한다.
도 12e가 도 1a에 따른 분류된 데이터 및 기본 데이터 저장소의 조직화에 기초하여 데이터 분류 장치에 의해 생성된 다양한 컴포넌트들을 나타낸 것이며, 여기서 재구성 프로그램들은 분류된 파일 내의 엘리먼트의 무손실 축소된 표현에 배치된다는 것에 유의한다. (도 1b에 따른) 일부 실시예들이 재구성 프로그램들을 기본 데이터 저장소에 배치하고 그들을 기본 데이터 엘리먼트들처럼 취급할 수 있다는 것에 유의한다. 분류된 파일 내의 엘리먼트의 무손실 축소된 표현은 (재구성 프로그램 자체를 포함하기보다는) 기본 데이터 저장소에서의 재구성 프로그램에 대한 참조를 포함할 것이다. 이 실시예들에서, 재구성 프로그램들은 기본 데이터 엘리먼트들과 같이 취급될 것이고 PDE 파일(1211)에 생성될 것이다. 또 다른 실시예에서, 도 1c에 따르면, 재구성 프로그램들은 재구성 프로그램 저장소라고 불리는 구조에 기본 데이터 엘리먼트들과 별도로 저장된다. 이러한 실시예들에서, 분류된 파일 내의 엘리먼트의 무손실 축소된 표현은 기본 데이터 저장소에서의 재구성 프로그램에 대한 참조를 포함할 것이다. 이러한 실시예들에서, 도 12f에 예시된 바와 같이, 기본 데이터 엘리먼트들의 트리 조직화를 위한 트리 노드들 파일(1209), 리프 노드들 파일(1210) 및 PDE 파일(1211)을 생성하는 것에 부가하여, 장치는 또한, RP 파일(1221)이라고 지칭되는 모든 재구성 프로그램들을 포함하는 파일과 함께, 재구성 트리 노드들 파일(1219) 및 재구성 리프 노드들 파일(1220)이라고 지칭되는, 트리 및 리프 노드 파일들의 제2 세트를 생성할 것이다.
도 12e에 도시된 데이터 분류TM 장치는 또한 그의 동작을 통제하는 구성 및 제어 정보를 트리 노드들 파일(1209), 리프 노드들 파일(1210), PDE 파일(1211) 및 분류된 파일들(1205) 중 하나 이상에 저장한다. 대안적으로, 이 정보를 포함하는 제5 컴포넌트가 생성될 수 있다. 이와 유사하게 도 12f에 도시된 장치에 대해서도, 구성 및 제어 정보가 도 12f에 도시된 다양한 컴포넌트들 중 하나 이상에 저장될 수 있거나, 이 목적을 위해 생성된 다른 컴포넌트에 저장될 수 있다.
도 12g는 데이터 분류TM 장치의 사용의 개요를 나타낸 것으로서, 여기서 주어진 데이터 세트(입력 데이터 세트(1221))는 데이터 분류TM 장치(1203)에 피드되고 무손실 축소된 데이터 세트(무손실 축소된 데이터 세트(1224))를 생성하기 위해 처리된다. 입력 데이터 세트(1221)는 파일들, 객체들, 블록들, 청크들, 또는 데이터 스트림으로부터의 추출물(extract)들의 컬렉션으로 이루어져 있을 수 있다. 도 12e가 데이터 세트가 파일들로 이루어져 있는 예를 나타낸다는 것에 유의한다. 도 12g의 입력 데이터 세트(1221)는 도 12e의 입력 파일들(1201)에 대응하는 반면, 도 12g의 무손실 축소된 데이터 세트(1224)는 도 12e에 도시된 4개의 컴포넌트들, 즉 도 12e의 분류된 파일들(1205), 트리 노드들 파일(1209), 리프 노드들 파일(1210), 및 PDE 파일(1211)을 포함한다. 도 12g에서, 데이터 분류TM 장치는 그에게 제시되는 입력 데이터 세트의 범위 전체에 걸쳐 데이터 엘리먼트들 사이의 중복성을 이용한다.
데이터 분류TM 장치는 입력 데이터 세트의 서브셋에 걸쳐 중복성을 이용하고 그에게 제시된 데이터의 각각의 서브셋에 대해 무손실 축소를 제공하도록 구성될 수 있다. 예를 들어, 도 12h에 도시된 바와 같이, 입력 데이터 세트(1221)는 다수의 보다 작은 데이터 컬렉션들로 파티셔닝될 수 있으며, 각각의 컬렉션은 본 명세서에서 "로트(lot)" 또는 "데이터의 로트(Lot of Data)" 또는 "데이터 로트(Data Lot)"라고 지칭된다. 도 12h는 입력 데이터 로트(1224)를 수집하고 무손실 축소된 데이터 로트(1225)를 생성하도록 구성된 데이터 분류TM 장치를 나타낸 것이다. 도 12h는 데이터 로트 1, ... 데이터 로트 i, ... 데이터 로트 n인 다수의 데이터 콜렉션들로 이루어진 입력 데이터 세트(1221)를 나타내고 있다. 데이터는 한 번에 하나의 데이터 로트씩 데이터 분류TM 장치에 제시되며, 무손실 축소된 데이터 로트를 생성하기 위해 각각의 데이터 로트의 범위에 걸쳐 중복성이 이용된다. 예를 들어, 입력 데이터 세트(1221)로부터의 데이터 로트 i(1226)는 장치에 피드되고, 무손실 축소된 데이터 로트 i(1228)는 무손실 축소된 데이터 세트(1227)에 전달된다. 입력 데이터 세트(1221)로부터의 각각의 데이터 로트는 장치에 피드되고, 대응하는 무손실 축소된 데이터 로트는 무손실 축소된 데이터 세트(1227)에 전달된다. 데이터 로트 1, ... 데이터 로트 i ... 데이터 로트 n 모두를 소비하고 축소시킬 때, 입력 데이터 세트(1221)는 무손실 축소된 데이터 세트(1227)로 축소된다.
데이터 분류TM 장치가 설계상 데이터의 전역적 범위에 걸쳐 중복성을 이용하는 데 이미 효율적이지만, 데이터 축소 프로세스를 더욱 가속화시키고 그의 효율성을 더욱 개선시키기 위해 상기 기법이 사용될 수 있다. 데이터 축소 프로세스의 처리율은 시스템의 이용가능 메모리에 적합할 수 있도록 데이터 로트의 크기를 제한함으로써 증가될 수 있다. 예를 들어, 크기가 수 테라바이트 또는 심지어 수 페타바이트인 입력 데이터 세트는 각각이 이를테면 256 GB 크기인 수많은 데이터 로트들로 분해될 수 있고, 각각의 데이터 로트가 신속하게 축소될 수 있다. 256 GB의 메모리를 갖는 단일 프로세서 코어(Intel Xeon E5-1650 V3, Haswell 3.5Ghz 프로세서)를 사용하여, 256 GB의 범위에 걸쳐 중복성을 이용하는 이러한 해결책이, 다양한 데이터 세트들에 대해 2 내지 3배의 축소 레벨들을 제공하면서 초당 수백 메가바이트의 데이터 수집 속도를 산출하도록, 우리의 연구소에서 구현되었다. 256 GB의 범위가 Lempel Ziv 방법이 최신 프로세서들에서 10 MB/초 내지 200 MB/초의 수집 성능을 제공하는 윈도우의 크기인 32 KB보다 수백만배 더 크다는 것에 유의한다. 이와 같이, 중복성의 범위를 적절히 제한함으로써, 데이터 분류 프로세스의 속도의 개선이 어쩌면 얼마간의 축소를 희생시키는 것에 의해 달성될 수 있다.
도 12i는 도 12h에서의 설정의 변형을 예시하고, 입력 데이터 세트의 데이터 축소(그리고 또한 데이터 재구성/검색)의 처리율을 상당히 증대시키기 위해 다수의 데이터 분류 프로세스들이 다수의 프로세서들 상에서 실행되는 것을 도시하고 있다. 도 12i는 x개의 데이터 로트들로 파티셔닝되는 입력 데이터 세트(1201)를 나타내고, 병렬로 실행되고 데이터 축소는 물론 재구성/검색 둘 다에 대해 대략 j배의 속도 증가를 가져오기 위해, x개의 독립적인 데이터 로트들이 독립적인 프로세서 코어들 상에서 실행되는 j개의 독립적인 프로세스들(각각의 프로세스는 그에 피드될 임의의 데이터 로트를 수용하기에 충분한 메모리를 할당받음)에 피드된다. 도 12j는 입력 데이터 세트의 축소 이후에 매퍼가 더 이상 유지될 필요가 없는 사용 모델에 대한 데이터 분류TM 장치에 의해 생성되는 축소된 데이터의 다양한 컴포넌트들을 나타낸 것이다. 이러한 사용 모델들의 예들은 특정 종류의 데이터 백업 및 데이터 아카이빙 적용분야들이다. 이러한 사용 모델에서, 축소된 데이터의 유일한 후속 사용은 축소된 데이터 세트로부터의 입력 데이터 세트의 재구성 및 검색이다. 이러한 시나리오에서, 데이터 축소가 완료된 후에 매퍼를 저장하지 않는 것에 의해 축소된 데이터의 풋프린트가 더욱 감소될 수 있다. 도 12j는 분류된 파일들(1205) 및 PDE 파일(1211) - 이 컴포넌트들은 이 시나리오에서 축소된 데이터를 구성함 - 을 생성하는 장치에 피드되는 입력 파일들(1201)을 나타낸다. 입력 파일들(1201)이 분류된 파일들(1205) 및 PDE 파일(1211)만을 사용하여 완전히 재생성되고 복원될 수 있다는 것에 유의한다. 분류된 파일들 내의 각각의 엘리먼트에 대한 무손실 축소된 표현이 재구성 프로그램(필요한 경우)은 물론, PDE 파일 내의 기본 데이터 엘리먼트들에 대한 참조들을 포함한다는 것을 상기한다. PDE 파일과 함께, 이것은 재구성을 실행하는 데 필요한 모든 정보이다.
도 12j가 도 1a에 따른 분류된 데이터 및 기본 데이터 저장소의 조직화에 기초하여 데이터 분류 장치에 의해 생성된 다양한 컴포넌트들을 나타낸 것이며, 여기서 재구성 프로그램들은 분류된 파일 내의 엘리먼트의 무손실 축소된 표현에 배치된다는 것에 유의한다. (도 1b에 따른) 일부 실시예들이 재구성 프로그램들을 기본 데이터 저장소에 배치하고 그들을 기본 데이터 엘리먼트들처럼 취급할 수 있다는 것에 유의한다. 분류된 파일 내의 엘리먼트의 무손실 축소된 표현은 (재구성 프로그램 자체를 포함하기보다는) 기본 데이터 저장소에서의 재구성 프로그램에 대한 참조를 포함할 것이다. 이 실시예들에서, 재구성 프로그램들은 기본 데이터 엘리먼트들과 같이 취급될 것이고 PDE 파일(1211)에 생성될 것이다. 또 다른 실시예에서, 도 1c에 따르면, 재구성 프로그램들은 재구성 프로그램 저장소라고 불리는 구조에 기본 데이터 엘리먼트들과 별도로 저장된다. 이러한 실시예들에서, 분류된 파일 내의 엘리먼트의 무손실 축소된 표현은 기본 데이터 저장소에서의 재구성 프로그램에 대한 참조를 포함할 것이다. 이러한 실시예들에서, 기본 데이터 엘리먼트들에 대한 PDE 파일을 생성하는 것에 부가하여, 장치는 또한 RP 파일이라고 지칭되는 모든 재구성 프로그램들을 포함하는 파일을 생성할 것이다. 이것은 매퍼들이 더 이상 유지될 필요가 없는 사용 모델들에 대한 축소된 데이터의 컴포넌트들을 도시하는 도 12k에 도시되어 있다. 도 12k는 분류된 파일들(1205), PDE 파일(1211), 및 RP 파일(1221)을 포함하는 축소된 데이터 컴포넌트들을 도시한다.
도 12l 내지 도 12p는 본원에 기술되는 일부 실시예들에 따른, 매우 큰 데이터 세트들을 매우 높은 수집 속도들로 수용할 수 있기 위해 분류 프로세스가 어떻게 분산 시스템들 상에 배포되고 실행될 수 있는지를 나타낸 것이다.
분산 컴퓨팅 패러다임은 다수의 컴퓨터들 상에서 실행 중인 프로그램들에 의한 대규모 데이터 세트들의 분산 처리를 수반한다. 도 12l은 분산 컴퓨팅 클러스터라고 지칭되는 조직(organization) 내의 서로 네트워크로 연결된 다수의 컴퓨터들을 도시하고 있다. 도 12l은 컴퓨터들 간의 포인트 투 포인트 링크(point-to-point link)들을 도시하고 있지만, 도 12l에 도시된 토폴로지 대신에 임의의 통신 토폴로지, 예컨대, 허브 앤 스포크 토폴로지(hub-and-spoke topology) 또는 메시 토폴로지(mesh topology)가 사용될 수 있다는 것이 이해될 것이다. 주어진 클러스터에서, 하나의 노드가 마스터 노드(master node)로서 지정(appoint)되고, 마스터 노드는 슬레이브 노드들에 작업들을 분배하고 슬레이브들의 전체적인 동작을 제어 및 조율(co-ordinate)한다. 슬레이브 노드들은 마스터에 의해 지시된 대로 작업들을 실행한다.
데이터 분류 프로세스는, 클러스터 내의 수많은 컴퓨터들의 총 컴퓨팅, 메모리, 및 저장 용량을 활용하기 위해, 분산 컴퓨팅 클러스터의 다수의 노드들에 걸쳐 분산 방식으로 실행될 수 있다. 이 설정에서, 마스터 노드 상의 마스터 분류 모듈은, 데이터 분류를 분산 방식으로 달성하기 위해, 슬레이브 노드들 상에서 실행 중인 슬레이브 분류 모듈들과 상호작용한다. 이 분배를 용이하게 하기 위해, 장치의 기본 데이터 시브가 슬레이브 노드들 상에서 실행 중인 다수의 슬레이브 모듈들에 걸쳐 분산될 수 있는 다수의 독립 서브세트들 또는 서브트리들로 파티셔닝될 수 있다. 데이터 분류 장치에서, 기본 데이터 엘리먼트들이 그들의 이름에 기초하여 트리 형태로 조직화되고 그들의 이름이 그들의 내용으로부터 파생된다는 것을 상기한다. 기본 데이터 시브는, 기본 데이터 시브 내의 엘리먼트들의 이름들의 선두 바이트들에 기초하여, 다수의 독립 서브세트들 또는 자식 시브(Child Sieve)들로 파티셔닝될 수 있다. 이름 공간(Name space)을 다수의 서브트리들에 걸쳐 파티셔닝하는 다수의 방법들이 있을 수 있다. 예를 들어, 엘리먼트들의 이름의 선두 바이트들의 값들이 다수의 서브범위(subrange)들로 파티셔닝될 수 있고, 각각의 서브범위가 자식 시브에 할당될 수 있다. 클러스터에 있는 슬레이브 모듈들과 동수의 서브세트들 또는 파티션들이 생성될 수 있고, 따라서 각각의 독립 파티션이 특정의 슬레이브 모듈 상에 배포된다. 배포된 자식 시브를 사용하여, 각각의 슬레이브 모듈은 그가 수신하는 후보 엘리먼트들에 대해 데이터 분류 프로세스를 실행하도록 설계되어 있다.
도 12m은 기본 데이터 시브의, 4개의 노드들 상에서 실행 중인 4개의 슬레이브 모듈들 상에 배포될 PDS_1, PDS_2, PDS_3 및 PDS_4라고 부기된, 4개의 기본 데이터 시브들 또는 자식 시브들로의 샘플 파티션을 나타내고 있다. 파티셔닝은 기본 데이터 엘리먼트들의 이름들의 선두 바이트에 기초한다. 도시된 예에서, PDS_1 내의 모든 엘리먼트들의 이름의 선두 바이트는 A 내지 I의 범위에 있을 것이고, 시브 PDS_1은 그에게로 스티어링(steer)되는 값들의 범위에 의해 마킹(mark)된 이름 A_I를 가질 것이다. 마찬가지로, PDS_2 내의 모든 엘리먼트들의 이름의 선두 바이트는 J 내지 O의 범위에 있을 것이고, 자식 시브 PDS_2는 그에게로 스티어링되는 값들의 범위에 의해 마킹된 이름 J_O를 가질 것이다. 마찬가지로, PDS_3 내의 모든 엘리먼트들의 이름의 선두 바이트는 P 내지 S의 범위에 있을 것이고, 자식 시브 PDS_3은 그에게로 스티어링되는 값들의 범위에 의해 마킹된 이름 P_S를 가질 것이다. 마지막으로, PDS_4 내의 모든 엘리먼트들의 이름의 선두 바이트는 T 내지 Z의 범위에 있을 것이고, 자식 시브 PDS_4는 그에게로 스티어링되는 값들의 범위에 의해 마킹된 이름 T_Z를 가질 것이다.
이 설정에서, 마스터 노드 상에서 실행 중인 마스터 모듈은 입력 파일을 수신하고, 입력 파일을 후보 엘리먼트들의 시퀀스로 분해하고 차후에 각각의 후보 엘리먼트를 추가 처리를 위해 적당한 슬레이브 모듈로 스티어링(steer)하기 위해, 입력 파일의 경량 파싱(lightweight parsing) 및 인수분해를 수행한다. 경량 파싱은 각각의 후보 엘리먼트를 스키마와 대조하여 파싱하는 것을 포함하거나, 후보 엘리먼트의 이름의 선두 바이트들을 구성하는 차원들을 결정하기 위해 후보 엘리먼트에 대해 핑거프린팅을 적용하는 것을 포함할 수 있다. 마스터에서의 파싱은 어느 슬레이브 모듈이 후보 엘리먼트를 수신해야 하는지를 결정하기에 충분한 만큼의 바이트들만을 식별하도록 제한된다. 후보 엘리먼트의 이름의 선두 바이트들 내의 값에 기초하여, 후보가 이 특정 값에 대응하는 자식 시브를 보유하는 슬레이브 노드에 있는 슬레이브 모듈로 포워딩된다.
데이터가 시브 내에 축적됨에 따라, 파티션이 간헐적으로 재방문(revisit)되고 재밸런싱(rebalance)될 수 있다. 파티셔닝 및 재밸런싱 기능들은 마스터 모듈에 의해 수행될 수 있다.
후보 엘리먼트를 수신할 때, 각각의 슬레이브 모듈은, 후보 엘리먼트의 이름을 생성하기 위해 후보 엘리먼트의 완전한 파싱 및 검사(complete parsing and examination)로 시작하여, 데이터 분류 프로세스를 실행한다. 이 이름을 사용하여, 슬레이브 모듈은 자식 시브의 내용 연관 룩업을 수행하고, 후보 엘리먼트를 그 자식 시브에 대한 무손실 축소된 표현 내의 엘리먼트로 변환하기 위해 분류 프로세스를 실행한다. 분류된 파일 내의 엘리먼트의 무손실 축소된 표현은 슬레이브 모듈과 대응하는 자식 시브 - 이 자식 시브에 대해 엘리먼트가 축소되었음 - 를 식별해주기 위해 SlaveNumber라고 불리는 필드로 강화(enhance)된다. 엘리먼트의 무손실 축소된 표현은 마스터 모듈에게 다시 송신된다. 후보 엘리먼트가 자식 시브에서 발견되지 않거나 자식 시브 내의 기본 데이터 엘리먼트들로부터 파생될 수 없는 경우, 자식 시브 내에 할당될 새로운 기본 데이터 엘리먼트가 식별된다.
마스터 모듈은 입력 파일로부터의 모든 후보 엘리먼트들을 적절한 슬레이브 모듈들로 계속하여 스티어링하고, 입력 파일에 대한 모든 엘리먼트들을 수신할 때까지 (무손실 축소된 표현으로 된) 들어오는 엘리먼트 설명들을 축적한다. 그 시점에서, 슬레이브 모듈들의 각자의 자식 시브들을 슬레이브 모듈들의 개개의 분류 프로세스들의 결과로 업데이트하기 위해, 전역적 커밋 통신(global commit communication)이 모든 슬레이브 모듈들에게 발행될 수 있다. 입력에 대한 분류된 파일은 마스터 모듈에 저장된다.
일부 실시예들에서, 임의의 슬레이브가 그의 자식 시브를 새로운 기본 데이터 엘리먼트들 또는 메타데이터 중 어느 하나로 업데이트하기 전에 분류된 파일 전체가 준비되기를 기다리는 것이 아니라, 후보 엘리먼트들이 슬레이브 모듈들에서 처리될 때 자식 시브들에 대한 업데이트들이 완료될 수 있다.
일부 실시예들에서, 각각의 자식 시브는 도 1b 및 도 1c에 대한 설명들에 따라 기본 데이터 엘리먼트들은 물론 재구성 프로그램들을 포함한다. 이러한 실시예들에서, 재구성 프로그램은 자식 시브에 저장되고, 무손실 축소된 표현은 자식 시브 내의 기본 데이터 엘리먼트들은 물론 재구성 프로그램들(필요한 경우) 둘 다에 대한 참조들을 포함한다. 이것은 엘리먼트의 크기 그리고 따라서 마스터 모듈에 저장될 필요가 있는 분류된 파일의 크기를 추가로 감소시킨다. 전체적인 방법은, 각각의 파일 내의 각각의 청크 또는 후보 엘리먼트의 내용에 기초하여, 파일들을 모든 노드들에 걸쳐 분배하기 위해 모든 슬레이브 노드들의 조합된 저장 용량을 이용한다.
데이터 검색이 이와 유사하게 마스터 모듈에 의해 조율된다. 마스터 모듈은 분류된 파일을 수신하고, 분류된 파일 내의 각각의 엘리먼트에 대한 무손실 축소된 규격(losslessly reduced specification)을 검사한다. 마스터 모듈은 어느 슬레이브 모듈이 엘리먼트를 재구성할 것인지를 표시하는 "SlaveNumber" 필드를 추출한다. 엘리먼트는 이어서 재구성을 위해 적절한 슬레이브 모듈에게 송신된다. 재구성된 엘리먼트는 이어서 마스터 모듈에게 다시 송신된다. 마스터 모듈은 모든 슬레이브들로부터의 재구성된 엘리먼트들을 어셈블하고, 재구성된 파일을 파일을 요구하는 소비자에게 포워딩한다.
도 12n은 데이터 분류 장치가 분산 시스템들에 어떻게 배포되고 실행되는지를 예시하고 있다. 입력 파일(1251)이 파일 내의 각각의 후보 엘리먼트의 이름의 선두 바이트들을 파싱하고 식별하는 마스터 모듈에 피드된다. 마스터 모듈은 후보 엘리먼트들을 4개의 슬레이브 모듈들 중 하나로 스티어링한다. 이름의 선두 바이트가 A 내지 I의 범위에 있는 값들을 지니는 기본 데이터 엘리먼트들을 포함하는 이름 A_I를 갖는 PDS_1 또는 자식 시브를 보유하는 슬레이브 노드 1에 있는 슬레이브 모듈 1은 이름 A_I를 갖는 자식 시브에 이미 존재하는 엘리먼트의 중복인 것으로 결정되는 이름 BCD ...를 갖는 후보 엘리먼트(1252)를 수신한다. 슬레이브 모듈 1은, 엘리먼트가 기본(prime)이고 Slave1에서 주소 refPDE1에 존재한다는 표시자를 포함하는, 무손실 축소된 표현(1253)을 반환한다. 마스터는 모든 후보 엘리먼트들을 도 12n에 도시된 바와 같이 관련 슬레이브 모듈들에게 송신하고, 분류된 파일을 어셈블하고 모으며(collect) 최종적으로 저장한다.
도 12o는 도 12n에 도시된 방식의 일 변형을 예시하고 있다. 이 변형에서, 분류된 파일 내의 각각의 엘리먼트의 무손실 축소된 표현에서, 특정의 Child_Sieve - 이에 대해 엘리먼트가 축소됨 - 를 식별해주는 필드는 Child_Sieve가 존재하는 모듈 또는 노드의 번호 대신에 그 Child_Sieve의 이름을 포함한다. 따라서, SlaveNumber 필드는 Child_Sieve_Name 필드로 대체된다. 이것은 Child_Sieve가 존재하는 모듈 또는 물리적 노드의 번호가 아니라 그의 가상 주소에 의해 관련 Child_Sieve를 참조하는 이점이 있다. 이와 같이, 도 12o에서 알 수 있는 바와 같이, 이름의 선두 바이트가 A 내지 I의 범위에 있는 값들을 지니는 기본 데이터 엘리먼트들을 포함하는 이름 A_I를 갖는 PDS_1 또는 자식 시브를 보유하는 슬레이브 노드 1에 있는 슬레이브 모듈 1은 이름 A_I를 갖는 자식 시브에 이미 존재하는 엘리먼트의 중복인 것으로 결정되는 이름 BCD ...를 갖는 후보 엘리먼트(1252)를 수신한다. 슬레이브 모듈 1은, 엘리먼트가 기본이고 이름 A_I를 갖는 Child_Sieve에서 주소 refPDE1에 존재한다는 표시자를 포함하는, 무손실 축소된 표현(1254)을 반환한다.
도 12l 내지 도 12o에 설명된 구성(arrangement)들을 이용하는 것에 의해, 데이터 분류 프로세스의 전체적인 처리율(overall throughput rate)이 증가될 수 있다는 것에 유의한다. 마스터에서의 처리율(throughput)은 이제 마스터 모듈로부터의 후보 엘리먼트들의 경량 파싱 및 디스패치(dispatch)에 의해 제한된다. 수많은 후보 엘리먼트들에 대한 분류는, 후보 엘리먼트들의 내용이 후보 엘리먼트들을 구별되는 슬레이브 모듈들로 스티어링하는 한, 병렬로 실행될 것이다.
전체적인 처리율을 추가로 증대시키기 위해, 어느 Child_Sieve가 후보 엘리먼트를 수신해야 하는지를 식별하기 위한 입력 스트림의 경량 파싱 및 인수분해의 작업이 병렬화될 수 있다. 이 작업은, 다수의 슬레이브 노드들 상에서 실행 중인 슬레이브 모듈들에 의해 병렬로 실행되기 위해, 마스터 모듈에 의해 다수의 동시 작업들로 파티셔닝될 수 있다. 이것은, 데이터 스트림을 미리 살펴보고 데이터 스트림을 다수의 부분적으로 중첩되는 세그먼트들로 슬라이싱하는 것에 의해, 달성될 수 있다. 이 세그먼트들은, 마스터에 의해, 경량 파싱 및 인수분해를 병렬로 수행하고 인수분해의 결과들을 마스터에게 다시 송신하는 슬레이브 모듈들의 각각의 슬레이브 모듈에게 송신된다. 마스터는 세그먼트들의 각각의 세그먼트의 경계들에 걸쳐 인수분해를 결정(resolve)하고 이어서 후보 엘리먼트들을 적절한 슬레이브 모듈로 라우팅한다.
도 12l 내지 도 12o는 데이터 분류 장치가 마스터 노드 상에서 실행 중인 마스터 분류 모듈 및 슬레이브 노드들 상에서 실행 중인 다수의 슬레이브 분류 모듈들을 이용해 분산 방식으로 동작하는 구성을 설명하였다. 마스터 모듈은 기본 데이터 엘리먼트들을 다양한 자식 시브들에 걸쳐 파티셔닝하는 것을 수행하는 일을 맡았었다. 도시된 구성에서, 수집될 모든 입력 파일들은 마스터 모듈에 의해 수집되었고, 무손실 축소된, 분류된 파일들은 마스터 모듈에 유지되었던 반면, 모든 기본 데이터 엘리먼트들(및 임의의 기본 재구성 프로그램들)은 다양한 슬레이브들에 있는 자식 시브들에 존재했었다. 파일에 대한 데이터 검색 요청들이 또한 마스터에 의해 처리되었으며, 대응하는 분류된 파일들의 재구성은 마스터에 의해 조율되었다. 도 12p는 입력 파일들이 슬레이브 분류 모듈들 중 임의의 것에 의해 수집될 수 있고(그리고 대응하는 분류된 파일들이 그 모듈들에 유지되고), 데이터 검색 요청들이 슬레이브 분류 모듈들 중 임의의 것에 의해 처리될 수 있는 일 변형을 예시하고 있다. 기본 데이터 엘리먼트들을 자식 시브들에 걸쳐 분배하는 것이 도 12l 내지 도 12o에 도시된 구성들에서와 동일하게 되도록, 마스터 모듈은 기본 데이터 엘리먼트들을 자식 시브들에 걸쳐 파티셔닝하는 것을 동일한 방식으로 계속하여 수행한다. 그렇지만, 도 12p에 도시된 새로운 구성에서, 각각의 슬레이브 모듈이 데이터를 수집하기도 하고 검색하기도 할 수 있기 때문에, 각각의 슬레이브 모듈은 파티셔닝을 인식하고 있다. 그에 부가하여, 모든 모듈들은, 그 모듈들에 의한 데이터의 수집 시에, 모듈들 각각에서 생성되어 저장된 분류된 파일들의 존재 및 위치를 인식하고 있다. 이것은 임의의 슬레이브 모듈이 시스템 전체에 저장된 파일들 중 임의의 파일에 대한 데이터 검색 요청들을 충족시킬 수 있게 한다.
도 12p에 도시된 바와 같이, 슬레이브 모듈들 각각은 분산 저장 시스템으로부터 데이터를 수집하고 검색할 수 있다. 예를 들어, 슬레이브 분류 모듈 1(1270)은 입력 파일 I(1271)를 수집하고, 입력 파일 I를 인수분해하고 후보 엘리먼트들을 입력 파일 I로부터의 각각의 후보 엘리먼트의 이름에 대응하는 자식 시브를 포함하는 모듈에게 라우팅하기 위해, 경량 파싱을 수행한다. 예를 들어, 입력 파일 I로부터의 후보 엘리먼트(1275)는 슬레이브 분류 모듈 2(1279)에게 송신된다. 마찬가지로, 슬레이브 분류 모듈 2(1279)는 입력 파일 II를 수집하고, 입력 파일 II를 인수분해하고 후보 엘리먼트들을 입력 파일 II로부터의 각각의 후보 엘리먼트의 이름에 대응하는 자식 시브를 포함하는 모듈에게 라우팅하기 위해, 경량 파싱을 수행한다. 예를 들어, 입력 파일 II로부터의 후보 엘리먼트(1277)는 슬레이브 분류 모듈 1(1270)에게 송신된다. 슬레이브 분류 모듈들 각각은 그들이 수신하는 후보 엘리먼트들을 처리하고, 그들의 자식 시브에 대한 분류 프로세스를 완료하며, 후보 엘리먼트의 무손실 축소된 표현을 데이터를 수집했던 개시측 모듈(initiating module)에게 다시 반환한다. 예를 들어, 입력 파일 I로부터의 후보 엘리먼트(1275)를 슬레이브 분류 모듈 1(1270)로부터 수신하는 것에 응답하여, 슬레이브 분류 모듈 2(1279)는 무손실 축소된 엘리먼트(1276)를 슬레이브 분류 모듈 1(1270)에게 반환한다. 마찬가지로, 입력 파일 II로부터의 후보 엘리먼트(1277)를 슬레이브 분류 모듈 2(1279)로부터 수신하는 것에 응답하여, 슬레이브 분류 모듈 1(1270)은 무손실 축소된 엘리먼트(1278)를 슬레이브 분류 모듈 2(1279)에게 반환한다.
이 구성에서, 데이터의 검색은 임의의 슬레이브 모듈에서 충족될 수 있다. 검색 요청을 수신하는 모듈은 먼저 그 요청된 파일에 대한 분류된 파일이 어디에 존재하는지를 결정하고, 대응하는 슬레이브 모듈로부터 분류된 파일을 페치할 필요가 있다. 차후에, 개시측 슬레이브 모듈은 원래의 파일을 산출하여 요청측 애플리케이션에게 전달하기 위해 그 분류된 파일 내의 다양한 엘리먼트들의 분산 재구성을 조율할 필요가 있다.
이러한 방식으로, 데이터 분류 프로세스는, 클러스터 내의 수많은 컴퓨터들의 총 컴퓨팅, 메모리, 및 저장 용량을 보다 효과적으로 활용하기 위해, 분산 시스템의 다수의 노드들에 걸쳐 분산 방식으로 실행될 수 있다. 시스템 내의 모든 노드들이 데이터를 수집하고 검색하는 데 이용될 수 있다. 이것은 시스템 내의 노드들의 조합된 총 저장 용량을 최대한 이용하면서 매우 높은 데이터 수집 및 검색 속도들을 가능하게 할 것이다. 이것은 또한 시스템 내의 임의의 노드 상에서 실행 중인 애플리케이션들이 시스템 내의 어딘가에 저장된 임의의 데이터에 대해 로컬 노드에서 쿼리를 할 수 있게 하고 그 쿼리가 효율적으로 그리고 매끄럽게(seamlessly) 충족될 수 있게 한다.
도 12m 내지 도 12p에 설명된 배열들에서, 데이터를 시스템의 다양한 노드들에 존재하는 자식 시브들에 걸쳐 파티셔닝하는 것은 전역적으로 보이는(globally visible) 이름 공간 내의 엘리먼트들의 이름에 기초하였으며, 여기서 엘리먼트들은 입력 파일들을 인수분해하는 것에 의해 추출되었다. 대안의 구성에서, 특정 메타데이터를 공유하는 데이터 로트 또는 파일들의 그룹 전체가 특정의 노드에 할당되어 저장될 수 있다. 따라서, 전체적인 데이터의 1차 파티셔닝(primary partitioning)은 데이터 로트들에 기초하고, 마스터에 의해 수행되고 관리된다. 모든 슬레이브 모듈들은 모듈들에의 데이터 로트들의 할당을 인식하고 있다. 데이터 로트는 전적으로(entirely) 주어진 슬레이브 노드에 존재할 것이다. 그 슬레이브 노드 상에서 실행 중인 분류 슬레이브 모듈 상의 자식 시브는 이 데이터 로트에 속하는 모든 기본 데이터 엘리먼트들을 포함할 것이다. 환언하면, 주어진 데이터 로트에 대한 모든 기본 데이터 엘리먼트들에 대한 트리 전체는 전적으로(completely) 단일 슬레이브 분류 모듈 내의 단일 자식 시브에 존재할 것이다. 주어진 데이터 로트에 대한 모든 분류된 파일들이 또한 동일한 슬레이브 분류 모듈 상에 존재할 것이다. 이 구성을 사용하여, 입력 파일들이 여전히 슬레이브 분류 모듈들 중 임의의 것에 의해 수집될 수 있고, 데이터 검색 요청들이 여전히 슬레이브 분류 모듈들 중 임의의 것에 의해 처리될 수 있다. 그렇지만, 주어진 데이터 로트에 대한 데이터 분류 프로세스 전체는 전적으로 그 데이터 로트를 포함하는 모듈 상에서 실행된다. 데이터 수집 및 데이터 검색에 대한 요청들은 개시측 모듈들로부터 특정의 데이터 로트를 보유하도록 지정된 특정의 슬레이브 모듈로 라우팅된다. 이 해결책은 데이터 로트를 인수분해하고 분류할 때 분산 환경에서 감소된 통신 오버헤드의 이점이 있다. 중복성이 더 이상 전역적 데이터 풋프린트 전체에 걸쳐 이용되지 않고, 데이터 로트 내에서 로컬적으로 아주 효율적으로 이용된다. 이 해결책은 여전히 분산 시스템의 조합된 저장 용량을 사용하고, 시스템의 임의의 노드로부터의 임의의 데이터를 쿼리, 수집 및 검색할 수 있는 매끄러운 능력(seamless ability)을 제공한다.
따라서, 앞서 설명된 수많은 기법들을 이용하여, 매우 높은 속도로 매우 큰 데이터 세트들에 대해 데이터 분류를 수행하기 위해 분산 시스템에서의 자원들이 효율적으로 사용된다.
이 실시예들의 유효성을 결정하기 위해 본원에 기술되는 실시예들을 사용하여 각종의 현실 세계 데이터 세트들에 대해 데이터 축소가 수행되었다. 연구된 현실 세계 데이터 세트들은, 일반 대중이 이용가능한, 회사 이메일의 엔론 코퍼스(Enron Corpus), 다양한 미국 정부 기록들 및 문서들, MongoDB NOSQL 데이터베이스에 입력된 미국 교통부 기록들, 및 기업의 파워포인트 프레젠테이션을 포함한다. 본원에 기술되는 실시예들을 사용하고, 입력 데이터를 평균 4 KB의 가변 크기 엘리먼트들(핑거프린팅에 의해 결정된 경계들을 가짐)로 인수분해함으로써, 평균 3.23배의 데이터 축소가 이 데이터 세트들에 걸쳐 달성되었다. 3.23배의 축소는 축소된 데이터의 크기가 원래의 데이터의 크기를 3.23배로 나눈 것 - 31%의 압축률을 갖는 감소된 풋프린트가 얻어짐 - 과 같다는 것을 의미한다. 전통적인 데이터 중복 제거 기법들은 동등한 파라미터들을 사용하여 이 데이터 세트들에 대해 1.487배의 데이터 축소를 제공하는 것으로 밝혀졌다. 본원에 기술되는 실시예들을 사용하고, 입력 데이터를 4 KB의 고정 크기 엘리먼트들로 인수분해함으로써, 평균 1.86배의 데이터 축소가 이 데이터 세트들에 걸쳐 달성되었다. 전통적인 데이터 중복 제거 기법들은 동등한 파라미터들을 사용하여 이 데이터 세트들에 대해 1.08배의 데이터 축소를 제공하는 것으로 밝혀졌다. 그러므로, 데이터 분류TM 해결책은 전통적인 데이터 중복 제거 해결책들보다 상당히 더 나은 데이터 축소를 제공하는 것으로 밝혀졌다.
시운전은 또한 기본 데이터 엘리먼트의 바이트들의 작은 서브셋이 시브에서 대부분의 엘리먼트들을 정렬하는 역할을 하고, 따라서 그의 동작을 위해 최소한의 증분적 저장소를 필요로 하는 해결책을 가능하게 한다는 것을 확인해준다.
결과들은 데이터 분류TM 장치가 엘리먼트 자체보다 더 미세한 단위로 데이터 세트 전체에 걸쳐 전역적으로 데이터 엘리먼트들 사이의 중복성을 효율적으로 이용하는 것을 가능하게 한다는 것을 확인해준다. 이 방법에 의해 제공되는 무손실 데이터 축소는 데이터 액세스 및 IO의 효율적 사용에 의해, 자체가 최소한의 증분적 저장소를 필요로 하는 데이터 구조들을 이용하여, 그리고 최신의 멀티코어 마이크로프로세서들 상에서 이용가능한 총 계산 처리 능력의 일부를 사용하여 달성된다. 이전의 섹션들에서 기술되는 실시예들은 높은 데이터 수집 속도 및 데이터 검색 속도를 제공하면서 큰 데이터 세트들 및 아주 큰 데이터 세트들에 대해 무손실 데이터 축소를 수행하고 종래의 기법들의 단점들 및 한계들을 겪지 않는 시스템들 및 기법들을 특징으로 한다.
내용 연관 시브에 존재하는 기본 데이터 엘리먼트들로부터 데이터를 파생시키는 것에 의해 무손실 축소된 데이터에 대한 내용 연관 탐색 및 검색을 수행
이전의 본문에 설명되고 도 1a 내지 도 12l에 예시된 데이터 분류 장치는 무손실 축소 포맷으로 저장된 데이터로부터 정보의 탐색 및 내용 연관 검색을 효율적으로 수행하기 위해 특정 특징들을 사용해 향상될 수 있다. 이러한 다차원 탐색들 및 데이터 검색은 분석 또는 데이터 웨어하우징 적용분야의 핵심 구성 블록들이다. 이 향상들이 이제부터 설명될 것이다.
도 13은 도 3h에 예시된 구조와 유사한 리프 노드 데이터 구조를 도시하고 있다. 그렇지만, 도 13에서, 각각의 기본 데이터 엘리먼트에 대한 리프 노드 데이터 구조 내의 엔트리가 그 특정의 기본 데이터 엘리먼트에 대한 참조를 포함하는 분류된 데이터 내의 모든 엘리먼트들에 대한 참조들(역참조들 또는 역링크(Reverse Link)들이라고도 지칭될 것임)을 포함하도록 향상된다. 데이터 분류 방식이 입력 파일로부터의 데이터를 도 1h에서 설명된 것과 같은 규격을 사용하여 축소된 포맷으로 분류된 파일에 배치되는 엘리먼트들의 시퀀스로 인수분해한다. 분류된 파일에는 두 종류의 엘리먼트들 - 기본 데이터 엘리먼트들 및 파생 엘리먼트들 - 이 있다. 분류된 파일 내의 이 엘리먼트들 각각에 대한 규격은 기본 데이터 저장소에 존재하는 기본 데이터 엘리먼트들에 대한 참조들을 포함할 것이다. (분류된 파일 내의 엘리먼트로부터 기본 데이터 저장소 내의 기본 데이터 엘리먼트로의) 이 참조들 각각에 대해, 리프 노드 데이터 구조에 설치된 (리프 노드 데이터 구조 내의 기본 데이터 엘리먼트에 대한 엔트리로부터 분류된 파일 내의 엘리먼트로의) 대응하는 역링크 또는 역참조가 있을 것이다. 역참조는 엘리먼트의 무손실 축소된 표현의 시작을 마킹하는 분류된 파일 내에서의 오프셋을 결정한다. 일부 실시예들에서, 역참조는 분류된 파일의 이름 및 엘리먼트의 시작을 위치 확인해주는 그 파일 내에서의 오프셋을 포함한다. 도 13에 도시된 바와 같이, 분류된 파일 내의 각각의 엘리먼트에 대한 역참조와 함께, 리프 노드 데이터 구조는 또한 분류된 파일에서 참조되고 있는 엘리먼트가 기본 데이터 엘리먼트(prime)인지 또는 파생 엘리먼트(deriv)인지를 식별해주는 표시자를 유지한다. 분류 프로세스 동안, 엘리먼트들이 분류된 파일에 배치되는 대로(as and when) 역링크들이 리프 노드 데이터 구조들에 설치된다.
역참조 또는 역링크는 기본 데이터 시브를 공유하는 모든 분류된 파일들 내의 모든 엘리먼트들에 도달할 수 있는 범용 핸들(universal handle)로서 설계된다.
역참조들의 추가가 달성된 데이터 축소에 그다지 영향을 미치지 않을 것으로 예상되는데, 그 이유는 각각의 참조가 데이터 엘리먼트의 크기의 수분의 1(fraction)이도록 데이터 엘리먼트 크기가 선택될 것으로 예상되기 때문이다. 예를 들어, 파생 엘리먼트들 각각이 하나 이하의 기본 데이터 엘리먼트로부터 파생하도록 제약되어 있는 시스템을 고려한다(따라서 다중 엘리먼트 파생물(multi-element derivative)들이 허용되지 않는다). 모든 리프 노드 데이터 구조들에 걸친 역참조들의 총수는 모든 분류된 파일들에 걸친 엘리먼트들의 총수와 같을 것이다. 32GB 크기의 샘플 입력 데이터 세트가 8GB의 무손실 축소된 데이터로 축소되고, 1KB의 평균 엘리먼트 크기를 이용하며, 4X의 축소 비율을 가져온다고 가정한다. 입력 데이터에는 32M개의 엘리먼트들이 있다. 각각의 역참조가 크기가 8B이면, 역참조에 의해 점유되는 총 공간은 256MB 또는 0.25GB이다. 이것은 축소된 데이터의 8GB 풋프린트에 대해 작은 증가이다. 새로운 풋프린트는 8.25GB일 것이고, 달성된 유효 축소(effective reduction)는 3.88X일 것이며, 이는 3%의 축소 손실을 나타낸다. 이것은 축소된 데이터에 대한 강력한 내용 연관 데이터 검색의 이점들을 위해 지불할 작은 비용이다.
본 문서에서 앞서 설명된 바와 같이, 분류 장치는 후보 엘리먼트의 내용 내에서 스켈레탈 데이터 구조의 다양한 컴포넌트들의 위치들을 결정하기 위해 각종의 방법들을 이용할 수 있다. 엘리먼트의 스켈레탈 데이터 구조의 다양한 컴포넌트들은 차원들로서 간주될 수 있고, 따라서 이 차원들과 그에 뒤이은 각각의 엘리먼트의 나머지 내용의 연결이 각각의 엘리먼트의 이름을 생성하는 데 사용된다. 이름은 기본 데이터 엘리먼트들을 트리 형태로 정렬하고 조직화하는 데 사용된다.
입력 데이터의 구조가 알려져 있는 사용 모델들에서, 스키마는 다양한 필드들 또는 차원들을 정의한다. 이러한 스키마는 이 내용 연관 데이터 검색 장치를 사용하고 있는 분석 애플리케이션에 의해 제공되고, 애플리케이션에 대한 인터페이스를 통해 장치에게 제공된다. 스키마에서의 선언들에 기초하여, 분류 장치의 파서는, 다양한 차원들을 검출 및 위치 확인하고 후보 엘리먼트의 이름을 생성하기 위해, 후보 엘리먼트의 내용을 파싱할 수 있다. 앞서 기술한 바와 같이, 차원들에 대응하는 필드들에 동일한 내용을 갖는 엘리먼트들은 트리의 동일한 레그를 따라 함께 그룹화될 것이다. 시브에 설치된 각각의 기본 데이터 엘리먼트에 대해, 차원들에 관한 정보는 리프 노드 데이터 구조에서의 그 기본 데이터 엘리먼트에 대한 엔트리에 메타데이터로서 저장될 수 있다. 이 정보는 선언된 차원들 각각에서 내용의 위치들, 크기들, 및 값들을 포함할 수 있고, 도 13에서 "기본 데이터 엘리먼트에 대한 다른 메타데이터"라고 지칭된 필드에 저장될 수 있다.
도 14a는 본원에 기술되는 일부 실시예들에 따른, 입력 데이터 세트의 구조에 대한 설명 및 입력 데이터 세트의 구조와 차원들 간의 대응관계에 대한 설명을 제공하는 샘플 스키마를 예시하고 있다. 구조 설명(1402)은 입력 데이터의 전체적인 구조를 기술하는 보다 전체적인 스키마의 발췌(excerpt) 또는 일부분이다. 구조 설명(1402)은 키워드들의 목록(예컨대, "PROD_ID", "MFG", "MONTH", "CUS_LOC", "CATEGORY"및 "PRICE") 및, 그에 뒤따라 있는, 키워드에 대응하는 값의 유형을 포함한다. 콜론 문자 ":"는 키워드를 값의 유형과 분리시키기 위한 구분자로서 사용되고, 세미콜론 문자 ";"는 키워드 및 대응하는 값의 유형의 구별되는 쌍들을 분리시키기 위한 구분자로서 사용된다. 유의할 점은, 전체적인 스키마(구조(1402)는 그의 일부임)가 각각의 입력의 시작과 끝, 그리고 또한 어쩌면 차원들 밖에 있는 다른 필드들을 식별해주기 위한 부가의 필드들을 지정할 수 있는 것이다. 차원 매핑 설명(Dimension mapping description)(1404)은 기본 데이터 엘리먼트들을 조직화는 데 사용되는 차원들이 구조화된 입력 데이터 세트(structured input dataset)에서의 키워드 값들에 어떻게 매핑되는지를 기술한다. 예를 들어, 차원 매핑 설명(1404)에서의 첫 번째 라인은 입력 데이터 세트에서의 키워드 "MFG"에 대응하는 값의 처음 4 바이트(첫 번째 라인이 텍스트 "prefix=4"로 끝나기 때문임)가 차원 1을 생성하는 데 사용된다는 것을 지정한다. 차원 매핑 설명(1404)에서의 나머지 라인들은 구조화된 입력 데이터에 기초하여 다른 3개의 차원들을 어떻게 생성하는지를 기술한다. 키워드들과 차원들 간의 이 매핑에서, 입력에서 나타나는 키워드들의 순서가 차원들의 순서와 꼭 일치하는 것은 아니다. 제공된 스키마 설명들을 사용하여, 파서는 후보 엘리먼트의 이름을 생성하기 위해 입력 데이터에서의 이 차원들을 인식할 수 있다. 도 14a의 예에서는, 차원 매핑 설명(1404)을 사용하여, 후보 엘리먼트의 이름이 다음과 같이 생성될 것이다 - (1) 이름의 처음 4 바이트는 차원 1로서 선언된 키워드 "MFG"에 대응하는 값으로부터의 처음 4 바이트일 것이고, (2) 이름의 다음 4 바이트는 차원 2로서 선언된 키워드 "CATEGORY"에 대응하는 값으로부터의 처음 4 바이트일 것이며, (3) 이름의 다음 3 바이트는 차원 3으로서 선언된 키워드 "CUS_LOC"에 대응하는 값으로부터의 처음 3 바이트일 것이고, (4) 이름의 다음 3 바이트는 차원 4로서 선언된 키워드 "MONTH"에 대응하는 값으로부터의 처음 3 바이트일 것이며, (5) 이름의 다음 바이트 세트는 차원들로부터의 나머지 바이트들의 연결(concatenation)로 이루어질 것이고, (6) 마지막으로 차원들의 모든 바이트들이 소진된 후에, 이름의 나머지 바이트들이 후보 엘리먼트의 나머지 바이트들의 연결로부터 생성될 것이다.
이 장치를 구동하는 애플리케이션에 의해 제공되는 스키마들은 다수의 1차 차원(Primary Dimension)들은 물론 다수의 2차 차원(Secondary Dimension)들을 지정할 수 있다. 이 1차 차원들 및 2차 차원들 전부에 대한 정보는 리프 노드 데이터 구조에서의 메타데이터에 유지될 수 있다. 1차 차원들은 주축 - 이 주축을 따라 시브에서의 엘리먼트들을 소팅하고 조직화 - 을 형성하는 데 사용된다. 1차 차원들이 소진되고 큰 멤버십(membership)을 갖는 서브트리들이 여전히 남아있는 경우, 엘리먼트들을 보다 작은 그룹들로 추가로 세분하기 위해 트리의 아래쪽으로 보다 깊은 곳에서 2차 차원들이 또한 사용될 수 있다. 2차 차원들에 관한 정보는 메타데이터로서 유지될 수 있고 또한 리프 노드 내의 엘리먼트들을 차별화하기 위한 2차 기준(secondary criteria)들로서 사용될 수 있다. 내용 연관 다차원 탐색 및 검색을 제공하는 일부 실시예에서, 모든 들어오는 데이터가 스키마에 의해 선언된 차원들 각각에 대한 키워드들 및 유효한 값(valid value)들을 포함해야 한다는 요구사항이 부과될 수 있다. 이것은 시스템이 유효한 데이터만이 시브에서의 원하는 서브트리들에 들어가도록 보장할 수 있게 한다. 차원들로서 지정된 모든 필드들을 포함하는 것은 아니거나 차원들에 대한 필드들에 대응하는 값들에 유효하지 않은 값들을 포함하는 후보 엘리먼트들이, 앞서 도 3e에서 예시된 바와 같이, 상이한 서브트리 아래로 보내질 것이다.
데이터 분류 장치는 차원들에서의 내용에 기초하여 데이터의 내용 연관 탐색 및 검색을 포괄적으로 지원하기 위해 하나의 부가적인 방식으로 제약된다. 파생 엘리먼트들이 기본 데이터 엘리먼트로부터 생성될 때, 파생기는 기본 데이터 엘리먼트와 파생 엘리먼트 둘 다가 대응하는 차원들 각각에 대한 값들에 정확히 동일한 내용을 갖게 보장하도록 제약된다. 따라서, 파생물이 생성되고 있을 때, 재구성 프로그램은, 파생 엘리먼트를 구성하기 위해, 기본 데이터 엘리먼트의 차원들 중 임의의 차원에 대응하는 필드들 내의 내용을 교란시키거나 수정하도록 허용되지 않는다. 후보 엘리먼트가 주어진 경우, 시브의 룩업 동안, 후보 엘리먼트가 대상 기본 데이터 엘리먼트의 대응하는 차원들과 비교하여 차원들 중 임의의 차원에 상이한 내용을 갖는 경우, 파생물을 채용하기보다는, 새로운 기본 데이터 엘리먼트가 설치될 필요가 있다. 예를 들어, 후보 엘리먼트가 리프 노드에 도달하여, 1차 차원들의 서브세트에 동일한 내용을 갖지만 나머지 1차 차원들 또는 2차 차원들 중 어느 하나에 상이한 내용을 갖는, 기본 데이터 엘리먼트를 발견하도록 1차 차원들의 이 서브세트가 엘리먼트들을 트리에서의 구별되는 그룹들로 충분히 소팅하는 경우, 파생물을 생성하는 대신에, 새로운 기본 데이터 엘리먼트가 설치될 필요가 있다. 이 특징은 모든 데이터가 기본 데이터 저장소를 단순히 쿼리하는 것에 의해 차원들을 사용하여 탐색될 수 있도록 보장한다.
앞서 설명된 제한들은 대부분의 사용 모델들에 대해 데이터 축소의 정도를 그다지 저해하지 않을 것으로 예상된다. 예를 들어, 입력 데이터가 각각 1000 바이트 크기의 데이터 웨어하우스 트랜잭션들인 엘리먼트들의 세트로 이루어져 있는 경우, 그리고 6개의 1차 차원들 및 14개의 2차 차원들 - 각각이 차원당 이를테면 8 바이트의 데이터를 가짐 - 의 세트가 스키마에 의해 지정되어 있는 경우, 차원들에서 내용에 의해 점유되는 총 바이트는 160 바이트이다. 파생물을 생성할 때 이 160 바이트에 대해 어떤 교란도 허용되지 않는다. 이것은 여전히 나머지 840 바이트의 후보 엘리먼트 데이터가 파생물들을 생성하기 위해 교란될 수 있게 하고, 따라서 중복성을 활용할 충분한 기회를 남겨두면서, 동시에 데이터 웨어하우스로부터의 데이터가 차원들을 사용하여 내용 연관 방식으로 탐색 및 검색될 수 있게 한다.
차원들 내의 필드들에 대한 특정 값들을 포함하는 데이터가 있는지 탐색 쿼리를 실행하기 위해, 장치는 트리를 순회하여 지정된 차원들과 매칭하는 트리 내의 노드에 도달할 수 있고, 그 노드 아래에 있는 모든 리프 노드 데이터 구조들이 룩업의 결과로서 반환될 수 있다. 리프 노드에 존재하는 기본 데이터 엘리먼트들에 대한 참조들은, 요구되는 경우, 원하는 기본 데이터 엘리먼트들을 페치하는 데 사용될 수 있다. 역링크는 분류된 파일로부터 (무손실 축소된 포맷으로 된) 입력 엘리먼트를 검색하는 것(그렇게 요망되는 경우)을 가능하게 한다. 엘리먼트는 원래의 입력 데이터를 산출하기 위해 차후에 재구성될 수 있다. 따라서, 향상된 장치는 기본 데이터 저장소 내의 데이터(총 데이터의 보다 작은 서브세트임)에 대해 모든 탐색이 수행될 수 있게 하면서, 필요에 따라 모든 파생 엘리먼트들에 도달하여 그들을 검색할 수 있다.
향상된 장치는 쿼리에 의해 지정된 차원들에서의 내용에 기초하여 데이터의 관련 서브세트들의 강력한 탐색 및 검색을 위해 탐색 및 룩업 쿼리들을 실행하는 데 사용될 수 있다. 내용 연관 데이터 검색 쿼리는 "Fetch (차원 1, 차원 1의 값; 차원 2, 차원 2의 값; ...)의 형태를 가질 것이다. 쿼리는 탐색에 관여된 차원들은 물론, 내용 연관 탐색 및 룩업을 위해 지정된 차원들 각각에 대해 사용될 값들을 지정할 것이다. 쿼리는 모든 차원들을 지정할 수 있거나 차원들의 서브세트만을 지정할 수 있다. 쿼리들은 다수의 차원들에 기초한 복합 조건(compound condition)들을 탐색 및 검색의 기준으로서 지정할 수 있다. 지정된 차원들에 대해 지정된 값들을 갖는 시브 내의 모든 데이터가 검색될 것이다.
다양한 페치 쿼리들이 지원되고 이 내용 연관 데이터 검색 장치를 사용하고 있는 분석 애플리케이션에 이용가능하게 될 수 있다. 이러한 쿼리들은 애플리케이션으로부터 인터페이스를 통해 장치에게 제공될 것이다. 인터페이스는 쿼리들을 애플리케이션으로부터 장치에게 제공하고 쿼리들의 결과들을 장치로부터 애플리케이션에게 반환한다. 첫째로, 쿼리와 매칭하는 각각의 기본 데이터 엘리먼트에 대한 도 13에서의 리프 노드 데이터 구조에 대한 참조 또는 핸들을 (자식 ID 또는 엔트리의 인덱스와 함께) 페치하기 위해 쿼리 FetchRefs가 사용될 수 있다. 쿼리와 매칭하는 각각의 기본 데이터 엘리먼트에 대한 도 13에서의 리프 노드 데이터 구조 내의 엔트리로부터의 메타데이터(스켈레탈 데이터 구조, 차원들에 관한 정보, 및 기본 데이터 엘리먼트들에 대한 참조들을 포함함)를 페치하기 위해 제2 형태의 쿼리 FetchMetaData가 사용될 수 있다. 제3 형태의 쿼리 FetchPDEs는 탐색 기준들과 매칭하는 모든 기본 데이터 엘리먼트들을 페치할 것이다. 다른 형태의 쿼리 FetchDistilledElements는 탐색 기준들과 매칭하는 분류된 파일 내의 모든 엘리먼트들을 페치할 것이다. 또 다른 형태의 쿼리 FetchElements는 탐색 기준들과 매칭하는 입력 데이터 내의 모든 엘리먼트들을 페치할 것이다. FetchElements 쿼리의 경우, 장치가 먼저 분류된 엘리먼트들을 페치하고 이어서 관련성 있는 분류된 엘리먼트들을 입력 데이터로부터의 엘리먼트들로 재구성하고 이들을 쿼리의 결과들로서 반환할 것임에 유의해야 한다.
이러한 다차원 내용 연관 페치 프리미티브(multidimensional content associative Fetch primitive)들에 부가하여, 인터페이스는 또한 애플리케이션이 (기본 데이터 엘리먼트에 대한 참조를 사용하여) 기본 데이터 엘리먼트들에 그리고 (엘리먼트에 대한 역참조를 사용하여) 분류된 파일 내의 엘리먼트들에 직접 액세스할 수 있게 할 수 있다. 그에 부가하여, 인터페이스는 애플리케이션이 (분류된 엘리먼트에 대한 참조가 주어지면) 분류된 파일 내의 분류된 엘리먼트를 재구성하고 그 엘리먼트를 입력 데이터에 존재했던 대로 전달할 수 있게 할 수 있다.
이 쿼리들의 신중한 조합이, 탐색들을 수행하고, 관련성 있는 합집합들 및 교집합들을 결정하며, 중요한 식견들을 수집하기 위해, 분석 애플리케이션에 의해 사용될 수 있다.
이하에서 설명되는 도 14b는 구조 설명(1402)에 기술된 구조를 갖는 입력 데이터 세트의 일 예를 예시하고 있다. 이 예에서, 파일(1405)에 포함된 입력 데이터는 전자 상거래(e-commerce transaction)들을 포함한다. 입력 데이터는, 도 14a에서의 스키마 및 차원 선언들을 사용하여, 데이터 분류 장치 내의 파서에 의해 일련의 후보 엘리먼트들(1406)로 변환된다. 각각의 후보 엘리먼트의 이름의 선두 바이트들이 어떻게 차원들로부터의 내용으로 이루어져 있는지에 유의한다. 예를 들어, 후보 엘리먼트 1에 대한 이름의 선두 바이트(1407)는 PRINRACQNYCFEB이다. 이 이름들은 후보 엘리먼트들을 트리 형태로 조직화하는 데 사용된다. 데이터 축소가 완료된 후에, 분류된 데이터가 분류된 파일(1408)에 배치된다.
이하에서 설명되는 도 14c는 구조 설명(1402)에 따라 도 14a에 예시된 입력 데이터 세트를 파싱하고, 차원 매핑 설명(1404)에 따라 차원들을 결정하며, 결정된 차원들에 기초하여 기본 데이터 엘리먼트들을 트리로 조직화하기 위해 차원 매핑 설명(1404)이 어떻게 사용될 수 있는지를 예시하고 있다. 도 14c에서, 기본 데이터 엘리먼트들이 4개의 차원들로부터 취해진 총 14개의 문자들을 사용하여 마스터 트리로 조직화된다. 다양한 기본 데이터 엘리먼트들에 대한 리프 노드 데이터 구조의 일부분이 마스터 트리로 나타내어져 있다. 보기 쉽도록 하기 위해, 도 13의 전체적인 리프 노드 데이터 구조가 나타내어져 있지 않다는 것에 유의한다. 그렇지만, 도 14c는 리프 노드 데이터 구조에서의 각각의 엔트리의 경로 정보(Path Info) 또는 이름, 자식 ID, 기본 데이터 엘리먼트들로부터 분류된 파일 내의 엘리먼트들로의 모든 역참조들 또는 역링크들을, 분류된 파일 내의 엘리먼트가 "prime"(P로 표시됨)인지 "deriv"(D로 표시됨)인지의 표시자 그리고 또한 기본 데이터 엘리먼트에 대한 참조와 함께, 나타내고 있다. 도 14c는 분류된 파일 내의 7개의 엘리먼트들이 5개의 기본 데이터 엘리먼트들에 매핑되는 것을 마스터 트리로 나타내고 있다. 도 14c에서, 이름 PRINRACQNYCFEB를 갖는 기본 데이터 엘리먼트의 역링크 A는 분류된 파일 내의 엘리먼트 1을 다시 참조한다. 한편, 이름 NIKESHOELAHJUN을 갖는 기본 데이터 엘리먼트는 엘리먼트 2, 엘리먼트 3 및 엘리먼트 58에 대한 3개의 역링크들(각각, B, C, 및 E)을 갖는다. 엘리먼트 3 및 엘리먼트 58이 엘리먼트 2의 파생물들이라는 것에 유의한다.
도 14d는 탐색들의 효율을 개선시키기 위해 차원들로부터 생성된 보조 인덱스 또는 보조 트리를 도시하고 있다. 이 예에서, 생성된 보조 매핑 트리는 (CATEGORY인) 차원 2에 기초하고 있다. 이 보조 트리를 직접 순회하는 것에 의해, 그렇지 않았으면 초래되었을지 모르는 마스터 트리의 보다 고비용의 순회들 없이, 입력 데이터에서의 주어진 CATEGORY의 모든 엘리먼트들이 발견될 수 있다. 예를 들어, "SHOE"로 표시된 레그를 따라 아래로 순회하는 것은 ADIDSHOESJCSEP 및 NIKESHOELAHJUN인 신발(shoe)들에 대한 2개의 기본 데이터 엘리먼트들로 곧바로 이어진다.
대안적으로, 이러한 보조 트리는 2차 차원들에 기초하고 차원들을 사용하는 탐색들의 신속한 수렴을 돕기 위해 사용될 수 있다.
도 14d에 도시된 장치 상에서 실행되는 쿼리들의 예들이 이제부터 제공될 것이다. 쿼리 FetchPDEs (Dimension1, NIKE;)는 NIKESHOELAHJUN 및 NIKEJERSLAHOCT라는 2개의 기본 데이터 엘리먼트들을 반환할 것이다. 쿼리 FetchDistilledElements (Dimension 1, NIKE ;)는, 무손실 축소된 포맷으로 된 분류된 엘리먼트들인, 엘리먼트 2, 엘리먼트 3, 엘리먼트 58, 및 엘리먼트 59를 반환할 것이다. 쿼리 FetchElements (Dimension 1, NIKE; Dimension 2, SHOE)는 입력 데이터 파일(1405)로부터 트랜잭션 2, 트랜잭션 3, 및 트랜잭션 58을 반환할 것이다. 쿼리 FetchMetadata (Dimension 2, SHOES)는 ADIDSHOESJCSEP 및 NIKESHOELAHJUN이라는 2개의 기본 데이터 엘리먼트들 각각에 대한 리프 노드 데이터 구조 엔트리에 저장된 메타데이터를 반환할 것이다.
지금까지 기술된 장치는 차원들이라로 불리는 필드들에 지정되어 있는 내용에 기초하여 탐색들을 지원하는 데 사용될 수 있다. 그에 부가하여, 장치가 차원들의 목록에 포함되지 않은 키워드들의 목록에 기초하여 탐색들을 지원하는 데 사용될 수 있다. 이러한 키워드들은 장치를 구동하는 탐색 엔진(search engine)과 같은 애플리케이션에 의해 장치에게 제공될 수 있다. 키워드들은 스키마 선언을 통해 장치에게 지정되거나, 각각이 선언된 구분기호(separator) (공백(space), 또는 콤마(comma), 또는 라인피드(linefeed) 등)로 구분된, 모든 키워드들을 포함하는 키워드 목록을 통해 전달될 수 있다. 대안적으로, 스키마는 물론 키워드 목록 둘 다가 모든 키워드들을 일괄하여 지정하는 데 사용될 수 있다. 매우 많은 수의 키워드들이 지정될 수 있다 - 장치가 키워드들의 수에 제한을 두지 않는다 -. 이러한 탐색 키워드들은 키워드들이라고 지칭될 것이다. 장치는 이 키워드들을 사용하여 탐색하기 위해 역 인덱스(inverted index)를 유지할 수 있다. 역 인덱스는, 각각의 키워드에 대해, 이 키워드를 포함하는 분류된 파일들 내의 엘리먼트들에 대한 역참조들의 목록을 포함한다.
스키마에서의 키워드 선언들 또는 키워드 목록에 기초하여, 분류 장치의 파서는, 들어오는 후보 엘리먼트에서 다양한 키워드들를 검출하고 위치 확인하기 위해(발견되는지 그리고 어디에서 발견되는지), 후보 엘리먼트의 내용을 파싱할 수 있다. 차후에, 후보 엘리먼트는 데이터 분류 장치에 의해 기본 데이터 엘리먼트 또는 파생 엘리먼트 중 어느 하나로 변환되고, 분류된 파일에 엘리먼트로서 배치된다. 이 엘리먼트에서 발견된 키워드들에 대한 역 인덱스가 분류된 파일 내의 이 엘리먼트에 대한 역참조들을 사용해 업데이트될 수 있다. 엘리먼트에서 발견된 각각의 키워드에 대해, 이 엘리먼트에 대한 역참조를 분류된 파일에 포함시키기 위해 역 인덱스가 업데이트된다. 분류된 파일 내의 엘리먼트들이 무손실 축소된 표현으로 되어 있다는 것을 상기한다.
키워드를 사용하여 데이터의 탐색 쿼리를 할 때, 이 키워드를 포함하는 분류된 파일 내의 엘리먼트들에 대한 역참조들을 발견하고 추출하기 위해 역 인덱스가 조회(consult)된다. 이러한 엘리먼트에 대한 역참조를 사용하여, 엘리먼트의 무손실 축소된 표현이 검색될 수 있고, 엘리먼트가 재구성될 수 있다. 재구성된 엘리먼트는 이어서 탐색 쿼리의 결과로서 제공될 수 있다.
역 인덱스가 재구성된 엘리먼트에서의 키워드의 오프셋을 위치 확인해주는 정보를 포함하도록 향상될 수 있다. 후보 엘리먼트에서 검출된 각각의 키워드의 오프셋 또는 위치가 파서에 의해 결정될 수 있고 따라서, 분류된 파일 내의 엘리먼트에 대한 역참조가 역 인덱스에 배치될 때, 이 정보가 또한 역 인덱스에 기록될 수 있다는 것에 유의한다. 탐색 쿼리 시에, 관련성 있는 키워드를 포함하는 분류된 파일 내의 엘리먼트에 대한 역참조를 검색하기 위해 역 인덱스가 조회된 후에, 그리고 엘리먼트가 재구성된 후에, 키워드가 입력 데이터에서 어디에 존재하는지를 정확히 찾아내기(pinpoint) 위해, (원래의 입력 후보 엘리먼트와 동일한) 재구성된 엘리먼트에서의 키워드의 기록된 오프셋 또는 위치가 사용될 수 있다.
도 15는 키워드들에 기초한 탐색을 용이하게 하는 역 인덱스를 예시하고 있다. 각각의 키워드에 대해, 역 인덱스는 값들의 쌍들 - 첫 번째 값은 키워드를 포함하는 분류된 파일 내의 무손실 축소된 엘리먼트에 대한 역참조이고, 두 번째 값은 재구성된 엘리먼트에서의 키워드의 오프셋임 - 을 포함한다.
차원들과 키워드들 간의 차이를 언급하는 것이 중요하다. 차원들은 주축들로서 사용되고, 이 주축들을 따라 시브에서 기본 데이터 엘리먼트들을 조직화한다는 것에 유의한다. 차원들은 데이터 내의 각각의 엘리먼트의 스켈레탈 데이터 구조를 형성한다. 차원들은 들어오는 데이터의 구조에 대한 지식에 기초하여 선언된다. 생성되는 임의의 파생 엘리먼트가 대응하는 차원들 각각에 대한 필드들의 값들에 기본 데이터 엘리먼트와 정확히 동일한 내용을 가져야만 하도록 파생기가 제약된다. 키워드들에 대해, 이 속성들이 유효하지 않다. 키워드들이 심지어 데이터에 존재해야 한다는 사전 요구사항(a priori requirement)도 없고, 기본 데이터 저장소가 키워드들에 기초하여 조직화될 필요도 없으며, 파생기가 키워드들을 포함하는 내용을 수반하는 파생들과 관련하여 제약되지도 않는다. 파생기는, 필요한 경우, 키워드들의 값들을 수정하는 것에 의해 기본 데이터 엘리먼트로부터 파생물을 자유롭게 생성한다. 키워드들은 입력 데이터를 스캔할 때 발견되는 경우 간단히 기록되고, 역 인덱스가 업데이트되며, 따라서 키워드들에 기초한 내용 연관 탐색 시에, 키워드들이 위치확인될 수 있다.
장치는 키워드들의 목록에 대한 업데이트들을 가능하게 할 수 있다. 무손실 축소된 형태로 저장된 데이터에 대한 어떤 변경들도 없이 키워드들이 추가될 수 있다. 새로운 키워드들이 추가될 때, 새로운 들어오는 데이터가 업데이트된 키워드 목록과 대조하여 파싱되고, 역 인덱스가 업데이트될 수 있으며, 들어오는 데이터는 차후에 무손실 축소된 형태로 저장된다. (무손실 축소된 형태로 이미 저장되어 있는) 기존의 데이터가 새로운 키워드들과 대조하여 인덱싱될 필요가 있는 경우, 장치는 분류된 파일들(한 번에 하나 이상의 분류된 파일, 또는 한 번에 하나의 무손실 축소된 데이터 로트)을 점차적으로 판독하고, (무손실 축소된 저장된 데이터를 방해하지 않고) 원래의 파일들을 재구성하며, 역 인덱스를 업데이트하기 위해 재구성된 파일들을 파싱할 수 있다. 이 동안 내내, 데이터 리포지토리 전체는 계속하여 무손실 축소된 형태로 저장된 채로 있을 수 있다.
도 16a는 도 14a에 도시된 스키마의 일 변형인 스키마 선언을 예시하고 있다. 도 16a에서의 스키마는 2차 차원의 선언(1609) 및 키워드들의 목록(1610)을 포함한다. 도 16b는, 파싱되어 선언된 1차 차원들에 기초한 이름들을 갖는 후보 엘리먼트들의 세트로 변환되는, 구조 설명(1602)에 기술된 구조를 갖는 입력 데이터 세트 (1611)의 일 예를 예시하고 있다. 후보 엘리먼트들은 분류된 파일(1613) 내의 엘리먼트들로 변환된다. 2차 차원 "PROD_ID"의 선언은 후보 엘리먼트 58이 기본 데이터 엘리먼트 "PROD_ID=348를 갖는 NIKESHOELAHJUN"로부터 파생될 수 없도록 파생기에 제약을 부과하고, 따라서 하나의 부가의 기본 데이터 엘리먼트 "PROD_ID=349를 갖는 NIKESHOELAHJUN"가 기본 데이터 저장소에 생성된다. 입력 데이터 세트가 도 14b에 도시된 것과 동일하지만, 분류의 결과는 7개의 분류된 엘리먼트들 및 6개의 기본 데이터 엘리먼트들을 산출하는 것이다. 도 16c는, 분류 프로세스의 결과로서 생성된, 분류된 파일, 마스터 트리, 및 기본 데이터 엘리먼트들을 도시하고 있다.
도 16d는 2차 차원 "PROD_ID"에 대해 생성된 보조 트리를 예시하고 있다. 특정 PROD_ID 값을 갖는 이 트리를 순회하는 것은 그 특정 PROD_ID를 갖는 기본 데이터 엘리먼트들에 이른다. 예를 들어, PROD_ID = 251을 갖는 기본 데이터 엘리먼트들을 요청하는, 쿼리 FetchPDEs (Dimension 5, 251), 또는 대안적으로 쿼리 FetchPDEs (PROD_ID, 251)는 기본 데이터 엘리먼트 WILSBALLLAHNOV를 산출한다.
도 16e는 도 16a의 구조(1610)에 선언된 3개의 키워드들에 대해 생성된 역 인덱스(키워드들에 대한 역 인덱스(1631)라고 부기됨)를 예시하고 있다. 이 키워드들은 FEDERER,LAVER, 및 SHARAPOVA이다. 입력 데이터 세트(1611)를 파싱하고 소비한 후에 역 인덱스가 업데이트된다. 쿼리 FetchDistilledElements (Keyword, Federer)는 엘리먼트 2, 엘리먼트 3, 및 엘리먼트 58을 반환하기 위해 (마스터 트리 또는 보조 트리가 아니라) 역 인덱스를 이용할 것이다.
도 17은 내용 연관 데이터 검색을 위해 향상된 전체적인 장치의 블록도를 도시하고 있다. 내용 연관 데이터 검색 엔진(1701)은 스키마(1704) 또는 데이터에 대한 차원들을 포함하는 구조 정의들을 데이터 분류 장치에게 제공한다. 내용 연관 데이터 검색 엔진(1701)은 또한 키워드 목록들(1705)을 장치에게 제공한다. 내용 연관 데이터 검색 엔진(1701)은 분류 장치로부터의 데이터의 탐색 및 검색을 위해 쿼리들(1702)을 발행하고, 쿼리들의 결과들을 결과들(1703)로서 수신한다. 파생기(110)는 파생물을 생성할 때 차원들의 위치들에 있는 내용의 수정을 금지하기 위해 차원들의 선언들을 인식하도록 향상된다. 리프 노드 데이터 구조 내의 엔트리들로부터 분류된 파일들 내의 엘리먼트들로의 역참조들이 기본 데이터 시브(106) 내의 리프 노드 데이터 구조들에 저장된다는 것에 유의한다. 마찬가지로, 보조 인덱스들이 또한 기본 데이터 시브(106)에 저장된다. 엘리먼트가 분류된 데이터에 기입될 때, 역참조(1709)를 사용해 파생기(110)에 의해 업데이트되는 역 인덱스(1707)가 또한 도시되어 있다. 이 내용 연관 데이터 검색 엔진은 다른 애플리케이션들(분석, 데이터 웨어하우징, 및 데이터 분석 애플리케이션들 등)과 상호작용하여, 실행된 쿼리들의 결과들을 그 애플리케이션들에게 제공한다.
요약하면, 향상된 데이터 분류 장치는 무손실 축소된 형태로 저장된 데이터에 대한 강력한 다차원 내용 연관 탐색 및 검색을 가능하게 한다.
오디오 및 비디오 데이터의 무손실 축소의 목적들을 위해 데이터 분류™ 장치가 이용될 수 있다. 이 방법에 의해 달성되는 데이터 축소는 내용 연관 시브에 존재하는 기본 데이터 엘리먼트들로부터 오디오 및 비디오 데이터의 컴포넌트들을 파생시키는 것에 의해 달성된다. 이러한 목적들을 위한 방법의 응용들이 이제부터 기술될 것이다.
도 18a 및 도 18b는 MPEG 1, 레이어 3 표준(MP3라고도 지칭됨)에 따른 오디오 데이터의 압축 및 압축해제를 위한 인코더 및 디코더의 블록 다이어그램을 도시하고 있다. MP3는 들어오는 오디오를 압축하기 위해 손실 및 무손실 데이터 축소 기법들의 조합을 사용하는 디지털 오디오에 대한 오디오 코딩 포맷이다. 이는 CD(Compact Disc) 오디오를 1.4Mbps로부터 128Kbps로 떨어뜨려 압축해낸다. MP3는 대부분의 사람들의 인간 귀로는 지각가능하지 않을 오디오의 컴포넌트들을 억제(suppress)하기 위해 인간 귀의 한계들을 이용한다. 이것을 달성하기 위해, 오디오 데이터 스니펫(snippet of audio data)의 크기를 손실있게 그러나 지각가능하지 않게 축소시키는, 지각 코딩(Perceptual Coding) 기법들이라고 통칭되는 한 세트의 기법들이 이용된다. 지각 코딩 기법들은 손실이 있으며, 이 단계들 동안 손실된 정보는 회복될 수 없다. 이 지각 코딩 기법들은, 이 문서에서 앞서 기술된 무손실 데이터 축소 기법인, 허프만 코딩(Huffman Coding)에 의해 보완된다.
MP3에서, 들어오는 오디오 스트림은, 각각이 프레임 헤더 및 압축된 오디오 데이터를 포함하는, 몇 개의 작은 데이터 프레임의 시퀀스로 압축된다. 원래의 오디오 스트림이 오디오 스니펫들의 시퀀스를 생성하기 위해 주기적으로 샘플링되고, MP3 데이터 프레임들의 시퀀스를 생성하기 위해 오디오 스니펫들의 시퀀스가 이어서 지각 코딩 및 허프만 코딩을 이용하여 압축된다. 지각 코딩 및 허프만 코딩 기법들 둘 다가 오디오 데이터의 각각의 스니펫 내에서 로컬적으로 적용된다. 허프만 코딩 기법이 오디오 스니펫 내에서 로컬적으로는 중복성(redundancy)을 활용(exploit)하지만 오디오 스트림에 걸쳐 전역적으로는 그렇지 않다. 따라서 MP3 기법들이 전역적으로는 - 단일 오디오 스트림에 걸쳐서도 다수의 오디오 스트림 간에도 - 중복성을 활용하지 않는다. 이것은 MP3가 달성할 수 있는 것을 넘어서는 추가적 데이터 축소를 위한 기회를 나타낸다.
각각의 MP3 데이터 프레임은 26ms의 오디오 스니펫을 나타낸다. 각각의 프레임은 1152개의 샘플을 저장하고, 각각이 576개의 샘플을 포함하는, 2개의 그래뉼(granule)로 세분된다. 도 18a에서의 인코더 블록 다이어그램에서 알 수 있는 바와 같이, 디지털 오디오 신호의 인코딩 동안, 시간 도메인 샘플들이 취해지고, 필터링 프로세스를 통해 그리고 MDCT(Modified Discrete Cosine Transform)의 적용에 의해 576개의 주파수 도메인 샘플로 변환된다. 샘플들에 포함된 정보의 양을 축소시키기 위해 지각 코딩 기법들이 적용된다. 지각 코딩의 출력은 주파수 라인(frequency line)당 축소된 정보를 포함하는 비균일 양자화된 그래뉼(Non-uniformly Quantized Granule)(1810)이다. 그래뉼들의 크기를 추가로 축소시키기 위해 허프만 코딩이 이어서 사용된다. 각각의 그래뉼의 576개의 주파수 라인은 그들의 인코딩을 위해 다수의 허프만 테이블을 사용할 수 있다. 허프만 인코딩의 출력은 스케일 인자들, 허프만 인코딩된 비트들, 및 보조 데이터(ancillary data)를 포함하는 프레임의 메인 데이터 컴포넌트(main Data component)이다. (다양한 필드들을 특징짓고 위치확인하는 데 사용되는) 부가 정보(side information)가 MP3 헤더에 배치된다. 인코딩의 출력은 MP3 인코딩된 오디오 신호이다. 128Kbps의 비트레이트에서, MP3 프레임의 크기는 417 또는 418 바이트이다.
도 18c는 MP3 데이터에 대해 데이터 축소를 수행하기 위해 도 1a에 처음으로 도시된 데이터 분류 장치가 어떻게 향상될 수 있는지를 도시하고 있다. 도 18c에 예시된 방법은 MP3 데이터를 후보 엘리먼트들로 인수분해하고 엘리먼트 자체보다 더 미세한 그레인(grain)으로 엘리먼트들 사이의 중복성을 활용한다. MP3 데이터의 경우, 그래뉼이 엘리먼트로서 선택된다. 일 실시예에서, (도 18a에 도시된 바와 같은) 비균일 양자화된 그래뉼(1810)이 엘리먼트로서 취급될 수 있다. 다른 실시예에서, 엘리먼트는 양자화된 주파수 라인들(1854)과 스케일 인자들(1855)의 연결(concatenation)로 이루어질 수 있다.
도 18c에서, MP3 인코딩된 데이터의 스트림(1862)이 데이터 분류 장치(1863)에 의해 수신되고, 무손실 축소된 형태로 저장되는, 분류된 MP3 데이터의 스트림(1868)으로 축소된다. 들어오는 MP3 인코딩된 데이터의 스트림(1862)은 MP3 헤더와 MP3 데이터의 쌍들의 시퀀스로 이루어져 있다. MP3 데이터는 CRC, 부가 정보, 메인 데이터(Main Data) 및 보조 데이터를 포함한다. 장치에 의해 생성된 나가는 분류된 MP3 데이터는 쌍들의 유사한 시퀀스로 이루어져 있다(각각의 쌍은 무손실 축소된 포맷으로 된 DistMP3 헤더와 그에 뒤따른 엘리먼트 규격임). DistMP3 헤더는 메인 데이터 이외에 원래의 프레임의 컴포넌트들 전부를 포함하며, 즉, MP3 헤더, CRC, 부가 정보, 및 보조 데이터를 포함한다. 이 분류된 MP3 데이터에서의 엘리먼트 필드는 무손실 축소된 형태로 지정된 그래뉼들을 포함한다. 파서/인수분해기(1864)는 양자화된 주파수 라인들(1851) 및 스케일 인자들(1852)(도 18b에 도시됨)을 추출하고 오디오 그래뉼(1865)을 후보 엘리먼트로서 생성하기 위해 들어오는 MP3 인코딩된 스트림의 제1 디코딩을 수행한다(허프만 디코딩을 수행하는 것을 포함함). 파서/인수분해기에 의해 수행되는 제1 디코딩 단계들은 도 18b의 동기화 및 에러 체크(1851), 허프만 디코딩(1852), 및 스케일 인자 디코딩(1853)의 단계들과 동일하다 - 이 단계들은 임의의 표준 MP3 디코더에서 수행되며 기존의 기술에 공지되어 있다. 기본 데이터 시브(1866)는, 내용 연관 방식으로 액세스되도록 조직화된, 기본 데이터 엘리먼트들로서 그래뉼들을 포함한다. 그래뉼을 기본 데이터 시브에 설치하는 동안, 그래뉼이 시브에서 어디에 설치되어야 하는지를 확인하고 시브의 적절한 리프 노드에 있는 스켈레탈 데이터 구조 및 메타데이터를 업데이트하기 위해 그래뉼의 내용이 사용된다. 이어서, 그래뉼이 MP3 데이터에 존재할 때 그가 차지한 풋프린트 이하의 풋프린트를 사용하여 시브에 저장될 수 있도록 그래뉼이 허프만 코딩되고 압축된다. 시브 내의 그래뉼이 파생기에 의해 기본 데이터 엘리먼트로서 필요하게 될 때마다, 그래뉼은 파생기에 제공되기 전에 압축해제된다. 데이터 분류 장치를 사용하여, 들어오는 오디오 그래뉼들이 시브에 존재하는 (역시 오디오 그래뉼들인) 기본 데이터 엘리먼트들로부터 파생기(1870)에 의해 파생되고, 그래뉼의 무손실 축소된 표현 또는 분류된 표현이 생성되고 분류된 MP3 데이터(1868)에 배치된다. 그래뉼의 이 분류된 표현이 엘리먼트 필드에 배치되어, MP3 프레임의 메인 데이터 필드에 원래 존재했던 허프만 코딩된 정보를 대체한다. 각각의 엘리먼트 또는 그래뉼의 분류된 표현은 도 1h에 도시된 포맷을 사용하여 인코딩된다 - 분류된 데이터 내의 각각의 엘리먼트는 기본 데이터 엘리먼트(시브 내의 기본 데이터 엘리먼트 또는 기본 그래뉼(Prime Granule)에 대한 참조를 동반함), 또는 파생 엘리먼트(시브 내의 기본 데이터 엘리먼트 또는 기본 그래뉼에 대한 참조와, 참조되는 기본 데이터 엘리먼트로부터 파생 엘리먼트를 생성하는 재구성 프로그램을 동반함)이다. 파생 단계 동안, 파생을 채용하는 것에 대한 문턱값은 축소되는 프레임의 메인 데이터 필드에 존재한 원래의 허프만 코딩된 정보의 크기의 어떤 비율(fraction)로 설정될 수 있다. 따라서, 재구성 프로그램과 기본 데이터 엘리먼트에 대한 참조의 합이 (허프만 코딩된 데이터를 포함한) MP3 인코딩된 프레임의 대응하는 메인 데이터 필드의 크기의 이 비율보다 더 작지 않는 한, 파생이 수락되지 않을 것이다. 재구성 프로그램과 기본 데이터 엘리먼트에 대한 참조의 합이 (허프만 코딩된 데이터를 포함한) 인코딩된 MP3 프레임의 기존의 메인 데이터 필드의 크기의 이 비율보다 더 작은 경우, 파생을 수락하기로 하는 의사결정이 이루어질 수 있다.
앞서 기술된 방법은, 장치에 저장된 다수의 오디오 그래뉼에 걸쳐, 전역적 범위(global scope)로 중복성을 활용하는 것을 가능하게 한다. MP3 인코딩된 데이터 파일들이 분류된 MP3 데이터로 변환되고 무손실 축소된 형태로 저장될 수 있다. 검색될 필요가 있을 때, MP3 인코딩된 데이터(1873)를 재구성하기 위해 (검색기(1871) 및 재구성기(1872)를 이용하는) 데이터 검색 프로세스가 호출될 수 있다. 도 18c에 도시된 장치에서, 재구성기는 원하는 그래뉼을 생성하기 위해 재구성 프로그램을 실행하는 일을 맡고 있다. 재구성기는 MP3 인코딩된 데이터를 생성하는 데 필요한 허프만 코딩 단계(도 18a에 허프만 코딩(1811)으로서 도시됨)를 수행하도록 추가적으로 향상된다. 이 데이터는 이어서 오디오를 재생하기 위해 표준 MP3 디코더에 피드될 수 있다.
이러한 방식으로, MP3 오디오 파일들의 크기를 추가로 축소시키기 위해 데이터 분류 장치가 적합화되고 이용될 수 있다.
기술된 스킴(scheme)의 다른 변형에서, MP3 인코딩된 스트림을 수신할 때, 파서/인수분해기는 메인 데이터 필드 전체를 파생을 위한 후보 엘리먼트로서 또는 기본 데이터 시브에 설치하기 위한 기본 데이터 엘리먼트로서 취한다. 이 변형에서, 엘리먼트들 전부는 계속하여 허프만 코딩된 채로 있을 것이고, 재구성 프로그램들은 이미 허프만 코딩된 엘리먼트들에 대해 동작할 것이다. 데이터 분류 장치의 이 변형은 또한 MP3 오디오 파일들의 크기를 추가로 축소시키기 위해 이용될 수 있다.
이상의 설명은 본 기술분야의 통상의 기술자가 실시예들을 제조 및 사용할 수 있게 하도록 제시되어 있다. 개시된 실시예들에 대한 다양한 수정들이 본 기술분야의 통상의 기술자에게 즉각 명백할 것이며, 본원에 정의되는 일반 원리들은 본 개시내용의 사상 및 범주를 벗어나지 않고 다른 실시예들 및 적용분야들에 적용가능하다. 이와 같이, 본 발명은 도시된 실시예들로 제한되지 않고, 본원에 개시되는 원리들 및 특징들에 부합하는 가장 넓은 범주를 부여받아야 한다.
본 개시내용에 기술된 데이터 구조들 및 코드는 컴퓨터 판독가능 저장 매체 및/또는 하드웨어 모듈 및/또는 하드웨어 장치 상에 부분적으로 또는 전체적으로 저장될 수 있다. 컴퓨터 판독가능 저장 매체는 휘발성 메모리, 비휘발성 메모리, 디스크 드라이브, 자기 테이프, CD(compact disc), DVD(digital versatile disc 또는 digital video disc)와 같은 자기 및 광학 저장 디바이스, 또는 코드 및/또는 데이터를 저장할 수 있는, 현재 공지되어 있거나 나중에 개발되는, 다른 매체를 포함하지만, 이들로 제한되지 않는다. 본 개시내용에 기술된 하드웨어 모듈들 또는 장치들은 ASIC(application-specific integrated circuit), FPGA(field-programmable gate array), 전용 또는 공유 프로세서, 및/또는 현재 공지되어 있거나 나중에 개발되는 다른 하드웨어 모듈들 또는 장치들을 포함하지만, 이들로 제한되지 않는다.
본 개시내용에 기술된 방법들 및 프로세스들은, 부분적으로 또는 전체적으로, 컴퓨터 판독가능 저장 매체 또는 디바이스에 저장된 코드 및/또는 데이터로서 구현될 수 있고, 따라서 컴퓨터 시스템이 코드 및/또는 데이터를 판독하여 실행할 때, 컴퓨터 시스템은 연관된 방법들 및 프로세스들을 수행한다. 방법들 및 프로세스들은 또한, 부분적으로 또는 전체적으로, 하드웨어 모듈들 또는 장치들에서 구현될 수 있고, 따라서 하드웨어 모듈들 또는 장치들은, 활성화될 때, 연관된 방법들 및 프로세스들을 수행한다. 방법들 및 프로세스들이 코드, 데이터, 및 하드웨어 모듈들 또는 장치들의 조합을 사용하여 구현될 수 있다는 것에 유의한다.
본 발명의 실시예들의 전술한 설명은 단지 예시 및 설명을 위해 제공되었다. 이 설명은 전수적인 것으로도 본 발명을 개시된 형태들로 제한하려는 것으로도 의도되어 있지 않다. 그에 따라, 많은 수정들 및 변형들이 본 기술분야의 통상의 기술자들에게 명백할 것이다. 그에 부가하여, 상기 개시내용은 본 발명을 제한하려는 것으로 의도되어 있지 않다.

Claims (34)

  1. 오디오 데이터를 축소시키는 방법으로서,
    오디오 컴포넌트들의 세트를 획득하기 위해 압축된 오디오 데이터를 압축해제하는 단계; 및
    상기 오디오 컴포넌트들의 세트 내의 각각의 오디오 컴포넌트에 대해,
    기본 오디오 컴포넌트들을 그들의 내용들에 기초하여 조직화하는 데이터 구조에 대해 내용 연관 룩업(content-associative lookup)을 수행하기 위해 상기 오디오 컴포넌트를 사용하여 하나 이상의 기본 오디오 컴포넌트를 식별하는 단계, 및
    상기 하나 이상의 기본 오디오 컴포넌트를 사용하여 상기 오디오 컴포넌트를 무손실 축소시키는 단계
    를 포함하는, 방법.
  2. 제1항에 있어서, 상기 압축된 오디오 데이터는 MP3 오디오 데이터이고, 각각의 오디오 컴포넌트는 오디오 신호의 샘플들의 세트를 포함하는 MP3 프레임 또는 그래뉼(granule) 중 어느 하나인, 방법.
  3. 제1항에 있어서, 상기 압축된 오디오 데이터는 오디오 신호의 시간 도메인 표현 또는 상기 오디오 신호의 주파수 도메인 표현 중 어느 하나인, 방법.
  4. 제1항에 있어서, 상기 데이터 구조는 트리 데이터 구조이고, 상기 내용 연관 룩업을 수행하는 것은 상기 트리 데이터 구조에서의 에지(edge)들의 시퀀스를 순회하는 것(traversing)을 포함하며, 상기 에지들의 시퀀스에서의 각각의 에지는 상기 오디오 컴포넌트와 연관된 이름의 한 부분에 대응하고, 상기 트리 데이터 구조에서의 한 노드까지 탐색해가는 데 사용되는 상기 이름의 각각의 부분은 상기 노드에 루트가 있는 서브트리 내에 있는 모든 기본 오디오 컴포넌트들에 존재하는 내용에 대응하는, 방법.
  5. 제1항에 있어서, 상기 하나 이상의 기본 오디오 컴포넌트를 사용하여 상기 오디오 컴포넌트를 무손실 축소시키는 단계는:
    (i) 상기 하나 이상의 기본 오디오 컴포넌트에 대한 참조들의 크기들과 (ii) 재구성 프로그램의 설명의 크기의 합이 상기 오디오 컴포넌트의 크기의 문턱값 비율(threshold fraction) 미만이라고 결정한 것에 응답하여, 상기 오디오 컴포넌트의 제1 무손실 축소된 표현을 생성하는 단계 - 상기 제1 무손실 축소된 표현은 상기 하나 이상의 기본 오디오 컴포넌트 내의 각각의 기본 오디오 컴포넌트에 대한 참조 및 상기 재구성 프로그램의 설명을 포함함 -; 및
    (i) 상기 하나 이상의 기본 오디오 컴포넌트에 대한 상기 참조들의 크기들과 (ii) 상기 재구성 프로그램의 설명의 크기의 상기 합이 상기 오디오 컴포넌트의 크기의 상기 문턱값 비율 이상이라고 결정한 것에 응답하여,
    상기 오디오 컴포넌트를 새로운 기본 오디오 컴포넌트로서 상기 데이터 구조에 추가하는 단계, 및
    상기 오디오 컴포넌트의 제2 무손실 축소된 표현을 생성하는 단계 - 상기 제2 무손실 축소된 표현은 상기 새로운 기본 오디오 컴포넌트에 대한 참조를 포함함 -
    를 포함하는, 방법.
  6. 제5항에 있어서, 상기 재구성 프로그램의 설명은, 상기 하나 이상의 기본 오디오 컴포넌트에 적용될 때, 상기 오디오 컴포넌트가 얻어지게 하는 변환들의 시퀀스를 지정하는, 방법.
  7. 제5항에 있어서, 상기 재구성 프로그램의 설명은 재구성 프로그램 저장소에 저장된 제2 재구성 프로그램에 대한 참조를 포함하고, 상기 제2 재구성 프로그램은, 상기 하나 이상의 기본 오디오 컴포넌트에 적용될 때, 상기 오디오 컴포넌트가 얻어지게 하는 변환들의 시퀀스를 지정하는, 방법.
  8. 제5항에 있어서, 상기 재구성 프로그램의 설명은 재구성 프로그램 저장소에 저장된 제2 재구성 프로그램에 대한 참조 및, 상기 제2 재구성 프로그램에 적용될 때, 상기 하나 이상의 기본 오디오 컴포넌트에 적용될 때 상기 오디오 컴포넌트가 얻어지게 하는 변환들의 시퀀스가 얻어지게 하는 제3 재구성 프로그램의 설명을 포함하는, 방법.
  9. 제1항에 있어서, 상기 데이터 구조에 저장된 상기 기본 오디오 컴포넌트들은 압축 기법을 사용하여 인코딩되는, 방법.
  10. 오디오 데이터를 축소시키는 장치로서,
    오디오 컴포넌트들의 세트를 획득하기 위해 압축된 오디오 데이터를 압축해제하는 수단; 및
    상기 오디오 컴포넌트들의 세트 내의 각각의 오디오 컴포넌트에 대해,
    기본 오디오 컴포넌트들을 그들의 내용들에 기초하여 조직화하는 데이터 구조에 대해 내용 연관 룩업을 수행하기 위해 상기 오디오 컴포넌트를 사용하여 하나 이상의 기본 오디오 컴포넌트를 식별하고,
    상기 하나 이상의 기본 오디오 컴포넌트를 사용하여 상기 오디오 컴포넌트를 무손실 축소시키는 수단
    을 포함하는, 장치.
  11. 제10항에 있어서, 상기 압축된 오디오 데이터는 MP3 오디오 데이터이고, 각각의 오디오 컴포넌트는 오디오 신호의 샘플들의 세트를 포함하는 MP3 프레임 또는 그래뉼 중 어느 하나인, 장치.
  12. 제10항에 있어서, 상기 압축된 오디오 데이터는 오디오 신호의 시간 도메인 표현 또는 상기 오디오 신호의 주파수 도메인 표현 중 어느 하나인, 장치.
  13. 제10항에 있어서, 상기 데이터 구조는 트리 데이터 구조이고, 상기 내용 연관 룩업을 수행하는 것은 상기 트리 데이터 구조에서의 에지들의 시퀀스를 순회하는 것을 포함하며, 상기 에지들의 시퀀스에서의 각각의 에지는 상기 오디오 컴포넌트와 연관된 이름의 한 부분에 대응하고, 상기 트리 데이터 구조에서의 한 노드까지 탐색해가는 데 사용되는 상기 이름의 각각의 부분은 상기 노드에 루트가 있는 서브트리 내에 있는 모든 기본 오디오 컴포넌트들에 존재하는 내용에 대응하는, 장치.
  14. 제10항에 있어서, 상기 하나 이상의 기본 오디오 컴포넌트를 사용하여 상기 오디오 컴포넌트를 무손실 축소시키는 것은:
    (i) 상기 하나 이상의 기본 오디오 컴포넌트에 대한 참조들의 크기들과 (ii) 재구성 프로그램의 설명의 크기의 합이 상기 오디오 컴포넌트의 크기의 문턱값 비율 미만이라고 결정한 것에 응답하여, 상기 오디오 컴포넌트의 제1 무손실 축소된 표현을 생성하는 것 - 상기 제1 무손실 축소된 표현은 상기 하나 이상의 기본 오디오 컴포넌트 내의 각각의 기본 오디오 컴포넌트에 대한 참조 및 상기 재구성 프로그램의 설명을 포함함 -; 및
    (i) 상기 하나 이상의 기본 오디오 컴포넌트에 대한 상기 참조들의 크기들과 (ii) 상기 재구성 프로그램의 설명의 크기의 상기 합이 상기 오디오 컴포넌트의 상기 크기의 상기 문턱값 비율 이상이라고 결정한 것에 응답하여,
    상기 오디오 컴포넌트를 새로운 기본 오디오 컴포넌트로서 상기 데이터 구조에 추가하는 것, 및
    상기 오디오 컴포넌트의 제2 무손실 축소된 표현을 생성하는 것 - 상기 제2 무손실 축소된 표현은 상기 새로운 기본 오디오 컴포넌트에 대한 참조를 포함함 -
    을 포함하는, 장치.
  15. 제14항에 있어서, 상기 재구성 프로그램의 설명은, 상기 하나 이상의 기본 오디오 컴포넌트에 적용될 때, 상기 오디오 컴포넌트가 얻어지게 하는 변환들의 시퀀스를 지정하는, 장치.
  16. 제14항에 있어서, 상기 재구성 프로그램의 설명은 재구성 프로그램 저장소에 저장된 제2 재구성 프로그램에 대한 참조를 포함하고, 상기 제2 재구성 프로그램은, 상기 하나 이상의 기본 오디오 컴포넌트에 적용될 때, 상기 오디오 컴포넌트가 얻어지게 하는 변환들의 시퀀스를 지정하는, 장치.
  17. 제14항에 있어서, 상기 재구성 프로그램의 설명은 재구성 프로그램 저장소에 저장된 제2 재구성 프로그램에 대한 참조 및, 상기 제2 재구성 프로그램에 적용될 때, 상기 하나 이상의 기본 오디오 컴포넌트에 적용될 때 상기 오디오 컴포넌트가 얻어지게 하는 변환들의 시퀀스가 얻어지게 하는 제3 재구성 프로그램의 설명을 포함하는, 장치.
  18. 제10항에 있어서, 상기 데이터 구조에 저장된 상기 기본 오디오 컴포넌트들은 압축 기법을 사용하여 인코딩되는, 장치.
  19. 데이터 블록들을 저장하는 블록 처리 저장 시스템에서 데이터를 무손실 축소시키는 방법으로서,
    동작들의 세트를 수행하는 것에 의해 논리 블록 주소와 연관된 새로운 데이터 블록을 무손실 축소시키는 단계 - 상기 동작들의 세트는:
    기본 데이터 엘리먼트 블록들을 그들의 내용들에 기초하여 조직화하는 데이터 구조에 대해 내용 연관 룩업을 수행하기 위해 상기 새로운 데이터 블록을 사용하여 하나 이상의 기본 데이터 엘리먼트 블록을 식별하는 것, 및
    상기 하나 이상의 기본 데이터 엘리먼트 블록을 사용하여 상기 새로운 데이터 블록을 무손실 축소시킴으로써, 상기 새로운 데이터 블록의 무손실 축소된 표현을 획득하는 것을 포함함 -;
    상기 새로운 데이터 블록의 상기 무손실 축소된 표현을 저장하는 단계; 및
    상기 새로운 데이터 블록의 상기 무손실 축소된 표현과 상기 논리 블록 주소 간의 연관(association)을 저장하는 단계
    를 포함하는, 방법.
  20. 제19항에 있어서, 상기 데이터 구조는 트리 데이터 구조이고, 상기 내용 연관 룩업을 수행하는 것은 상기 트리 데이터 구조에서의 에지들의 시퀀스를 순회하는 것을 포함하며, 상기 에지들의 시퀀스에서의 각각의 에지는 상기 새로운 데이터 블록과 연관된 이름의 한 부분에 대응하고, 상기 트리 데이터 구조에서의 한 노드까지 탐색해가는 데 사용되는 상기 이름의 각각의 부분은 상기 노드에 루트가 있는 서브트리 내에 있는 모든 기본 데이터 엘리먼트 블록들에 존재하는 내용에 대응하는, 방법.
  21. 제19항에 있어서, 상기 방법은, 상기 새로운 데이터 블록의 상기 무손실 축소된 표현에 의해 참조되는 각각의 기본 데이터 엘리먼트 블록과 연관된 기본-데이터-엘리먼트-카운트 필드를 증분시키는 단계를 추가로 포함하는, 방법.
  22. 제19항에 있어서, 상기 새로운 데이터 블록의 상기 무손실 축소된 표현과 상기 논리 블록 주소 간의 상기 연관은 이전 데이터 블록의 무손실 축소된 표현과 상기 논리 블록 주소 간의 연관을 대체하며, 상기 방법은 상기 이전 데이터 블록의 상기 무손실 축소된 표현에 의해 참조되는 각각의 기본 데이터 엘리먼트 블록과 연관된 기본-데이터-엘리먼트-카운트 필드를 감분시키는 단계를 추가로 포함하는, 방법.
  23. 제19항에 있어서, 상기 새로운 데이터 블록의 상기 무손실 축소된 표현은 상기 하나 이상의 기본 데이터 엘리먼트 블록 내의 각각의 기본 데이터 엘리먼트 블록에 대한 참조 및 재구성 프로그램의 설명을 포함하며, 상기 새로운 데이터 블록은 상기 재구성 프로그램을 상기 하나 이상의 기본 데이터 엘리먼트 블록에 적용하는 것에 의해 재구성될 수 있는, 방법.
  24. 제23항에 있어서, 상기 방법은 상기 재구성 프로그램과 연관된 재구성-프로그램-카운트 필드를 증분시키는 단계를 추가로 포함하는, 방법.
  25. 제23항에 있어서, 상기 새로운 데이터 블록의 상기 무손실 축소된 표현과 상기 논리 블록 주소 간의 상기 연관은 이전 데이터 블록의 무손실 축소된 표현과 상기 논리 블록 주소 간의 연관을 대체하며, 상기 방법은 상기 이전 데이터 블록의 상기 무손실 축소된 표현에 의해 참조되는 재구성 프로그램과 연관된 재구성-프로그램-카운트 필드를 감분시키는 단계를 추가로 포함하는, 방법.
  26. 제23항에 있어서, 상기 재구성 프로그램의 설명은, 상기 하나 이상의 기본 데이터 엘리먼트 블록에 적용될 때, 상기 새로운 데이터 블록이 얻어지게 하는 변환들의 시퀀스를 지정하는, 방법.
  27. 데이터 블록들을 저장하는 블록 처리 저장 시스템에서 데이터를 무손실 축소시키는 장치로서,
    동작들의 세트를 수행하는 것에 의해 논리 블록 주소와 연관된 새로운 데이터 블록을 무손실 축소시키는 수단 - 상기 동작들의 세트는:
    기본 데이터 엘리먼트 블록들을 그들의 내용들에 기초하여 조직화하는 데이터 구조에 대해 내용 연관 룩업을 수행하기 위해 상기 새로운 데이터 블록을 사용하여 하나 이상의 기본 데이터 엘리먼트 블록을 식별하는 것, 및
    상기 하나 이상의 기본 데이터 엘리먼트 블록을 사용하여 상기 새로운 데이터 블록을 무손실 축소시킴으로써, 상기 새로운 데이터 블록의 무손실 축소된 표현을 획득하는 것을 포함함 -;
    상기 새로운 데이터 블록의 상기 무손실 축소된 표현을 저장하는 수단; 및
    상기 새로운 데이터 블록의 상기 무손실 축소된 표현과 상기 논리 블록 주소 간의 연관을 저장하는 수단
    을 포함하는, 장치.
  28. 제27항에 있어서, 상기 데이터 구조는 트리 데이터 구조이고, 상기 내용 연관 룩업을 수행하는 것은 상기 트리 데이터 구조에서의 에지들의 시퀀스를 순회하는 것을 포함하며, 상기 에지들의 시퀀스에서의 각각의 에지는 상기 새로운 데이터 블록과 연관된 이름의 한 부분에 대응하고, 상기 트리 데이터 구조에서의 한 노드까지 탐색해가는 데 사용되는 상기 이름의 각각의 부분은 상기 노드에 루트가 있는 서브트리 내에 있는 모든 기본 데이터 엘리먼트 블록들에 존재하는 내용에 대응하는, 장치.
  29. 제27항에 있어서, 상기 새로운 데이터 블록의 상기 무손실 축소된 표현에 의해 참조되는 각각의 기본 데이터 엘리먼트 블록과 연관된 기본-데이터-엘리먼트-카운트 필드를 증분시키는 수단을 추가로 포함하는, 장치.
  30. 제27항에 있어서, 상기 새로운 데이터 블록의 상기 무손실 축소된 표현과 상기 논리 블록 주소 간의 상기 연관은 이전 데이터 블록의 무손실 축소된 표현과 상기 논리 블록 주소 간의 연관을 대체하며, 상기 장치는 상기 이전 데이터 블록의 상기 무손실 축소된 표현에 의해 참조되는 각각의 기본 데이터 엘리먼트 블록과 연관된 기본-데이터-엘리먼트-카운트 필드를 감분시키는 수단을 추가로 포함하는, 장치.
  31. 제27항에 있어서, 상기 새로운 데이터 블록의 상기 무손실 축소된 표현은 상기 하나 이상의 기본 데이터 엘리먼트 블록 내의 각각의 기본 데이터 엘리먼트 블록에 대한 참조 및 재구성 프로그램의 설명을 포함하며, 상기 새로운 데이터 블록은 상기 재구성 프로그램을 상기 하나 이상의 기본 데이터 엘리먼트 블록에 적용하는 것에 의해 재구성될 수 있는, 장치.
  32. 제31항에 있어서, 상기 장치는 상기 재구성 프로그램과 연관된 재구성-프로그램-카운트 필드를 증분시키는 수단을 추가로 포함하는, 장치.
  33. 제31항에 있어서, 상기 새로운 데이터 블록의 상기 무손실 축소된 표현과 상기 논리 블록 주소 간의 상기 연관은 이전 데이터 블록의 무손실 축소된 표현과 상기 논리 블록 주소 간의 연관을 대체하며, 상기 장치는 상기 이전 데이터 블록의 상기 무손실 축소된 표현에 의해 참조되는 재구성 프로그램과 연관된 재구성-프로그램-카운트 필드를 감분시키는 수단을 추가로 포함하는, 장치.
  34. 제31항에 있어서, 상기 재구성 프로그램의 설명은, 상기 하나 이상의 기본 데이터 엘리먼트 블록에 적용될 때, 상기 새로운 데이터 블록이 얻어지게 하는 변환들의 시퀀스를 지정하는, 장치.
KR1020187019557A 2015-12-10 2016-12-09 블록 처리 저장 시스템 상에 저장된 데이터 및 오디오 데이터의 축소 KR20180094004A (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201562265981P 2015-12-10 2015-12-10
US62/265,981 2015-12-10
US201562268496P 2015-12-16 2015-12-16
US62/268,496 2015-12-16
US201562268503P 2015-12-17 2015-12-17
US62/268,503 2015-12-17
PCT/US2016/065892 WO2017100619A1 (en) 2015-12-10 2016-12-09 Reduction of audio data and data stored on a block processing storage system

Publications (1)

Publication Number Publication Date
KR20180094004A true KR20180094004A (ko) 2018-08-22

Family

ID=59013622

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187019557A KR20180094004A (ko) 2015-12-10 2016-12-09 블록 처리 저장 시스템 상에 저장된 데이터 및 오디오 데이터의 축소

Country Status (7)

Country Link
EP (1) EP3387647B1 (ko)
JP (1) JP6846426B2 (ko)
KR (1) KR20180094004A (ko)
CN (1) CN108475508B (ko)
HK (1) HK1257688A1 (ko)
TW (1) TWI720086B (ko)
WO (1) WO2017100619A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10866928B2 (en) 2018-09-10 2020-12-15 Netapp, Inc. Methods for optimized variable-size deduplication using two stage content-defined chunking and devices thereof

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102647585B1 (ko) * 2017-04-28 2024-03-15 아스카바, 인크. 기본 데이터 시브를 사용함에 의한 데이터의 무손실 축소 및 기본 데이터 시브를 사용하여 무손실 축소된 데이터에 대한 다차원 탐색 및 내용 연관 검색의 수행
CN109189399A (zh) * 2018-09-11 2019-01-11 四川长虹电器股份有限公司 一种关于ionic打包压缩及快捷编译的方法
CN113721926A (zh) * 2021-09-09 2021-11-30 中国电信集团系统集成有限责任公司 组织树权限管理方法
CN114238240B (zh) * 2022-02-14 2022-05-27 柏科数据技术(深圳)股份有限公司 一种分布式多集群的数据存储方法、装置及存储介质

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5227788A (en) * 1992-03-02 1993-07-13 At&T Bell Laboratories Method and apparatus for two-component signal compression
US5285498A (en) * 1992-03-02 1994-02-08 At&T Bell Laboratories Method and apparatus for coding audio signals based on perceptual model
JP2505980B2 (ja) * 1993-04-16 1996-06-12 インターナショナル・ビジネス・マシーンズ・コーポレイション 静的辞書作成方法及びコンピュ―タ実行システム
KR100354531B1 (ko) * 1998-05-06 2005-12-21 삼성전자 주식회사 실시간 복호화를 위한 무손실 부호화 및 복호화 시스템
US6507678B2 (en) * 1998-06-19 2003-01-14 Fujitsu Limited Apparatus and method for retrieving character string based on classification of character
JP3526748B2 (ja) * 1998-06-19 2004-05-17 富士通株式会社 文字列探索装置および方法
AU2610701A (en) * 2000-01-03 2001-07-16 Efeckta Technologies Corporation Efficient and lossless conversion for transmission or storage of data
US6657564B2 (en) * 2001-12-13 2003-12-02 International Business Machines Corporation Method and apparatus for compressing data in which dictionary sizes are reduced
US7050965B2 (en) * 2002-06-03 2006-05-23 Intel Corporation Perceptual normalization of digital audio signals
US7842874B2 (en) * 2006-06-15 2010-11-30 Massachusetts Institute Of Technology Creating music by concatenative synthesis
JP5415736B2 (ja) * 2008-10-01 2014-02-12 キヤノン株式会社 文書処理システム及びその制御方法、プログラム、記憶媒体
TWI460588B (zh) * 2009-07-17 2014-11-11 Toshiba Kk Memory management device and memory information processing device
US8380681B2 (en) * 2010-12-16 2013-02-19 Microsoft Corporation Extensible pipeline for data deduplication
EP2477188A1 (en) * 2011-01-18 2012-07-18 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Encoding and decoding of slot positions of events in an audio signal frame
US9514057B2 (en) * 2013-12-04 2016-12-06 Sandisk Technologies Llc Storage module and method for managing logical-to-physical address mapping

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10866928B2 (en) 2018-09-10 2020-12-15 Netapp, Inc. Methods for optimized variable-size deduplication using two stage content-defined chunking and devices thereof

Also Published As

Publication number Publication date
CN108475508B (zh) 2023-08-15
JP2019502154A (ja) 2019-01-24
TW201735009A (zh) 2017-10-01
WO2017100619A1 (en) 2017-06-15
EP3387647A4 (en) 2019-11-27
TWI720086B (zh) 2021-03-01
HK1257688A1 (zh) 2019-10-25
EP3387647A1 (en) 2018-10-17
EP3387647B1 (en) 2024-05-01
JP6846426B2 (ja) 2021-03-24
CN108475508A (zh) 2018-08-31

Similar Documents

Publication Publication Date Title
US11947494B2 (en) Organizing prime data elements using a tree data structure
JP6596102B2 (ja) コンテンツ連想シーブに存在している基本データエレメントからデータを導出することによるデータの無損失削減
KR102647585B1 (ko) 기본 데이터 시브를 사용함에 의한 데이터의 무손실 축소 및 기본 데이터 시브를 사용하여 무손실 축소된 데이터에 대한 다차원 탐색 및 내용 연관 검색의 수행
JP6846426B2 (ja) 音声データおよびブロック処理ストレージシステム上に記憶されたデータの削減
US20230198549A1 (en) Exploiting locality of prime data for efficient retrieval of data that has been losslessly reduced using a prime data sieve
JP6726690B2 (ja) 基本データシーブを用いて無損失削減されたデータに対する多次元検索、コンテンツ連想的な取出し、ならびにキーワードベースの検索および取出しの実行
TWI816954B (zh) 用於重建無損地縮減的資料塊的序列的方法和設備,用於確定主要資料元件的元資料的方法和設備,及儲存媒體

Legal Events

Date Code Title Description
E902 Notification of reason for refusal