KR20200121761A - Using predicates in conditional transcoder for column store - Google Patents

Using predicates in conditional transcoder for column store Download PDF

Info

Publication number
KR20200121761A
KR20200121761A KR1020200046258A KR20200046258A KR20200121761A KR 20200121761 A KR20200121761 A KR 20200121761A KR 1020200046258 A KR1020200046258 A KR 1020200046258A KR 20200046258 A KR20200046258 A KR 20200046258A KR 20200121761 A KR20200121761 A KR 20200121761A
Authority
KR
South Korea
Prior art keywords
data
dictionary
input
encoding
chunk
Prior art date
Application number
KR1020200046258A
Other languages
Korean (ko)
Inventor
기양석
이호빈
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US16/820,675 external-priority patent/US11184021B2/en
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20200121761A publication Critical patent/KR20200121761A/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/126Character encoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/151Transformation
    • G06F40/157Transformation using dictionaries or tables
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

Disclosed is a storage device. The storage device can include a storage for input encoding data. A controller can handle read requests and write requests from a host computer for data in a storage. An in-storage computer (ISC) controller can receive attributes to be applied to input encoded data from the host computer. A transcoder includes an index mapper for mapping an input dictionary to an output dictionary, wherein one entry in the input dictionary is mapped to one entry in the output dictionary, and other entries in the input dictionary are mapped to ″don′t care″ entries in the output dictionary. Therefore, the speed and efficiency of data transmission between the storage device and a host can be increased.

Description

칼럼 저장을 위한 조건부 트랜스코더에서의 속성 사용{USING PREDICATES IN CONDITIONAL TRANSCODER FOR COLUMN STORE}Attribute usage in conditional transcoder for column storage {USING PREDICATES IN CONDITIONAL TRANSCODER FOR COLUMN STORE}

본 발명은 일반적으로 스토리지 장치에 관한 것으로, 보다 구체적으로는 스토리지 장치 내의 데이터에 대한 트랜스코딩에 관한 것이다.TECHNICAL FIELD The present invention relates generally to storage devices, and more particularly, to transcoding of data in a storage device.

솔리드 스테이트 드라이브(Solid State Drive: 이하, SSD)와 같은 스토리지 장치는 비교적 많은 양의 데이터를 저장할 수 있다. 호스트 프로세서는 SSD로부터 데이터에 대한 동작을 수행하도록 데이터를 요청할 수 있다. 이 데이터를 호스트 프로세서로 전송하려면 호스트 프로세서와 SSD를 연결하는 특정 아키텍처에 따라 비교적 상당한 시간이 필요할 수 있다. 예를 들면, 호스트 프로세서와 SSD가 4-레인의 3세대 PCIe(Peripheral Component Interconnect Express)를 사용하여 연결된 경우, SSD와 호스트 프로세서 간에 전달될 수 있는 최대 데이터 양은 초당 약 4GB이다.A storage device such as a solid state drive (SSD) can store a relatively large amount of data. The host processor may request data from the SSD to perform an operation on the data. Transferring this data to the host processor can take a relatively significant amount of time, depending on the specific architecture connecting the host processor and the SSD. For example, if the host processor and the SSD are connected using a 4-lane third-generation Peripheral Component Interconnect Express (PCIe), the maximum amount of data that can be transferred between the SSD and the host processor is about 4 GB per second.

호스트로 전송되는 데이터의 양을 줄이고, 칼럼 포맷(columnar format)의 이점을 활용할 필요성이 대두된다. There is a need to reduce the amount of data transmitted to the host and take advantage of the columnar format.

본 발명의 목적은 스토리지 장치와 호스트 간의 데이터 전송의 속도 및 효율을 높이는 장치 및 방법을 제공하는데 있다.An object of the present invention is to provide an apparatus and method for increasing the speed and efficiency of data transmission between a storage device and a host.

본 발명의 실시 예에 따른 스토리지 장치는, 입력 인코딩 데이터를 저장하기 위한 스토리지, 호스트 컴퓨터로부터의 상기 스토리지에 대한 읽기 요청 및 쓰기 요청을 처리하는 컨트롤러, 상기 호스트 컴퓨터로부터 제공되는 상기 스토리지에 저장된 상기 입력 인코딩 데이터에 적용되는 속성을 수신하는 인스토리지 컴퓨터(ISC) 컨트롤러, 그리고 상기 입력 인코딩 데이터의 입력 사전을 출력 사전으로 매핑하기 위한 인덱스 매퍼(Mapper)를 포함하는 트랜스코더를 포함하되, 상기 입력 사전은 적어도 하나의 제 1 엔트리 및 적어도 하나의 제 2 엔트리를 포함하고, 상기 적어도 하나의 제 1 엔트리는 상기 출력 사전의 적어도 하나의 제 3 엔트리에 매핑되며, 상기 적어도 하나의 제 2 엔트리는 상기 출력 사전의 "무정의(don't care)" 엔트리에 매핑된다.A storage device according to an embodiment of the present invention includes a storage for storing input encoded data, a controller that processes a read request and a write request for the storage from a host computer, and the input stored in the storage provided from the host computer. A transcoder including an Instorage Computer (ISC) controller for receiving an attribute applied to the encoded data, and an index mapper for mapping an input dictionary of the input encoded data to an output dictionary, wherein the input dictionary At least one first entry and at least one second entry, the at least one first entry is mapped to at least one third entry of the output dictionary, and the at least one second entry is the output dictionary Is mapped to the "don't care" entry of.

본 발명의 실시 예에 따른 방법은, 트랜스코더에서, 입력 인코딩 데이터에 적용할 속성을 수신하는 단계, 상기 입력 인코딩 데이터에 대한 입력 사전에 액세스하는 단계, 상기 입력 사전에서 상기 속성에 의해 커버되는 적어도 하나의 제 1 엔트리와, 상기 입력 사전에서 상기 속성에 의해 커버되지 않은 적어도 하나의 제 2 엔트리를 식별하는 단계, 상기 입력 사전에서 상기 속성에 의해 커버되지 않는 상기 적어도 하나의 제 2 엔트리를 배제하는 출력 사전과, 적어도 하나의 제 3 엔트리 및 "무정의" 엔트리를 포함하는 트랜스코딩 사전을 생성하는 단계, 그리고 상기 트랜스코더에 의해, 상기 입력 사전의 상기 적어도 하나의 제 1 엔트리를 상기 출력 사전의 상기 적어도 하나의 제 3 엔트리에 매핑하고, 상기 입력 사전에서 상기 속성에 의해 커버되지 않는 상기 적어도 하나의 제 2 엔트리를 상기 출력 사전의 "무정의" 엔트리에 맵핑하는 사전 맵을 생성하는 단계를 포함한다.A method according to an embodiment of the present invention includes, in a transcoder, receiving an attribute to be applied to input encoded data, accessing an input dictionary for the input encoded data, at least covered by the attribute in the input dictionary. Identifying one first entry and at least one second entry not covered by the attribute in the input dictionary, excluding the at least one second entry not covered by the attribute in the input dictionary Generating a transcoding dictionary comprising an output dictionary and at least one third entry and an "undefined" entry, and by the transcoder, the at least one first entry of the input dictionary Mapping to the at least one third entry, and generating a dictionary map for mapping the at least one second entry not covered by the attribute in the input dictionary to a "undefined" entry in the output dictionary. do.

본 발명의 실시 예에 따른 명령어들을 저장하는 비일시적 스토리지 매체를 포함하는 상품에 있어서, 상기 명령어들이 머신에 의해 실행될 때, 트랜스코더에서, 입력 인코딩 데이터에 적용하기 위한 속성을 수신하는 단계, 상기 입력 인코딩 데이터가 저장된 입력 사전을 액세스하는 단계, 상기 입력 사전에서 상기 속성에 의해 커버되는 적어도 하나의 제 1 엔트리와, 상기 입력 사전에서 상기 속성에 의해 커버되지 않은 적어도 하나의 제 2 엔트리를 식별하는 단계, 상기 입력 사전에서 상기 속성에 의해 커버되지 않는 상기 적어도 하나의 제 2 엔트리를 배제하는 출력 사전과, 적어도 하나의 제 3 엔트리 및 "무정의" 엔트리를 포함하는 트랜스코딩 사전을 생성하는 단계, 그리고 상기 트랜스코더에 의해, 상기 입력 사전의 상기 적어도 하나의 제 1 엔트리를 상기 출력 사전의 상기 적어도 하나의 제 3 엔트리에 매핑하고, 상기 입력 사전에서 상기 속성에 의해 커버되지 않는 상기 적어도 하나의 제 2 엔트리를 상기 출력 사전의 "무정의" 엔트리에 맵핑하는 사전 맵을 생성하는 단계를 수행한다.In a product including a non-transitory storage medium storing instructions according to an embodiment of the present invention, when the instructions are executed by a machine, receiving, at a transcoder, an attribute for applying to input encoded data, the input Accessing an input dictionary in which encoded data is stored, identifying at least one first entry in the input dictionary covered by the attribute and at least one second entry in the input dictionary not covered by the attribute , Generating a transcoding dictionary including an output dictionary excluding the at least one second entry not covered by the attribute from the input dictionary, at least one third entry and a "undefined" entry, and By the transcoder, mapping the at least one first entry of the input dictionary to the at least one third entry of the output dictionary, and the at least one second not covered by the attribute in the input dictionary A step of generating a dictionary map is performed that maps an entry to a "undefined" entry of the output dictionary.

상술한 특징에 따른 본 발명의 트랜스코더를 사용하는 경우, 스토리지 장치와 호스트 장치는 상호 불필요한 트랜잭션을 최소화하여 데이터 전송 속도 및 성능을 향상시킬 수 있다.When the transcoder of the present invention according to the above-described features is used, the storage device and the host device can minimize unnecessary transactions, thereby improving data transmission speed and performance.

도 1은 본 발명의 실시 예에 따라, 인코딩 데이터의 트랜스코딩을 지원할 수 있는 SSD (Solid State Drive)와 같은 스토리지 장치를 포함하는 시스템을 보여준다.
도 2는 도 1의 기계의 일부 추가 세부 사항을 보여준다.
도 3은 동일한 데이터를 상이한 접근 방식으로 교환하는 도 1의 스토리지 장치 및 도 1의 프로세서를 보여준다.
도 4는 본 발명의 실시 예에 따른 트랜스코딩된 데이터를 교환하는 도 1의 스토리지 장치 및 도 1의 프로세서를 보여준다.
도 5는 본 발명의 실시 예에 따른 도 1의 스토리지 장치의 세부 사항을 보여준다.
도 6은 본 발명의 실시 예에 따른 도 4의 트랜스코더의 세부 사항을 보여준다.
도 7은 본 발명의 실시 예에 따라 입력 인코딩 데이터를 청크들로 분리하는 도 6의 스트림 스플리터를 보여준다.
도 8은 본 발명의 실시 예에 따라 입력 사전을 출력 사전에 매핑하는 도 6의 인덱스 매퍼를 보여준다.
도 9는 칼럼 포맷으로 저장된 예시적인 파일을 보여준다.
도 10은 본 발명의 실시 예에 따라, 칼럼 포맷으로 저장된 데이터에 대한 트랜스코딩을 구현하는 도 1의 스토리지 장치를 보여준다.
도 11은 본 발명의 실시 예에 따라 칼럼 포맷으로 저장된 데이터에 대한 트랜스코딩을 구현하는 도 10의 칼럼 청크 프로세서를 보여준다.
도 12a 내지 12c는 본 발명의 실시 예에 따른 데이터를 트랜스코딩하기 위한 도 4 내지 도 6의 트랜스코더의 예시적 동작에 대한 흐름도이다.
도 13은 입력 인코딩 데이터를 청크들로 분리하기 위한 도 6의 스트림 스플리터에 대한 예시적인 절차를 보여주는 흐름도이다.
도 14a 내지 14b는 본 발명의 실시 예에 따라 칼럼 포맷으로 저장된 데이터를 트랜스코딩하기 위한 도 10의 칼럼 청크 프로세서 그리고/또는 도 4의 트랜스코더의 예시적인 절차를 보여주는 흐름도이다.
도 15는 본 발명의 실시 예에 따른 입력 사전을 출력 사전에 매핑하기 위한 도 6의 인덱스 매퍼의 예시적인 절차를 보여주는 흐름도이다.
도 16a 내지 도 16b는 도 1의 호스트 컴퓨터로부터 수신된 속성을 관리하고, 트랜스코딩된 데이터에 대한 가속 기능을 잠재적으로 수행하기 위한 도 10의 인스토리지 컴퓨터 컨트롤러에 대한 예시적인 절차를 보여주는 흐름도들이다.
1 illustrates a system including a storage device such as a solid state drive (SSD) capable of supporting transcoding of encoded data according to an embodiment of the present invention.
Fig. 2 shows some additional details of the machine of Fig. 1;
3 shows the storage device of FIG. 1 and the processor of FIG. 1 exchanging the same data in different approaches.
4 illustrates the storage device of FIG. 1 and the processor of FIG. 1 exchanging transcoded data according to an embodiment of the present invention.
5 shows details of the storage device of FIG. 1 according to an embodiment of the present invention.
6 shows details of the transcoder of FIG. 4 according to an embodiment of the present invention.
7 is a view of the stream splitter of FIG. 6 for dividing input encoded data into chunks according to an embodiment of the present invention.
8 shows the index mapper of FIG. 6 for mapping an input dictionary to an output dictionary according to an embodiment of the present invention.
9 shows an exemplary file stored in a column format.
10 illustrates the storage device of FIG. 1 implementing transcoding of data stored in a column format according to an embodiment of the present invention.
FIG. 11 is a view of the column chunk processor of FIG. 10 implementing transcoding of data stored in a column format according to an embodiment of the present invention.
12A to 12C are flowcharts illustrating exemplary operations of the transcoder of FIGS. 4 to 6 for transcoding data according to an embodiment of the present invention.
13 is a flowchart showing an exemplary procedure for the stream splitter of FIG. 6 for separating input encoded data into chunks.
14A to 14B are flowcharts illustrating exemplary procedures of the column chunk processor of FIG. 10 and/or the transcoder of FIG. 4 for transcoding data stored in a column format according to an embodiment of the present invention.
15 is a flowchart showing an exemplary procedure of the index mapper of FIG. 6 for mapping an input dictionary to an output dictionary according to an embodiment of the present invention.
16A-16B are flow charts illustrating exemplary procedures for the Instore computer controller of FIG. 10 for managing attributes received from the host computer of FIG. 1 and potentially performing an acceleration function on transcoded data.

본 발명의 기술적 사상의 실시 예들이 참조되며, 이들의 예들이 첨부된 도면들에 도시된다. 후술되는 상세한 설명에서, 다양한 특정한 상세들이 본 발명의 기술적 사상의 충분한 이해를 돕기 위하여 제공된다. 그러나 이 분야에 통상적인 기술을 가진 자들은 이러한 특정한 상세들 없이도 본 발명의 기술적 사상을 구현할 수 있다. 다른 예들로서, 잘 알려진 방법들, 절차들, 구성 요소들, 회로들, 그리고 네트워크들은 실시 예들의 측면들을 불필요하게 모호하게 하지 않기 위해 상세하게 설명되지 않는다.Reference is made to embodiments of the technical idea of the present invention, and examples thereof are shown in the accompanying drawings. In the detailed description to be described later, various specific details are provided to aid in a sufficient understanding of the technical idea of the present invention. However, those of ordinary skill in this field can implement the technical idea of the present invention without these specific details. As other examples, well-known methods, procedures, components, circuits, and networks have not been described in detail so as not to unnecessarily obscure aspects of the embodiments.

여기에서 제1, 제2 등과 같은 용어들이 다양한 원소들을 설명하기 위하여 사용되지만, 이러한 원소들은 이러한 용어들에 의해 한정되지 않는다. 이러한 용어들은 하나의 원소를 다른 하나의 원소와 구별하기 위해서만 사용된다. 예를 들어, 본 발명의 기술적 사상의 범위로부터 멀어지지 않으면서 제1 모듈은 제2 모듈로 명명될 수 있다. 마찬가지로, 제2 모듈은 제1 모듈로 명명될 수 있다.Herein, terms such as first and second are used to describe various elements, but these elements are not limited by these terms. These terms are only used to distinguish one element from another. For example, a first module may be referred to as a second module without departing from the scope of the technical idea of the present invention. Likewise, the second module may be referred to as the first module.

본 발명의 기술적 사상의 설명에서 사용되는 용어들은 특정한 실시 예들을 설명하기 위한 목적으로만 사용되며, 본 발명의 기술적 사상을 한정하는 것으로 의도되지 않는다. 본 발명의 기술적 사상의 설명 및 첨부된 청구항들에서 사용되는 바와 같이, 맥락에서 명확하게 명시되지 않으면 단수 표현들은 복수 표현들 또한 포함하는 것으로 의도된다. "그리고/또는"의 용어는 하나 또는 그보다 많은 연관된 항목들의 임의의 그리고 가능한 모든 조합들을 포함하는 것으로 참조된다. "포함한다" 그리고/또는 "포함하는"의 용어들은 상세한 설명에서 사용된 때에 언급된 특성들, 정수들, 단계들, 동작들, 원소들, 그리고/또는 구성 요소들의 존재를 명시하며, 하나 또는 그보다 많은 다른 특성들, 정수들, 단계들, 동작들, 원소들, 구성 요소들, 그리고/또는 그것들의 그룹들의 존재 또는 추가를 배제하지 않는다. 도면들의 구성 요소들 및 특성들은 실제 비율에 필수적으로 비례하지 않는다.Terms used in the description of the technical idea of the present invention are used only for the purpose of describing specific embodiments, and are not intended to limit the technical idea of the present invention. As used in the description of the technical idea of the present invention and in the appended claims, singular expressions are intended to include plural expressions as well, unless clearly stated in the context. The term “and/or” is referred to as including any and all possible combinations of one or more related items. The terms “comprising” and/or “comprising” when used in the detailed description specify the presence of the stated features, integers, steps, actions, elements, and/or components, and one or It does not exclude the presence or addition of more other features, integers, steps, actions, elements, elements, and/or groups thereof. Components and characteristics of the drawings are not necessarily proportional to actual proportions.

예를 들면, FPGA(Field Programmable Gate Array), ASIC(Application-Specific Integrated Circuit), GPU(Graphics Processing Unit) 또는 기타 프로세서를 사용하여 SSD에 가까운 일부 처리 기능을 사용하면 몇 가지 장점이 있다. 첫째, SSD와 니어(Near) 프로세서 간의 연결은 SSD를 호스트 프로세서와 연결하는 것보다 더 높은 대역폭을 지원하여 더 빠른 데이터 전송을 허용할 수 있다. 둘째, 호스트 프로세서가 데이터를 처리할 필요가 없도록 함으로써, 호스트 프로세서는 다른 기능을 수행할 수 있는 반면에, 니어 프로세서는 데이터 처리를 할 수 있다.For example, using a field programmable gate array (FPGA), application-specific integrated circuit (ASIC), graphics processing unit (GPU), or other processor to use some of the processing functions close to an SSD has several advantages. First, the connection between the SSD and the near processor supports higher bandwidth than the connection between the SSD and the host processor, allowing faster data transfer. Second, since the host processor does not need to process data, the host processor can perform other functions, while the near processor can process data.

그러나 데이터의 니어-스토리지에서의 처리는 데이터를 압축하거나 인코딩할 때 잠재적인 단점을 갖는다. 원시 데이터에서 동작하는 일부 니어-스토리지 프로세서는 데이터에서 작동하기 전에 데이터를 압축 해제하거나 디코딩할 수 있다. 또한 니어-스토리지 프로세서는 결과를 호스트 프로세서에 다시 보고할 수 있다. 만일, 결과로서 호스트 프로세서로 전송되는 데이터의 양이 원시 데이터의 양보다 크면, 니어-스토리지 프로세서를 사용하여 발생하는 이득이 손실되거나, 최악의 경우, 애초에 압축 또는 인코딩 데이터가 호스트 프로세서로 전송되었을 경우보다 더 많은 데이터가 호스트 프로세서로 전송될 수 있다.However, processing of data in near-storage has potential drawbacks when compressing or encoding data. Some near-storage processors that operate on raw data can decompress or decode data before operating on the data. In addition, the near-storage processor can report the results back to the host processor. If, as a result, the amount of data transmitted to the host processor is greater than the amount of raw data, the gain generated by using the near-storage processor is lost, or in the worst case, when compressed or encoded data is originally transmitted to the host processor. More data can be transmitted to the host processor.

더불어, 트랜스코딩은 일반적으로 데이터에 대해 수행될 수 있지만, 데이터가 칼럼 포맷으로 저장된 경우에는 칼럼 포맷을 이용하기 위해 일부 적응이 수행될 수 있다. In addition, transcoding can generally be performed on data, but when data is stored in a column format, some adaptation can be performed to use the column format.

압축 포맷의 데이터에 대한 니어-데이터 프로세싱은 오프로딩의 이점 중 일부를 무효화할 수 있다. 만일, SSD와 호스트 프로세서 간의 연결이 초당 X바이트의 전송을 지원하는 경우, 데이터는 Y의 압축률을 사용하여 압축되고, 전송을 위해 선택된 데이터의 양은 Z이라 하면, 니어-프로세서가 호스트 프로세서에 전송하는 데이터의 양은 'X*Y*Z'일 수 있다. 이 제품이 X 전송 속도보다 낮은 경우, 즉, 'Y*Z < 1' 인 경우, 가속(니어-프로세싱에 의한)이 유리할 수 있다.Near-data processing of data in compressed format can negate some of the benefits of offloading. If the connection between the SSD and the host processor supports transmission of X bytes per second, data is compressed using a compression rate of Y, and if the amount of data selected for transmission is Z, the near-processor transmits to the host processor. The amount of data may be'X*Y*Z'. If this product is lower than the X transmission rate, i.e.'Y*Z <1', acceleration (by near-processing) can be advantageous.

본 발명의 일부 실시 예에서, 칼럼 스토리지는 스토리지 공간을 줄이기 위해 데이터 인코딩(예를 들어, RLE(Run Length Encoding)) 그리고/또는 압축 (snappy)을 사용할 수 있다. 압축이 아닌 인코딩은 주요 엔트로피 감소를 제공할 수 있다. 인코딩 후 압축율은 작아지는 경향이 있다(약 2 미만).In some embodiments of the present invention, column storage may use data encoding (eg, Run Length Encoding (RLE)) and/or compression (snappy) to reduce storage space. Encoding, not compression, can provide major entropy reduction. After encoding, the compression rate tends to be small (less than about 2).

본 발명의 일부 실시 예에서, 예를 들면, 인코딩 알고리즘에 적어도 부분적으로 기초하여 인코딩 데이터 매트(mat)는 결과들을 팽창시키지 않고 니어-프로세싱된다(즉, 인코딩된 원시 데이터가 호스트 프로세서로 전송되는 경우보다 더 큰 결과가 호스트 프로세서로 전송됨). 결과를 팽창시키지 않고 사용할 수 있는 인코딩 알고리즘에는 사전 압축(Dictionary compression), 접두사 인코딩(Prefix Encoding), RLE(Run Length Encoding), 클러스터 인코딩(Cluster Encoding), 스파스 인코딩(Sparse Encoding) 및 간접 인코딩(Indirect Encoding)이 포함될 수 있지만, 여기에 국한되지는 않으며, 본 발명의 실시 예와 함께 다른 인코딩 알고리즘들이 사용될 수 있다. 이하에서 설명되는 본 발명의 실시 예는 RLE 및 비트 패킹에 초점을 맞출 것이지만, 본 발명의 실시 예는 다른 인코딩 알고리즘들을 포함하도록 확장될 수 있다.In some embodiments of the invention, for example, based at least in part on the encoding algorithm, the encoded data mat is near-processed without expanding the results (i.e., if the encoded raw data is transmitted to the host processor. Larger results are sent to the host processor). Encoding algorithms that can be used without expanding the results include Dictionary compression, Prefix Encoding, Run Length Encoding (RLE), Cluster Encoding, Sparse Encoding and indirect encoding. Indirect Encoding) may be included, but is not limited thereto, and other encoding algorithms may be used with the embodiment of the present invention. The embodiments of the present invention described below will focus on RLE and bit packing, but embodiments of the present invention can be extended to include other encoding algorithms.

트랜스코더에 필터링할 데이터를 가르치는 방법에 대한 추가적인 질문도 있다. 이것은 저장되는 데이터의 크기를 줄이는 사전이 데이터가 저장되는 곳이 아닌 다른 곳에 저장될 수 있다는 문제이다. 이러한 스토리지 포맷의 예인 칼럼 저장소(Store)는 관심있는 데이터를 쉽게 찾을 수 있다. 그러나 사전이 데이터와 분리되어 저장될 수 있기 때문에, 시스템은 트랜스코딩을 수행하기 위해 해당 데이터뿐만 아니라 사전을 찾을 수 있어야 한다.There are also additional questions on how to teach the transcoder the data to filter. This is a problem that dictionaries that reduce the size of the data to be stored can be stored elsewhere than where the data is stored. Column Store, an example of such a storage format, makes it easy to find the data of interest. However, since the dictionary can be stored separately from the data, the system must be able to find the dictionary as well as that data to perform transcoding.

본 발명의 실시 예들은 데이터를 팽창시키지 않고 인코딩 데이터를 필터링 할 수 있게 한다. 필터링된 데이터는 변환 룰들을 사용하여 인코딩 데이터에 내장된 인코딩 정보를 사용하여 재인코딩될 수 있다. 본 발명의 실시 예들에서의 트랜스코더는 인코딩 데이터를 필터링하고 호스트로 전송되는 인코딩을 수정할 수 있다. 따라서, 호스트가 일반(plain) 데이터(압축 알고리즘 그리고/또는 인코딩 데이터의 효율성에 따라 인코딩/압축 데이터에 비해 상당히 클 수 있는)를 처리해야하는 대신에, 호스트는 인코딩 데이터를 수신하고 처리할 수 있다. 호스트와 스토리지 장치 사이의 대역폭은 데이터를 전송하는데 걸리는 시간에 실질적으로 영향을 줄 수 있는 한계를 가질 수 있기 때문에, 인코딩 데이터를 전송하는 것은 일반 데이터(필터링되거나 그렇지 않은)를 전송하는 것에 비해 처리 시간을 절약할 수 있다.Embodiments of the present invention make it possible to filter encoded data without expanding the data. The filtered data can be re-encoded using encoding information embedded in the encoded data using conversion rules. The transcoder in embodiments of the present invention may filter encoded data and modify the encoding transmitted to the host. Thus, instead of the host having to process plain data (which may be considerably larger than the encoded/compressed data depending on the compression algorithm and/or the efficiency of the encoded data), the host can receive and process the encoded data. Since the bandwidth between the host and the storage device can have a limit that can substantially affect the time it takes to transmit the data, transmitting encoded data is processing time compared to transmitting normal data (filtered or not). Can be saved.

서큘러 버퍼(Circular buffer)는 한 번에 처리하기에 충분한 데이터를 저장할 수 있다. 본 발명의 실시 예는 서큘러 버퍼를 다른 구조를 사용하는 버퍼로 대체 할 수 있다.The circular buffer can store enough data to process at a time. According to an embodiment of the present invention, a circular buffer may be replaced with a buffer using a different structure.

인덱스 매퍼는 출력 스트림과 함께 사용하기 위해 입력된 사전 맵으로부터 축소된 사전 맵으로의 맵핑을 제공할 수 있다.The index mapper can provide a mapping from an input dictionary map to a reduced dictionary map for use with an output stream.

현재 인코딩 버퍼는 적절한 인코딩에 따라 입력 스트림으로부터 읽혀진 데이터를 저장할 수 있다. 트랜스코딩 룰들, 현재 인코딩 버퍼, 그리고 이전 인코딩 버퍼의 정보를 사용하는 룰 평가자는 현재 인코딩 버퍼에서 데이터를 처리하는 방법을 결정할 수 있다. 현재 인코딩 버퍼의 데이터가 이전 인코딩 버퍼의 데이터와 결합될 수 있는지 여부에 따라 룰 평가기는 현재 인코딩 버퍼의 데이터를 기반으로 이전 인코딩 버퍼를 업데이트하고, 이전 인코딩 버퍼를 출력(그리고 현재 인코딩 버퍼로 이전 인코딩 버퍼를 교체)하거나, 또는 다른 조치를 수행할 수 있다. 예를 들면, 트랜스코더가 현재 인코딩 버퍼에서 "무정의(don't care)" 값으로 간주되는 값(아래에 추가로 논의됨)을 식별한 경우, 해당 값들은 이전 인코딩 버퍼의 기존 "무정의(don't care)" 값과 결합될 수 있다.The current encoding buffer can store data read from the input stream according to the appropriate encoding. A rule evaluator using information from the transcoding rules, the current encoding buffer, and the previous encoding buffer can determine how to process data in the current encoding buffer. Depending on whether the data in the current encoding buffer can be combined with the data in the previous encoding buffer, the rule evaluator updates the previous encoding buffer based on the data in the current encoding buffer, and outputs the previous encoding buffer (and the previous encoding into the current encoding buffer). Buffers), or other actions can be taken. For example, if the transcoder identifies a value that is considered a "don't care" value in the current encoding buffer (discussed further below), those values will be transferred to the existing "undefined" value of the previous encoding buffer. (don't care)" value.

스트림 스플리터는 상이한 인코딩들을 사용하여 인코딩된 입력 스트림의 상이한 부분들(스트림들)을 식별하는데 사용될 수 있다. 단일 인코딩 방식이 사용되는 경우, 인코딩 방식은 파라미터(즉, 인코딩 타입)로서 전달될 수 있다. 그렇지 않으면, 여러 인코딩 방식들이 사용되는 경우(즉, 인코딩 타입이 사용되지 않는 경우), 입력 스트림 자체를 검사하여 주어진 스트림에 대한 인코딩 방식이 결정된다. 예를 들어, 칼럼 스토리지 포맷 인코딩에 저장된 데이터의 첫 번째 바이트는 인코딩 타입 정보를 포함할 수 있다. RLE(Run Length Encoding)과 비트 패킹의 혼합의 경우, LSB가 '0'이면 '인코딩 타입 = RLE '이고, LSB가 '1'이면 '인코딩 타입 = 비트 패킹'이다.The stream splitter can be used to identify different portions (streams) of an input stream that have been encoded using different encodings. When a single encoding scheme is used, the encoding scheme can be delivered as a parameter (ie, encoding type). Otherwise, when several encoding schemes are used (ie, an encoding type is not used), the input stream itself is examined to determine the encoding scheme for a given stream. For example, the first byte of data stored in column storage format encoding may include encoding type information. In the case of mixing RLE (Run Length Encoding) and bit packing, if the LSB is '0', it is'encoding type = RLE', and if the LSB is '1', it is'encoding type = bit packing'.

다양한 인코딩 작동 방식의 예로, RLE 및 비트 패킹(BP)을 고려한다. RLE에서, 가변 부호없는 정수는 값이 반복되는 빈도를 나타내는 데 사용되며, 고정 길이 값이 제공된다. 따라서, 예를 들어, '00000011 00000011 00000011 00000011 00000011 00000011 00000011 00000011 00000011(십진 값 3의 9 개 카피)'을 전송하는 대신, 데이터는 '00001001(십진 값 9) 00000011(십진 값3)'으로 인코딩될 수 있으며, 이는 '00000011'이 9 번 반복됨을 나타낸다.Consider RLE and bit packing (BP) as examples of various encoding operations. In RLE, a variable unsigned integer is used to indicate how often a value is repeated, and a fixed length value is provided. So, for example, instead of sending '00000011 00000011 00000011 00000011 00000011 00000011 00000011 00000011 00000011 (nine copies of decimal value 3)', the data would be encoded as '00001001 (decimal value 9) 00000011 (decimal value 3)'. Can be, which indicates that '00000011' is repeated 9 times.

비트 패킹(BP)에서, 더 적은 공간을 차지한다고 판단된 데이터는 다른 값과 결합될 수 있다. 예를 들어, 데이터가 일반적으로 8 비트를 사용하여 저장되는 경우, 4 개의 값을 저장하기 위해 총 32 비트를 차지한다. 그러나 값들이 각각 4 비트를 넘지 않는 것으로 알려진 경우, 단일 바이트에 두 개의 값들이 저장될 수 있는데, 즉, 이것이 비트 패킹이다. 압축된 데이터와 압축되지 않은 데이터를 나타내는 데 약간의 오버 헤드가 있기 때문에 공간 절약은 설명된 것보다 약간 적지만, 여전히 유리하다.In the bit packing (BP), data determined to occupy less space may be combined with other values. For example, if data is generally stored using 8 bits, it takes up a total of 32 bits to store 4 values. However, if the values are known to not exceed 4 bits each, then two values can be stored in a single byte, that is, this is bit packing. The space savings are slightly less than described, but still advantageous, as there is some overhead in representing compressed and uncompressed data.

인코딩은 부호없는 바이트의 그룹 수와 뒤따르는 하나 이상의 바이트의 묶음 값들 목록을 포함한다. 그룹의 값들의 최대 수는 8이고 최대 그룹 수는 63일 수 있다. 따라서, 예를 들어, 데이터 '00000000 00000001 00000000 00000001 00000000 00000001 00000000 00000001(십진값 01010101)'를 나타내기 위해서 그룹은 '00000001(그룹 1) 00010000 (0, 1) 00010000 (0, 1) 00010000 (0, 1) 00010000 (0, 1)'로 정의될 수 있다.The encoding includes the number of groups of unsigned bytes followed by a list of values of one or more bytes. The maximum number of group values may be 8 and the maximum number of groups may be 63. So, for example, to represent the data '00000000 00000001 00000000 00000001 00000000 00000001 00000000 00000001 (decimal value 01010101)', the group is '00000001 (group 1) 00010000 (0, 1) 00010000 (0, 1) 00010000 (0, 1) It can be defined as 00010000 (0, 1)'.

전술한 바와 같이, RLE(및 다른 인코딩)은 가변 부호없는 정수를 사용할 수 있다. 가변 부호없는 정수도 인코딩을 사용할 수 있다. 모든 8 비트 그룹에서, 최상위 비트는 현재 바이트가 값의 마지막 바이트인지 또는 적어도 하나의 후속 바이트가 있는지를 나타낼 수 있다. 다중 바이트가 사용되는 경우, 최하위 바이트가 먼저 표시되고, 최상위 바이트는 마지막에 표시된다. 따라서, 예를 들어, 십진 값 '1'은 '00000001'로 표시되고, 십진 값 '2'는 '00000010'으로 표시될 수 있으며 '01111111(십진 값 127)'까지 계속된다. 십진 값 '128'은 '10000000 00000001'로 표시되고, 십진 값 '129'는 '10000000 00000010' 등등으로 표시될 수 있다. 기본적으로 이진 값은, 최상위 그룹을 제외하고, 7 비트의 각 그룹에는 1로 시작하는 7 비트의 그룹으로 구분된다. 예를 들어, 십진 값 '16,384'는 '10000000 10000000 00000001'로 표시될 수 있다.As mentioned above, RLE (and other encodings) can use variable unsigned integers. Variable unsigned integers can also be encoded. In all 8-bit groups, the most significant bit may indicate whether the current byte is the last byte of the value or at least one subsequent byte. When multiple bytes are used, the least significant byte is displayed first, and the most significant byte is displayed last. Thus, for example, the decimal value '1' may be expressed as '00000001', the decimal value '2' may be expressed as '00000010', and continued until '01111111 (decimal value 127)'. The decimal value '128' may be expressed as '10000000 00000001', the decimal value '129' may be expressed as '10000000 00000010', and so on. Basically, binary values are divided into groups of 7 bits starting with 1 in each group of 7 bits, excluding the most significant group. For example, the decimal value '16,384' may be expressed as '10000000 10000000 00000001'.

트랜스코더를 사용하여 인코딩 데이터를 처리할 때 일부 데이터는 "무정의(don't care)" 데이터로 간주될 수 있다. 즉, 수행중인 작업에 가치가 없는 일부 데이터가 있을 수 있다. "무정의(don't care)" 데이터로 간주되는 데이터는 트랜스코더 작동의 결과로 다른 값으로 매핑될 수 있다.When using a transcoder to process encoded data, some data can be considered "don't care" data. That is, there may be some data that is of no value to the task you are performing. Data considered "don't care" data can be mapped to other values as a result of transcoder operation.

데이터베이스가 다양한 사람들의 시민권(국적) 정보를 저장하는 상황을 고려하기로 하자. 시민권은 문자열("중국", "한국", "인도", "미국" 등과 같은)을 사용하여 저장할 수 있다. 하지만, 시민권에 가능한 값은 유한한 세트에서 가져 오기 때문에, 데이터베이스에 저장된 데이터 양을 줄이기 위해서 사전이 사용될 수 있다. 따라서, 예를 들면, "0" 값은 중국을 나타내고, "1" 값은 인도를 나타내고, "2" 값은 한국을 나타내고, "3" 값은 미국을 나타내는 것과 같이 국가의 이름이 아닌 대표값(인덱스들)이 데이터베이스에 저장될 수 있다. 195개 국가(2019년 7월 19일 현재)가 있으므로, 1 바이트를 사용하여 인덱스를 저장할 수 있으며, 이는 문자당 1 바이트를 사용하여 국가 이름의 문자열을 저장하는 데 사용되는 것보다 훨씬 적다.Consider a situation in which databases store information about citizenship (nationality) of various people. Citizenship can be stored using strings (such as "China", "Korea", "India", "USA", etc.). However, since the possible values for citizenship come from a finite set, dictionaries can be used to reduce the amount of data stored in the database. So, for example, the value "0" represents China, the value "1" represents India, the value "2" represents Korea, and the value "3" represents the United States. (Indexes) can be stored in the database. Since there are 195 countries (as of July 19, 2019), you can use 1 byte to store the index, which is much less than what is used to store strings of country names using 1 byte per character.

그러나 수행되는 가속화 연산(예를 들어, 연산은 데이터베이스에 있는 미국 시민의 수를 계산하는 것일 수 있다)은 미국 시민에게 관심이 있을 수 있다. 따라서, 다른 국가의 시민은 작업과 관련이 없다: 이들은 "무정의" 값이다. 트랜스코더는 연산이 적용되는 데이터를 반영하기 위해 사전과 인덱스를 매핑할 수 있다.However, the accelerated operation performed (eg, the operation could be counting the number of US citizens in a database) may be of interest to US citizens. Thus, citizens of other countries are not involved in work: these are "undefined" values. The transcoder can map a dictionary and an index to reflect the data to which the operation is applied.

칼럼 포맷은 정보를 인코딩하기 위해 RLE 또는 비트 패킹(BP)을 사용할 수 있다. 칼럼 스토리지 포맷으로 저장된 값 문자열(value string)의 일부가 주어지면, 1 비트는 데이터가 RLE 또는 비트 패킹을 사용하여 저장되는지를 나타내기 위해 사용될 수 있다; 나머지 데이터는 그에 따라 이해될 수 있다.The column format may use RLE or bit packing (BP) to encode information. Given a portion of a value string stored in column storage format, 1 bit can be used to indicate whether the data is stored using RLE or bit packing; The rest of the data can be understood accordingly.

본 발명의 실시 예들에 따른 트랜스코더가 어떻게 인코딩 데이터를 위한 대체 사전을 제공할 수 있는지 이해하기 위해, 데이터가 많은 사람들에 대한 시민권 정보를 포함하는 상황을 고려한다. 각 개인이 시민인 국가의 이름은 매우 길지만 국가 이름의 수는 상대적으로 적기 때문에(200 개국을 대표하더라도 약 8 비트를 차지할 수 있고, 여전히 국가 이름의 문자당 1바이트로 각 시민들의 국가 이름 문자열을 저장하는 것으로 상당한 비용이 절감), 사전은 저장되는 데이터의 양을 의미있게 줄일 수 있다. 이러한 인코딩은 임의의 원하는 인코딩 방식(예를 들어, RLE 인코딩, 사전 압축, 프리픽스 인코딩, 비트 패킹, 클러스터 인코딩, 스파스 인코딩 및 간접 인코딩)을 사용할 수 있다.In order to understand how a transcoder according to embodiments of the present invention can provide an alternative dictionary for encoded data, consider a situation in which the data contains citizenship information for many people. The name of the country in which each individual is a citizen is very long, but the number of country names is relatively small (even if representing 200 countries, it can occupy about 8 bits, and the country name string of each citizen is still 1 byte per character of the country name. Storing saves a lot of money), and dictionaries can significantly reduce the amount of data stored. Such encoding can use any desired encoding scheme (eg, RLE encoding, pre-compression, prefix encoding, bit packing, cluster encoding, sparse encoding and indirect encoding).

이제, 적용되는 속성(조건자, predicate)(데이터의 필터링)이 미국 시민만 찾는 경우, 다른 국가의 시민들과 관련된 데이터는 관심이 없다. 예를 들어, 호스트는 데이터베이스에 미국 시민이 몇 명인지 알고 싶어할 수 있다. 변환 결과로서, 사전은 미국 시민을 위한 하나의 항목으로 축소될 수 있으며("무정의(don't care)" 항목에 대한 암시적 또는 명시적 항목이 있을 수 있음), RLE 인코딩은 미국이 아닌 다양한 국가의 시민을 위한 인접한 RLE 항목을 결합하기 위해 압축될 수 있다. 따라서, 데이터의 인코딩은 1(또는 2) 개의 로우(row)를 포함하는 사전으로 압축된다. 미국 시민이 아닌 사람들과 관련된 데이터가 새 사전의 단일 항목에 인덱스를 생성할 수 있으므로, 실제 인코딩 데이터도 줄일 수 있다. 따라서, 속성(Predicate)을 트랜스코더 내로 푸시함으로써, 인코딩 데이터가 필터링될 수 있고 궁극적으로 호스트로 전송되는 데이터의 양을 감소시키는 새로운 인코딩이 제공될 수 있다. 사전 맵은 원래 사전과 트랜스코딩 사전에 대한 매핑(Mapping)을 나타낼 수 있다.Now, if the applied attribute (predicate) (filtering of the data) is looking for US citizens only, the data relating to citizens of other countries is not of interest. For example, a host may want to know how many US citizens are in the database. As a result of the conversion, the dictionary can be reduced to a single entry for US citizens (there may be implicit or explicit entries for "don't care" entries), and the RLE encoding is Can be compressed to combine adjacent RLE items for citizens of various countries. Thus, the encoding of the data is compressed into a dictionary containing 1 (or 2) rows. Data related to non-U.S. citizens can be indexed into a single entry in the new dictionary, thus reducing the actual encoded data. Thus, by pushing the Predicate into the transcoder, the encoded data can be filtered and a new encoding can be provided that ultimately reduces the amount of data transmitted to the host. The dictionary map may indicate mapping between the original dictionary and the transcoding dictionary.

FPGA(Field Programmable Gate Array)는 트랜스코더를 구현(다른 특징들 중에서)하기 위해 사용될 수 있지만, 본 발명의 실시 예는, 예를 들어, ASIC(Application-Specific Integrated Circuit), GPU(Graphics Processing Unit) 또는 소프트웨어를 실행하는 다른 프로세서를 포함하는 다른 구현의 형태들을 포함할 수 있다. 더불어, ISC(In-storage Compute) 컨트롤러는 FPGA와 분리되어 있거나 FPGA의 일부로 구현될 수도 있다.FPGA (Field Programmable Gate Array) may be used to implement a transcoder (among other features), but embodiments of the present invention include, for example, ASIC (Application-Specific Integrated Circuit), GPU (Graphics Processing Unit) Or other implementation forms including other processors that execute software. In addition, the ISC (In-storage Compute) controller may be separate from the FPGA or implemented as part of the FPGA.

(필터링과 같은) 가속 기능이 수행될 특정 파일이 주어지면, ISC 컨트롤러는 파일-블록(File2Block) 맵을 사용하여 파일의 데이터를 저장하는 블록을 순서와 함께 식별할 수 있다. ISC 컨트롤러는 호스트 내의 구성 요소로서 (스토리지 장치 자체와 분리되어) 구현될 수 있거나, 스토리지 장치의 일부인 컨트롤러일 수 있다. 트랜스코더에 (입력 버퍼를 통해) 입력될 수 있는 입력 스트림을 제공하기 위해 이들 블록들이 액세스될 수 있다.Given a specific file for which the acceleration function (such as filtering) is to be performed, the ISC controller can use a file-block (File2Block) map to identify the blocks storing the file's data along with the order. The ISC controller may be implemented as a component in the host (separate from the storage device itself), or may be a controller that is part of the storage device. These blocks can be accessed to provide an input stream that can be input to the transcoder (via an input buffer).

파일이 칼럼 포맷으로 저장될 때, 데이터 단위는 그 자체가 다수의 데이터 페이지를 포함하는 칼럼 청크(chunk)일 수 있다. 즉, 입력 버퍼는 스토리지 장치 내의 저장 모듈들로부터 칼럼 청크를 수신할 수 있어서, 트랜스코더는 그 칼럼 청크상에서 동작할 수 있다. 일반적으로, 각 칼럼 청크는 해당 칼럼 청크 그리고/또는 해당 칼럼 청크의 데이터에 적용할 사전에 사용되는 인코딩 방식을 지정할 수 있는 자체 메타 데이터를 포함할 수 있다. 하지만, 모든 스토리지 포맷이 이 배열을 사용하는 것은 아니다: 예를 들어, 칼럼 스토리지 포맷은 파일의 별도 영역에 메타 데이터를 저장할 수 있고(각 칼럼 청크 내에서와 달리): 이 메타 데이터는 파일 전체와 함께 사용되는 인코딩 및 사전을 지정할 수 있다. 따라서, 이러한 칼럼 스토리지 포맷을 사용하여 파일이 저장될 때, ISC 컨트롤러는 (File2Block 맵을 사용하여 찾아낸) 파일의 메타 데이터 영역으로부터 인코딩 및 사전을 검색(회수)하고, 트랜스코더가 칼럼 청크로부터 원하는 어떤 정보던지 수신한다고 가정하기보다는(물론, 칼럼 스토리지 포맷을 사용하는 경우 칼럼 청크에 사전 페이지가 없을 수 있다.), 그 정보를 트랜스코더에 제공한다. 동일한 인코딩 방식이 모든 칼럼 청크에 적용될 수 있지만, 이 인코딩 방식 자체는 둘 또는 그 이상의 명확히 구별되는 인코딩 방식들을 사용하고, 이들 사이를 적절히 스위칭하는 하이브리드 방식일 수 있다. 예를 들어, 하이브리드 인코딩 방식은 RLE 인코딩 및 비트 패킹이 결합된 방식일 수 있다.When a file is stored in a column format, the data unit itself may be a column chunk including a plurality of data pages. That is, the input buffer can receive column chunks from storage modules in the storage device, so that the transcoder can operate on the column chunk. In general, each column chunk may include its own metadata that can designate an encoding method used in advance to be applied to the corresponding column chunk and/or the data of the corresponding column chunk. However, not all storage formats use this arrangement: for example, the column storage format can store metadata in a separate area of the file (unlike within each column chunk): this metadata is stored in the entire file and You can specify the encoding and dictionary to be used together. Thus, when a file is stored using this column storage format, the ISC controller retrieves (recovers) the encoding and dictionary from the file's metadata area (found using the File2Block map), and the transcoder does what it wants from the column chunk. Rather than assuming that you want to receive either information (of course, if you are using the column storage format, there may be no dictionary pages in the column chunk), you provide that information to the transcoder. The same encoding scheme can be applied to all column chunks, but the encoding scheme itself may be a hybrid scheme that uses two or more clearly distinct encoding schemes and switches between them appropriately. For example, the hybrid encoding method may be a method in which RLE encoding and bit packing are combined.

사전 및 인코딩 방식을 결정하는 것 외에도, ISC 컨트롤러는 또한 인코딩 데이터에 적용될 속성을 추출하고, 그 속성을 트랜스코더로 푸시 다운(Push down)할 수 있다. 트랜스코더는 이 모든 정보를 다양한 방식으로 사용할 수 있다. 예를 들어, 파일과 함께 사용되는 인코딩에 대한 정보는 데이터와 함께 사용될 트랜스코딩 룰을 선택하는 데 사용될 수 있지만, 사전과 속성은 트랜스코딩 사전과 사전 맵을 생성하는 데 사용될 수 있다.In addition to determining the dictionary and encoding scheme, the ISC controller can also extract attributes to be applied to the encoded data and push down those attributes to the transcoder. Transcoders can use all of this information in a variety of ways. For example, information about the encoding used with the file can be used to select the transcoding rules to be used with the data, but the dictionary and attributes can be used to generate the transcoding dictionary and dictionary map.

속성 평가자는 속성을 사용하여 사전에서 관심있는 항목과 그렇지 않은 항목을 판별하고 관심있는 값(그리고 가능하다면 "무정의" 항목을 나타내는 값)을 저장하는 트랜스코딩 사전과, 원래 사전으로부터 트랜스코딩 사전으로 인덱스를 맵핑하는 사전 맵을 생성한다. The attribute evaluator uses the attribute to determine what is of interest and what is not, and stores the values of interest (and possibly "undefined" entries) from the original dictionary to the transcoding dictionary. Create a dictionary map that maps the index.

트랜스코딩 사전에 "무정의(don't care)" 값에 대한 항목(Entry)이 포함된 경우, 이 동작은 기술적으로 사전에 항목을 추가한다(원래 사전에는 그러한 값이 포함되지 않으므로). 이러한 항목을 추가하면 새로운 문제가 발생할 수 있다. 트랜스코딩 사전에 "무정의(don't care)" 항목을 추가하는 것은 일반적으로 트랜스코딩 사전의 첫 번째 항목(인덱스 0)에서 발생하며, 이것은 속성과 일치하지 않는 값을 나타내는 것을 의도한다. 그러나 "무정의(don’t care)" 항목에 대한 새로운 값을 생성하는 것은 많은 비용이 소요될 수 있다: 즉, 개시된 시스템은 (기존의 모든 인덱스들이 1만큼 떨어져 있기 때문에) 전체 사전을 스캔하고 다시 매핑할 수 있다. "무정의(don't care)" 항목을 추가하면, 메모리 재할당이 발생하거나 비트폭 오버플로가 발생할 수 있다: 예를 들어, 주어진 비트 수에 대해 가능한 모든 값이 사전 인덱스로 이미 사용중인 경우 "무정의(don't care)" 항목을 사전에 입력하면 인덱스를 나타내는 데 사용되는 비트 수가 1씩 증가할 수 있다. 데이터 페이지가 사전의 일부를 사용하는 경우, 데이터 페이지의 비트폭이 더 작아질 수 있으며, 트랜스코딩 사전에 "무정의(don't care)" 항목을 추가하면, 데이터 페이지에서 하나의 유효한 값을 사용할 수 없게 된다. 예를 들어, 비트폭이 1인 경우 "무정의(don't care)" 항목을 추가하면, 단일 비트를 사용하여 표현할 수 있는 것보다 많은 값을 포함할 수 있지만, 반면 비트폭이 2인 경우, 비트폭의 오버플로 없이 "무정의(don't care)" 항목을 위한 공간의 여지가 있을 수 있다.If the transcoding dictionary contains an entry for a "don't care" value, this action technically adds an entry to the dictionary (since the original dictionary does not contain such values). Adding these items can lead to new problems. Adding a "don't care" entry to the transcoding dictionary usually occurs in the first entry (index 0) of the transcoding dictionary, which is intended to indicate a value that does not match the attribute. However, generating a new value for the "don't care" item can be expensive: that is, the disclosed system scans the entire dictionary (because all the existing indices are separated by 1) and reloads. Can be mapped. Adding a "don't care" entry can lead to memory reallocation or bitwidth overflow: for example, if all possible values for a given number of bits are already in use as dictionary indexes. By entering the "don't care" item in advance, the number of bits used to represent the index can be increased by one. If the data page uses part of the dictionary, the bit width of the data page can be smaller, and if you add a "don't care" entry to the transcoding dictionary, you can get one valid value in the data page. It becomes unusable. For example, if the bit width is 1, adding a "don't care" item can contain more values than can be expressed using a single bit, whereas if the bit width is 2 However, there may be room for a "don't care" item without overflowing the bit width.

이 문제에 대한 해결책은 속성 푸시 다운으로 인해 사전 크기가 줄어들지 여부를 판별하는 것이다. 사전이 적어도 하나의 항목으로 축소될 수 있다면 비트폭 오버플로에 대한 고민없이 "무정의(don't care)" 항목을 위한 공간이 확보된다. 사전이 적어도 하나의 항목에 의해 감소되지 않으면, 인코딩 데이터는 트랜스코딩을 수행하지 않고 ISC 컨트롤러/호스트로 직접 전송될 수 있으며, 이에 의해 트랜스코딩이 데이터의 양을 증가시킬 가능성을 피할 수 있다.The solution to this problem is to determine whether the dictionary size will be reduced due to attribute pushdown. If the dictionary can be reduced to at least one item, space is reserved for “don't care” items without worrying about bit width overflow. If the dictionary is not reduced by at least one item, the encoded data can be transmitted directly to the ISC controller/host without performing transcoding, thereby avoiding the possibility of transcoding increasing the amount of data.

트랜스코더의 출력은 (출력 버퍼를 통해) ISC 컨트롤러로 다시 반환될 수 있다. 이것은 두 가지 목적으로 사용된다. 첫째는, 속성을 트랜스코더 내로 푸시 다운하면 트랜스코딩된 데이터가 생성될 수 있지만, 트랜스코딩된 데이터에 대해 수행해야 하는 연산이 여전히 남아 있을 수 있다. 예를 들어, 호스트가 파일에서 미국 시민의 수를 계산하려고 시도하는 경우, 트랜스코딩된 데이터는 해당 시민을 식별하지만 카운트하지는 않는다: 해당 동작은 ISC 컨트롤러에서 가속 기능으로 수행할 수 있다. 둘째는, 트랜스코딩된 데이터는 추가 동작을 위해 호스트로 다시 전송될 수 있다. ISC 컨트롤러는 호스트와 통신하므로 트랜스코딩된 데이터를 호스트로 보낼 경로를 제공한다.The transcoder's output can be returned (via the output buffer) back to the ISC controller. It serves two purposes. First, pushing down an attribute into a transcoder may generate transcoded data, but there may still be operations that need to be performed on the transcoded data. For example, if the host attempts to count the number of US citizens in a file, the transcoded data identifies that citizen but does not count: the action can be performed by an acceleration function in the ISC controller. Second, the transcoded data can be transmitted back to the host for further operation. The ISC controller communicates with the host, providing a path to send the transcoded data to the host.

도 1은 본 발명의 일 실시 예에 따른 인코딩 데이터의 트랜스코딩을 지원할 수 있는 솔리드 스테이트 드라이브(Solid State Drive: SSD)를 포함하는 시스템을 보여준다. 도 1에서 호스트 컴퓨터일 수 있는 머신(105)은 프로세서(110), 메모리(115) 및 스토리지 장치(120)를 포함할 수 있다. 프로세서(110)는 임의의 다양한 프로세서일 수 있다. 도 1은 단일 프로세서(110)를 도시하지만, 머신(105)은 임의의 수의 프로세서를 포함할 수 있으며, 각각의 프로세서는 싱글-코어 또는 멀티-코어 프로세서일 수 있고, 임의의 원하는 조합으로 조합될 수 있다.1 is a view showing a system including a solid state drive (SSD) capable of supporting transcoding of encoded data according to an embodiment of the present invention. In FIG. 1, the machine 105, which may be a host computer, may include a processor 110, a memory 115, and a storage device 120. Processor 110 can be any of a variety of processors. 1 shows a single processor 110, the machine 105 may include any number of processors, each processor may be a single-core or a multi-core processor, combined in any desired combination. Can be.

프로세서(110)는 메모리(115)에 연결될 수 있다. 메모리(115)는 플래시 메모리, DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory), 영구 랜덤 액세스 메모리(Persistent Random Access Memory), FRAM(Ferroelectric Random Access Memory), 또는 자기저항 랜덤 액세스 메모리(MRAM) 등과 같은 비휘발성 랜덤 액세스 메모리(NVRAM) 등과 같은 임의의 다양한 메모리일 수 있다. 메모리(115)는 상이한 메모리 유형의 임의의 원하는 조합일 수 있으며, 메모리 컨트롤러(125)에 의해 관리될 수 있다. 메모리(115)는 "단기(short-term)"적으로 데이터를 저장하는데 사용될 수 있는데, 이는 데이터가 장기적으로 저장되지 않는 것을 예상된다. 단기 데이터(short-term data)의 예는 임시 파일, 애플리케이션에 의해 로컬로 사용되는 데이터(다른 스토리지 위치로부터 복사되었을 수 있음) 등을 포함할 수 있다.The processor 110 may be connected to the memory 115. The memory 115 is a flash memory, a dynamic random access memory (DRAM), a static random access memory (SRAM), a permanent random access memory, a ferroelectric random access memory (FRAM), or a magnetoresistive random access memory ( MRAM), and the like. Memory 115 may be any desired combination of different memory types and may be managed by memory controller 125. Memory 115 may be used to store data in a "short-term", which is expected to not store data in the long term. Examples of short-term data may include temporary files, data used locally by an application (which may have been copied from another storage location), and the like.

프로세서(110) 및 메모리(115)는 다양한 애플리케이션이 실행될 수 있는 운영 체제를 지원할 수도 있다. 이들 애플리케이션은 메모리(115) 또는 스토리지 장치(120)로부터 데이터를 판독하거나 기록하기 위한 요청을 발행할 수 있다. 메모리(115)는 "단기"로 지칭되는 데이터를 저장하는데 사용될 수 있는 반면, 스토리지 장치(120)는 "장기(long-term)", 즉, 데이터가 장기적으로 저장될 것으로 예상되는 데이터를 저장하는데 사용될 수 있다. 스토리지 장치(120)는 장치 드라이버(130)를 사용하여 액세스될 수 있다. 스토리지 장치(120)는 하드 디스크 드라이브(HDD), 솔리드 스테이트 드라이브(SSD), 그리고 임의의 다른 원하는 포맷과 같은 임의의 원하는 포맷일 수 있다.The processor 110 and the memory 115 may support an operating system in which various applications can be executed. These applications may issue requests to read or write data from memory 115 or storage device 120. Memory 115 may be used to store data referred to as “short term”, while storage device 120 stores “long-term”, ie, data that is expected to be stored in the long term. Can be used. The storage device 120 can be accessed using the device driver 130. The storage device 120 can be any desired format, such as a hard disk drive (HDD), a solid state drive (SSD), and any other desired format.

도 2는 도 1의 머신의 세부 사항을 보여준다. 도 2에서, 일반적으로 머신(105)은 머신의 구성 요소의 동작을 조정하는데 사용될 수 있는 메모리 컨트롤러(125) 및 클럭(205)을 포함할 수 있는 하나 이상의 프로세서들(110)을 포함할 수 있다. 프로세서들(110)은, 예를 들면, RAM(random access memory), ROM(read-only memory), 또는 다른 상태 보존 매체를 포함할 수 있는 메모리(115)에 연결될 수 있다. 프로세서들(110)은 또한 스토리지 장치들(120), 그리고 이더넷 커넥터 또는 무선 커넥터와 같은 네트워크 커넥터(210)에 연결될 수 있다. 프로세서들(110)은 또한 버스들(215)에 연결될 수 있으며, 버스들(215)은 다른 구성 요소들 중에서 사용자 인터페이스(220) 및 입출력 엔진(225)을 사용하여 관리될 수 있는 입력/출력 인터페이스 포트에 장착될 수 있다.Figure 2 shows a detail of the machine of Figure 1; In Figure 2, in general, machine 105 may include one or more processors 110 that may include a memory controller 125 and a clock 205 that may be used to coordinate the operation of components of the machine. . Processors 110 may be coupled to memory 115, which may include, for example, random access memory (RAM), read-only memory (ROM), or other stateful media. Processors 110 may also be connected to storage devices 120 and a network connector 210 such as an Ethernet connector or a wireless connector. Processors 110 can also be connected to buses 215, and buses 215 are input/output interfaces that can be managed using user interface 220 and input/output engine 225, among other components. Can be mounted on the port.

도 3은 다른 접근법들을 사용하여 동일한 데이터를 전달하는 도 1의 스토리지 장치(120) 및 도 1의 프로세서(110)를 보여준다. 하나의 접근법(일반적인 접근법)에서, 데이터는 스토리지 장치(120)내의 스토리지(305, 예를 들어, 하드 디스크 드라이브 상의 플래터(platter)들 또는 SSD와 같은 플래시 메모리 스토리지 장치 내의 플래시 메모리 칩들일 수 있음)로부터 읽혀지고, 프로세서(110)로 직접 전송될 수 있다. 스토리지 장치(120) 상에 저장된(인코딩된 그리고/또는 압축된) 총 데이터가 X 바이트라면, 이는 프로세서(110)로 전송될 데이터의 양이다. 이 분석은, 인코딩 그리고/또는 압축된 데이터를 저장하는데 사용되는 스토리지의 양을 고려하는데, 인코딩되지 않고 압축되지 않은 데이터는 아마도 더 많은 바이트 수일 것이다(그렇지 않은 경우에는 데이터를 인코딩 그리고/또는 압축하는 데 이점이 없을 수 있음). 따라서, 예를 들어, 데이터가 인코딩되지 않고 압축되지 않은 약 10GB의 스토리지를 사용할 수 있지만, 인코딩 그리고/또는 압축될 때 약 5GB의 스토리지를 사용할 수 있다면, 약 10GB가 아닌 약 5GB의 데이터가 스토리지 장치(120)에서 프로세서(110)로 전송될 수 있다.3 shows the storage device 120 of FIG. 1 and the processor 110 of FIG. 1 transferring the same data using different approaches. In one approach (general approach), the data may be storage 305 in storage device 120, e.g., platters on a hard disk drive or flash memory chips in a flash memory storage device such as an SSD) May be read from and transmitted directly to the processor 110. If the total data stored (encoded and/or compressed) on storage device 120 is X bytes, this is the amount of data to be transmitted to processor 110. This analysis takes into account the amount of storage used to store the encoded and/or compressed data, where the unencoded and uncompressed data will probably be a higher number of bytes (otherwise the encoding and/or compression of the data May have no advantage). So, for example, if the data is unencoded and uncompressed, about 10 GB of storage is available, but when encoded and/or compressed, about 5 GB of storage is available, then about 5 GB of data instead of about 10 GB is It may be transmitted from 120 to the processor 110.

데이터를 전송하기 위해 제공된 대역폭(그리고 결과적으로 전송에 영향을 미치는 사용된 시간)의 관점에서 스토리지(120)로부터 프로세서(110)로의 데이터 전송을 고려할 수도 있다. 스토리지 장치(120)에 저장된 데이터가 인코딩 그리고/또는 압축될 경우, 스토리지 장치(120)에 저장된 데이터가 프로세서(110)로 직접 전송될 때(화살표(310)를 통해 도시됨)에는 스토리지 장치(120)에 저장된 총 데이터는 초당 B바이트의 유효 속도로 전송될 수 있다. 상술한 예를 계속하면, 스토리지 장치(120)와 프로세서(110) 사이의 연결이 초당 약 1 GB의 대역폭을 포함하는 상황을 고려하기로 한다. 인코딩 그리고/또는 압축된 데이터는 약 5GB의 공간을 차지할 수 있기 때문에, 인코딩 그리고/또는 압축된 데이터는 총 5 초 동안 약 1GB/초의 전송율로 전송될 수 있다. 그러나 (인코딩 그리고/또는 압축 전) 저장된 총 데이터는 약 10GB이므로, 데이터의 유효 전송률 B는 초당 약 2GB이다(약 10GB의 인코딩되지 않고 압축되지 않은 데이터가 약 5 초 내에 전송되므로).Data transfer from storage 120 to processor 110 may be considered in terms of the bandwidth provided to transfer the data (and consequently the time used to affect the transfer). When the data stored in the storage device 120 is encoded and/or compressed, when the data stored in the storage device 120 is directly transmitted to the processor 110 (shown through the arrow 310), the storage device 120 The total data stored in) can be transferred at an effective rate of B bytes per second. Continuing the above example, it will be considered a situation in which the connection between the storage device 120 and the processor 110 includes a bandwidth of about 1 GB per second. Since the encoded and/or compressed data can take up about 5 GB of space, the encoded and/or compressed data can be transmitted at a transfer rate of about 1 GB/second for a total of 5 seconds. However, since the total stored data (before encoding and/or compression) is about 10 GB, the effective transfer rate B of the data is about 2 GB per second (since about 10 GB of unencoded and uncompressed data is transmitted in about 5 seconds).

대조적으로, 인스토리지 프로세서(315, in-storage processor)가 프로세서(110)로 전송되는 데이터의 양을 감소시키기 위해 데이터를 사전 처리(pre-process)하기 위해 사용된다면, 더 적은 원시 데이터가 전송될 수 있다(인스토리지 프로세서(315)가 전송되는 데이터에 대해 더 선택적인 것이기 때문에). 한편, 인스토리지 프로세서(315)는 데이터를 압축 해제하여 처리한다. (또한 가능하면 데이터를 디코딩할 수도 있다). 따라서, 인스토리지 프로세서(315)로부터 프로세서(110)로 전송될 데이터의 양은 데이터의 선택에 의해 감소될 수 있지만, 압축의 양(및 가능하면 인코딩)에 의해 증가될 수도 있다: 대수적으로, 인스토리지 프로세서(315)로부터 프로세서(110)로 전송될 데이터(화살표(320)를 통해 도시)는 'X*Y*Z' 기가 바이트로 표현될 수 있으며, 여기서, 'X'는 인코딩 그리고/또는 압축된 데이터를 저장하는데 사용되는 공간의 양이고, 'Y'는 압축율(압축(및 가능한 인코딩)을 사용하여 감소된 데이터 저장량)을, 'Z'는 선택률(압축되지 않은 데이터에서 얼마나 많은 데이터가 선택되는지)이다. 유사하게, 데이터가 인스토리지 프로세서(315)로부터 프로세서(110)로 전송될 수 있는 유효 속도는 'B*Y*Z' 바이트/초(byte/second)가 된다.In contrast, if the in-storage processor (315) is used to pre-process the data to reduce the amount of data transmitted to the processor 110, less raw data will be transmitted. Can (since the storage processor 315 is more selective about the data being transmitted). Meanwhile, the instorage processor 315 processes the data by decompressing it. (You can also decode the data if possible). Thus, the amount of data to be transmitted from the instorage processor 315 to the processor 110 may be reduced by selection of data, but may also be increased by the amount of compression (and possibly encoding): algebraically, the instorage Data to be transmitted from the processor 315 to the processor 110 (shown through the arrow 320) may be expressed in'X*Y*Z' gigabytes, where'X' is encoded and/or compressed The amount of space used to store the data,'Y' is the compression rate (reduced data storage using compression (and possibly encoding)), and'Z' is the selectivity (how much data is selected from the uncompressed data). )to be. Similarly, the effective rate at which data can be transferred from the instorage processor 315 to the processor 110 is'B*Y*Z' bytes/second.

두 공식의 간단한 비교는 인스토리지 프로세서(315)를 사용하여 프로세서(110)로 전송할 데이터를 선택하는 것이 'X*Y*Z < X(또는 B*Y*Z < B)' 일 때, 즉 'Y*Z < 1'일 때 우수함을 보여준다. 그렇지 않으면, 인스토리지 프로세서(315)에 의해 전처리 후 전송될 데이터의 양은 인스토리지 프로세서(315)가 선택성을 적용하지 않아도 인코딩 그리고/또는 압축된 데이터의 양보다 크다: 즉, 인스토리지 프로세서(315)가 프로세서(110)로 전송할 데이터를 선택하려고 시도하는 것보다 원래의 인코딩 그리고/또는 압축된 데이터를 전송하는 것이 더 효율적이다.A simple comparison of the two formulas is when the selection of data to be transmitted to the processor 110 using the Instore processor 315 is'X*Y*Z <X (or B*Y*Z <B)', that is, ' It shows excellence when Y*Z <1'. Otherwise, the amount of data to be transmitted after pre-processing by the instorage processor 315 is greater than the amount of encoded and/or compressed data even if the instorage processor 315 does not apply selectivity: that is, the instorage processor 315 It is more efficient to transmit the original encoded and/or compressed data than to attempt to select the data to be transmitted to the processor 110.

도 4는 본 발명의 실시 예에 따른 트랜스코딩 데이터를 교환하는 도 1의 스토리지 장치(120) 및 도 1의 프로세서(110)를 보여준다. 도 4에 도시된 바와 같이, 인코딩 그리고/또는 압축된 데이터는 스토리지(305)에 저장된다(다시, 스토리지(305)는 하드 디스크 드라이브의 플래터, SSD와 같은 플래시 메모리 스토리지 장치의 플래시 메모리 칩, 또는 몇몇 물리적 데이터 스토리지). 이 데이터(압축된 데이터(405))는 압축 해제기(410)로 전달될 수 있으며, 이 압축 해제기(410)는 데이터를 압축 해제하여 압축 해제된 데이터(415)를 생성할 수 있다. 압축 해제기(410, 또는 압축 해제 엔진)는 하드웨어 압축 해제나 적절한 회로(범용 프로세서, FPGA(Field Programmable Gate Array), ASIC(Application-Specific Integrated Circuit), GPU(Graphics Processing Unit) 또는 GPGPU(General Purpose GPU)에서 실행되는 소프트웨어를 사용하여 구현될 수 있다. 압축 해제 데이터(415)는 인코딩 및 압축이 별도의 프로세스일 수 있기 때문에 추가적으로 인코딩될 수 있다. 압축 해제된 데이터(415)는 데이터에 대한 트랜스코딩을 수행하는 트랜스코더(420)로 전달될 수 있다. 트랜스코딩은 하나의 인코딩에서 다른 인코딩으로 데이터를 변환하는 프로세스로 생각할 수 있다.4 illustrates the storage device 120 of FIG. 1 and the processor 110 of FIG. 1 for exchanging transcoding data according to an embodiment of the present invention. As shown in Figure 4, the encoded and/or compressed data is stored in the storage 305 (again, the storage 305 is a platter of a hard disk drive, a flash memory chip of a flash memory storage device such as an SSD, or Some physical data storage). This data (compressed data 405) may be transmitted to the decompressor 410, and the decompressor 410 may decompress the data to generate the decompressed data 415. The decompressor (410, or decompression engine) is a hardware decompression or appropriate circuit (general purpose processor, Field Programmable Gate Array (FPGA), Application-Specific Integrated Circuit (ASIC), Graphics Processing Unit (GPU)), or General Purpose GPU) can be implemented using software running on the GPU) Decompressed data 415 can be additionally encoded because encoding and compression can be separate processes. Decompressed data 415 is trans for data. It may be transmitted to a transcoder 420 that performs coding. Transcoding can be thought of as a process of converting data from one encoding to another.

상술한 모든 프로세스들은 스토리지 장치(120) 내에서 발생할 수 있다. 트랜스코더(420)가 압축 해제된 데이터(415)를 처리하고 트랜스코딩된 데이터(425)를 생성하면, 트랜스코딩된 데이터(425)는 호스트 컴퓨터(105)에 제공될 수 있다. 디코더(430)는 트랜스코딩된 데이터(425)를 디코딩하여 필터링된 플레인 데이터(435)를 생성할 수 있다. 필터링된 플레인 데이터(435)는 프로세서(110)에 제공될 수 있으며, 그 후 필터링된 플레인(plain) 데이터(435)에 대해 원하는 동작이 수행될 수 있다.All of the above-described processes may occur within the storage device 120. When the transcoder 420 processes the decompressed data 415 and generates the transcoded data 425, the transcoded data 425 may be provided to the host computer 105. The decoder 430 may generate the filtered plane data 435 by decoding the transcoded data 425. The filtered plane data 435 may be provided to the processor 110, and then a desired operation may be performed on the filtered plain data 435.

디코더(430)가 트랜스코딩된 데이터(425)를 디코딩하는 것은 트랜스코딩된 데이터(425)에 적용된 인코딩에 관한 무언가를 아는 것을 포함할 수 있음을 주목해야 한다. 이 정보는, 예를 들어, 트랜스코딩된 데이터(425)에 사용된 특정 인코딩 방식, 또는 트랜스코딩된 데이터(425)에 사용된 사전을 포함할 수 있다. 도 4는 이 정보가 스토리지 장치(120)로부터 호스트 컴퓨터(105)로 전달되는 것을 미도시하였지만, 이 정보는 트랜스코딩된 데이터(425)와 병렬로(또는 그 일부로서) 호스트 컴퓨터(105)로 전달될 수 있다. 물론, 트랜스코딩된 데이터(425)는 실제로 인코딩되지 않고 압축되지 않은 경우(트랜스코더(420)의 연산 결과가 인코딩되지 않고 압축되지 않은 데이터를 전송하는 것보다 더 많은 수의 실제 바이트를 전송하는 경우 발생할 수 있음), 트랜스코딩된 데이터(425)는 인코딩 방식 또는 사전에 관한 정보를 생략할 수 있다.It should be noted that decoding the transcoded data 425 by the decoder 430 may include knowing something about the encoding applied to the transcoded data 425. This information may include, for example, a particular encoding scheme used for transcoded data 425, or a dictionary used for transcoded data 425. 4 does not show this information being transferred from the storage device 120 to the host computer 105, this information is transferred to the host computer 105 in parallel (or as part of) the transcoded data 425. Can be delivered. Of course, if the transcoded data 425 is not actually encoded and not compressed (if the result of the operation of the transcoder 420 is not encoded and transmits a larger number of actual bytes than the uncompressed data is transmitted) May occur), the transcoded data 425 may omit information on an encoding method or dictionary.

이 시점에서, 인코딩과 압축의 차이점을 논의할 가치가 있다. 데이터 저장에 사용되는 스토리지 양을 줄이려는 두 가지 개념이 관련되어 있지만, 몇 가지 차이점이 있다. 인코딩에는 직접 포함하는 데 너무 길고 비교적 적은 수의 구별되는 값들을 갖는 데이터에 인덱스를 제공하는 사전을 사용하는 것을 일반적으로 수반한다. 예를 들어, 약 195개의 다른 국가가 있다. 데이터가 많은 수의 사람들의 시민권에 대한 정보를 저장한 경우, 각 사람의 국적을 직접 포함하는 것은 최소한 몇 바이트(국가의 이름에서 문자 당 1 바이트로 가정)를 사용하는 등 많은 양의 공간을 사용하게 된다. 반면, 1-195의 값은 모두 단일 바이트를 사용하여 표현될 수 있다. 사전을 사용하여 국가 이름을 나타내고, 적합한 국가 이름의 인덱스를 데이터에 저장하면, 정보 손실없이 저장될 데이터의 양이 크게 줄어들 수 있다. 예를 들어, "미국, 미국, 한국, 한국, 한국, 중국, 인도, 중국, 중국, 중국, 중국, 중국, 미국"이라는 정보는 표 1에 도시된 바와 같이 사전으로 대신 표시될 수 있으며, "3, 3, 2, 2, 2, 2, 0, 1, 0, 0, 0, 0, 0, 3"으로 표시되어 153 글자에서 40글자로 줄어든다. 사전에 52글자를 사용하는 것을 고려해도, 간단히 사전을 사용하는 것은 비용을 크게 절약할 수 있다.At this point, it is worth discussing the difference between encoding and compression. There are two concepts involved in reducing the amount of storage used to store data, but there are some differences. Encoding generally entails using dictionaries that provide indexes to data that are too long to contain directly and have a relatively small number of distinct values. For example, there are about 195 different countries. If the data stores information about the citizenship of a large number of people, including each person's nationality directly uses a large amount of space, including at least a few bytes (assuming 1 byte per character in the country's name). Is done. On the other hand, the values of 1-195 can all be expressed using a single byte. By using a dictionary to represent country names and storing an index of appropriate country names in the data, the amount of data to be stored can be greatly reduced without loss of information. For example, the information "United States, United States, Korea, Korea, Korea, China, India, China, China, China, China, China, United States" may instead be displayed as a dictionary as shown in Table 1, and " 3, 3, 2, 2, 2, 2, 0, 1, 0, 0, 0, 0, 0, 3" is displayed, reducing from 153 characters to 40 characters. Even if you consider using 52 characters in a dictionary, simply using a dictionary can save you a lot of money.

IDID 국가country 00 중국(China)China 1One 인도(India)India 22 한국(Korea)Korea 33 미국(United States of America)United States of America

사전의 값은 사전이 되는 값의 수가 클수록 줄어들 수 있다. 예를 들어, 1,000,000개의 서로 다른 가능한 값이 있는 경우, 각 인덱스는 20비트를 사용하여 저장될 수 있다. 물론, 이것은 여전히 값을 직접 저장하는 데 사용되는 비트 수보다 적을 수 있지만, (인코딩되지 않은 데이터를 저장하는 것과 관련된) 인코딩의 이점이 줄어들 수 있다. 그리고 데이터의 각 항목에 대해 저장된 값이 고유하거나 인덱스를 저장하는 데 사용된 공간의 크기가 값을 저장하는 데 사용된 공간의 크기와 거의 동일한 경우, 사전을 사용하는 인코딩을 사용하는 것은 저장될 데이터의 양을 실제로 증가시킬 수 있다. 계속해서, 사람들에 관한 데이터의 예를 들면, 사전을 사용하여 나이를 저장하는 것은 나이를 직접 저장하는 것보다 더 효율적이지는 않다.The dictionary value may decrease as the number of dictionary values increases. For example, if there are 1,000,000 different possible values, each index can be stored using 20 bits. Of course, this may still be less than the number of bits used to store the value directly, but the benefits of encoding (related to storing unencoded data) may be diminished. And if the stored value for each item of data is unique, or if the amount of space used to store the index is approximately the same as the amount of space used to store the value, then using an encoding using a dictionary is the data to be stored. You can actually increase the amount of Going on, storing age using, for example, a dictionary of data about people, is not more efficient than storing age directly.

반면에 압축은 일반적으로 호프만 코드(Huffman code)와 같은 코딩 방식을 사용한다. 각 데이터의 상대적인 빈도를 결정하기 위해 데이터가 분석되어, 더 빈번한 데이터에 더 짧은 코드가 할당되고 덜 빈번한 데이터에 더 긴 코드가 할당된다. 모스 코드(Morse code)는 호프만 코드는 아니지만, 더 빈번한 데이터에는 짧은 시퀀스를 사용하고 덜 빈번한 데이터에는 긴 시퀀스를 사용하는 잘 알려진 코드의 예이다. 예를 들어, 문자 "E"는 시퀀스 "점(dot)"(공백이 이어지는)으로 표시될 수 있는 반면, 문자 "J"는 시퀀스 "점dot 대쉬(dash) 대쉬 대쉬"(공백이 이어지는)로 표시될 수 있다. (모스 코드는 공백을 사용하여 한 기호가 끝나고 다른 기호가 시작되는 위치를 나타내며, 그리고 한 기호에 대한 시퀀스는 다른 기호에 대한 시퀀스의 접두사일 수 있기 때문에("E"는 점으로 표시되지만, 반면 "J"는 점으로 시작되지만 다른 기호들을 포함한다), 모스 코드는 적절한 호프만 코드는 아니다. 하지만, 많은 사람들이 모스 코드에 어느 정도 익숙하기 때문에 더 빈번한 데이터를 위해 더 짧은 기호를 사용하고, 덜 빈번한 데이터에 대한 기호로 더 긴 코드를 사용하는 코드의 일반적인 유용한 예가 되게 한다).On the other hand, compression generally uses the same coding scheme as Huffman code. The data is analyzed to determine the relative frequency of each data, so that shorter codes are assigned to more frequent data and longer codes are assigned to less frequent data. Morse code is not a Hoffman code, but is an example of a well-known code that uses a short sequence for more frequent data and a long sequence for less frequent data. For example, the letter "E" can be represented by the sequence "dot" (followed by spaces), while the letter "J" is represented by the sequence "dot dash dash" (followed by spaces). Can be displayed. (The Morse code uses spaces to indicate where one symbol ends and the other begins, and because a sequence for one symbol can be a prefix of a sequence for another symbol ("E" is indicated by a dot, whereas "J" starts with a dot but includes other symbols), Morse code is not an appropriate Hoffman code, but many people are somewhat familiar with Morse code, so they use shorter symbols for more frequent data, and less This makes it a common useful example of code that uses longer codes as symbols for frequent data).

다시 인코딩 방식으로 돌아가서, 사전이 설정되면, 데이터를 추가적으로 인코딩하는 데 사용할 수 있는 여러 가지 다른 인코딩 방식이 존재한다. 이러한 인코딩 방식의 예는 런 길이 인코딩(Run Length Encoding: 이하, RLE), 비트 패킹, 프리픽스 인코딩, 클러스터 인코딩, 스파스 인코딩 및 간접 인코딩을 포함한다: 본 발명의 실시 예는 다른 인코딩 방식을 또한 사용할 수도 있다. 런 길이 인코딩(RLE) 및 비트 패킹은 나중에 다양한 예제에서 사용되므로 여기에서 설명한다; 다른 인코딩 방식에 관한 정보는 쉽게 찾을 수 있다.Going back to the encoding scheme, once the preset is set, there are several different encoding schemes that can be used to further encode the data. Examples of such encoding schemes include Run Length Encoding (RLE), bit packing, prefix encoding, cluster encoding, sparse encoding and indirect encoding: Embodiments of the present invention also use other encoding schemes. May be. Run length encoding (RLE) and bit packing are described here as they are used later in various examples; Information on other encoding schemes is easy to find.

RLE(Run Length Encoding)는 값이 종종 그룹으로 발생한다는 전제에 의존한다. 각 값을 별도로 저장하는 대신, 그 값의 단일 카피가 해당 값이 데이터에서 얼마나 자주 발생했는지를 나타내는 숫자와 함께 저장될 수 있다. 예를 들면, 값 "2"가 연속으로 4번 발생한 경우, 값 "2"를 네 번 저장(4 바이트의 스토리지를 사용할 수 있는)하는 대신에 값 "2"의 발생 횟수("4")와 함께 저장될 수 있다(2 바이트의 스토리지를 사용할 수 있음). 따라서, 위의 예를 계속하면, 시퀀스 "3, 3, 2, 2, 2, 2, 0, 1, 0, 0, 0, 0, 0, 3"은 "[2, RLE], 3, [4, RLE] 2, [1, RLE] 0, [1, RLE], 1, [5, RLE], 0, [1, RLE], 3"으로 나타낼 수 있다. "[2, RLE], 3"인코딩은 RLE를 사용하여 인코딩된 정보가 있음을 의미하는 것으로 이해될 수 있다: 값은 "3"이고, 이 값은 2회 반복된다; 다른 RLE 인코딩은 비슷하다. (표현에 RLE 인코딩이 사용된다는 표시자가 포함되는 이유는 아래의 도 7을 참조하여 논의된 하이브리드 인코딩 방식의 잠재적 사용과 관련이 있다.) 이 시퀀스는 총 12 바이트를 사용할 수 있다: 각 인코딩에 대해 1 바이트는 다음 값이 반복되는 횟수를 저장하고, 1 바이트는 반복할 값을 저장한다.Run Length Encoding (RLE) relies on the premise that values often occur in groups. Instead of storing each value separately, a single copy of that value can be stored with a number indicating how often that value occurred in the data. For example, if the value "2" occurs 4 times in a row, instead of storing the value "2" four times (4 bytes of storage are available), the number of occurrences of the value "2" ("4") and Can be stored together (2 bytes of storage available). Therefore, continuing the above example, the sequence "3, 3, 2, 2, 2, 2, 0, 1, 0, 0, 0, 0, 0, 3" is "[2, RLE], 3, [ 4, RLE] 2, [1, RLE] 0, [1, RLE], 1, [5, RLE], 0, [1, RLE], 3". "[2, RLE], 3" encoding can be understood to mean that there is information encoded using RLE: the value is "3", and this value is repeated twice; Other RLE encodings are similar. (The reason for the inclusion of an indicator that RLE encoding is used in the expression is related to the potential use of the hybrid encoding scheme discussed with reference to Figure 7 below.) This sequence can use a total of 12 bytes: for each encoding 1 byte stores the number of times the next value is repeated, and 1 byte stores the value to be repeated.

원래 시퀀스를 저장하기 위한 14 바이트와 비교할 때, 12 바이트는 데이터를 저장할 공간의 크기를 크게 줄이지 않는다. 그러나 비례적으로 이 인코딩은 이 데이터에 필요한 스토리지 양이 약 14%를 줄여줄 수 있음을 나타낸다. 약 5GB를 차지하는 데이터가 사용되는 스토리지에서 약 14%가 감소하더라도 상당한 절약이며, 약 700MB가 절약될 수 있다.Compared to the 14 bytes for storing the original sequence, 12 bytes does not significantly reduce the amount of space to store the data. However, proportionally, this encoding indicates that the amount of storage required for this data can be reduced by about 14%. Even a 14% reduction in the storage used for data occupying about 5GB is a significant saving, and about 700MB can be saved.

각 값의 발생 횟수에 대한 대안으로서, 각 그룹의 시작 위치가 저장될 수 있다. 각 값의 발생 횟수 대신 시작 위치를 사용하는 경우, 데이터는 "[0, RLE], 3, [2, RLE] 2, [6, RLE] 0, [7, RLE], 1, [8, RLE], 0, [13, RLE], 3"로 나타낼 수 있다.As an alternative to the number of occurrences of each value, the starting position of each group can be stored. When using the starting position instead of the number of occurrences of each value, the data is "[0, RLE], 3, [2, RLE] 2, [6, RLE] 0, [7, RLE], 1, [8, RLE ], 0, [13, RLE], 3".

상술한 논의는 RLE을 사용하여 반복되는 값이 단일 바이트에 맞는 상황을 설명한다. 그렇지 않은 경우, 예를 들어, 반복되는 값이 "1000"인 경우("1000"은 10 비트를 사용하여 저장할 수 있음)에는 어떻게 될까? 이 경우 RLE는 7 비트 그룹으로 값을 직렬화할 수 있다. 바이트에서 최상위 비트일 수 있는 각 바이트의 8 번째 비트는 바이트가 다른 바이트에서 계속되는지 여부를 나타낼 수 있다.The above discussion describes a situation where a repeated value fits a single byte using RLE. If not, what if, for example, the repeated value is "1000" ("1000" can be stored using 10 bits)? In this case, the RLE can serialize the values into groups of 7 bits. The eighth bit of each byte, which may be the most significant bit in the byte, may indicate whether the byte continues in another byte.

예를 들어, 값 "1000"을 고려하기로 하자. "1000" 값은 이진수로 "11 1110 1000"으로 표현될 수 있다. 이 표현은 10 비트를 사용하기 때문에 단일 바이트에 저장하기에는 값이 너무 클 수 있다. 따라서, 값은 7 비트의 그룹들로 나눌 수 있다(각 그룹에 7 비트를 포함하도록 리딩 '0'들이 추가됨): "0000111 1101000". 이제, 시퀀스의 첫 번째 바이트 앞에 "1"을 붙여서 그 값이 나타내는 값은 다음 바이트에서 계속됨을 나타내며, 시퀀스의 두 번째 바이트 앞에 "0"을 붙여 그 값이 그 바이트에서 끝나는 것을 나타낼 수 있다. 따라서, 비트 시퀀스는 "10000111 01101000"이 된다. 시스템이 이 비트 시퀀스를 읽을 때, 시스템은 각 바이트에서 최상위 비트를 보고 그 값이 해당 바이트 이상으로 지속되는지 또는 해당 바이트로 끝나는지를 확인하고, 비트 시퀀스를 값으로 다시 어셈블 할 때 해당 비트를 제거하는 것을 알 수 있다. 따라서, "10000111 01101000"은 "0000001111101000"이 되며(두 개의 추가 리딩 0을 추가하여 표현을 최대 2 바이트까지 가져옴), 원래 값 "1000"을 복구할 수 있다.For example, consider the value "1000". The value of "1000" may be expressed as "11 1110 1000" in binary. Since this representation uses 10 bits, the value can be too large to store in a single byte. Thus, the value can be divided into groups of 7 bits (leading '0's are added to include 7 bits in each group): "0000111 1101000". Now, by prefixing the first byte of the sequence with "1" to indicate that the value represented by the value continues in the next byte, and by prefixing the second byte of the sequence with "0" to indicate that the value ends at that byte. Thus, the bit sequence becomes "10000111 01101000". When the system reads this sequence of bits, the system looks at the most significant bit in each byte to see if the value persists beyond that byte or ends with that byte, and removes that bit when reassembling the sequence of bits into values. Can be seen. Thus, "10000111 01101000" becomes "0000001111101000" (2 additional leading 0s are added to bring the expression up to 2 bytes), and the original value "1000" can be restored.

물론, 각 바이트에서 하나의 비트가 바이트 값의 연속인지 여부를 식별하는 데 사용되는 경우, 해당 비트는 값의 일부로 사용되지 않을 수 있다. 따라서, 값이 단일 바이트에 맞더라도 다른 바이트에서 값이 계속되지 않음을 나타내는 추가 비트가 포함될 수 있다. 또한, 값이 8 비트에 맞지만 7 비트에는 맞지 않는 경우(예를 들면, 128에서 255 사이의 값), 다음 바이트에서 값을 계속 사용할지 여부를 나타내는 비트를 사용할 때 2 바이트를 사용하여 전체 값을 나타낼 수 있다(값의 최상위 비트가 인코딩에서 다음 7 비트 그룹으로 이동하기 때문에).Of course, when one bit in each byte is used to identify whether a byte value is consecutive, the corresponding bit may not be used as a part of the value. Thus, even if the value fits in a single byte, an additional bit may be included indicating that the value does not continue in other bytes. Also, if the value fits 8 bits but not 7 bits (e.g., a value between 128 and 255), 2 bytes are used when using a bit indicating whether to continue using the value in the next byte. Can be represented (since the most significant bit of the value moves to the next 7-bit group in the encoding).

RLE를 사용할 때, 비트 그리고/또는 바이트는 임의의 원하는 순서로 제시될 수 있다. 예를 들어, 비트는 최상위 비트에서 최하위 비트로, 또는 최하위 비트에서 최상위 비트로 제공될 수 있으며; 바이트는 두 가지 방식으로 비슷하게 정렬될 수 있다. 따라서, 예를 들어, 바이트가 최하위에서 최상위로 제시되지만, 각 바이트의 비트가 최상위에서 최하위로 제시되고 연속 비트를 사용하는 경우, 값 "16384"는 "10000000 10000000 00000001"로 인코딩될 수 있다. 이 비트 시퀀스는 다음과 같이 해석될 수 있다: 각 바이트의 첫 번째 비트는 연속 비트이다("1"은 다음 바이트가 값을 계속함을 나타내고, "0"은 값이 다음 바이트에서 계속되지 않음을 나타냄). 연속 비트를 제거한 후 남은 것은 "0000000 0000000 0000001"이다. 바이트가 최상위에서 최하위로 재정렬될 때(및 선행 '0'들을 버림으로써 기존의 8 비트 그룹으로 재구성), 값은 "01000000 00000000"이 되고, 이는 값 "16384"의 이진수에 대응한다. When using RLE, bits and/or bytes can be presented in any desired order. For example, a bit may be provided from most significant bit to least significant bit, or from least significant bit to most significant bit; Bytes can be sorted similarly in two ways. Thus, for example, if a byte is presented from lowest to highest, but the bits of each byte are presented from highest to lowest and consecutive bits are used, the value “16384” may be encoded as “10000000 10000000 00000001”. This sequence of bits can be interpreted as follows: the first bit of each byte is a contiguous bit ("1" indicates that the next byte continues the value, "0" indicates that the value does not continue in the next byte). Indicates). After removing consecutive bits, the remaining is "0000000 0000000 0000001". When the bytes are rearranged from highest to lowest (and reconstructed into an existing 8-bit group by discarding leading '0s'), the value becomes "01000000 00000000", which corresponds to the binary number of the value "16384".

반면, 비트 패킹(Bit Packing)은 값이 전체 바이트보다 적은 비트를 사용할 수 있다는 아이디어를 이용한다. 예를 들어, 저장될 값이 0, 1, 2 및 3을 포함하는 경우, 2 비트가 각각의 값을 나타내는데 사용될 수 있다. 전체 바이트는 각 값을 저장하는 데 사용될 수 있지만, 전체 바이트를 사용한다는 것은 스토리지의 75%가 실제로 사용되지 않음을 의미한다. 비트 패킹은 단일 바이트(또는 바이트 시퀀스)에 하나 이상의 값을 저장하여 이 현상을 활용한다. 비트 패킹은 값 시퀀스가 단일 값이 아닌 반복될 때 특히 유리하다.On the other hand, bit packing uses the idea that bits with a value less than the entire byte can be used. For example, if the value to be stored includes 0, 1, 2 and 3, 2 bits can be used to represent each value. The whole byte can be used to store each value, but using the whole byte means 75% of the storage is actually not used. Bit packing exploits this phenomenon by storing more than one value in a single byte (or sequence of bytes). Bit packing is particularly advantageous when a sequence of values is repeated rather than a single value.

예를 들어, 시퀀스 "0, 1, 0, 1, 0, 1, 0, 1"을 고려하고, 약 4 비트를 사용하여 각 값을 고유하게 식별하는 상황(즉, 15보다 큰 값은 사용되지 않음)을 고려하자. 각 값을 별도로 저장하는 대신(총 8 바이트 필요), "[4, BP] 0, 1" 인코딩을 사용할 수 있다. 이 인코딩은 단일 바이트가 값 "0"을 나타내는 4 비트와 값 "1"을 나타내는 4 비트를 저장하고, 그 바이트가 4번 반복됨을 나타낸다. (RLE 인코딩과 같이, 비트 패킹 인코딩은 데이터가 하이브리드 인코딩 방식에서 사용하기 위해 비트 패킹을 사용하여 인코딩되었다는 표시자를 포함할 수 있다.) 첫 번째 바이트는 그룹의 데이터가 반복되는 횟수를 나타내고; 두 번째 바이트는 그룹 자체에 값을 저장한다. 이 인코딩은 데이터를 저장하기 위해 약 2바이트를 사용할 수 있으며, 그 결과 시퀀스에 사용되는 스토리지 양이 약 75% 감소한다.For example, consider the sequence "0, 1, 0, 1, 0, 1, 0, 1", and use about 4 bits to uniquely identify each value (ie, values greater than 15 are not used. Not). Instead of storing each value separately (requires a total of 8 bytes), you can use "[4, BP] 0, 1" encoding. This encoding indicates that a single byte stores 4 bits representing the value "0" and 4 bits representing the value "1", and that the byte is repeated 4 times. (Like RLE encoding, bit packing encoding may include an indicator that the data has been encoded using bit packing for use in a hybrid encoding scheme.) The first byte indicates the number of times the data in the group is repeated; The second byte stores the value in the group itself. This encoding can use about 2 bytes to store the data, resulting in a 75% reduction in the amount of storage used for the sequence.

비트 패킹을 사용할 때, 데이터는 임의의 원하는 방식으로 패킹될 수 있다. 예를 들면, 각 값이 4 비트를 사용하는 시퀀스 "0, 1"을 패킹할 때, 시퀀스는 "00010000"(최하위 비트에서 최상위 비트로 값을 패킹) 또는 "00000001"(최상위 비트에서 최하위 비트로 값을 패킹)로 표현될 수 있다. 비트 패킹의 일부 구현은 두 가지 전략 중 하나를 사용할 수 있지만 비트가 스트림에 배치되는 순서를 반대로 한다(최하위 비트에 해당하는 것이 먼저 오도록). 비트 패킹에서 비트를 패킹하기 위해 다른 기술이 사용될 수도 있다.When using bit packing, data can be packed in any desired manner. For example, when packing a sequence "0, 1" where each value uses 4 bits, the sequence would be "00010000" (packing the value from least significant bit to most significant bit) or "00000001" (from least significant bit to least significant bit). Packing). Some implementations of bit packing can use one of two strategies, but reverse the order in which the bits are placed in the stream (so that the least significant bit comes first). Other techniques may be used to pack bits in bit packing.

물론, 비트 패킹은 단일 바이트에 맞는 그룹을 제한하지 않는다. RLE와 마찬가지로, 비트 패킹의 값은 비트를 사용하여 값이 다음 바이트에서 계속되는지 여부를 식별할 수 있다.Of course, bit packing does not limit groups that fit into a single byte. Like RLE, the value of bit packing can use bits to identify whether the value continues in the next byte.

인코딩과 압축 모두는 데이터 표현을 저장하는데 사용되는 공간을 줄이려고 하기 때문에, 그 이점이 배가되지 않을 수 있다. 인코딩과 압축 모두 데이터 저장에 사용되는 공간을 줄이는 것을 시도한다. 그러나 데이터가 (인코딩과 같은) 한 가지 방식으로 압축되면, (압축과 같은) 다른 압축 방식을 적용하는 것이 도움이 되지 않을 수 있다. 압축은 데이터가 인코딩된 후 데이터에 적용될 수 있으며, 여전히 사용되는 저장 공간의 양을 약간 감소시킬 수 있지만, 인코딩 데이터에 대한 압축의 영향은 인코딩되지 않은 데이터에 대한 압축의 이점보다 적을 수 있다. (압축되는 데이터에 관계없이 데이터를 압축하는 모든 방식을 동일한 이점으로 적용할 수 있다면, 단순히 반복된 압축 방식을 적용하는 것만으로도 임의의 모든 데이터를 엄청나게 작은 크기로 줄일 수 있기를 희망할 것이다. 조금만 생각해 보면 쉽게 명백한 것처럼, 그러한 결과는 현실 세계에서는 현실적이지 않다.)Since both encoding and compression try to reduce the space used to store the data representation, the benefits may not be doubled. Both encoding and compression try to reduce the space used for data storage. However, if data is compressed in one way (such as encoding), applying another compression method (such as compression) may not help. Compression can be applied to the data after it has been encoded and can still slightly reduce the amount of storage space used, but the effect of compression on encoded data may be less than the benefit of compression on unencoded data. (If all methods of compressing data, regardless of the data being compressed, can be applied to the same advantage, we would hope to be able to reduce all arbitrary data to an incredibly small size simply by applying repeated compression methods. As is readily apparent with a little thought, such results are not realistic in the real world.)

도 5는 도 1의 스토리지 장치(120)의 세부 사항을 보여준다. 도 5를 참조하면, 스토리지 장치(120)는 SSD로 도시되어 있지만, 본 발명의 실시 예는 적절한 수정으로 스토리지 장치(120)를 위한 다른 형태를 지원할 수 있다. 도 5에 도시된 바와 같이, 스토리지 장치(120)는 호스트 인터페이스 계층(505, HIL), SSD 컨트롤러(510) 및 다양한 플래시 메모리 칩들(515-1 내지 515-8, 또한 "플래시 메모리 스토리지"라고도 함)을 포함할 수 있으며, 이는 다양한 채널들 (520-1에서 520-4까지)로 연결될 수 있다. 호스트 인터페이스 계층(505)은 스토리지 장치(120)와 도 1의 머신(105) 사이의 통신을 관리할 수 있다. 이들 통신은 스토리지 장치(120)로부터 데이터를 독출하기 위한 그리고 스토리지 장치(120)에 데이터를 쓰기 위한 요청들을 포함할 수 있다. SSD 컨트롤러(510)는 플래시 메모리 컨트롤러(도 5에 도시되지 않음)를 사용하여 플래시 메모리 칩들(515-1~515-8) 상의 가비지 컬렉션 및 다른 동작과 함께 읽기 및 쓰기 동작을 관리할 수 있다.5 shows details of the storage device 120 of FIG. 1. Referring to FIG. 5, the storage device 120 is shown as an SSD, but an embodiment of the present invention may support other forms for the storage device 120 with appropriate modifications. As shown in FIG. 5, the storage device 120 is a host interface layer 505 (HIL), an SSD controller 510, and various flash memory chips 515-1 to 515-8, also referred to as “flash memory storage”. ), which can be connected to various channels 520-1 to 520-4. The host interface layer 505 may manage communication between the storage device 120 and the machine 105 of FIG. 1. These communications may include requests to read data from storage device 120 and to write data to storage device 120. The SSD controller 510 may manage read and write operations along with garbage collection and other operations on the flash memory chips 515-1 to 515-8 using a flash memory controller (not shown in FIG. 5 ).

SSD 컨트롤러(510)는 변환 계층(525, 플래시 변환 계층(FTL)이라고도 함)을 포함할 수 있다. 변환 계층(525)은 도 1의 머신(105)에 의해 제공되는 논리 블록 어드레스(LBA)를 데이터가 실제로 저장되는 SSD(120)의 물리적 블록 주소 (PBA) 변환하는 기능을 수행할 수 있다. 이러한 방식으로, 도 1의 머신(105)은 데이터가 실제로 저장되는 스토리지 장치(120) 상의 물리적 주소를 알 필요없이 자신의 고유 주소 공간을 사용하여 데이터를 참조할 수 있다. 이는, 예를 들어, 데이터가 업데이트될 때 유리할 수 있다: 스토리지 장치(120)는 데이터를 원래 위치에서 업데이트하지 않을 수 있기 때문에, 스토리지 장치(120)는 기존 데이터를 무효화하고 스토리지 장치(120)상의 새로운 PBA에 업데이트를 기록할 수 있다. 또는, 가비지 컬렉션을 위해 선택된 블록에 데이터가 저장되어 있는 경우, 그 데이터는 블록이 소거되기 전에 스토리지 장치(120)상의 새로운 블록에 기록될 수 있다. 변환 계층(525)을 업데이트함으로써, 도 1의 머신(105)은 데이터가 다른 물리 블록 어드레스(PBA)로 이동함에 따라 데이터가 실제로 저장되는 위치와는 분리되어 있다.The SSD controller 510 may include a conversion layer 525 (also referred to as a flash conversion layer (FTL)). The translation layer 525 may perform a function of converting a logical block address (LBA) provided by the machine 105 of FIG. 1 to a physical block address (PBA) of the SSD 120 in which data is actually stored. In this way, the machine 105 of FIG. 1 can refer to data using its own address space without needing to know the physical address on the storage device 120 where the data is actually stored. This can be advantageous, for example, when data is updated: because the storage device 120 may not update the data in its original location, the storage device 120 invalidates the existing data and Updates can be written to the new PBA. Alternatively, when data is stored in a block selected for garbage collection, the data may be written to a new block on the storage device 120 before the block is erased. By updating the translation layer 525, the machine 105 of FIG. 1 is separated from the location where the data is actually stored as it moves to a different physical block address (PBA).

SSD 컨트롤러(510)는 또한 파일-블록 맵(530)을 포함할 수 있다. 파일-블록 맵(530)은 파일에 대한 데이터를 저장하는데 어떤 블록이 사용되는지를 지정할 수 있다. 파일-블록 맵(530)은, 예를 들어, 데이터가 칼럼 포맷으로 저장될 때 사용될 수 있다. 파일-블록 맵(530)은 변환 계층(525)의 일부일 수 있고(이 경우 파일-블록 맵(530)은 스토리지 장치(120)의 개별 컴포넌트로 간주되지 않을 수 있음), 또는 변환 계층(525)을 보완할 수 있거나(예를 들어, 변환 계층(525)은 비교적 적은 수의 블록을 사용하는 데이터에 사용되는 반면, 파일-블록 맵(530)은 비교적 많은 수의 블록을 사용하는 데이터에 사용될 수 있다), 또는 변환 계층(525)을 완전히 대체 할 수 있다(이 경우 변환 계층(525)은 SSD 컨트롤러(510)에 존재하지 않을 수 있음).The SSD controller 510 may also include a file-block map 530. The file-block map 530 may designate which block is used to store data for a file. The file-block map 530 may be used, for example, when data is stored in a column format. File-block map 530 may be part of transform layer 525 (in this case file-block map 530 may not be considered a separate component of storage device 120), or transform layer 525 (For example, the transform layer 525 is used for data using a relatively small number of blocks, while the file-block map 530 can be used for data using a relatively large number of blocks. Yes), or may completely replace the conversion layer 525 (in this case, the conversion layer 525 may not exist in the SSD controller 510).

SSD 컨트롤러(510)는 또한 트랜스코더(420)를 포함할 수 있다. 그러나 본 발명의 실시 예는 스토리지 장치(120) 내의 다른 곳에 트랜스코더(420)를 갖는 구성을 포함할 수 있다(예를 들어, 트랜스코더(420)는 많은 가능성들 중에서도 스토리지 장치(120) 내의 다른 곳의 범용 프로세서(적절한 소프트웨어를 실행), FPGA, ASIC, GPU, 또는 GPGPU를 사용하여 구현), 또는 심지어 스토리지 장치(120) 외부에 존재할 수도 있다.The SSD controller 510 may also include a transcoder 420. However, embodiments of the present invention may include a configuration having a transcoder 420 elsewhere in the storage device 120 (for example, the transcoder 420 may be A general purpose processor (implemented using an FPGA, ASIC, GPU, or GPGPU), or even external to the storage device 120.

스토리지 장치(120)는 또한 스토리지 장치(120)에 저장된 데이터를 사용하는 방법을 제어하는 명령어를 실행할 수 있는 도 3의 인스토리지 프로세서(315, 도 5에는 미도시됨)를 포함할 수 있다. 또한, 도 3의 인스토리지 프로세서(315)는 도 1의 프로세서(110) 대신에 스토리지 장치(120) 상에서 로컬로 동작을 실행하기 위해 인스토리지 컴퓨팅 기능을 위해 사용될 수 있다. 트랜스코더(420)와 같이, 도 3의 인스토리지 프로세서(315)는 스토리지 장치(120) 내의 어딘가에 위치하는 범용 프로세서(적절한 소프트웨어를 실행하는), FPGA, ASIC, GPU, 또는 GPGPU를 사용하거나, 심지어 스토리지 장치(120) 외부에 구현될 수도 있다.The storage device 120 may also include an instance processor 315 (not shown in FIG. 5) of FIG. 3 that can execute commands that control how to use data stored in the storage device 120. In addition, the instorage processor 315 of FIG. 3 may be used for an inventory computing function to execute an operation locally on the storage device 120 instead of the processor 110 of FIG. 1. Like the transcoder 420, the inventory processor 315 of FIG. 3 uses a general-purpose processor (running the appropriate software), FPGA, ASIC, GPU, or GPGPU, located somewhere within the storage device 120, or even It may be implemented outside the storage device 120.

도 5는 4 개의 채널(520-1 내지 520-4)로 구성되는 8개의 플래시 메모리 칩들(515-1 내지 515-8)을 포함하는 스토리지 장치(120)를 도시하고 있지만, 본 발명의 실시 예는 임의의 수의 채널로 구성된 임의의 수의 플래시 메모리 칩들을 지원할 수 있다. 유사하게, 도 5는 SSD 컨트롤러(510)가 트랜스코더(420) 그리고/또는 도 3의 인스토리지 프로세서(315)를 포함할 수 있음을 보여주지만, 본 발명의 실시 예는 도 5와 달리 트랜스코더(420) 또는 도 3의 인스토리지 프로세서(315)로 구성될 수 있다.Although FIG. 5 shows a storage device 120 including eight flash memory chips 515-1 to 515-8 configured with four channels 520-1 to 520-4, an embodiment of the present invention May support any number of flash memory chips configured with any number of channels. Similarly, FIG. 5 shows that the SSD controller 510 may include a transcoder 420 and/or the Insory processor 315 of FIG. 3, but the embodiment of the present invention is a transcoder unlike FIG. 5. It may be configured with 420 or the instorage processor 315 of FIG. 3.

도 6은 도 4의 트랜스코더(420)의 세부 사항을 보여준다. 도 6을 참조하면, 트랜스코더(420)는 입력 사전, 입력 스트림 및 인코딩 타입과 같은 다양한 입력을 수신하고, 출력 사전 및 출력 스트림과 같은 다양한 출력을 생성할 수 있다. 요컨대, 트랜스코더(420)는 인코딩 타입에 의해 지정된 인코딩 방식을 사용하여 인코딩될 수 있는 입력 스트림을 취하도록 동작할 수 있고, 출력 스트림을 생성할 수 있다. (입력 스트림이 인코딩될 수 있지만, 이하의 설명은 입력 스트림이 압축되지 않는 상황을 고려한다: 입력 스트림이 압축되면, 입력 스트림은 추가 처리 전에 압축해제될 것이다.) 출력 스트림은 입력 스트림과 동일한 인코딩 방식, 또는 상이한 인코딩 방식을 사용하여 인코딩될 수 있다(또는 둘 다: 이하에서 논의되는 바와 같이, 하이브리드 인코딩 방식이 사용될 때 일부 데이터는 하나의 인코딩 방식에서 다른 인코딩 방식으로 변경될 수 있다).6 shows details of the transcoder 420 of FIG. 4. Referring to FIG. 6, the transcoder 420 may receive various inputs such as an input dictionary, an input stream, and an encoding type, and may generate various outputs such as an output dictionary and an output stream. In short, transcoder 420 can operate to take an input stream that can be encoded using an encoding scheme specified by the encoding type, and can generate an output stream. (The input stream may be encoded, but the following description takes into account the situation where the input stream is not compressed: if the input stream is compressed, the input stream will be decompressed before further processing.) The output stream is encoded the same as the input stream. Scheme, or a different encoding scheme (or both: when a hybrid encoding scheme is used, as discussed below, some data may be changed from one encoding scheme to another).

또한, 입력 스트림과 출력 스트림간에 인코딩 방식이 변경되지 않아도 인코딩 자체가 변경될 수 있다. 예를 들어, 특정 값이 입력 및 출력 사전의 다른 인덱스에 지정된 경우, 사전의 변경 사항이 실제 데이터에 사용된 값에 반영되어야 한다. 이를 위해, 트랜스코더(420)는 또한 입력 사전을 가져 와서 출력 사전에 매핑할 수 있다.Also, the encoding itself can be changed even if the encoding method is not changed between the input stream and the output stream. For example, if certain values are assigned to different indexes in the input and output dictionaries, the changes in the dictionary must be reflected in the values used in the actual data. To this end, transcoder 420 may also take an input dictionary and map it to an output dictionary.

IDID 국가country 00 무정의(Don't Care)Don't Care 1One 미국(United States of America)United States of America

이 마지막 두 요점의 예로, 위의 표 1에 표시된 사전을 다시 고려하기로 하자. 이제 미국 시민에 관한 데이터에 관심이 있었던 도 1의 호스트 컴퓨터(105)가 있는 상황을 고려하기로 한다. 표 1은 입력 스트림에서 수신되는 데이터를 나타내므로 입력 사전으로 볼 수 있다. 한편, 표 2는 출력 스트림의 데이터를 나타내는 출력 사전일 수 있다. 표 2에 대해 3 가지 이상의 주의 사항이 있다. 첫째, 표 2는 표 1에 표시된 4 개의 항목과 비교하여 2 개의 항목을 포함한다. 둘째, 표 2에는 "무정의(Don't Care)"로 표시된 항목이 포함된다(다른 이름으로 사용되더라도, 이 시점에서는 대응하는 값으로 표현된 데이터는 도 1의 호스트 컴퓨터(105)에게 관심이 없기 때문에). 셋째, "미국(United States of America)"은 표 1에서 'ID3'을 가지고 있지만, "미국(United States of America)"은 표 2에서는 'ID1'을 갖는다. 이 마지막 주의 사항은 입력 스트림에서 'ID3'에 대한 참조가 출력 스트림에서는 'ID1'으로 변경될 수 있음을 의미한다(그렇지 않으면, 데이터가 의미가 없을 수 있음).As examples of these last two points, let's consider again the dictionary shown in Table 1 above. Now consider the situation with the host computer 105 of FIG. 1 that was interested in data about US citizens. Table 1 shows the data received from the input stream, so it can be viewed as an input dictionary. Meanwhile, Table 2 may be an output dictionary indicating data of an output stream. There are more than three caveats for Table 2. First, Table 2 contains two items compared to the four items shown in Table 1. Second, Table 2 includes items marked as "Don't Care" (even if they are used by other names, data expressed as corresponding values at this point are of interest to the host computer 105 of FIG. 1). Because there is no). Third, "United States of America" has'ID3' in Table 1, while "United States of America" has'ID1' in Table 2. This last caveat means that the reference to'ID3' in the input stream can be changed to'ID1' in the output stream (otherwise, the data may be meaningless).

이들 동작을 달성하기 위해, 트랜스코더(420)는 다양한 컴포넌트를 포함할 수 있다. 트랜스코더(420)는 서큘러 버퍼(605, Circular buffer), 스트림 스플리터(610), 인덱스 매퍼(615), 현재 인코딩 버퍼(620), 이전 인코딩 버퍼(625), 트랜스코딩 룰(630) 및 룰 평가기(635)를 포함할 수 있다.To achieve these operations, transcoder 420 may include various components. The transcoder 420 includes a circular buffer 605, a stream splitter 610, an index mapper 615, a current encoding buffer 620, a previous encoding buffer 625, a transcoding rule 630, and a rule evaluation. It may include groups 635.

서큘러 버퍼(605)는 도 1의 스토리지 장치(120) 내에 위치하는 도 3의 스토리지(305)로부터 오는 데이터 스트림을 수신할 수 있다. 처리할 데이터 전체가 클 수 있으므로(예를 들어, 몇 기가 바이트 또는 테라 바이트의 데이터) 한 번에 모든 데이터를 로드하여 일부 스토리지 내에서 처리하려고 하면 비현실적 일 수 있다. 따라서, 입력 스트림은 스트림으로서 수신되고 버퍼링되어, 데이터가 전체 데이터 세트보다 더 작은 단위로 처리될 수 있게해야 한다. 도 6은 버퍼(605)를 서큘러 버퍼로서 도시하지만, 본 발명의 실시 예는 입력 스트림으로부터 수신된 데이터를 저장하기 위해 임의의 유형의 버퍼를 사용할 수 있다.The circular buffer 605 may receive a data stream coming from the storage 305 of FIG. 3 located in the storage device 120 of FIG. 1. Since the entire data to be processed can be large (for example, a few gigabytes or terabytes of data), it can be impractical to load all the data at once and try to process it within some storage. Thus, the input stream must be received and buffered as a stream so that the data can be processed in smaller units than the entire data set. 6 shows buffer 605 as a circular buffer, embodiments of the present invention may use any type of buffer to store data received from the input stream.

스트림 스플리터(610)는 서큘러 버퍼(605)로부터 데이터를 취하여 그 데이터를 청크들로 분할할 수 있다. 청크는 이후 인덱스 매퍼(615)로 전달될 수 있다. 청크는 트랜스코더(420) 내의 다른 구성 요소에 의해 처리될 데이터의 단위를 나타낼 수 있고, 그 용어가 다른 문맥에서 사용될 수 있으므로 용어 "청크"와 혼동되어서는 안된다(예를 들어, 그 용어인 "칼럼 청크"는 아래도 9를 참조하여 사용될 수 있다).The stream splitter 610 may take data from the circular buffer 605 and divide the data into chunks. The chunk may then be passed to the index mapper 615. A chunk may represent a unit of data to be processed by other components in the transcoder 420, and should not be confused with the term "chunk" as the term may be used in other contexts (eg, the term " Column chunk" can be used with reference to Figure 9 below).

도 7은 입력 스트림의 일부(또는 전부)일 수 있는 입력 인코딩 데이터를 청크로 분할하는 도 6의 스트림 스플리터(610)를 보여준다. 도 7에서, 입력 데이터는 다른 데이터들 중에서 3개의 인코딩 데이터: "[1, BP], 3, 3, [4, RLE], 2, [5, RLE], 0"을 포함하는 것으로 도시되어 있다. 위에서 논의된 바와 같이, 이들 청크는 비트 패킹 및 RLE 인코딩 방식을 사용하여 인코딩된 데이터를 나타낸다. 이 인코딩은 "3, 3, 2, 2, 2, 2, 0, 0, 0, 0, 0" 값의 (인코딩되지 않은) 시퀀스를 나타낸다. 각각의 개별 인코딩에 대해, 도 1의 호스트 컴퓨터(105)가 그 데이터(또는 그 데이터의 일부)에 관심이 있을 수도 있고, 관심이 없을 수도 있다. 도 1의 호스트 컴퓨터(105)가 각각의 인코딩 값에 관심 있는지의 여부는 트랜스코딩 룰(630)에 의존할 수 있다: 도 6의 스트림 스플리터(610)는 도 1의 호스트 컴퓨터(105)가 어떤 데이터에 관심이 있는지 알지 못할 수 있다. 따라서, 도 6의 스트림 스플리터(610)는 입력 데이터 스트림을 각 청크가 상이한 조각의 인코딩 데이터를 포함하는 청크들로 분할할 수 있다. 따라서, 청크(705-1)는 "[1, BP], 3, 3" 인코딩을, 청크(705-2)는 "[4, RLE], 2" 인코딩을, 그리고 청크(705-3)는 "[5, RLE], 0" 인코딩을 포함할 수 있다.FIG. 7 shows a stream splitter 610 of FIG. 6 that divides input encoded data, which may be part (or all) of an input stream, into chunks. In FIG. 7, the input data is shown to include three encoded data among other data: "[1, BP], 3, 3, [4, RLE], 2, [5, RLE], 0". . As discussed above, these chunks represent data that has been encoded using bit packing and RLE encoding schemes. This encoding represents a (unencoded) sequence of values "3, 3, 2, 2, 2, 2, 0, 0, 0, 0, 0". For each individual encoding, the host computer 105 of FIG. 1 may or may not be interested in the data (or portions of the data). Whether the host computer 105 of FIG. 1 is interested in each encoding value may depend on the transcoding rule 630: The stream splitter 610 of FIG. You may not know if you are interested in the data. Accordingly, the stream splitter 610 of FIG. 6 may divide the input data stream into chunks each of which contains different pieces of encoded data. Accordingly, the chunk 705-1 encodes "[1, BP], 3, 3", the chunk 705-2 encodes "[4, RLE], 2", and the chunk 705-3 May include "[5, RLE], 0" encoding.

도 7에 대해 주의해야 할 적어도 2 개의 추가 요점들이 존재한다. 첫째, 도 7에 도시된 예시적인 입력 스트림에 또한 유의해야 하는데, 일부 데이터는 비트 패킹을 사용하여 인코딩되고 일부 데이터는 RLE를 사용하여 인코딩된다. 만일 모든 데이터가 단일 인코딩 방식(예를 들어, RLE)을 사용하여 인코딩되면, 도 6의 스트림 스플리터(610)는 도 6의 트랜스코더(420)에 입력된 인코딩 타입으로부터 사실을 결정할 수 있다. 그러나 때로는 하이브리드 인코딩 방식이 사용되기도 한다. 하이브리드 인코딩 방식에서, 일부 데이터는 하나의 인코딩 방식(예: RLE)을 사용하여 인코딩될 수 있고, 일부 데이터는 다른 인코딩 방식 (예: 비트 패킹)을 사용하여 인코딩될 수 있다(개념은 하이브리드 인코딩 방식에서 사용된 인코딩 방식을 둘 이상으로 일반화할 수도 있음). 하이브리드 인코딩 방식에서, 그 정보 자체만으로는 어떤 인코딩 방식으로 어떤 데이터가 인코딩되는지 스트림 스플리터(610)에 알려주지 않기 때문에, 도 6의 트랜스코더(420)는 인코딩 타입을 입력으로서 수신하지 않을 수도 있다. 대신에, 도 6의 스트림 스플리터(610)는 청크 자체를 보고 각각의 청크에 어떤 인코딩 방식이 사용되는지를 결정할 수 있다.There are at least two additional points to note about FIG. 7. First, it should also be noted the exemplary input stream shown in Fig. 7, some data is encoded using bit packing and some data is encoded using RLE. If all data is encoded using a single encoding scheme (eg, RLE), the stream splitter 610 of FIG. 6 may determine the fact from the encoding type input to the transcoder 420 of FIG. 6. However, sometimes a hybrid encoding method is used. In the hybrid encoding method, some data may be encoded using one encoding method (e.g. RLE), and some data may be encoded using another encoding method (e.g. bit packing) (concept is hybrid encoding method It is also possible to generalize to more than one encoding method used in .). In the hybrid encoding method, since the information itself does not inform the stream splitter 610 of which data is encoded in which encoding method, the transcoder 420 of FIG. 6 may not receive the encoding type as an input. Instead, the stream splitter 610 of FIG. 6 may determine which encoding scheme is used for each chunk by looking at the chunk itself.

특정 청크를 인코딩하는데 사용되는 인코딩 방식을 결정하는 한 가지 방법은 청크 내의 특정 비트의 값을 검사하는 것일 수 있다. 예를 들어, 칼럼 스토리지 포맷은 첫 번째 바이트의 최하위 비트를 사용하여 RLE 또는 비트 패킹을 사용하여 특정 데이터 청크가 인코딩될 수 있는지 여부를 나타낼 수 있다: 해당 비트의 값이 "0"인 경우에는 RLE가 사용될 수 있다고, 그 비트의 값이 "1"이면 비트 패킹이 사용될 수 있다. 그런 다음이 이 비트는 바이트에서 제거되고, 나머지 비트는 논리적으로 1비트 오른쪽으로 시프트되어 인코딩에 사용되는 값을 생성한다.One way to determine the encoding scheme used to encode a particular chunk may be to examine the value of a particular bit in the chunk. For example, the column storage format can indicate whether a specific data chunk can be encoded using RLE or bit packing using the least significant bit of the first byte: RLE if the value of that bit is "0" If the value of the bit is "1", bit packing can be used. This bit is then removed from the byte, and the remaining bits are logically shifted right one bit to create the value used for encoding.

예를 들어, 청크(705-1)을 고려하기로 한다. 청크(705-1)는 비트 시퀀스 "00000011 00110011"을 포함한다. 도 6의 스트림 스플리터(610)가 제 1 바이트 "00000011"를 읽으면, 도 6의 스트림 스플리터(610)는 최하위 비트(마지막 "1")를 검사할 수 있다. 최하위 비트는 "1"일 수 있으므로, 도 6의 스트림 스플리터(610)는 이 청크가 비트 패킹을 사용하여 인코딩될 수 있다고 결정할 수 있다. 이 최하위 비트가 제거되고, 제 1 바이트의 나머지 비트가 논리적으로 오른쪽으로 1비트씩 시프트되어, 바이트 "00000001"가 생성된다. 이 바이트의 첫 번째(최상위) 비트는 "0"일 수 있으므로, 도 6의 스트림 스플리터(610)는 바이트가 단지 "00000001"(다음 바이트에서 값이 계속되지 않을 수 있음을 나타내는 "0" 비트가 제거될 수 있고, 또 다른 리딩 "0"가 추가될 수 있음)임과, 그룹(결정되어야 할)이 한 번 반복될 수 있음을 지시하는 것으로 결정할 수 있다. 이후, 도 6의 스트림 스플리터(610)는 다음 바이트 "00110011"를 읽을 수 있다. 이 바이트의 최상위 비트는 "0"일 수 있기 때문에, 도 6의 스트림 스플리터(610)는 이 값이 다음 바이트에서 계속되지 않음을 알 수 있다. 연속 비트가 제거되고 리딩 제로가 추가되어 "00110011" 값을 생성하며, 이는 "3" 및 "3" 값을 나타낸다. 따라서, 도 6의 스트림 스플리터(610)는 인코딩이 비트 패킹을 사용하여 값 "3"이 2 회 반복될 수 있음을 나타내는 것으로 결정할 수 있다.For example, consider the chunk 705-1. Chunk 705-1 contains the bit sequence "00000011 00110011". When the stream splitter 610 of FIG. 6 reads the first byte "00000011", the stream splitter 610 of FIG. 6 may check the least significant bit (the last "1"). Since the least significant bit may be "1", the stream splitter 610 of FIG. 6 may determine that this chunk may be encoded using bit packing. This least significant bit is removed, and the remaining bits of the first byte are logically shifted to the right one bit by one, resulting in byte "00000001". Since the first (most significant) bit of this byte may be "0", the stream splitter 610 of FIG. 6 shows that the byte is only "00000001" (a "0" bit indicating that the value may not be continued in the next byte. May be removed, and another leading “0” may be added), and may be determined to indicate that the group (to be determined) may be repeated once. Thereafter, the stream splitter 610 of FIG. 6 may read the next byte "00110011". Since the most significant bit of this byte may be "0", the stream splitter 610 of FIG. 6 can know that this value does not continue in the next byte. Consecutive bits are removed and leading zeros are added to produce the value "00110011", which represents the values "3" and "3". Accordingly, the stream splitter 610 of FIG. 6 may determine that encoding indicates that the value “3” can be repeated twice using bit packing.

반면, 청크(705-2)를 고려하기로 한다. 청크(705-2)는 비트 시퀀스 "00001000 00000010"을 포함할 것이다. 도 6의 스트림 스플리터(610)는 제 1 바이트 "00001000"를 읽을 때, 최하위 비트(마지막 "0")를 검사할 수 있다. 최하위 비트는 "0"일 수 있으므로, 도 6의 스트림 스플리터(610)는 이 청크가 RLE를 사용하여 인코딩될 수 있다고 결정할 수 있다. 이 최하위 비트가 제거되고 첫 번째 바이트의 나머지 비트가 논리적으로 오른쪽으로 한 비트씩 시프트되어 바이트 "00000100"이 생성된다. 이 바이트의 첫 번째(최상위) 비트는 "0"일 수 있으므로, 도 6의 스트림 스플리터(610)는 바이트가 단지 "00000100"(다음 바이트에서 값이 계속되지 않을 수 있음을 나타내는 "0" 비트가 제거될 수 있고, 또 다른 리딩 "0"이 추가될 수 있음)임과, 그 값(결정되어야 할)이 4번 반복될 수 있음을 지시하는 것으로 결정할 수 있다. 이후, 도 6의 스트림 스플리터(610)는 다음 바이트 "00000010"을 읽을 수 있다. 이 바이트의 최상위 비트는 "0"일 수 있기 때문에, 도 6의 스트림 스플리터(610)는 이 값이 다음 바이트로 계속되지 않음을 알고 있다. 연속 비트를 제거하고 선행 0을 추가하여 "00000010" 값을 생성할 수 있다. 따라서, 도 6의 스트림 스플리터(610)는 인코딩이 RLE을 사용하여 값 "2"가 4회 반복될 수 있음을 나타내는 것으로 결정할 수 있다.On the other hand, the chunk 705-2 is considered. Chunk 705-2 will contain the bit sequence "00001000 00000010". The stream splitter 610 of FIG. 6 may check the least significant bit (last “0”) when reading the first byte “00001000”. Since the least significant bit may be "0", the stream splitter 610 of FIG. 6 may determine that this chunk may be encoded using RLE. This least significant bit is removed and the remaining bits of the first byte are logically shifted one bit to the right, resulting in byte "00000100". Since the first (most significant) bit of this byte may be "0", the stream splitter 610 of FIG. 6 shows that the byte is only "00000100" (a "0" bit indicating that the value may not be continued in the next byte. It may be removed, and another reading "0" may be added), and the value (to be determined) may be determined to indicate that it may be repeated 4 times. Thereafter, the stream splitter 610 of FIG. 6 may read the next byte "00000010". Since the most significant bit of this byte may be "0", the stream splitter 610 of Fig. 6 knows that this value does not continue to the next byte. You can create the value "00000010" by removing consecutive bits and adding leading zeros. Accordingly, the stream splitter 610 of FIG. 6 may determine that the encoding indicates that the value "2" can be repeated 4 times using RLE.

물론, 도 6의 스트림 스플리터(610)는 비트 시퀀스에 대해 이 분석을 모두 수행하지 않을 수 있다. 도 6의 모든 스트림 스플리터(610)는 최상위 비트인 "0"이 있는 바이트가 나타날 때까지 바이트를 읽은 다음(이 바이트 시퀀스는 인코딩 방식 및 다가오는 값의 반복 횟수를 나타냄), 최상위 비트로 "0"을 갖는 다른 바이트가 발생할 때까지 바이트들을 읽는다(이 바이트 시퀀스는 인코딩되는 값을 나타냄). 도 6의 스트림 스플리터(610)는 읽혀진 비트들(인코딩된 청크의 전체를 나타내는)을 도 6의 인덱스 매퍼(615)에 전달할 수 있다(그리고 도 6의 룰 평가기(635)에 의한 추후 처리를 위해): 도 6의 인덱스 매퍼(615, 그리고/또는 도 6의 룰 평가기(635))는 청크에 어떤 인코딩 방식이 사용되고 그리고 어떤 값 (들)이 그렇게 인코딩되는지를 결정하기 위해 설명된 분석을 수행할 수 있다. 그러나 도 6의 스트림 스플리터(610, 또는 도 6의 인덱스 매퍼(615) 또는 본 발명의 개념의 임의의 다른 컴포넌트)가 특정 데이터 청크를 인코딩하는데 사용된 인코딩 방식을 결정하기 위해 분석을 수행하는 경우, 도 6의 스트림 스플리터(610, 또는 도 6의 인덱스 매퍼(615) 또는 다른 구성 요소)은 이러한 분석의 반복을 피하기 위해 인코딩 타입을 다른 구성 요소들로 방침에 따라 전달할 수 있다. 이 동작은 청크가 처리될 때 인코딩 방식을 식별하는 비트가 청크로부터 제거되는 경우에 특히 중요할 수 있다: 인코딩 타입이 없으면, 인코딩 데이터를 나중에 처리하는 컴포넌트는 인코딩 데이터를 올바르게 처리하지 못할 수 있다.Of course, the stream splitter 610 of FIG. 6 may not perform all of this analysis on the bit sequence. All stream splitters 610 of FIG. 6 read bytes until a byte with the most significant bit “0” appears (this byte sequence indicates the encoding method and the number of repetitions of the upcoming value), and then write “0” as the most significant bit. Bytes are read until another byte is encountered (this sequence of bytes represents the value being encoded). The stream splitter 610 of FIG. 6 may transfer the read bits (representing the entire encoded chunk) to the index mapper 615 of FIG. 6 (and further processing by the rule evaluator 635 of FIG. For): The index mapper 615 of FIG. 6 and/or the rule evaluator 635 of FIG. 6 performs the described analysis to determine which encoding scheme is used for the chunk and which value(s) are so encoded. Can be done. However, when the stream splitter 610 of FIG. 6, or the index mapper 615 of FIG. 6 or any other component of the concept of the present invention, performs an analysis to determine the encoding scheme used to encode a particular data chunk, The stream splitter 610 of FIG. 6, or the index mapper 615 of FIG. 6, or other components, may transfer the encoding type to other components according to policy to avoid repetition of this analysis. This behavior can be particularly important if the bits identifying the encoding scheme are removed from the chunk when the chunk is processed: without the encoding type, components that process the encoded data later may not be able to process the encoded data correctly.

둘째, 청크(705-2 및 705-3)는 둘 다 RLE을 사용하여 인코딩된 연속적인 청크들을 나타낸다는 점에 유의해야 한다. 도 6의 스트림 스플리터(610)는 모든 연속적인 RLE 인코딩을 단일 청크로 간주하는 것으로 예상할 수 있다(다른 인코딩 방식들을 사용하여 청크들을 분리함). 그러나 그 목적은 입력 스트림을 트랜스코딩하여 관심이 없는 모든 데이터를 단일 "무정의(don't care)" 값으로 통합하는 것임을 기억해야 한다. 도 6의 스트림 스플리터(610)는 도 1의 호스트 컴퓨터(105)가 관심이 있는 데이터에 대한 정보를 갖지 않을 수 있음을 상기하자. 도 6의 스트림 스플리터(610)가 동일한 인코딩 방식을 사용하는 모든 인코딩을 동일한 청크로 간주하는 경우, 도 6의 스트림 스플리터(610)는 결국 도 1의 호스트 컴퓨터(105)가 관심있는 데이터를 관심이 없는 데이터와 혼합하는 것으로 된다. 게다가, 입력 스트림 내의 모든 데이터가 동일한 인코딩 방식을 사용하여 인코딩된 경우, 전체 입력 스트림은 단일 청크로 간주될 것이며, 이는 도 6의 트랜스코더(420)의 일부로서 스트림 스플리터(610)의 기능을 배제하는 것이다. Second, it should be noted that chunks 705-2 and 705-3 both represent successive chunks encoded using RLE. The stream splitter 610 of FIG. 6 can be expected to regard all consecutive RLE encodings as a single chunk (different encoding schemes are used to separate the chunks). However, it should be remembered that the purpose is to transcode the input stream to consolidate all the data of no interest into a single "don't care" value. Recall that the stream splitter 610 of FIG. 6 may not have information on data of interest to the host computer 105 of FIG. 1. When the stream splitter 610 of FIG. 6 regards all encodings using the same encoding method as the same chunk, the stream splitter 610 of FIG. 6 is eventually interested in the data of interest to the host computer 105 of FIG. It will be mixed with missing data. In addition, if all the data in the input stream is encoded using the same encoding method, the entire input stream will be considered a single chunk, which excludes the function of the stream splitter 610 as part of the transcoder 420 of FIG. Is to do.

셋째, 상술한 논의는 2 개의 상이한 인코딩 방식을 구별하기 위해 1 비트를 사용하는 하이브리드 인코딩 방식에 초점을 맞추고 있지만, 본 발명의 실시 예는 2 개 이상의 별개의 인코딩 방식을 사용하는 하이브리드 인코딩 방식으로 일반화 될 수 있다. 물론, 둘 이상의 인코딩 방식이 사용되는 경우, 하나 이상의 비트가 상이한 인코딩 방식을 구별하기 위해 사용될 수 있다. 예를 들어, 3 개 또는 4 개의 인코딩 방식이 사용되는 경우, 2 개의 비트가 인코딩 방식을 구별하기 위해 사용될 수 있고, 5, 6, 7 또는 8 개의 상이한 인코딩 방식이 사용되는 경우, 3 개의 비트가 상이한 인코딩 방식들을 구별하는데 기타 등등 사용될 수 있다.Third, the above discussion focuses on a hybrid encoding scheme that uses 1 bit to distinguish between two different encoding schemes, but the embodiment of the present invention generalizes to a hybrid encoding scheme that uses two or more distinct encoding schemes. Can be. Of course, when two or more encoding schemes are used, one or more bits may be used to distinguish different encoding schemes. For example, when 3 or 4 encoding methods are used, 2 bits may be used to distinguish the encoding methods, and when 5, 6, 7 or 8 different encoding methods are used, 3 bits are It can be used to distinguish between different encoding schemes and so on.

(인코딩 방식을 구별하기 위해 사용된 비트는 다른 목적으로도 사용될 수 있음에 유의해야 한다. 예를 들어, 3 개의 인코딩 방식이 사용되는 상황을 고려하기로 한다. 제 1 바이트의 최하위 비트가 특정 값("0"과 같은)인 경우, RLE와 같은 하나의 인코딩 방식이 사용될 수 있고, 그 다음 최하위 비트는 값을 나타내는 데 사용된다. 그러나, 제 1 바이트의 최하위 비트가 다른 특정 값("1"과 같은)인 경우, 그 다음 최하위 비트는 나머지 2 개의 인코딩 방식(비트 패킹 및 클러스터 인코딩과 같은)을 구별하기 위해 사용될 수 있다.) (It should be noted that the bit used to distinguish the encoding method may be used for other purposes as well. For example, consider a situation in which three encoding methods are used. The least significant bit of the first byte is a specific value. In the case of (such as "0"), one encoding scheme such as RLE can be used, and then the least significant bit is used to indicate the value, but the least significant bit of the first byte is different from a specific value ("1"). ), the next least significant bit can be used to distinguish the remaining two encoding schemes (such as bit packing and cluster encoding).

다시 도 6을 참조하면, 인덱스 매퍼(615)는 스트림 스플리터(610)로부터 청크를 수신할 수 있다. 인덱스 매퍼(615)는 입력 사전으로부터의 인코딩된 값을 출력 사전의 인코딩된 값에 매핑할 수 있다. 예를 들어, 위의 표 1 및 표 2에 표시된 사전을 다시 고려하자. "미국"에 대응하는 값이 관심을 가질 수 있기 때문에, 인코딩된 청크에서 발견될 때, "3" 값은 "1" 값으로 대체될 수 있고; 인코딩된 청크에서 발견될 때, 다른 모든 값은 "0" 값으로 대체될 수 있다.Referring back to FIG. 6, the index mapper 615 may receive a chunk from the stream splitter 610. The index mapper 615 may map an encoded value from an input dictionary to an encoded value in an output dictionary. For example, consider again the dictionaries shown in Tables 1 and 2 above. Since the value corresponding to "United States" may be of interest, when found in the encoded chunk, the "3" value can be replaced with the "1" value; When found in the encoded chunk, all other values can be replaced with a value of "0".

도 8은 입력 사전을 출력 사전에 매핑하는 도 6의 인덱스 매퍼(615)를 보여준다. 도 8을 참조하면, 인덱스 매퍼(615)는 입력 사전(805)을 수신하고 출력 사전(810)을 생성하는 것으로 도시되어 있다. 도 1의 호스트 컴퓨터(105)가 어떤 데이터에 관심이 있는지에 대한 정보가 주어지면, 인덱스 매퍼(615)는 출력 사전(810)을 생성할 수 있다. 인덱스 매퍼(615)는 또한 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 생성할 수 있다. 상술한 예를 계속하면, 이 맵은 표 3에 도시된 맵핑을 특정할 수 있다. 도시된 바와 같이 "3"은 인덱스 "1"에 매핑 될 수 있으며; 다른 모든 인덱스는 인덱스 "0"에 매핑될 수 있다.FIG. 8 shows the index mapper 615 of FIG. 6 mapping an input dictionary to an output dictionary. Referring to FIG. 8, index mapper 615 is shown to receive input dictionary 805 and generate output dictionary 810. Given the information on which data the host computer 105 of FIG. 1 is interested in, the index mapper 615 may generate the output dictionary 810. Index mapper 615 may also generate a map from input dictionary 805 to output dictionary 810. Continuing the above example, this map can specify the mapping shown in Table 3. As shown, "3" may be mapped to index "1"; All other indexes can be mapped to index "0".

입력 인덱스Input index 출력 인덱스Output index 00 00 1One 00 22 00 33 1One

인덱스 매퍼(615)에 대해 주목할 가치가 있는 몇몇 포인트가 있다. 첫째, 인덱스 매퍼(615)는 도 6의 트랜스코더(420)와는 별도의 구성으로서 도시되어 있지만, 인덱스 매퍼(615)는 도 6의 룰 평가기(635)와 함께 동작할 수 있다(또는 그 일부로서 구현될 수 있다). 둘째, 인덱스 매퍼(615)가 어떻게 출력 사전(810) (및 표 3에 도시된 맵)을 생성할 수 있는지는 도 1의 호스트 컴퓨터(105)가 관심있는 데이터에 의존할 수 있다. 인덱스 매퍼(615)가 도 1의 호스트 컴퓨터(105)의 관심있는 데이터를 학습하는 방법은 후술하는 도 11을 참조하여 설명될 것이다. 셋째, 트랜스코딩 데이터는 입력 사전(805)을 출력 사전(810)에 매핑하는 인덱스 매퍼(615) 및 도 6의 트랜스코딩 룰(630) 모두를 수반할 수 있다: 도 6의 트랜스코딩 룰(630)은 입력 사전(805)으로부터 출력 사전(810)으로의 맵에 의존한다. 그 반대는 성립하지 않는다: 입력 사전(805)으로부터 출력 사전(810)으로의 맵(그리고 그에 따른 인덱스 매퍼 (615)의 동작)은 도 6의 트랜스코딩 룰(630)을 참조하지 않고 생성될 수 있다.There are several points worth noting about the index mapper 615. First, the index mapper 615 is shown as a separate configuration from the transcoder 420 of FIG. 6, but the index mapper 615 can operate together with the rule evaluator 635 of FIG. Can be implemented as). Second, how the index mapper 615 can generate the output dictionary 810 (and the map shown in Table 3) may depend on the data of interest to the host computer 105 of FIG. 1. A method by which the index mapper 615 learns the data of interest of the host computer 105 of FIG. 1 will be described with reference to FIG. 11 to be described later. Third, the transcoding data may be accompanied by both the index mapper 615 that maps the input dictionary 805 to the output dictionary 810 and the transcoding rule 630 of FIG. 6: Transcoding rule 630 of FIG. 6 ) Depends on the map from the input dictionary 805 to the output dictionary 810. The opposite does not hold: the map from the input dictionary 805 to the output dictionary 810 (and thus the operation of the index mapper 615) can be created without referring to the transcoding rule 630 of FIG. have.

인덱스 매퍼(615)에 관한 네 번째 포인트는 더 미묘하다. 인덱스 매퍼(615)는 출력 사전(810)에 "무정의(don't care)" 값이라는 새로운 항목을 효과적으로 추가한다. 구현을 단순화하기 위해 인덱스 매퍼(615)는 항상 "무정의(don't care)" 값에 대해 동일한 인덱스를 사용하는 것이 이해된다. 입력 사전(805)의 크기는 데이터 세트에 따라 변할 수 있으므로, 인덱스 "0"이 항상 사용될 수 있다.The fourth point about the index mapper 615 is more subtle. The index mapper 615 effectively adds a new item to the output dictionary 810 called a "don't care" value. It is understood that to simplify implementation, the index mapper 615 always uses the same index for "don't care" values. Since the size of the input dictionary 805 can vary depending on the data set, the index "0" can always be used.

그러나, 데이터 세트의 모든 데이터가 도 1의 호스트 컴퓨터(105)에 관심있다는 것이 밝혀지면 어떻게 될까? 이 경우, 인덱스 매퍼(615)는 출력 사전(810)에 항목을 추가했지만 출력 사전(810)에 어떤 항목도 제거되지 않았다. 이들 2개 사실의 조합은 출력 사전(810)이 입력 사전(805)보다(하나의 항목에 의해) 더 클 수 있음을 의미한다. 입력 사전(805)이 n의 일부 값에 대해 정확히 2n 개의 항목을 갖는 상황을 고려하기로 한다. 이 사실은 입력 사전(805)으로의 모든 인덱스가 n 비트를 사용하여 표현될 수 있음을 의미한다. 출력 사전(810)에 "무정의(don't care)" 항목을 추가하면, 출력 사전(810)에 '2n+1' 개의 항목이 있음을 의미하며, 이는 이제 'n+1 비트가 데이터 세트에서 가능한 모든 값을 나타내는 데 사용됨을 의미한다: 이 문제를 '비트 오버플로우(bit overflow)'라 한다. 이 추가 비트는 인코딩 데이터에 영향을 줄 수 있으며, 데이터를 올바르게 나타내기 위해 새로운 비트의 추가를 요구한다. 따라서, 출력 사전(810)에 대한 단일의 작은 변화는 데이터 표현에 막대한 파급 효과를 가져올 수 있고, 인코딩 데이터를 나타내는 데 사용되는 스토리지 공간의 양을 상당히 증가시킬 수 있다.However, what if it turns out that all the data in the data set is of interest to the host computer 105 of FIG. In this case, the index mapper 615 has added an item to the output dictionary 810 but no items have been removed from the output dictionary 810. The combination of these two facts means that the output dictionary 810 can be larger (by one item) than the input dictionary 805. Consider a situation in which the input dictionary 805 has exactly 2n items for some values of n. This fact means that every index into the input dictionary 805 can be represented using n bits. Adding a "don't care" entry to the output dictionary 810 means that there are '2n+1' entries in the output dictionary 810, which means that the'n+1 bits are now This means that it is used to represent all possible values in: this problem is called a'bit overflow'. These extra bits can affect the encoded data and require the addition of new bits to correctly represent the data. Thus, a single small change to the output dictionary 810 can have a huge ripple effect on data representation, and can significantly increase the amount of storage space used to represent the encoded data.

상술한 예는 "무정의(don't care)" 항목의 도입이 모든 가능한 인덱스를 출력 사전(810)에 나타내는 새로운 비트를 추가하는 상황에 초점을 맞추고 있지만,출력 사전(810)의 크기가, 새로운 비트가 모든 가능한 인덱스를 나타내는 데 사용될 수 있는 곳까지 증가되는 경우에도 유사한 문제가 발생할 수 있다. 표 1에 도시된 입력 사전을 다시 고려하고, 중국과 인도 시민에 관심이 있는(표 1의 "0" 및 "1" 인덱스) 도 1의 호스트 컴퓨터(105)가 있는 상황을 고려한다. 이들 인덱스는 단일 비트를 사용하여 표현될 수 있다(1 비트는 "0" 및 "1" 값을 나타내는데 사용될 수 있기 때문에). 이러한 값을 비트 패킹을 사용하여 인코딩하면, 8 개의 이러한 값을 단일 바이트로 팩킹할 수 있다. 그러나 인덱스 "0"이 출력 사전(810)의 "무정의(don't care)" 값에 할당된 경우, 중국과 인도의 인덱스는 다른 값(예를 들면: "1" 및 "2")에 매핑된다. "2" 값은 2 비트를 사용하므로 더 이상 8 개의 값을 단일 바이트로 묶지 못할 수 있다: 비트 오버플로가 발생했다.The above example focuses on the situation in which the introduction of the "don't care" item adds a new bit indicating all possible indices to the output dictionary 810, but the size of the output dictionary 810, A similar problem can arise if the new bit is incremented to where it can be used to represent all possible indices. Consider again the input dictionary shown in Table 1, and consider a situation where there is a host computer 105 of Fig. 1 that is interested in Chinese and Indian citizens (indexes "0" and "1" in Table 1). These indices can be represented using a single bit (since one bit can be used to represent the "0" and "1" values). If you encode these values using bit packing, you can pack 8 such values into a single byte. However, if the index "0" is assigned to the "don't care" value of the output dictionary 810, the indexes of China and India are different values (for example: "1" and "2"). Is mapped. A value of "2" uses 2 bits, so you may no longer be able to pack 8 values into a single byte: A bit overflow has occurred.

비트 오버플로(bit overflow) 문제에 대한 사용 가능한 몇 가지 솔루션이 있다. 하나는 입력 사전(805)에 대한 임의의 인덱스가 도 1의 호스트 컴퓨터(105)의 관심이 없는 데이터를 나타내는지 확인하는 것이다. 입력 사전(805)의 모든 데이터가 호스트 컴퓨터(105)에 관심이 있는 것으로 밝혀지면, 입력 스트림을 트랜스코딩하는 것은 전혀 의미가 없으며, 입력 스트림은 수정없이 출력 스트림에 직접 매핑될 수 있다.There are several possible solutions to the bit overflow problem. One is to ensure that any indexes to the input dictionary 805 represent data that the host computer 105 of FIG. 1 is not interested in. If all of the data in the input dictionary 805 is found to be of interest to the host computer 105, then transcoding the input stream makes no sense at all, and the input stream can be mapped directly to the output stream without modification.

그러나 비트 패킹에서 비트 오버플로 문제가 여전히 발생할 수 있으므로 이 솔루션은 유용하지만 충분하지 않을 수 있다. 비트 패킹에서 비트 오버플로를 피하기 위해, 출력 사전(810)에서 임의의 인덱스를 나타내는데 사용되는 비트 수가 입력 사전(805)에서 임의의 인덱스를 나타내는데 사용되는 비트의 수보다 크지 않도록 보장하는 것이 해결책이 될 수 있다. 두 가지 가능한 해결책들이 여기에서 설명될 것이다. 하나의 해결책은 출력 사전(810)에서 가능한 가장 높은 인덱스를 "무정의(don't care)" 값에 할당하는 것이다: 이것은 먼저 입력 사전(805)에서 출력 사전(810)으로 관심있는 모든 인덱스를 매핑한 다음, 사용되지 않은 가장 낮은 인덱스를 "무정의(don't care)" 값으로 사용한다. 다른 해결책은 입력 사전(805)에서 도 1의 호스트 컴퓨터(105)의 관심이 없는 인덱스를 식별하고, 그 인덱스를 "무정의(don't care)" 값으로 사용하는 것이다. 두 해결책들에서, 입력 사전(805)으로의 인덱스는 출력 사전(810)에서 더 큰 인덱스로 대체되지 않으며, 이는 비트 오버플로우 문제를 피할 수 있다. 이러한 해결책의 단점은 입력 사전(805)과 독립적인 "무정의(don't care)"에 대한 인덱스를 선택하지 못할 수 있다는 것이다.However, this solution is useful, but may not be sufficient, as bit overflow problems can still occur in bit packing. To avoid bit overflow in bit packing, a solution would be to ensure that the number of bits used to represent any index in the output dictionary 810 is not greater than the number of bits used to represent any index in the input dictionary 805. I can. Two possible solutions will be described here. One solution is to assign the highest possible index in the output dictionary 810 to a "don't care" value: this first extracts all the indices of interest from the input dictionary 805 to the output dictionary 810. After mapping, the lowest unused index is used as a "don't care" value. Another solution is to identify the uninterested index of the host computer 105 of Fig. 1 in the input dictionary 805 and use that index as a "don't care" value. In both solutions, the index into the input dictionary 805 is not replaced with a larger index in the output dictionary 810, which can avoid the bit overflow problem. A disadvantage of this solution is that it may not be possible to select an index for "don't care" independent of the input dictionary 805.

다시 도 6을 참조하면, 현재 청크(인덱스 매퍼(615)에 의해 처리될 수 있는)는 현재 인코딩 버퍼(620)에 저장될 수 있다. 거기서부터, 룰 평가기(635)는 이전 인코딩 버퍼(625)의 인코딩 데이터와 함께 현재 인코딩 버퍼(620)의 인코딩 데이터를 평가할 수 있고, 인코딩이 변경되어야 하는지 여부 및 출력 스트림으로 출력될 데이터를 결정한다. 요컨대, 룰 평가기(635)는 현재 인코딩 버퍼(620)의 인코딩 데이터가 이전 인코딩 버퍼(625)의 인코딩 데이터와 결합될 수 있는지 여부를 결정할 수 있다. 만일 그렇다면, 현재 인코딩 버퍼(620)의 인코딩 데이터는 이전 인코딩 버퍼(625)의 인코딩 데이터에 추가될 수 있다; 만일 그렇지 않다면, 이전 인코딩 버퍼(625)의 인코딩 데이터는 출력 스트림으로 출력될 수 있고, 현재 인코딩 버퍼(620)의 인코딩 데이터는 이전 인코딩 버퍼(625)로 이동할 수 있다. (이 분석은 이전 인코딩 버퍼(625)에 데이터가 존재하는 상황을 고려한다. 예를 들어, 제 1 데이터 청크에서 발생할 수 있는 바와 같이, 이전 인코딩 버퍼(625)가 데이터를 포함하지 않으면, 현재 인코딩 버퍼(620)의 인코딩 데이터를 이전 인코딩 버퍼(625)의 트랜스코딩된 데이터와 결합하려는 시도에 대한 문제는 없다.)Referring back to FIG. 6, the current chunk (which may be processed by the index mapper 615) may be stored in the current encoding buffer 620. From there, the rule evaluator 635 can evaluate the encoding data of the current encoding buffer 620 along with the encoding data of the previous encoding buffer 625, and determine whether the encoding should be changed and the data to be output to the output stream. do. In short, the rule evaluator 635 may determine whether the encoded data of the current encoding buffer 620 can be combined with the encoded data of the previous encoding buffer 625. If so, the encoded data of the current encoding buffer 620 may be added to the encoded data of the previous encoding buffer 625; If not, the encoded data of the previous encoding buffer 625 may be output as an output stream, and the encoded data of the current encoding buffer 620 may be moved to the previous encoding buffer 625. (This analysis takes into account the situation in which data exists in the previous encoding buffer 625. For example, if the previous encoding buffer 625 does not contain data, as may occur in the first data chunk, the current encoding There is no problem with attempting to combine the encoded data in the buffer 620 with the transcoded data in the previous encoding buffer 625.)

이것은 "인코딩 데이터는 언제 결합될 수 있는가?"라는 질문으로 이어진다. 그에 대한 짧은 대답은, 도 1의 호스트 컴퓨터(105)가 관심을 가지는 데이터 또는 호스트 컴퓨터(105)가 관심을 가지지 않는 데이터를 청크들이 모두 나타낼 때, 인코딩된 데이터의 청크가 결합될 수 있다는 것이다. 일부 예는 룰 평가기(635)가 어떻게 동작하는지를 설명하는데 도움이 될 수 있다. 두 예에서, 입력 스트림은 동일한 데이터("[1, BP], 3, 3, [4, RLE], 2, [1, BP], 0, 1, [5, RLE], 1, [1, BP], 3")를 포함하고, 그리고 입력사전은 표 1에 나타낸 것과 같다. 두 예에서, 행(row)은 현재 인코딩 버퍼(620) 및 이전 인코딩 버퍼(625)에 있는 것의 "스넵샷(snapshot)"을 나타내고, 그 당시의 출력 스트림으로 출력된 것을 나타낸다. This leads to the question "When can the encoded data be combined?" The short answer to that is that when the chunks all represent data that the host computer 105 of FIG. 1 is interested in or data that the host computer 105 does not care about, the chunks of encoded data can be combined. Some examples may be helpful in explaining how the rule evaluator 635 works. In both examples, the input stream is the same data ("[1, BP], 3, 3, [4, RLE], 2, [1, BP], 0, 1, [5, RLE], 1, [1, BP], 3"), and the input dictionary is as shown in Table 1. In both examples, a row represents a "snapshot" of what is in the current encoding buffer 620 and the previous encoding buffer 625, and represents what was output to the output stream at that time.

line 현재 인코딩 버퍼Current encoding buffer 이전 인코딩 버퍼Previous encoding buffer 출력 스트림Output stream 1One [1, BP], 3, 3[1, BP], 3, 3 22 [4, RLE], 2[4, RLE], 2 [1, BP], 1, 1[1, BP], 1, 1 33 [1, BP], 0, 1[1, BP], 0, 1 [4, RLE], 0[4, RLE], 0 [1, BP], 1, 1[1, BP], 1, 1 44 [5, RLE], 1[5, RLE], 1 [6, RLE], 0[6, RLE], 0 [1, BP], 1, 1[1, BP], 1, 1 55 [1, BP], 3[1, BP], 3 [11, RLE], 0[11, RLE], 0 [1, BP], 1, 1[1, BP], 1, 1 66 [1, BP], 1, 1, [11, RLE], 0, [1, BP], 1[1, BP], 1, 1, [11, RLE], 0, [1, BP], 1

표 4의 제 1 행에 도시된 바와 같이, 룰 평가기(635)에 의해서 처리된 제 1 청크는 "[1, BP], 3, 3"이다. 이 청크는 관심있는 데이터(값 "3")를 포함할 수 있기 때문에, 값 "3"을 값 "1"로 대체하기 위해 룰 평가기(635)는 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다. 이 트랜스코딩된 청크는 (표 4의 제 2 행에 도시된 바와 같이) 이전 인코딩 버퍼(625)로 이동될 수 있다.As shown in the first row of Table 4, the first chunk processed by the rule evaluator 635 is "[1, BP], 3, 3". Since this chunk may contain the data of interest (value "3"), the rule evaluator 635 is used to replace the value "3" with the value "1". Map to 810 is available. This transcoded chunk can be moved to the previous encoding buffer 625 (as shown in the second row of Table 4).

표 4의 제 2 행에서, 룰 평가기(635)에 의해 처리될 제 2 청크는 "[4, RLE], 2"이다. 이 청크는 관심있는 데이터(값 "2")를 포함하지 않을 수 있으므로, 값 "2"를 값 "0"(이 데이터가 "무정의(don't care)" 데이터를 나타냄)으로 대체하기 위해 룰 평가기(635)는 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다. 이 청크는 "무정의(don't care)" 데이터를 포함할 수 있지만, 이전 인코딩 버퍼(625)는 관심있는 데이터를 포함할 수 있기 때문에, 이전 인코딩 버퍼(625)의 데이터는 (표 4의 제 3 행에 도시된 바와 같이) 출력 스트림으로 출력될 수 있고, 현재 트랜스코딩된 청크는 (표 4의 제 3 행에 도시된 바와 같이) 이전 인코딩 버퍼(625)로 이동될 수 있다.In the second row of Table 4, the second chunk to be processed by the rule evaluator 635 is "[4, RLE], 2". This chunk may not contain the data of interest (value "2"), so to replace the value "2" with the value "0" (this data represents "don't care" data). The rule evaluator 635 may use a map from the input dictionary 805 to the output dictionary 810 of FIG. 8. This chunk may contain “don't care” data, but since the previous encoding buffer 625 may contain the data of interest, the data in the previous encoding buffer 625 is (see Table 4). It can be output to an output stream (as shown in the third row), and the currently transcoded chunk can be moved to the previous encoding buffer 625 (as shown in the third row of Table 4).

표 4의 제 3 행에서, 룰 평가기(635)에 의해 처리된 제 3 청크는 "[1, BP], 0, 1"이다. 이 청크는 관심있는 데이터(값 "0" 및 "1")를 포함하지 않을 수 있으므로, 값 "0" 및 값 "1"을 값 "0"(무정의 데이터임을 지시하는)으로 대체하기 위해 룰 평가기(635)는 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다.In the third row of Table 4, the third chunk processed by the rule evaluator 635 is "[1, BP], 0, 1". Since this chunk may not contain the data of interest (values "0" and "1"), a rule to replace the value "0" and the value "1" with the value "0" (indicating it is undefined data) The evaluator 635 may use a map from the input dictionary 805 to the output dictionary 810 of FIG. 8.

이 청크는 "무정의(don't care)" 데이터를 포함할 수 있고, 이전 인코딩 버퍼(625)는 이미 "무정의(don't care)" 데이터를 포함할 수 있기 때문에, 이 두 청크는 결합될 수 있다. 이 청크는 비트 패킹을 사용하지만, 이전 인코딩 버퍼(625)의 청크는 RLE을 사용하므로, 두 인코딩 방식 중 하나가 다른 인코딩 방식으로 대체될 수 있다. 이 예에서, 비트 패킹-인코딩 데이터는 RLE를 사용하여 트랜스코딩될 수 있다. (비트 패킹을 사용하여 둘 이상의 값이 단일 값으로 저장되면, 전체 그룹이 복제될 수 있으며, 이는 복제된 값의 수는 패킹된 값의 수의 배수일 수 있다. 반면에, RLE는 단일 값을 복제한다.) 결과적으로, 이전 인코딩 버퍼(625)는 이제 "[6, RLE] 0"(표 4의 제 4 행에 도시된 바와 같이)을 저장할 수 있으며, 이는 두 번째 청크의 4 개의 "무정의(don't care)" 값과 세 번째 청크의 두 개의 "무정의(don't care)" 값을 결합한 것이다. Since this chunk may contain "don't care" data, and the previous encoding buffer 625 may already contain "don't care" data, these two chunks Can be combined. This chunk uses bit packing, but since the chunk of the previous encoding buffer 625 uses RLE, one of the two encoding schemes can be replaced with another encoding scheme. In this example, the bit packing-encoded data can be transcoded using RLE. (If more than one value is stored as a single value using bit packing, the entire group can be duplicated, which means that the number of duplicated values can be a multiple of the number of packed values. On the other hand, RLE takes a single value. Duplicate.) As a result, the previous encoding buffer 625 can now store "[6, RLE] 0" (as shown in the fourth row of Table 4), which means that the second chunk of the 4 It is a combination of the don't care" value and the two "don't care" values of the third chunk.

표 4의 제 4 행에서, 룰 평가기(635)에 의해 처리된 제 4 청크는 "[5, RLE], 1"이다. 이 청크는 관심있는 데이터(값 "1")를 포함하지 않을 수 있으므로, 룰 평가기(635)는 값 "1"을 값 "0"(무정의 데이터임을 지시하는)으로 대체하기 위해 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다. 도In the fourth row of Table 4, the fourth chunk processed by the rule evaluator 635 is "[5, RLE], 1". Since this chunk may not contain the data of interest (value "1"), the rule evaluator 635 is shown in FIG. 8 to replace the value "1" with the value "0" (indicating that it is undefined data). A map from input dictionary 805 to output dictionary 810 can be used. Degree

이 청크는 "무정의(don't care)" 데이터를 포함할 수 있고 이전 인코딩 버퍼(625)는 "무정의(don't care)" 데이터를 이미 포함할 수 있기 때문에, 이 두 청크는 결합될 수 있다. 두 청크는 동일한 "무정의(don't care)" 값을 인코딩하기 위해 인코딩 방식으로 RLE을 사용하므로, 룰 평가기(635)는 이전 인코딩 버퍼(625)에서 청크의 복제값을 증가시킴으로써 두 개의 청크를 결합할 수 있다. 결과적으로, 이전 인코딩 버퍼(625)는 이제 "[11, RLE] 0"(표 4의 제 5 행에 도시된 바와 같이)을 저장할 수 있으며, 이는 두 번째 청크로부터의 4 개의 "무정의(don't care)" 값과, 세 번째 청크로부터의 2 개의 "무정의(don't care)" 값, 그리고 네 번째 청크로부터의 5개의 "무정의(don't care)" 값을 조합한다.Since this chunk may contain "don't care" data and the previous encoding buffer 625 may already contain "don't care" data, these two chunks are combined. Can be. Since the two chunks use RLE as an encoding method to encode the same "don't care" value, the rule evaluator 635 increases the duplicate value of the chunk in the previous encoding buffer 625. You can combine chunks. As a result, the previous encoding buffer 625 can now store "[11, RLE] 0" (as shown in the 5th row of Table 4), which means the 4 "don't" from the second chunk. Combine the't care)" values with the 2 "don't care" values from the third chunk, and the 5 "don't care" values from the fourth chunk.

표 4의 제 5 행에서, 룰 평가기(635)에 의해 처리된 제 2 청크는 "[1, BP], 3"이다. 이 청크는 관심있는 데이터(값 "3")를 포함할 수 있기 때문에, 값 "3"을 값 "1"로 대체하기 위해 룰 평가기(635)는 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다. 이 트랜스코딩된 청크는 관심있는 데이터를 포함할 수 있는 반면, 이전 인코딩 버퍼(625)는 "무정의(don't care)" 데이터를 포함할 수 있기 때문에, 이 트랜스코딩된 청크는 이전 인코딩 버퍼(625)의 청크와 결합되지 않을 수 있다.In the fifth row of Table 4, the second chunk processed by the rule evaluator 635 is "[1, BP], 3". Since this chunk may contain the data of interest (value "3"), the rule evaluator 635 is used to replace the value "3" with the value "1". Map to 810 is available. This transcoded chunk may contain the data of interest, whereas the previous encoding buffer 625 may contain "don't care" data, so this transcoded chunk is the previous encoding buffer. It may not be combined with a chunk of 625.

이 시점에서, 일반적으로 이전 인코딩 버퍼(625)의 트랜스코딩된 데이터는 출력 스트림으로 출력되고 현재 트랜스코딩된 청크는 이전 인코딩 버퍼(625)로 이동될 것이다. 그러나 현재의 트랜스코딩된 청크는 입력 스트림에서 마지막 청크이므로, 양쪽 트랜스코딩된 청크가 출력될 수 있다(물론, 이전 인코딩 버퍼(625)의 청크가 먼저 출력된다). 표 4의 제 6 행은 최종 출력을 보여준다.At this point, generally the transcoded data of the previous encoding buffer 625 will be output to the output stream and the currently transcoded chunk will be moved to the previous encoding buffer 625. However, since the current transcoded chunk is the last chunk in the input stream, both transcoded chunks can be output (of course, the chunk of the previous encoding buffer 625 is output first). Row 6 of Table 4 shows the final output.

두 번째 예에서, 도 1의 호스트 컴퓨터(105)는 한국 국민에 관한 자료를 요청했다. 표 1에서 볼 수 있듯이, "한국"의 인덱스는 "2"이다. 따라서 출력 사전은 표 5와 같이 나타낼 수 있다.In the second example, the host computer 105 of FIG. 1 requested data on Korean citizens. As can be seen in Table 1, the index of "Korea" is "2". Therefore, the output dictionary can be expressed as Table 5.

IDID 국가country 00 무정의(Don't Care)Don't Care 1One 한국Korea

line 현재 인코딩 버퍼Current encoding buffer 이전 인코딩 버퍼Previous encoding buffer 출력 스트림Output stream 1One [1, BP], 3, 3[1, BP], 3, 3 22 [4, RLE], 2[4, RLE], 2 [1, BP], 0, 0[1, BP], 0, 0 33 [1, BP], 0, 1[1, BP], 0, 1 [4, RLE], 1[4, RLE], 1 [1, BP], 0, 0[1, BP], 0, 0 44 [5, RLE], 1[5, RLE], 1 [1, BP], 0, 0[1, BP], 0, 0 [1, BP], 0, 0, [4, RLE], 1[1, BP], 0, 0, [4, RLE], 1 55 [1, BP], 3[1, BP], 3 [7, RLE], 0[7, RLE], 0 [1, BP], 0, 0, [4, RLE], 1[1, BP], 0, 0, [4, RLE], 1 66 [1, BP], 0, 0, [4, RLE], 1, [8, RLE], 0[1, BP], 0, 0, [4, RLE], 1, [8, RLE], 0

표 6의 제 1 행에 도시된 바와 같이, 룰 평가기(635)에 의해 처리된 제 1 청크는 "[1, BP], 3, 3"이다. 이 청크는 관심이 없는 데이터(값 "3")를 포함할 수 있기 때문에, 값 "3"을 값 "0"("무정의(don't care)" 데이터임을 나타내는)으로 대체하기 위해 룰 평가기(635)는 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다. 이 트랜스코딩된 청크는 (표 6의 제 2 행에 도시된 바와 같이) 이전 인코딩 버퍼(625)로 이동될 수 있다.As shown in the first row of Table 6, the first chunk processed by the rule evaluator 635 is "[1, BP], 3, 3". Since this chunk may contain data of no interest (value "3"), rule evaluation to replace the value "3" with the value "0" (indicating that it is "don't care" data). The machine 635 may use a map from the input dictionary 805 to the output dictionary 810 of FIG. 8. This transcoded chunk can be moved to the previous encoding buffer 625 (as shown in the second row of Table 6).

표 6의 제 3 행에서, 룰 평가기(635)에 의해 처리된 제 3 청크는 "[1, BP], 0, 1"이다. 이 청크는 관심있는 데이터(값 "0"및 "1")를 포함하지 않을 수 있으므로, 값 "0" 및 값 "1"을 값 "0"(무정의 데이터임을 지시하는)으로 대체하기 위해 룰 평가기(635)는 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다. 이 청크는 관심없는 데이터를 포함할 수 있지만, 이전 인코딩 버퍼(625)는 관심있는 데이터를 포함할 수 있기 때문에, 이전 인코딩 버퍼(625)의 데이터는 (표 6의 제 4 행에 도시된 바와 같이) 출력 스트림으로 출력되고, 현재 트랜스코딩된 청크는 (표 6의 제 4 행에 도시된 바와 같이) 이전 인코딩 버퍼(625)로 이동될 수 있다.In the third row of Table 6, the third chunk processed by the rule evaluator 635 is "[1, BP], 0, 1". This chunk may not contain the data of interest (values "0" and "1"), so a rule to replace the value "0" and the value "1" with the value "0" (indicating that it is undefined data). The evaluator 635 may use a map from the input dictionary 805 to the output dictionary 810 of FIG. 8. This chunk may contain data of no interest, but since the previous encoding buffer 625 may contain the data of interest, the data in the previous encoding buffer 625 is (as shown in the fourth row of Table 6). ) Output to the output stream, and the currently transcoded chunk can be moved to the previous encoding buffer 625 (as shown in the fourth row of Table 6).

표 6의 제 3 행에서, 룰 평가기(635)에 의해 처리된 제 3 청크는 "[1, BP], 0, 1"이다. 이 청크는 관심있는 데이터(값 "0" 및 "1")를 포함하지 않을 수 있으므로, 값 "0" 및 값 "1"을 값 "0"(무정의 데이터임을 지시하는)으로 대체하기 위해 룰 평가기(635)는 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다. 이 청크는 관심없는 데이터를 포함할 수 있지만, 이전 인코딩 버퍼(625)는 관심있는 데이터를 포함할 수 있기 때문에, 이전 인코딩 버퍼(625)의 데이터는 (표 6의 제 4 행에 도시된 바와 같이) 출력 스트림 및 현재 트랜스코딩된 청크에 출력될 수 있고(표 6의 제 4 행에 도시된 바와 같이), 이전 인코딩 버퍼(625)로 이동될 수 있다.In the third row of Table 6, the third chunk processed by the rule evaluator 635 is "[1, BP], 0, 1". Since this chunk may not contain the data of interest (values "0" and "1"), a rule to replace the value "0" and the value "1" with the value "0" (indicating it is undefined data) The evaluator 635 may use a map from the input dictionary 805 to the output dictionary 810 of FIG. 8. This chunk may contain data of no interest, but since the previous encoding buffer 625 may contain the data of interest, the data in the previous encoding buffer 625 is (as shown in the fourth row of Table 6). ) Can be output to the output stream and the currently transcoded chunk (as shown in the fourth row of Table 6), and moved to the previous encoding buffer 625.

표 6의 제 4 행에서, 룰 평가기(635)에 의해 처리된 제 4 청크는 "[5, RLE], 1"이다. 이 청크는 관심있는 데이터(값 "1")를 포함하지 않으므로, 값 "1"을 값 "0"(무정의 데이터임을 지시하는)으로 대체하기 위해 룰 평가기(635)는 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다.In the fourth row of Table 6, the fourth chunk processed by the rule evaluator 635 is "[5, RLE], 1". Since this chunk does not contain the data of interest (value "1"), to replace the value "1" with the value "0" (indicating that it is undefined data), the rule evaluator 635 A map from 805 to output dictionary 810 can be used.

이 청크는 "무정의(don't care)" 데이터를 포함할 수 있고, 이전 인코딩 버퍼(625)는 "무정의(don't care)" 데이터를 포함할 수 있기 때문에, 이 두 청크는 결합될 수 있다. 이 청크는 RLE을 사용하지만, 이전 인코딩 버퍼(625)의 청크는 비트 패킹을 사용하므로, 두 인코딩 방식 중 하나가 다른 인코딩 방식으로 대체될 수 있다. 이 예에서, 비트 패킹의 인코딩 데이터는 RLE를 사용하여 트랜스코딩될 수 있다. (다시, 값 그룹이 아닌 단일 값이 복제될 수 있기 때문에 RLE를 선택할 수 있다) 결과적으로, 이전 인코딩 버퍼(625)는 이제 "[7, RLE] 0"(표 4의 제 5 행에 도시된 바와 같이)을 저장할 수 있으며, 이는 세 번째 청크의 2 개의 "무정의(don't care)" 값과 네 번째 청크의 다섯 개의 "무정의(don't care)" 값을 결합한 것이다. Since this chunk may contain "don't care" data, and the previous encoding buffer 625 may contain "don't care" data, the two chunks are combined. Can be. This chunk uses RLE, but since the chunk of the previous encoding buffer 625 uses bit packing, one of the two encoding schemes can be replaced with another encoding scheme. In this example, the encoded data in bit packing can be transcoded using RLE. (Again, RLE can be selected because a single value can be duplicated rather than a group of values) Consequently, the previous encoding buffer 625 is now "[7, RLE] 0" (shown in row 5 of Table 4). ), which is a combination of the two "don't care" values of the third chunk and the five "don't care" values of the fourth chunk.

표 6의 제 5 행에서, 룰 평가기(635)에 의해 처리된 제 2 청크는 "[1, BP], 3"이다. 이 청크는 관심있는 데이터(값 "3")를 포함하지 않을 수 있으므로, 값 "3"을 값 "0"(무정의 데이터임을 지시하는)으로 대체하기 위해 룰 평가기(635)는 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다.In the fifth row of Table 6, the second chunk processed by the rule evaluator 635 is "[1, BP], 3". Since this chunk may not contain the data of interest (value "3"), to replace the value "3" with the value "0" (indicating that it is undefined data), the rule evaluator 635 is A map from input dictionary 805 to output dictionary 810 can be used.

이 청크는 "무정의(don't care)" 데이터를 포함할 수 있고, 이전 인코딩 버퍼(625)는 "무정의(don't care)" 데이터를 포함할 수 있기 때문에, 이 두 청크는 결합될 수 있다. 이 청크는 비트 패킹을 사용하지만, 이전 인코딩 버퍼(625)의 청크는 RLE를 사용하므로, 두 인코딩 방식 중 하나가 다른 인코딩 방식으로 대체될 수 있다. 이 예에서, 비트 패킹의 인코딩 데이터는 RLE를 사용하여 트랜스코딩될 수 있다. 결과적으로, 이전 인코딩 버퍼(625)는 이제 "[8, RLE] 0"을 저장할 수 있으며, 이는 세 번째 청크의 2 개의 "무정의(don't care)" 값, 네 번째 청크의 다섯 개의 "무정의(don't care)" 값과 다섯 번째 청크의 하나의 "무정의(don't care)" 값을 결합한 것이다.Since this chunk may contain "don't care" data, and the previous encoding buffer 625 may contain "don't care" data, the two chunks are combined. Can be. This chunk uses bit packing, but since the chunk of the previous encoding buffer 625 uses RLE, one of the two encoding schemes can be replaced with another encoding scheme. In this example, the encoded data in bit packing can be transcoded using RLE. As a result, the previous encoding buffer 625 can now store "[8, RLE] 0", which means two "don't care" values in the third chunk, five "in the fourth chunk. It is a combination of the "don't care" value and one "don't care" value in the fifth chunk.

마지막으로, 제 5 청크는 입력 스트림의 마지막 청크이므로, 룰 평가기(635)는 이전 인코딩 버퍼(625)에 트랜스코딩된 데이터를 출력할 수 있다. 표 6의 제 6 행은 최종 출력을 나타낸다.Finally, since the fifth chunk is the last chunk of the input stream, the rule evaluator 635 may output the transcoded data to the previous encoding buffer 625. Row 6 of Table 6 shows the final output.

위의 예들 중 어느 것도 연속적인 청크가 관심있는 데이터를 포함하는 상황을 보여주지는 않는다. 본 발명의 실시 예는 이러한 상황을 상이한 방식으로 처리할 수 있다. 본 발명의 일 실시 예에서, 현재 인코딩 버퍼(620)가 관심있는 데이터를 포함할 때 이전 인코딩 버퍼(625)의 임의의 청크가 출력 스트림으로 출력될 수 있다(즉, 현재 인코딩 버퍼(620)가 관심있는 데이터를 포함하는 경우, 현재 인코딩 버퍼(620)의 데이터를 이전 인코딩 버퍼(625)의 데이터와 결합하려는 시도는 발생하지 않는다). 본 발명의 다른 실시 예에서, 현재 인코딩 버퍼(620)의 청크들 및 이전 인코딩 버퍼(625)의 청크들이 결합될 수 있다. 그러나 본 발명의 이러한 실시 예에서, 이러한 조합이 실현 가능한지의 여부는 관심 값이 동일한 지에 따라 달라질 수 있다. 예를 들어, 하나의 청크가 중국 시민에 관한 데이터를 포함하고 다른 청크가 한국 국민에 대한 데이터를 포함하는 경우, 이러한 청크는 본 발명의 실시 예에 따라 결합되거나 결합되지 않을 수 있다. 반면에, 두 청크에 한국 국민에 관한 데이터가 포함되어 있으면 두 청크를 결합하는 것이 가능할 수 있다.None of the above examples show a situation in which successive chunks contain the data of interest. Embodiments of the present invention can handle this situation in different ways. In an embodiment of the present invention, when the current encoding buffer 620 contains data of interest, an arbitrary chunk of the previous encoding buffer 625 may be output as an output stream (that is, the current encoding buffer 620 is If it contains data of interest, no attempt is made to combine the data in the current encoding buffer 620 with the data in the previous encoding buffer 625). In another embodiment of the present invention, chunks of the current encoding buffer 620 and chunks of the previous encoding buffer 625 may be combined. However, in this embodiment of the present invention, whether or not such a combination is feasible may vary depending on whether the interest values are the same. For example, if one chunk contains data about Chinese citizens and another chunk contains data about Korean citizens, these chunks may or may not be combined according to an embodiment of the present invention. On the other hand, it may be possible to combine the two chunks if they contain data about Korean citizens.

룰 평가기(635)는 트랜스코딩 룰(630)을 사용하여 관심있는 데이터 및 관심없는 데이터, 이전 인코딩 버퍼(625)에 저장되는 데이터 vs. 출력될 수 있는 데이터, 그리고 청크가 하나의 인코딩 방식으로부터 다른 인코딩 방식으로 트랜스코딩될 수 있는지 여부를 결정할 수 있다. The rule evaluator 635 uses the transcoding rule 630 to determine the data of interest and the data of interest, vs. data stored in the previous encoding buffer 625. It is possible to determine whether data that can be output and whether a chunk can be transcoded from one encoding scheme to another encoding scheme.

전술한 바와 같이, 룰 평가기(635)는 또한 인덱스 매퍼(615)를 포함할 수 있다. 룰 평가기(635)가 인덱스 매퍼(615)를 포함하는 본 발명의 실시 예에서, 룰 평가기(635)는 트랜스코딩 룰(630)이 적용되기 전에 현재 인코딩 버퍼(620)의 내용에 인덱스 매퍼(615)를 적용할 수 있다.As described above, the rule evaluator 635 may also include an index mapper 615. In an embodiment of the present invention in which the rule evaluator 635 includes an index mapper 615, the rule evaluator 635 is an index mapper on the contents of the current encoding buffer 620 before the transcoding rule 630 is applied. (615) can be applied.

표 7은 사용된 인코딩 방식이 RLE 또는 비트 패킹일 때 사용될 수 있는 몇 가지 룰을 보여준다. 다른 인코딩 방식이 사용될 수 있는 본 발명의 실시 예에서, 룰은 그에 따라 변경될 수 있다: 모든 이러한 변형은 본 발명의 실시 예로 간주된다. 또한, 본 발명의 실시 예는 둘 이상의 상이한 타입의 인코딩 방식 사이에서 트랜스코딩 데이터를 관리하는 룰을 포함할 수 있다. 예를 들어, 하이브리드 인코딩 방식은 3 가지 상이한 인코딩 방식을 사용할 수 있다: 도 6의 트랜스코딩 룰(630)은, 도 6의 현재 인코딩 버퍼(620)와 이전 인코딩 버퍼(625)가 임의의 다른 인코딩 방식의 쌍을 사용하여 인코딩된 데이터를 포함할 때 데이터를 트랜스코딩하는 방법을 지정할 수 있다. Table 7 shows some rules that can be used when the encoding method used is RLE or bit packing. In an embodiment of the present invention in which other encoding schemes may be used, the rules may be changed accordingly: all such modifications are considered to be examples of the present invention. In addition, an embodiment of the present invention may include a rule for managing transcoding data between two or more different types of encoding schemes. For example, the hybrid encoding scheme may use three different encoding schemes: The transcoding rule 630 of FIG. 6 is that the current encoding buffer 620 and the previous encoding buffer 625 of FIG. 6 are any other encoding. When including data that is encoded using a pair of schemes, you can specify how to transcode the data.

표 7에서, P는 도 1의 호스트 컴퓨터(105)에 관심을 가질 수 있는 데이터를, DC는 호스트 컴퓨터(105)에 관심이 없을 수 있는 데이터를 나타낸다. (데이터가 관심이 있는 것으로 또는 관심이 없는 것으로 식별되는 방식은 후술하는 도 11을 참조하여 더 설명될 것이다.) 변수들(예를 들어, x, y, 또는 z)이 사용되는 경우, 이들 변수들은 도 1의 호스트 컴퓨터(105)에 관심이 있거나 관심이 없는 값의 수의 카운트를 나타낼 수 있다. 예를 들어, "[g, BP] P (x), DC (y), P (z)"(룰 7 및 룰 9에서 사용됨)의 표현은 비트 패킹을 사용하여 데이터가 인코딩되었음을 나타낸다: 그룹 시작 부분에 관심이 있는 x 값, 그룹 중간 부분에 관심이 없는 y 값, 그리고 그룹 끝에 관심이 있는 z 값을 그룹이 포함한다. x, y, z, g 및 G는 'g*G = x + y + z, 1 ≤ g ≤ 63, x mod G = 0, y mod G = 0, z mod G, y ≠ 0 및 y ≥ 16 나누기 패킹된 값당 비트 수'과 같은 제약 조건을 충족해야 한다. 마지막으로, (출력 칼럼에서) PEB는 룰이 애플리케이션을 위해 선택될 때, 이전 인코딩 버퍼(625)에 저장된 모든 것이 출력 스트림으로 출력될 수 있음을 나타낼 수 있다. 표 7은 또한 임의의 데이터가 인덱스 매퍼(615)에 의해 이미 매핑된 상황을 고려하고, 따라서 도 8의 출력 사전(810)에 대응하는 값을 포함한다. In Table 7, P denotes data that may be of interest to the host computer 105 of FIG. 1 and DC denotes data that may not be of interest to the host computer 105. (How the data is identified as of interest or not of interest will be further described with reference to FIG. 11 below.) When variables (e.g., x, y, or z) are used, these variables May represent a count of the number of values of interest or not of interest to the host computer 105 of FIG. 1. For example, the expression "[g, BP] P (x), DC (y), P (z)" (used in rule 7 and rule 9) indicates that the data was encoded using bit packing: group start The group includes the x value of interest in the part, the y value in the middle of the group, and the z value of interest at the end of the group. x, y, z, g and G are'g*G = x + y + z, 1 ≤ g ≤ 63, x mod G = 0, y mod G = 0, z mod G, y ≠ 0 and y ≥ 16 Constraints such as'number of bits per divided value' must be satisfied. Finally, the PEB (in the output column) can indicate that when a rule is selected for an application, everything stored in the previous encoding buffer 625 can be output to the output stream. Table 7 also takes into account the situation in which any data has already been mapped by the index mapper 615, and thus includes values corresponding to the output dictionary 810 of FIG.

Rule 현재 인코딩 버퍼Current encoding buffer 이전 인코딩 버퍼Previous encoding buffer 새로운 이전 인코딩 버퍼New old encoding buffer 새로운 현재 인코딩 버퍼New current encoding buffer 출력Print 1One [r, RLE] P[ r , RLE] P AnythingAnything [r, RLE], P[ r , RLE], P Next chunkNext chunk PEBPEB 22 [r, RLE] DC[ r , RLE] DC [r 1, RLE] DC[ r 1 , RLE] DC [r 1 + r, RLE] DC[ r 1 + r , RLE] DC Next chunkNext chunk 33 [r, RLE] DC[ r , RLE] DC Anything elseAnything else [r, RLE] DC[ r , RLE] DC Next chunkNext chunk PEBPEB 44 [g, BP], P[ g , BP], P AnythingAnything [g, BP], P[ g , BP], P Next chunkNext chunk PEBPEB 55 [g, BP] DC(y)[ g , BP] DC( y ) [r 1, RLE] DC[ r 1 , RLE] DC [r 1 + y, RLE] DC[ r 1 + y , RLE] DC Next chunkNext chunk 66 [g, BP] DC(y), P(z)[ g , BP] DC( y ), P( z ) [r 1, RLE] DC[ r 1 , RLE] DC [r 1 + y, RLE] DC[ r 1 + y , RLE] DC [z / 8, BP] PO(z)[ z / 8, BP] PO( z ) 77 [g, BP] P(x), DC(y), P(z)[ g , BP] P( x ), DC( y ), P( z ) [r 1, RLE] DC[ r 1 , RLE] DC [x / 8, BP] P(x)[ x / 8, BP] P( x ) [(y + z)/8, BP] DC(y), P(z)[( y + z )/8, BP] DC( y ), P( z ) PEBPEB 88 [g, BP] DC(y), P(z)[ g , BP] DC( y ), P( z ) Anything elseAnything else [y, RLE] DC[ y , RLE] DC [z / 8, BP] P(z)[ z / 8, BP] P( z ) PEBPEB 99 [g, BP] P(x), DC(y), P(z)[ g , BP] P( x ), DC( y ), P( z ) Anything elseAnything else [x / 8, BP] P(x)[ x / 8, BP] P( x ) [(y + z)/8, BP] DC(y), P(z)[( y + z )/8, BP] DC( y ), P( z ) PEBPEB

상기 논의는 일반적으로 데이터에 대해 트랜스코딩이 어떻게 수행될 수 있는지를 설명한다. 그러나 데이터가 칼럼 포맷으로 저장될 때 칼럼 포맷은 트랜스코딩을 유용하기 위해 활용될 수 있다. 이 활용을 설명하기 전에, 칼럼 포맷을 이해하는 것이 유용하다. 설명을 목적으로, 칼럼 포맷은 SSD를 참조하여 설명되지만, 본 발명의 실시 예는 칼럼 포맷을 이용할 수 있는 다른 스토리지 장치를 포함할 수 있다.The above discussion generally describes how transcoding can be performed on data. However, when data is stored in a column format, the column format can be utilized to make transcoding useful. Before explaining this use, it is useful to understand the column format. For illustrative purposes, the column format is described with reference to an SSD, but embodiments of the present invention may include other storage devices capable of using the column format.

도 9는 칼럼 포맷으로 저장된 예시적인 파일을 보여준다. 도 9에는 파일이 도시되어 있다. 파일은 파일 메타 데이터(905) 및 칼럼 청크(910-1, 910-2 및 910-3)를 포함할 수 있다. 도 9는 3 개의 칼럼 청크들(910-1 내지 910-3)을 도시하지만, 본 발명의 실시 예는 제한없이 임의의 수(0 이상)의 청크들을 포함할 수 있다.9 shows an exemplary file stored in a column format. Fig. 9 shows a file. The file may include file metadata 905 and column chunks 910-1, 910-2, and 910-3. 9 illustrates three column chunks 910-1 to 910-3, an embodiment of the present invention may include an arbitrary number (zero or more) of chunks without limitation.

파일 메타 데이터(905)는 파일과 관련된 메타 데이터를 포함할 수 있다. 다른 메타 데이터도 저장될 수 있지만, 도 9는 파일-블록 맵(915) 및 사전 페이지(920)를 포함하는 파일 메타 데이터(905)를 보여준다. 사전 페이지(920)는 상술한 표 1에 도시된 사전과 같은 파일의 데이터 내의 값을 인코딩하는데 사용되는 사전일 수 있다. 사전 페이지(920)는 또한 예를 들어, 하나의 사전은 국가 이름을 저장하고 다른 사전은 성(Surnames)을 저장하는 것처럼, 파일내 다른 데이터를 인코딩하기 위해 사용될 수 있는 다중 사전들을 저장할 수 있다.The file metadata 905 may include metadata related to a file. Other metadata may also be stored, but FIG. 9 shows file metadata 905 including a file-block map 915 and a dictionary page 920. The dictionary page 920 may be a dictionary used to encode values in data of a file, such as the dictionary shown in Table 1 above. Dictionary page 920 may also store multiple dictionaries that can be used to encode different data in a file, for example one dictionary storing country names and another storing surnames.

파일-블록 맵(915)은 개별 칼럼 청크들(910-1, 910-2 및 910-3)을 저장하는 블록뿐만 아니라 그들의 상대 순서를 식별할 수 있다. 파일-블록 맵(915)은 또한 각 칼럼 청크들(910-1, 910-2 및 910-3) 내에서 데이터 페이지의 순서를 지정하거나, 또는 페이지 순서가 칼럼 청크들(910-1, 910-2 및 910-3) 내에서 지정될 수 있다. 파일-블록 맵(915)은, 도 5의 파일-블록 맵(530)이 도 1의 스토리지 장치(120)에 저장된 모든 파일을 저장하기 위해 어떤 블록이 사용되는지에 관한 정보를 제공할 수 있다는 점과, 파일-블록 맵(915)은 도 9에 도시된 파일을 저장하기 위해 어떤 블록이 사용되는지에 관한 정보를 제공할 수 있다는 점을 제외하고, 도 5의 파일-블록 맵(530)과 유사할 수 있다. (물론, 파일-블록 맵 모두가 함께 사용될 수 있다: 도 5의 파일-블록 맵(530)은 각 파일에 대한 파일 메타 데이터(905)를 저장하는 블록을 찾는데 사용되고, 파일 메타 데이터(905)의 파일-블록 맵(915)은 파일에 대한 칼럼 청크를 저장하는 칼럼 청크들을 찾는 데 사용될 수 있다.)The file-block map 915 can identify the blocks storing individual column chunks 910-1, 910-2, and 910-3 as well as their relative order. The file-block map 915 also specifies the order of data pages within each of the column chunks 910-1, 910-2, and 910-3, or the page order is the column chunks 910-1, 910- 2 and 910-3). The file-block map 915 may provide information on which blocks are used to store all files stored in the storage device 120 of FIG. 1 in the file-block map 530 of FIG. And, the file-block map 915 is similar to the file-block map 530 of FIG. 5, except that it can provide information on which blocks are used to store the file shown in FIG. can do. (Of course, both file-block maps can be used together: the file-block map 530 of FIG. 5 is used to find a block storing the file meta data 905 for each file, and the file meta data 905 is The file-block map 915 can be used to find column chunks that store column chunks for a file.)

일반적으로 단일 칼럼 청크는 여러 블록에 걸쳐있을 수 있으며, 단일 블록은 다수의 칼럼 청크들을 저장할 수 있다. 데이터가 저장된 위치와 해당 데이터가 나타내는 내용(예: 그 데이터가 포함된 파일)을 식별할 수 있는 어떤 방법이 있는한 데이터 저장에 대한 보다 일반적인 해결책에는 거의 어려움이 없다. 그러나 이 논의의 목적으로, 칼럼 청크가 단일 블록에 적합하고 블록들이 칼럼 청크를 공유하지 않는 상황을 고려하기로 한다. 따라서, 칼럼 청크들(910-1, 910-2 및 910-3) 각각은 별도의 블록에 저장될 수 있다.In general, a single column chunk can span multiple blocks, and a single block can store multiple column chunks. As long as there is some way to identify where the data is stored and what it represents (e.g., the file containing that data), there is little difficulty with more general solutions to data storage. However, for the purposes of this discussion, we will consider a situation where a column chunk fits into a single block and the blocks do not share a column chunk. Accordingly, each of the column chunks 910-1, 910-2 and 910-3 may be stored in a separate block.

칼럼 청크(910-1)의 내(칼럼 청크들(910-2 및 910-3)도 유사함)에는 사전 페이지(925) 및 데이터 페이지들(930-1, 930-2 및 930-3)이 존재할 수 있다. 비록 도 9는 3 개의 데이터 페이지들을 도시하지만, 본 발명의 실시 예는 칼럼 청크 내에 임의의 수(0 또는 그 이상)의 데이터 페이지들을 포함할 수 있다. 데이터 페이지들은 파일의 실제 데이터를 개별 페이지에 맞는 단위로 나누어 저장할 수 있다.Within the column chunk 910-1 (column chunks 910-2 and 910-3 are similar), a dictionary page 925 and data pages 930-1, 930-2, and 930-3 are Can exist. Although Fig. 9 shows three data pages, an embodiment of the present invention may include any number (0 or more) of data pages in a column chunk. Data pages can store the actual data of the file by dividing it into units suitable for individual pages.

사전 페이지(925)는 칼럼 청크(910-1) 내의 데이터에 사용되는 사전을 저장할 수 있다. 사전 페이지(920)에서와 같이, 사전 페이지(925)는 파일 내의 상이한 데이터를 인코딩하는데 사용될 수 있는 다수의 사전을 저장할 수 있다.The dictionary page 925 may store a dictionary used for data in the column chunk 910-1. As with dictionary page 920, dictionary page 925 can store a number of dictionaries that can be used to encode different data within a file.

여기서, 왜 도 9에서 사전 페이지(920) 및 사전 페이지(925) 둘 다를 보여주는지 의문이 제기될 수 있다. 그 이유는 사전 페이지들(920 및 925)이 상이한 칼럼 포맷의 구현들로서 사용될 수 있기 때문이다. 예를 들어, 하나의 칼럼 스토리지 포맷은 사전 페이지(920)에 저장될 수 있는 전체 파일에 대해 단일 사전을 사용할 수 있다. 그러나 다른 칼럼 포맷은 각 칼럼 청크들(910-1, 910-2 및 910-3)에서 개별 사전 페이지(925)를 사용할 수 있다. 사전 페이지(925)를 사용하는 이점은 특정 칼럼 청크가 사전을 사용하지 않거나, 특정 값이 특정 칼럼 청크 내의 데이터에 사용되지 않으면, 이러한 정보가 사전 페이지(925)에서 생략되어 사전 페이지(925)의 사이즈를 줄일 수 있다는 것이다(또는 완전히 제거). 그러나 한편으로는, 다른 칼럼 청크의 여러 사전 페이지들(925)는 데이터 복제를 초래할 수 있다: 즉, 동일한 사전 항목이 여러 칼럼 청크에 사용될 수 있다. 이것이 사전 페이지들(920과 925)이 점선으로 표시되는 이유이고, 사용중인 칼럼 스토리지 포맷에 따라 어느 하나가 생략될 수도 있다. (실제로 파일이 사전을 전혀 사용하지 않는 경우도 있을 수 있으며, 이 경우 사전 페이지들(920 및 925)은 모두 생략될 수 있다.)Here, a question may arise why both the dictionary page 920 and the dictionary page 925 are shown in FIG. 9. The reason is that dictionary pages 920 and 925 can be used as implementations of different column formats. For example, one column storage format can use a single dictionary for all files that can be stored in dictionary page 920. However, other column formats may use a separate dictionary page 925 in each of the column chunks 910-1, 910-2, and 910-3. The advantage of using dictionary page 925 is that if a particular column chunk does not use a dictionary, or if a particular value is not used for data within a particular column chunk, this information is omitted from dictionary page 925 You can reduce the size (or remove it entirely). However, on the one hand, multiple dictionary pages 925 of different column chunks can result in data duplication: that is, the same dictionary item can be used for multiple column chunks. This is the reason why the dictionary pages 920 and 925 are indicated by dotted lines, and any one may be omitted depending on the column storage format in use. (In fact, there may be a case in which the file does not use a dictionary at all, and in this case, all of the dictionary pages 920 and 925 may be omitted.)

이제 칼럼 포맷이 설명되었고, 칼럼 포맷을 사용하는 스토리지 장치 내의 도 4의 트랜스코더(420)를 사용하기 위한 적응에 대한 설명이 가능하다. 도 10은 데이터가 칼럼 포맷으로 저장된 트랜스코딩을 구현하도록 구성된 도 1의 스토리지 장치(120)를 보여준다. 도 10에 도시된 바와 같이, 스토리지 장치(120)는 호스트 인터페이스 계층(505), 스토리지 장치 컨트롤러(510) 및 스토리지(515)를 포함할 수 있으며, 이들의 기능은 상술한 도 5를 참조하여 설명된 바와 유사하게 기능한다(다시, 스토리지 장치(120)는 SSD, 하드 디스크 드라이브, 또는 칼럼 포맷을 사용할 수 있는 임의의 다른 스토리지 장치일 수 있다).Now, the column format has been described, and an adaptation for using the transcoder 420 of FIG. 4 in the storage device using the column format can be described. 10 illustrates the storage device 120 of FIG. 1 configured to implement transcoding in which data is stored in a column format. As shown in FIG. 10, the storage device 120 may include a host interface layer 505, a storage device controller 510, and a storage 515, and their functions are described with reference to FIG. 5 Functions similar to what has been done (again, storage device 120 may be an SSD, a hard disk drive, or any other storage device capable of using a column format).

스토리지 장치(120)는 또한 인스토리지 컴퓨터 컨트롤러(1005), 칼럼 청크 프로세서(1010) 및 인스토리지 컴퓨터(315)을 포함할 수 있다. 인스토리지 컴퓨터 컨트롤러(1005)는 인스토리지 컴퓨터(315) 및 칼럼 청크 프로세서(1010)로 전송되는 정보를 관리할 수 있다. 예를 들어, 도 1의 호스트 컴퓨터(105)는 스토리지 장치(120)가 특정 국가의 시민 수를 카운트하는 것과 같은 일부 가속 기능을 수행할 것을 요청할 수 있고, 인스토리지 컴퓨터 컨트롤러(1005)는 속성 (관심 국가 식별)을 칼럼 청크 프로세서(1010)에 제공할 수 있다. 인스토리지 컴퓨터 컨트롤러(1005)는 또한 스토리지(515)로부터 데이터, 특히 칼럼 청크에 액세스하여 그 데이터를 칼럼 청크 프로세서(1010)에 제공할 수 있다. 인스토리지 컴퓨터 컨트롤러(1005)는 또한 데이터에 사용된 인코딩 방식을 결정할 수 있고(하이브리드 인코딩 방식이 아닌 칼럼 청크나 전체 파일을 사용하기 위해 단일 인코딩 방식이 사용되는 것으로 가정), 칼럼 청크 프로세서(1010)에 인코딩 타입을 제공한다. 마지막으로, 인스토리지 컴퓨터 컨트롤러(1005)는 다시 칼럼 청크 프로세서(1010)로부터 트랜스코딩된 데이터를 수신하고, 도 1의 호스트 컴퓨터(105)로부터의 요청에 적절하게, 그 트랜스코딩된 데이터를 (도 1의 호스트 인터페이스 계층(505)을 통해) 도 1의 호스트 컴퓨터(105)나 인스토리지 컴퓨터(315)로 반환할 수 있다. 칼럼 청크 프로세서(1010)의 구조나 동작은 아래 도 11을 참조하여 설명된다.The storage device 120 may also include an instance computer controller 1005, a column chunk processor 1010 and an instance computer 315. The instorage computer controller 1005 may manage information transmitted to the instorage computer 315 and the column chunk processor 1010. For example, the host computer 105 of FIG. 1 may request that the storage device 120 perform some acceleration functions, such as counting the number of citizens of a particular country, and the in-store computer controller 1005 may have a property ( Country of interest identification) may be provided to the column chunk processor 1010. Instorage computer controller 1005 may also access data from storage 515, in particular column chunks, and provide the data to column chunk processor 1010. Instance computer controller 1005 can also determine the encoding method used for the data (assuming that a single encoding method is used to use column chunks or the entire file, not hybrid encoding method), and column chunk processor 1010 Provide the encoding type to Finally, the inventory computer controller 1005 again receives the transcoded data from the column chunk processor 1010 and, as appropriate to the request from the host computer 105 of FIG. 1, transfers the transcoded data (Fig. It may be returned to the host computer 105 or the storage computer 315 of FIG. 1) through the host interface layer 505 of FIG. The structure or operation of the column chunk processor 1010 will be described with reference to FIG. 11 below.

인스토리지 컴퓨터 컨트롤러(1005) 및 칼럼 청크 프로세서(1010)는 다른 가능성 중에서도 적절히 프로그래밍된 범용 프로세서, FPGA, ASIC, GPU 또는 GPGPU를 사용하여 구현될 수 있다. 인스토리지 컴퓨터 컨트롤러(1005) 및 칼럼 청크 프로세서(1010)는 동일한 하드웨어 또는 다른 하드웨어를 사용하여 구현될 수 있고(예를 들어, 인스토리지 컴퓨터 컨트롤러(1005)는 ASIC으로 구현될 수 있는 반면, 칼럼 청크 프로세서(1010)는 FPGA로 구현될 수 있음), 그것들은 단일 유닛 또는 개별 컴포넌트들로서 구현될 수 있다.Instorage computer controller 1005 and column chunk processor 1010 may be implemented using suitably programmed general purpose processors, FPGAs, ASICs, GPUs or GPGPUs, among other possibilities. Instorage computer controller 1005 and column chunk processor 1010 may be implemented using the same hardware or different hardware (e.g., the inventory computer controller 1005 may be implemented as an ASIC, while column chunk The processor 1010 can be implemented as an FPGA), they can be implemented as a single unit or as individual components.

도 11은 칼럼 포맷으로 저장된 데이터를 트랜스코딩하도록 구성된 도 10의 칼럼 청크 프로세서(1010)를 보여준다. 도 11을 참조하면, 칼럼 청크 프로세서(1010)는 입력 스트림, 인코딩 타입 및 속성을 입력으로서 수신할 수 있고, 출력 스트림을 출력으로서 생성할 수 있다. 입력 스트림은 입력 버퍼(1105)에 저장될 수 있다. 입력 스트림은 칼럼 청크로부터의 단일 데이터 페이지일 수 있거나, 칼럼 청크 내의 모든 데이터일 수 있다. 입력 버퍼(1105)로부터의 데이터는 (도 6을 참조하여 전술한 바와 같이) 입력 스트림으로서 트랜스코더(420)에 제공될 수 있다: 트랜스코더(420)는 또한 도 10에서 설명된 바와 같이 도 10의 인스토리지 컴퓨터 컨트롤러(1005)로부터 인코딩 타입을 수신할 수 있다. 트랜스코더(420)는 도 6의 서큘러 버퍼(605)를 포함할 수 있으므로, 입력 버퍼(1105)는 생략될 수 있음에 유의해야 한다: 데이터는 도 6의 스트림 스플리터(610)가 작동할 수 있도록 도 6의 서큘러 버퍼(605)에 저장될 수 있다. 그러나 본 발명의 일부 실시 예에서, 도 6의 서큘러 버퍼(605)는 전체 데이터 페이지 또는 칼럼 청크를 저장하기에 충분히 크지 않을 수 있다(또는 데이터가 도 6의 서큘러 버퍼(605)로부터 제거될 수 있는 것보다 빠르게 입력 스트림이 데이터를 제공할 수 있다). 이 경우에 입력 버퍼(1105)는 도 6의 서큘러 버퍼(605)에 즉시 적합하지 않을 수 있는 데이터를 위한 임시 저장소로서 동작할 수 있다.FIG. 11 shows the column chunk processor 1010 of FIG. 10 configured to transcode data stored in a column format. Referring to FIG. 11, the column chunk processor 1010 may receive an input stream, an encoding type, and an attribute as input, and may generate an output stream as an output. The input stream may be stored in the input buffer 1105. The input stream can be a single page of data from a column chunk, or can be all data within a column chunk. Data from the input buffer 1105 may be provided to the transcoder 420 as an input stream (as described above with reference to FIG. 6): The transcoder 420 may also be provided in FIG. 10 as described in FIG. It is possible to receive the encoding type from the Instore computer controller 1005. It should be noted that since the transcoder 420 may include the circular buffer 605 of FIG. 6, the input buffer 1105 may be omitted: the data is so that the stream splitter 610 of FIG. 6 can operate. It may be stored in the circular buffer 605 of FIG. 6. However, in some embodiments of the present invention, the circular buffer 605 of FIG. 6 may not be large enough to store the entire data page or column chunk (or data may be removed from the circular buffer 605 of FIG. 6 ). The input stream can provide data faster than that). In this case the input buffer 1105 may act as a temporary storage for data that may not immediately fit into the circular buffer 605 of FIG. 6.

트랜스코더(420)의 출력(도 6을 참조하여 설명된 출력 스트림)은 출력 버퍼(1110)에 저장될 수 있다. 다시, 트랜스코더(420)에 의해 생성됨에 따라 데이터가 목적지로 직접 전송될 수 있지만, 완전한 데이터 페이지 또는 칼럼 청크와 같은 특정 단위로 데이터를 전송하는 것이 유용할 수 있다. 이러한 상황에서, 출력 버퍼(1110)는 적절한 데이터 단위가 생성될 때까지 출력 스트림을 저장할 수 있다. 그 시점에서, 칼럼 청크 프로세서(1010)는 요청된 트랜스코딩 작업에 적합하게 출력 스트림을 도 10의 인스토리지 컴퓨터 컨트롤러(1005)로 전송하거나, 도 1의 호스트 컴퓨터(105)에 전송할 수 있다.The output of the transcoder 420 (the output stream described with reference to FIG. 6) may be stored in the output buffer 1110. Again, as generated by the transcoder 420, the data may be directly transmitted to the destination, but it may be useful to transmit the data in specific units such as complete data pages or column chunks. In this situation, the output buffer 1110 may store the output stream until an appropriate data unit is generated. At that point, the column chunk processor 1010 may transmit the output stream to the instorage computer controller 1005 of FIG. 10 or to the host computer 105 of FIG. 1 to suit the requested transcoding operation.

인덱스 매퍼(615, 도 11에서 트랜스코더(420) 외부에 도시되어 있지만, 인덱스 매퍼(615)는 도 6에 도시된 바와 같이 트랜스코더(420)의 일부일 수 있다)는, 속성 평가기(1115) 및 "돈케어(무정의)" 평가기(1120)로부터 정보를 수신할 수 있다. 속성 평가기(1115)는 도 10의 인스토리지 컴퓨터 컨트롤러(1005)로부터 속성을 수신하고, 관심있는 데이터를 결정하기 위해 속성을 사용한다. 비교 연산자는 도 8의 입력 사전(805, 도 9의 사전 페이지들(920, 925) 중 어느 하나일 수 있음)에서 어떤 값이 도 1의 호스트 컴퓨터(105)에게 관심이 있는지를 식별하기 위해 속성 평가기(1115)에 의해 사용될 수 있다. 돈케어 평가기(1120)는 관심이 없는 데이터를 식별하기 위해 유사하게(하지만 미러(mirror) 형태로) 동작할 수 있다. 속성 평가기(1115) 및 돈케어 평가기(1120)는 상보적으로 동작하므로, 두 평가기 중 어느 하나를 사용하는 것이 가능하다는 점에 유의 해야 한다(하나의 평가기에 대한 기준을 충족하지 않는 데이터는 결과적으로 다른 평가기의 기준에 적합함): 따라서, 속성 평가기(1115) 및 돈케어 평가기(1120) 중 어느 하나는 생략될 수 있다. 이 정보는 속성 평가기(1115) 및 돈케어 평가기(1120)에 의해 인덱스 매퍼(615)에 제공될 수 있으며, 인덱스 매퍼(615)는 도 8의 입력 사전(805)으로부터 도 8의 출력 사전(810)로의 매핑을 확립할 수 있게 한다. The index mapper 615 (which is shown outside the transcoder 420 in FIG. 11 ), but the index mapper 615 may be a part of the transcoder 420 as shown in FIG. 6 ), the attribute evaluator 1115 And information from the “money care (undefined)” evaluator 1120. The attribute evaluator 1115 receives the attribute from the instance computer controller 1005 of FIG. 10 and uses the attribute to determine the data of interest. The comparison operator is an attribute to identify which value is of interest to the host computer 105 of FIG. 1 in the input dictionary 805 of FIG. 8 (which may be any one of the dictionary pages 920 and 925 of FIG. 9). It can be used by the evaluator 1115. The money care evaluator 1120 may operate similarly (but in the form of a mirror) to identify data of no interest. It should be noted that since the attribute evaluator 1115 and the Doncare evaluator 1120 operate complementarily, it is possible to use either of the two evaluators (data that do not meet the criteria for one evaluator). Consequently fits the criteria of other evaluators): Therefore, either of the attribute evaluator 1115 and the money care evaluator 1120 may be omitted. This information may be provided to the index mapper 615 by the attribute evaluator 1115 and the money care evaluator 1120, and the index mapper 615 is an output dictionary of FIG. 8 from the input dictionary 805 of FIG. Make it possible to establish a mapping to (810).

예로서, 미국 시민을 포함하는 데이터 세트의 항목 수를 카운트하기 위한 도 6의 호스트 컴퓨터(105)로부터의 쿼리(query)를 다시 고려한다. 이 쿼리가 도착하면, 속성이 추출될 수 있다(예를 들면: "시민권 = 미국": 속성의 정확한 포맷은 데이터 세트 포맷 및 쿼리 제출에 사용된 응용 프로그램에 따라 다를 수 있다). 도 8의 입력 사전(805)의 검사(표 1에 표시된 것과 같은)는 "미국"을 "3" 값으로 대체하는데 사용될 수 있다. 따라서, 인덱스 매퍼(615)에 제공된 속성은 "시민권 = 3"을 지정할 수 있고, 그 후에 인덱스 매퍼(615)는 도 8의 출력 사전(810, 표 2에 표시된 것과 같은), 그리고 표 3에 표시된 맵을 생성할 수 있다. As an example, consider again the query from the host computer 105 of FIG. 6 to count the number of items in a data set containing US citizens. When this query arrives, the attribute can be extracted (eg: "citizenship = United States": the exact format of the attribute may vary depending on the data set format and the application used to submit the query). Examination of the input dictionary 805 of FIG. 8 (as indicated in Table 1) can be used to replace "United States" with a value of "3". Thus, the attribute provided to the index mapper 615 can specify "citizenship = 3", after which the index mapper 615 is output dictionary of Fig. 8 (810, as indicated in Table 2), and the You can create a map.

속성 평가기(1115)의 결과는 또한 도 6의 트랜스코딩 룰(630)을 구성하는데 사용하기 위해 트랜스코더(420)에 제공될 수 있음에 유의해야 한다. 도 6의 트랜스코딩 룰(630)은 도 1의 호스트 컴퓨터(105)가 관심있는 데이터를 아는 것에 의존하기 때문에, 도 6의 트랜스코딩 룰(630)은 속성 평가기(1115)의 결과를 사용하도록 적응될 수 있다. 예를 들어, 표 7에 도시된 룰을 다시 고려하자. 속성 평가기(1115)의 결과(또는 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵(표 3에 설명된))는 다양한 룰에서 P 및 DC에 대한 적절한 값을 설정하는데 사용될 수 있다.It should be noted that the results of the attribute evaluator 1115 can also be provided to the transcoder 420 for use in constructing the transcoding rules 630 of FIG. 6. Since the transcoding rule 630 of FIG. 6 relies on the host computer 105 of FIG. 1 knowing the data of interest, the transcoding rule 630 of FIG. 6 uses the result of the attribute evaluator 1115. Can be adapted. For example, consider again the rule shown in Table 7. The results of the attribute evaluator 1115 (or the map from the input dictionary 805 to the output dictionary 810 in FIG. 8 (described in Table 3)) are used to set the appropriate values for P and DC in various rules. I can.

또한 도 11에서, 속성(predicate)은 입력 스트림으로서 트랜스코더(420)에 입력되는 모든 데이터에 적용된다는 것에 유의해야 한다. 속성이 도 1의 호스트 컴퓨터(105)가 쿼리를 제출하는 데이터 세트 전체에 적용될 것이라고 결론을 내는 것이 합리적이지만, 트랜스코더(420)는 입력 스트림이 데이터 세트의 일부를 나타낼지라도 입력 스트림을 완전한 것으로 본다. 예를 들어, 칼럼 청크 프로세서(1010)는 트랜스코더(420)를 사용하는 자기 자신의 "입력 스트림"으로서 도 9의 각 데이터 페이지들(930-1, 930-2 및 930-3)를 처리할 수 있다. 트랜스코더(420)는 입력 스트림이 나타내는 것에 대해 알지 못하므로, 이 프로세스는 문제없이 작동한다.In addition, in FIG. 11, it should be noted that a predicate is applied to all data input to the transcoder 420 as an input stream. While it is reasonable to conclude that the attributes will apply to the entire data set from which the host computer 105 of FIG. 1 submits the query, the transcoder 420 considers the input stream to be complete even if the input stream represents a portion of the data set. . For example, the column chunk processor 1010 may process each of the data pages 930-1, 930-2, and 930-3 of FIG. 9 as its own "input stream" using the transcoder 420. I can. Since transcoder 420 does not know what the input stream represents, this process works without problems.

도 12a 내지 도 12c는 본 발명의 실시 예에 따른 도 4 및 도 6의 트랜스코더(420)가 데이터를 트랜스코딩하기 위한 예시적인 절차의 흐름도를 보여준다. 도 12a의 블록 1205에서, 도 6의 트랜스코더(420)는 입력 스트림으로부터 여전히 수신될 데이터가 있는지를 체크할 수 있다. 일반적으로, 이 입력 스트림은 임의의 소스로부터 나올 수 있지만, 도 9 내지 도 11에서 앞서 논의된 바와 같이, 이 입력 스트림은 데이터가 칼럼 포맷으로 저장될 때 칼럼 청크들로부터의 데이터 페이지들일 수 있다. 입력 스트림으로부터 수신할 나머지 데이터가 더 이상 없으면, 블록 1210에서 도 6의 트랜스코더(420)는 도 6의 이전 인코딩 버퍼(625) 또는 도 6의 현재 인코딩 버퍼(620) 중 어느 하나에 남아있는 트랜스코딩된 데이터가 있는지를 체크할 수 있다. 도 6의 이전 인코딩 버퍼(625) 또는 도 6의 현재 인코딩 버퍼(620) 중 어느 하나에 트랜스코딩된 데이터가 남아 있는 경우, 도 6의 이전 인코딩 버퍼(625)에서 트랜스코딩된 데이터가 출력 스트림으로 출력되고, 이어서 도 6의 현재 인코딩 버퍼(625)에서 트랜스코딩된 데이터가 출력된다. 대부분의 상황에서, 룰 평가기(635)가 도 6의 현재 인코딩 버퍼(620)의 데이터에 대해 동작할 수 있기 때문에, 도 6의 현재 인코딩 버퍼(620)에는 아무것도 없어야 한다. 도 6의 트랜스코딩 룰(630)을 적용한 결과로서(예를 들어, 표 7의 룰 6-9에 도시된 바와 같이), 도 6의 현재 인코딩 버퍼(620)에 데이터가 남을 수 있는 상황에서도, 도 6의 룰 평가기(635)는 도 6의 트랜스코더(420)가 입력 스트림으로부터 새로운 데이터를 찾기 전(도 6의 서큘러 버퍼(605) 및 도 6의 스트림 스플리터(610)를 통해)에, 그 데이터에 대해 동작할 것이다: 도 6의 트랜스코더(420)는 입력 스트림에서 다음 데이터 청크를 처리하려는 시도 전에 도 6의 현재 인코딩 버퍼(620)가 클리어될 때를 기다릴 수 있다. 그러나 트랜스코딩된 데이터가 도 6의 현재 인코딩 버퍼(620)에 남아있는 경우, 트랜스코딩된 데이터는 출력 스트림으로 출력될 수 있다. 블록 1215에서 모든 데이터가 출력 스트림으로 출력되면, 프로세싱은 종료 될 수 있다(도 6의 트랜스코더(420)가 새로운 입력 스트림을 처리할 것으로 예상될 때까지).12A to 12C are flowcharts of exemplary procedures for transcoding data by the transcoder 420 of FIGS. 4 and 6 according to an embodiment of the present invention. In block 1205 of FIG. 12A, transcoder 420 of FIG. 6 may check if there is still data to be received from the input stream. In general, this input stream can come from any source, but as discussed above in Figures 9-11, this input stream can be pages of data from column chunks when the data is stored in a column format. When there is no more remaining data to be received from the input stream, in block 1210, the transcoder 420 of FIG. 6 is used in either the previous encoding buffer 625 of FIG. 6 or the current encoding buffer 620 of FIG. You can check whether there is coded data. When the transcoded data remains in either the previous encoding buffer 625 of FIG. 6 or the current encoding buffer 620 of FIG. 6, the transcoded data from the previous encoding buffer 625 of FIG. 6 is transferred to the output stream. And then the transcoded data in the current encoding buffer 625 of FIG. 6 is output. In most situations, since the rule evaluator 635 can operate on the data in the current encoding buffer 620 of FIG. 6, there should be nothing in the current encoding buffer 620 of FIG. 6. As a result of applying the transcoding rule 630 of FIG. 6 (for example, as shown in rule 6-9 of Table 7), even in a situation in which data may remain in the current encoding buffer 620 of FIG. 6, The rule evaluator 635 of FIG. 6 is performed before the transcoder 420 of FIG. 6 finds new data from the input stream (via the circular buffer 605 of FIG. 6 and the stream splitter 610 of FIG. 6 ), It will operate on that data: the transcoder 420 of FIG. 6 may wait when the current encoding buffer 620 of FIG. 6 is cleared before attempting to process the next data chunk in the input stream. However, when the transcoded data remains in the current encoding buffer 620 of FIG. 6, the transcoded data may be output as an output stream. When all the data is output to the output stream at block 1215, processing may be terminated (until transcoder 420 of FIG. 6 is expected to process the new input stream).

입력 스트림으로부터 처리할 데이터가 여전히 있다고 가정하면, 블록 (1220)에서 도 6의 서큘러 버퍼(605)가 입력 스트림으로부터 다음 인코딩 데이터를 수신할 수 있고, 이후 도 6의 스트림 스플리터(610)는 인코딩 데이터에서 제 1 청크를 식별하고 그 청크를 도 6의 인덱스 매퍼(615)에 전달할 수 있다. (도 6의 인덱스 매퍼(615)가 도 6의 룰 평가기(635)의 효과적인 일부로 제공되는 본 발명의 실시 예에서, 도 6의 스트림 스플리터(610)는 인코딩 데이터 청크를 도 6의 현재 인코딩 버퍼(620)에 배치할 수 있다.) 블록(1225)에서, 도 6의 인덱스 매퍼(615, 또는 도 6의 룰 평가기(635))는 데이터 청크가 관심 있는지 여부를 결정할 수 있는데, 보다 구체적으로, 데이터 청크가 도 1의 호스트 컴퓨터(105)에 의해 요청된 데이터를 포함하는지의 여부에 따른다(예를 들면: 속성으로부터).Assuming that there is still data to be processed from the input stream, the circular buffer 605 of FIG. 6 may receive the next encoded data from the input stream at block 1220, and then the stream splitter 610 of FIG. In FIG. 6, the first chunk may be identified and the chunk may be transferred to the index mapper 615 of FIG. 6. (In an embodiment of the present invention in which the index mapper 615 of FIG. 6 is provided as an effective part of the rule evaluator 635 of FIG. 6, the stream splitter 610 of FIG. 6 transfers the encoded data chunk to the current encoding buffer of FIG. (620).) In block 1225, the index mapper 615 of FIG. 6 or the rule evaluator 635 of FIG. 6 may determine whether the data chunk is of interest. , Depends on whether or not the data chunk contains the data requested by the host computer 105 of FIG. 1 (eg: from attributes).

인코딩 데이터의 청크가 도 1의 호스트 컴퓨터(105)의 관심있는 데이터를 포함하는 경우, 블록(1230, 도 12b)에서, 도 6의 인덱스 매퍼(615, 또는 도 6의 룰 평가기(635))는 청크에 있는 임의의 데이터를 재인코딩하기 위해, 도 8의 입력 사전(805)으로부터 도 8의 출력 사전(810)으로의 맵을 사용할 수 있다. 블록(1235)에서, 도 6의 룰 평가기(635)는 도 6의 이전 인코딩 버퍼(625)에서 트랜스코딩된 데이터가 도 1의 호스트 컴퓨터(105)에 관심이 있는지를 체크할 수 있다. 만일, 그렇지 않다면(그리고 현재 청크가 도 12a의 블록(1225)에서 결정된 바와 같이 도 1의 호스트 컴퓨터(105)에 관심이 있다는 것을 상기하는 경우), 블록(1240)에서 도 6의 트랜스코더(420)는 도 6의 이전 인코딩 버퍼(625)에서 트랜스코딩된 데이터를 출력 스트림으로 출력할 수 있고, 그리고 블록(1245)에서 도 6의 트랜스코더(420)는 현재 트랜스코딩된 청크를 도 6의 이전 인코딩 버퍼(625)에 저장한 후에, 절차는 도 12a의 블록(1205)로 복귀한다. If the chunk of encoded data contains the data of interest of the host computer 105 of FIG. 1, at block 1230 (FIG. 12B), the index mapper 615 of FIG. 6, or the rule evaluator 635 of FIG. 6). May use the map from the input dictionary 805 of FIG. 8 to the output dictionary 810 of FIG. 8 to re-encode any data in the chunk. At block 1235, the rule evaluator 635 of FIG. 6 may check whether the data transcoded in the previous encoding buffer 625 of FIG. 6 is of interest to the host computer 105 of FIG. 1. If not (and recalling that the current chunk is of interest to host computer 105 of FIG. 1 as determined at block 1225 of FIG. 12A), transcoder 420 of FIG. 6 at block 1240. ) May output the data transcoded in the previous encoding buffer 625 of FIG. 6 as an output stream, and in block 1245, the transcoder 420 of FIG. 6 transfers the currently transcoded chunk to the previous of FIG. After storing in the encoding buffer 625, the procedure returns to block 1205 of FIG. 12A.

반면, 블록(1235)에서 결정된 바와 같이, 도 6의 이전 인코딩 버퍼(625)가 또한 도 1의 호스트 컴퓨터(105)에 관심있는 데이터를 저장한 경우, 블록(1250)에서 도 6의 룰 평가기(635)는 현재의 청크와 도 6의 이전 인코딩 버퍼(625)의 트랜스코딩된 청크가 동일한 인코딩 방식을 사용하는지 여부를 결정할 수 있다. 그렇지 않다면, 블록(1255)에서 도 6의 룰 평가기(635)는 청크들 중 하나(도 6의 현재 인코딩 버퍼(620)의 청크 또는 도 6의 이전 인코딩 버퍼(625)의 청크)에 의해 사용되는 인코딩 방식을 변경할 수 있다. (두 개 이상의 인코딩 방식이 사용되는 상황에서는, 도 6의 룰 평가기(635)는 도 6의 현재 인코딩 버퍼(620) 및 도 6의 이전 인코딩 버퍼(625)의 두 청크에 사용되는 인코딩 방식을 변경할 수 있다.) 이어서, 도 6의 현재 인코딩 버퍼(620) 및 도 6의 이전 인코딩 버퍼(625) 모두의 청크들이 동일한 인코딩 방식을 사용하는 것으로 알려지면, 블록(1260)에서 도 6의 룰 평가기(635)는 2 개의 청크를 단일 청크로 결합할 수 있으며, 이는 도 6의 이전 인코딩 버퍼(625)에 저장될 수 있고, 이후 절차는 도 12a의 블록(1205)로 복귀할 수 있다.On the other hand, as determined at block 1235, if the previous encoding buffer 625 of FIG. 6 also stored the data of interest in the host computer 105 of FIG. 1, the rule evaluator of FIG. 6 at block 1250 Reference numeral 635 may determine whether the current chunk and the transcoded chunk of the previous encoding buffer 625 of FIG. 6 use the same encoding scheme. Otherwise, at block 1255, the rule evaluator 635 of FIG. 6 is used by one of the chunks (the chunk of the current encoding buffer 620 of FIG. 6 or the chunk of the previous encoding buffer 625 of FIG. 6). You can change the encoding method. (In a situation in which more than one encoding method is used, the rule evaluator 635 of FIG. 6 determines the encoding method used for two chunks of the current encoding buffer 620 and the previous encoding buffer 625 of FIG. 6. Then, if the chunks of both the current encoding buffer 620 of FIG. 6 and the previous encoding buffer 625 of FIG. 6 are known to use the same encoding method, the rule of FIG. 6 is evaluated at block 1260. The group 635 may combine the two chunks into a single chunk, which may be stored in the previous encoding buffer 625 of FIG. 6, and then the procedure may return to block 1205 of FIG. 12A.

도 12b는 현재 청크가 두 번 트랜스코딩될 수 있음을 보여준다: 블록(1230)에서 한 번(값이 도 8의 출력 사전(810)에 대응하도록 업데이트될 때) 및 블록(1255)에서 한 번(현재 청크의 인코딩 방식이 변경되는 경우, 한 인코딩 체계에서 다른 인코딩 방식으로 변경될 때). 이 두 가지 작업을 개별적으로 수행할 수 있지만, 두 가지 작업을 결합할 수도 있다. 즉, 동시에 인코딩 방식을 변경하고 값을 업데이트 할 수도 있다. 본 발명의 실시 예는 이들 동작을 개별적으로 그리고 단일 단계로서 수행하는 것을 포함한다.Figure 12B shows that the current chunk can be transcoded twice: once at block 1230 (when the value is updated to correspond to output dictionary 810 in Figure 8) and once at block 1255 ( When the encoding method of the current chunk changes, when changing from one encoding scheme to another). You can do these two tasks separately, but you can also combine them. That is, you can change the encoding method and update the value at the same time. Embodiments of the present invention include performing these operations individually and as a single step.

다시 현재 청크가 도 1의 호스트 컴퓨터(105)에 관심이 있을 때 수행되는 동작을 설명하는 도 12b를 상기하자(도 12a의 블록(1225)에서 결정된 바와 같이). 현재 청크가 도 1의 호스트 컴퓨터(105)의 관심이 없는 경우(도 12a의 블록(1225)에서 결정된 바와 같이), 블록(1265, 도 12c의)에서 도 6의 인덱스 매퍼(615, 또는 도 6의 룰 평가기(635))는 청크의 모든 데이터를 재인코딩(특히, "무정의" 값)하기 위해, 도 8의 입력 사전(805)으로부터 도 8의 출력 사전(810)으로의 맵을 사용할 수 있다. 블록(1270)에서, 도 6의 룰 평가기(635)는 도 6의 이전 인코딩 버퍼(625)에서 트랜스코딩된 데이터가 도 1의 호스트 컴퓨터(105)의 관심이 있는지 체크할 수 있다. 만일, 그렇다면(도 12a의 블록 (1225)에서 결정된 바와 같이, 현재 청크가 도 1의 호스트 컴퓨터(105)에 관심이 없다는 것을 상기하는 경우), 블록(1275)에서 도 6의 트랜스코더(420)는 도 6의 이전 인코딩 버퍼(625)에서 트랜스코딩된 데이터를 출력 스트림으로 출력할 수 있고, 블록(1280)에서 도 6의 트랜스코더(420)는 도 6의 이전 인코딩 버퍼(625)에 현재 트랜스코딩된 청크를 저장할 수 있으며, 이후 절차는 도 12a의 블록(1205)로 복귀한다. Recall again Fig. 12B, which describes the operation performed when the current chunk is of interest to the host computer 105 of Fig. 1 (as determined at block 1225 of Fig. 12A). If the current chunk is not of interest to the host computer 105 of FIG. 1 (as determined at block 1225 of FIG. 12A), the index mapper 615 of FIG. 6, or of FIG. 6, at block 1265 (of FIG. 12C). The rule evaluator 635 of FIG. 8 uses a map from the input dictionary 805 of FIG. 8 to the output dictionary 810 of FIG. 8 to re-encode (especially, "undefined" values) all data in the chunk. I can. At block 1270, the rule evaluator 635 of FIG. 6 may check whether the data transcoded in the previous encoding buffer 625 of FIG. 6 is of interest to the host computer 105 of FIG. 1. If so (recall that the current chunk is not interested in the host computer 105 of FIG. 1, as determined in block 1225 of FIG. 12A), the transcoder 420 of FIG. 6 at block 1275. May output the data transcoded in the previous encoding buffer 625 of FIG. 6 as an output stream, and in block 1280, the transcoder 420 of FIG. 6 may be transferred to the previous encoding buffer 625 of FIG. The coded chunk can be stored, and the procedure then returns to block 1205 of FIG. 12A.

반면, 블록(1270)에서 결정된 바와 같이, 도 6의 이전 인코딩 버퍼(625)가 또한 도 1의 호스트 컴퓨터(105)에 관심 없는 데이터를 저장하는 경우, 블록(1285)에서 도 6의 룰 평가기(635)는 현재의 청크와 도 6의 이전 인코딩 버퍼(625)의 트랜스코딩된 청크가 동일한 인코딩 방식을 사용하지 결정할 수 있다. 동일한 인코딩 방식이 아니라면, 블록(1290)에서 도 6의 룰 평가기(635)는 청크들 중 하나(도 6의 현재 인코딩 버퍼(620)의 청크 또는 도 6의 이전 인코딩 버퍼(625)의 청크들 중 하나)에 의해 사용되는 인코딩 방식을 변경할 수 있다. (두 개 이상의 인코딩 방식이 사용되는 상황에서는, 도 6의 룰 평가기(635)는 도 6의 현재 인코딩 버퍼(620) 및 도 6의 이전 인코딩 버퍼(625)의 두 청크 모두에 사용되는 인코딩 방식을 변경할 수 있다.) 이어서, 도 6의 현재 인코딩 버퍼(620) 및 도 6의 이전 인코딩 버퍼(625) 모두의 청크들이 동일한 인코딩 방식을 사용하는 것으로 알려지면, 블록(1295)에서 도 6의 룰 평가기(635)는 2 개의 청크를 단일 청크로 결합할 수 있으며, 이는 도 6의 이전 인코딩 버퍼(625)에 저장될 수 있고, 이후 절차는 도 12a의 블록(1205)로 복귀할 수 있다.On the other hand, as determined at block 1270, if the previous encoding buffer 625 of FIG. 6 also stores uninterested data in the host computer 105 of FIG. 1, the rule evaluator of FIG. 6 at block 1285 635 may determine whether the current chunk and the transcoded chunk of the previous encoding buffer 625 of FIG. 6 use the same encoding scheme. If not the same encoding scheme, at block 1290, the rule evaluator 635 of FIG. 6 performs one of the chunks (the chunk of the current encoding buffer 620 of FIG. 6 or the chunks of the previous encoding buffer 625 of FIG. 6 ). The encoding method used by one of) can be changed. (In a situation in which more than one encoding method is used, the rule evaluator 635 of FIG. 6 is an encoding method used for both chunks of the current encoding buffer 620 of FIG. 6 and the previous encoding buffer 625 of FIG. 6. Then, if it is known that the chunks of both the current encoding buffer 620 of FIG. 6 and the previous encoding buffer 625 of FIG. 6 use the same encoding method, the rule of FIG. 6 at block 1295 The evaluator 635 may combine the two chunks into a single chunk, which may be stored in the previous encoding buffer 625 of FIG. 6, and the procedure may return to block 1205 of FIG. 12A.

도 12c는 현재 청크가 두 번 트랜스코딩될 수 있음을 보여준다: 블록(1265)에서 한 번(값이 도 8의 출력 사전(810)에 대응하도록 업데이트될 때) 및 블록(1290)에서 한 번(현재 청크의 인코딩 방식이 변경되는 경우, 한 인코딩 체계에서 다른 인코딩 방식으로 변경될 때). 이 두 가지 작업을 개별적으로 수행할 수 있지만, 두 가지 작업을 결합할 수도 있다. 즉, 동시에 인코딩 방식을 변경하고 값을 업데이트할 수도 있다. 본 발명의 실시 예는 이들 동작을 개별적으로 그리고 단일 단계로서 수행하는 것을 포함한다.12C shows that the current chunk can be transcoded twice: once at block 1265 (when the value is updated to correspond to output dictionary 810 in FIG. 8) and once at block 1290 ( When the encoding method of the current chunk changes, when changing from one encoding scheme to another). You can do these two tasks separately, but you can also combine them. That is, you can change the encoding method and update the value at the same time. Embodiments of the present invention include performing these operations individually and as a single step.

도 12a-12c 전체에 걸쳐, 도 6의 이전 인코딩 버퍼(625)에 일부 데이터가 존재한다는 암시적인 가정이 존재한다. 예를 들어, 블록들(1235 및 1270)은 도 6의 이전 인코딩 버퍼(625)에 일부 데이터가 있는 상황을 설명한다. 결합될 데이터 청크들의 결합을 지원하기 위해, 트랜스코딩된 데이터가 도 6의 이전 인코딩 버퍼(625)에 버퍼링될 수 있기 때문에 이것은 일반적으로 합리적인 가정이다(데이터가 이미 출력 스트림으로 출력된 경우에는 청크 결합을 시도하기에는 너무 늦을 수 있다). 그러나, 도 6의 이전 인코딩 버퍼(625)에 저장된 데이터가 없는 상황이 있을 수 있다. 일례로서, 입력 스트림의 최초 청크가 처리될 때, 이전의 인코딩 버퍼(625)에는 데이터가 전혀 존재하지 않는다(그 입력 스트림에서 이전에 처리된 것이 없기 때문에).Throughout FIGS. 12A-12C, there is an implicit assumption that some data is present in the previous encoding buffer 625 of FIG. 6. For example, blocks 1235 and 1270 describe a situation where some data is in the previous encoding buffer 625 of FIG. 6. This is generally a reasonable assumption because the transcoded data can be buffered in the previous encoding buffer 625 of FIG. 6 to support the concatenation of the data chunks to be combined (if the data has already been output to the output stream, the chunk concatenation It may be too late to try). However, there may be a situation where there is no data stored in the previous encoding buffer 625 of FIG. 6. As an example, when the first chunk of the input stream is processed, there is no data at all in the previous encoding buffer 625 (because nothing has been previously processed in that input stream).

제 2 예로서, 데이터 청크 결합을 지원하지 않는 인코딩 방식이 있을 수 있는데, 이 경우, 도 6의 이전 인코딩 버퍼(625)에 이전 청크를 저장하는 데에는 전혀 가치가 없다. 도 6의 이전 인코딩 버퍼(625)에 데이터가 없는 경우, 도 6의 이전 인코딩 버퍼(625)에서 현재 청크와 (존재하지 않은) 청크의 비교 또는 도 6의 이전 인코딩 버퍼(625)로부터 (존재하지 않는) 청크를 출력하는 것은 아무 의미가 없다. 간단한 해결책은 도 6의 이전 인코딩 버퍼(625)에 데이터가 없는 경우, 이전 인코딩 버퍼(625)에서의 데이터의 존재에 의존하는 어떤 것도 수행되지 않는 것이다. 따라서, 예를 들어, 도 12b에서, 이전 인코딩 버퍼(625)에 데이터가 없다면, 프로세싱은 블록(1230)으로부터 블록(1245)로 직접 점프할 수 있고(도 6의 이전 인코딩 버퍼(625)에서 현재 트랜스코딩된 청크를 버퍼링하기 위해), 도 12c에서 프로세싱은 블록(1265)에서 블록(1280)으로 직접 점프할 수 있다(도 6의 이전 인코딩 버퍼(625)에서 현재 트랜스코딩된 청크를 버퍼링하기 위해).As a second example, there may be an encoding scheme that does not support combining data chunks. In this case, there is no value in storing the previous chunk in the previous encoding buffer 625 of FIG. 6. When there is no data in the previous encoding buffer 625 of FIG. 6, the comparison of the current chunk and the (non-existent) chunk in the previous encoding buffer 625 of FIG. 6 or from the previous encoding buffer 625 of FIG. It doesn't make any sense to print chunks. A simple solution is that if there is no data in the previous encoding buffer 625 of FIG. 6, then nothing that depends on the presence of the data in the previous encoding buffer 625 is performed. Thus, for example, in Figure 12B, if there is no data in the previous encoding buffer 625, processing can jump directly from block 1230 to block 1245 (currently in the previous encoding buffer 625 in Figure 6). To buffer the transcoded chunk), processing in FIG. 12C may jump directly from block 1265 to block 1280 (to buffer the currently transcoded chunk in the previous encoding buffer 625 in FIG. ).

도 12b 및 12c의 면밀한 검토를 통해, 둘 사이의 차이가 상대적으로 적음을 알 수 있다. 주목할 만한 약간의 차이는 블록들(1230 및 1265), 그리고 블록들(1235 및 1270)을 떠나는 상이한 분기들에 있다. 실제로, 이러한 차이 조차도 비교적 의미는 작다: 블록들(1230 및 1265)은 모두 도 8의 출력 사전(810)에 기초한 재 인코딩에 관한 것이다(블록 1265는 "무정의" 값의 사용을 구체적으로 명명함). 그리고 블록들(1235 및 1270)을 떠나는 분기가 상이하게 레이블링되어 있지만, 그 이유는 블록들(1235 및 1270)이 현재 청크가 이전 청크와 결합될 수 있는지를 결정하는 것에 관한 것이기 때문이다. 이에 따라, 도 12b 및 도 12c는 동작 시퀀스와 관련하여 약간의 명확성의 손실을 희생하면서 이론적으로 결합될 수 있다.Through a close examination of FIGS. 12B and 12C, it can be seen that the difference between the two is relatively small. Some notable differences are in blocks 1230 and 1265, and the different branches leaving blocks 1235 and 1270. Indeed, even this difference is relatively small: blocks 1230 and 1265 both relate to re-encoding based on the output dictionary 810 of FIG. 8 (block 1265 specifically names the use of a "undefined" value. ). And although the branch leaving blocks 1235 and 1270 is labeled differently, the reason is that blocks 1235 and 1270 are about determining whether the current chunk can be combined with the previous chunk. Accordingly, FIGS. 12B and 12C can be theoretically combined at the expense of some loss of clarity with respect to the operation sequence.

도 13은 입력 인코딩 데이터를 청크로 나누기 위한 도 6의 스트림 스플리터(610)에 대한 예시적인 절차의 흐름도를 보여준다. 도 13을 참조하면, 블록(1305)에서, 도 6의 스트림 스플리터(610)는 (도 1의 스토리지 장치(120) 내의 도 3의 스토리지(305)에 기인하는) 입력 인코딩 데이터를 수신할 수 있으며, 이는 도 11의 입력 버퍼(1105)나 도 6의 서큘러 버퍼(605)와 같은 버퍼에 버퍼링될 수 있다. 블록(1310)에서, 도 6의 스트림 스플리터(610)는 입력 인코딩 데이터를 청크로 나눌 수 있다. 블록(1315)에서, 도 6의 스트림 스플리터(610)는 청크를 도 6의 트랜스코더(420)에 전송할 수 있다(또는 도 6의 인덱스 매퍼(615) 또는 도 6의 현재 인코딩 버퍼(620)에).13 shows a flow diagram of an exemplary procedure for the stream splitter 610 of FIG. 6 for dividing input encoded data into chunks. Referring to FIG. 13, at block 1305, the stream splitter 610 of FIG. 6 may receive input encoded data (due to the storage 305 of FIG. 3 in the storage device 120 of FIG. 1) and , Which may be buffered in a buffer such as the input buffer 1105 of FIG. 11 or the circular buffer 605 of FIG. 6. In block 1310, the stream splitter 610 of FIG. 6 may divide the input encoded data into chunks. In block 1315, the stream splitter 610 of FIG. 6 may transmit the chunk to the transcoder 420 of FIG. 6 (or to the index mapper 615 of FIG. 6 or the current encoding buffer 620 of FIG. 6). ).

도 14a 내지 14b는 본 발명의 실시 예에 따른 칼럼 포맷으로 데이터를 트랜스코딩하기 위한 도 10의 칼럼 청크 프로세서(1010) 그리고/또는 도 4 및 도 6의 트랜스코더(420)에 대한 예시적인 절차의 흐름도를 보여준다. 도 14a 내지 도 14b는 또한 적어도 하나의 실시 예에서 도 6의 스트림 스플리터(610)가 어떻게 도 13의 블록(1305)에서 설명된 바와 같이 입력 인코딩 데이터를 수신하는지에 대한 확장된 예를 또한 보여준다. 14A to 14B are exemplary procedures for the column chunk processor 1010 of FIG. 10 and/or the transcoder 420 of FIGS. 4 and 6 for transcoding data in a column format according to an embodiment of the present invention. Show the flow chart. 14A-14B also show an expanded example of how the stream splitter 610 of FIG. 6 receives input encoded data as described at block 1305 of FIG. 13 in at least one embodiment.

도 14a의 블록(1405)에서, 도 10의 칼럼 청크 프로세서(1010)는 파일을 위해 도 9의 파일-블록 맵(915, 또는 대안적으로 또는 누적적으로 도 5의 파일-블록 맵(530))에 액세스할 수 있다. 블록(1410)에서, 도 10의 칼럼 청크 프로세서(1010)는 도 9의 파일 메타 데이터(905)와 그 뒤에 도 9의 입력 사전(920)을 찾기 위해 도 9의 파일-블록 맵(915)을 사용할 수 있다. 도 9의 각각의 칼럼 청크들(910-1, 910-2 및 910-3)이 도 9의 자체 사전 페이지(925)를 포함하는 경우, 도 9의 사전 페이지(925)는 도 9의 파일 메타 데이터(905)에서 생략될 수 있고, 이 경우 블록(1410)은 점선(1415)으로 도시된 바와 같이 생략될 수 있다. 그 다음에 도 9의 파일-블록 맵(915)을 사용하여 블록(1420)에서, 도 10의 칼럼 청크 프로세서(1010)는 파일에 대한 칼럼 청크들을 식별할 수 있다(이는 도 1의 스토리지 장치(120)에 저장된 데이터의 블록일 수 있음).In block 1405 of FIG. 14A, the column chunk processor 1010 of FIG. 10 is the file-block map 915 of FIG. 9, or alternatively or cumulatively, the file-block map 530 of FIG. 5 for files. ) Can be accessed. At block 1410, the column chunk processor 1010 of FIG. 10 retrieves the file-block map 915 of FIG. 9 to find the file metadata 905 of FIG. 9 followed by the input dictionary 920 of FIG. 9. Can be used. When each of the column chunks 910-1, 910-2 and 910-3 of FIG. 9 includes its own dictionary page 925 of FIG. 9, the dictionary page 925 of FIG. 9 is It may be omitted from the data 905, in which case the block 1410 may be omitted as shown by the dotted line 1415. Then, at block 1420 using the file-block map 915 of FIG. 9, the column chunk processor 1010 of FIG. 10 may identify the column chunks for the file (this is the storage device of FIG. 120) can be a block of data stored in).

블록(1425, 도 14b)에서, 도 10의 칼럼 청크 프로세서(1010)는 액세스 할 더 많은 칼럼 청크들(블록들)이 있는지를 판단할 수 있다. 그렇지 않으면(칼럼 청크들이 더 이상 존재하지 않는 경우), 프로세서는 종료된다. 반면(칼럼 청크들이 존재하는 경우), 블록(1430)에서, 도 10의 칼럼 청크 프로세서(1010)는 도 9의 칼럼 청크들(910-1, 910-2 또는 910-3)으로부터 도 9의 사전 페이지(925)에 액세스할 수 있다. 만일, 도 9의 파일 메타 데이터(905)가 도 9의 사전 페이지(920)를 저장하는 경우, 도 9의 칼럼 청크들(910-1, 910-2 및 910-3)은 도 9의 사전 페이지(925)를 생략할 수 있는데, 이는 점선 (1435)으로 도시된 바와 같이 블록 (1430)이 생략될 수 있다. 블록(1440)에서, 도 10의 칼럼 청크 프로세서(1010)는 도 9의 칼럼 청크들(910-1, 910-2, 및 910-3)로부터 도 9의 데이터 페이지들(930-1, 930-2 및 930-3)에 액세스 할 수 있다. 블록(1445)에서, 도 10의 칼럼 청크 프로세서(1010)는 도 8의 입력 사전(805)과 칼럼 청크를 위한 도 9의 데이터 페이지들(930-1, 930-2 및 930-3)을 도 6의 트랜스코더(420), 도 6의 스트림 스플리터(610), 또는 도 6의 인덱스 매퍼(615)에 (순서대로)전달할 수 있다. In block 1425 (FIG. 14B ), the column chunk processor 1010 of FIG. 10 may determine whether there are more column chunks (blocks) to access. Otherwise (there are no more column chunks), the processor is terminated. On the other hand (if there are column chunks), in block 1430, the column chunk processor 1010 of FIG. 10 is the dictionary of FIG. 9 from the column chunks 910-1, 910-2, or 910-3 of FIG. Page 925 can be accessed. If the file meta data 905 of FIG. 9 stores the dictionary page 920 of FIG. 9, the column chunks 910-1, 910-2, and 910-3 of FIG. 9 are the dictionary pages of FIG. It is possible to omit 925, which may omit block 1430 as shown by dashed line 1435. In block 1440, the column chunk processor 1010 of FIG. 10 is processed from the column chunks 910-1, 910-2, and 910-3 of FIG. 9 to the data pages 930-1 and 930- 2 and 930-3). In block 1445, the column chunk processor 1010 of FIG. 10 shows the input dictionary 805 of FIG. 8 and the data pages 930-1, 930-2, and 930-3 of FIG. 9 for column chunks. It can be delivered to the transcoder 420 of 6, the stream splitter 610 of FIG. 6, or the index mapper 615 of FIG. 6 (in order).

도 15는 본 발명의 실시 예에 따른 도 8의 입력 사전(805)을 도 8의 출력 사전(810)에 매핑하기 위한 도 6의 인덱스 매퍼(615)의 예시적인 절차의 흐름도를 보여준다. 도 15를 참조하면, 블록(1505)에서, 도 6의 인덱스 매퍼(615)는 도 8의 입력 사전(805)을 수신할 수 있다(예를 들어, 도 10의 칼럼 청크 프로세서(1010)로부터). 블록(1510)에서, 도 6의 인덱스 매퍼(615)는 도 8의 입력 사전(805)에서 어떤 데이터가 관심 대상인지를 결정할 수 있다. 도 6의 인덱스 매퍼(615)는, 예를 들어, 아마도 도 10의 인스토리지 컴퓨터 컨트롤러(1005)를 경유하여 도 1의 호스트 컴퓨터(105)로부터 제공되는 속성을 사용하여 이러한 결정을 한다. 블록(1515)에서, 도 6의 인덱스 매퍼(615)는 도 8의 출력 사전(810)을 생성할 수 있다. 출력 사전(810)은 도 1의 호스트 컴퓨터(105)의 모든 관심 항목을 포함할 수 있지만, 도 1의 호스트 컴퓨터(105)에 관심이 없는 모든 항목을 하나의 "무정의(don't care)" 값으로 통합할 수 있다. 블록(1520)에서, 도 6의 인덱스 매퍼(615)는 도 8의 입력 사전(805)으로부터 도 8의 사전(810)으로의 값을 매핑할 수 있다. 마지막으로, 블록(1525)에서, 도 8의 인덱스 매퍼(615)는 도 8의 출력 사전(810)을 출력할 수 있다. FIG. 15 is a flowchart of an exemplary procedure of the index mapper 615 of FIG. 6 for mapping the input dictionary 805 of FIG. 8 to the output dictionary 810 of FIG. 8 according to an embodiment of the present invention. Referring to FIG. 15, at block 1505, the index mapper 615 of FIG. 6 may receive the input dictionary 805 of FIG. 8 (eg, from the column chunk processor 1010 of FIG. 10 ). . At block 1510, the index mapper 615 of FIG. 6 may determine which data is of interest in the input dictionary 805 of FIG. 8. The index mapper 615 of FIG. 6 makes this determination, for example, using attributes provided from the host computer 105 of FIG. 1, perhaps via the instorage computer controller 1005 of FIG. 10. At block 1515, the index mapper 615 of FIG. 6 may generate the output dictionary 810 of FIG. 8. The output dictionary 810 may contain all the items of interest of the host computer 105 of FIG. 1, but all items that are not of interest to the host computer 105 of FIG. 1 are stored in one "don't care. "Can be integrated by value. At block 1520, the index mapper 615 of FIG. 6 may map values from the input dictionary 805 of FIG. 8 to the dictionary 810 of FIG. 8. Finally, at block 1525, the index mapper 615 of FIG. 8 may output the output dictionary 810 of FIG. 8.

도 16a 내지 도 16b는 본 발명의 실시 예에 따른 도 1의 호스트 컴퓨터(105)로부터 수신된 속성을 관리하고, 트랜스코딩된 데이터에 대한 가속 기능을 잠재적으로 수행하기 위한 도 10의 인스토리지 컴퓨터 컨트롤러(1005)를 위한 예시적인 절차의 흐름도를 보여준다. 도 16a의 블록(1605)에서, 도 10의 인스토리지 컴퓨터 컨트롤러(1005)는 도 1의 호스트 컴퓨터(105)로부터 속성을 수신할 수 있다. 블록(1610)에서, 도 10의 인스토리지 컴퓨터 컨트롤러(1005)는 쿼리에 의해 커버되는 인코딩 데이터를 얻기 위해 도 8의 입력 사전(805)에 액세스할 수 있다. 블록(1615)에서, 도 10의 인스토리지 컴퓨터 컨트롤러(1005)는 속성에 의해서 커버되는 도 8의 입력 사전(805)에서 항목을 식별할 수 있다(즉, 도 1의 호스트 컴퓨터(105)에 관심이 있는 도 8의 입력 사전(805)의 항목). 블록(1620)에서, 도 10의 인스토리지 컴퓨터 컨트롤러(1005)는 속성에 의해 커버되는 항목을 포함하는 도 8의 출력 사전(810)을 생성할 수 있다. 블록(1625)에서, 도 10의 인스토리지 컴퓨터 컨트롤러(1005)는 속성에 의해 커버되는 도 8의 입력 사전(805)의 항목을 도 8의 출력 사전(810)의 항목들에 맵핑한다. 16A to 16B are the storage computer controller of FIG. 10 for managing attributes received from the host computer 105 of FIG. 1 and potentially performing an acceleration function for transcoded data according to an embodiment of the present invention. It shows a flow diagram of an exemplary procedure for 1005. At block 1605 of FIG. 16A, the instore computer controller 1005 of FIG. 10 may receive an attribute from the host computer 105 of FIG. 1. At block 1610, the instorage computer controller 1005 of FIG. 10 can access the input dictionary 805 of FIG. 8 to obtain the encoded data covered by the query. At block 1615, the insory computer controller 1005 of FIG. 10 may identify the item in the input dictionary 805 of FIG. 8 covered by the attribute (i.e., the host computer 105 of FIG. There is an entry in the input dictionary 805 of Fig. 8). At block 1620, the instorage computer controller 1005 of FIG. 10 may generate the output dictionary 810 of FIG. 8 that includes the items covered by the attributes. In block 1625, the instorage computer controller 1005 of FIG. 10 maps the items of the input dictionary 805 of FIG. 8 covered by the attribute to the items of the output dictionary 810 of FIG. 8.

블록(1630)에서, 도 10의 인스토리지 컴퓨터 컨트롤러(1005)는 도 8의 입력 사전(805)에서 속성에 의해서 커버되지 않는 항목을 식별할 수 있다(즉, 도 1의 호스트 컴퓨터(105)의 관심이 없는 도 8의 입력 사전(805)의 항목). 블록(1635)에서, 도 10의 인스토리지 컴퓨터 컨트롤러(1005)는 도 8의 출력 사전(810)에 "무정의(don't care)" 항목을 추가할 수 있다. 블록(1640, 도 16b)에서, 도 10의 인스토리지 컴퓨터 컨트롤러(1005)는 속성에 커버되지 않은 입력 사전의 항목들을 도 8의 출력 사전(810)의 "무정의(don't care)" 항목에 매핑할 수 있다.At block 1630, the instorage computer controller 1005 of FIG. 10 may identify items not covered by the attributes in the input dictionary 805 of FIG. 8 (i.e., of the host computer 105 of FIG. Items in the input dictionary 805 of Fig. 8 that are not of interest). At block 1635, the instorage computer controller 1005 of FIG. 10 may add a "don't care" item to the output dictionary 810 of FIG. 8. In block 1640 (FIG. 16B), the instance computer controller 1005 of FIG. 10 replaces the items of the input dictionary that are not covered in the attributes and the "don't care" items of the output dictionary 810 of FIG. Can be mapped to

블록(1645)에서, 도 6의 룰 평가기(635, 도 6의 트랜스코더(420) 내의)는 도 1의 호스트 컴퓨터(105)로부터의 쿼리에 따라 도 6의 트랜스코딩 룰(630)을 적응시키기 위해 속성을 사용할 수 있다. 블록(1650)에서, 도 6의 인덱스 매퍼(615) 및 도 6의 룰 평가기(635)(잠재적으로 도 6의 트랜스코더(420) 내에 모두 위치하는)는 입력 스트림으로부터 출력 스트림으로 인코딩 데이터를 트랜스코딩하기 위해 도 8의 입력 사전(805)으로부터 도 8의 출력 사전(810)으로의 맵 및 도 6의 트랜스코딩 룰(630)을 사용할 수 있다(도 12a 내지 12c를 참조하여 위에서 논의된 바와 같이)At block 1645, the rule evaluator 635 of FIG. 6 (in transcoder 420 of FIG. 6) adapts the transcoding rule 630 of FIG. 6 according to a query from the host computer 105 of FIG. You can use properties to make it happen. At block 1650, index mapper 615 of FIG. 6 and rule evaluator 635 of FIG. 6 (potentially located both within transcoder 420 of FIG. 6) transfer the encoded data from the input stream to the output stream. A map from the input dictionary 805 of FIG. 8 to the output dictionary 810 of FIG. 8 and the transcoding rule 630 of FIG. 6 can be used to transcode (as discussed above with reference to FIGS. 12A-12C ). together)

이 시점에서 다양한 옵션들이 존재한다. 블록(1655)에 도시된 바와 같이, 도 10의 인스토리지 컴퓨터 컨트롤러(1005)는 도 6의 트랜스코더(420)로부터 출력 스트림을 수신하고, 트랜스코딩된 데이터를 도 1의 호스트 컴퓨터(105)로 전달하고, 블록(1660)에서, 도 10의 인스토리지 컴퓨터 컨트롤러(1005)는 도 8의 출력 사전(810)을 도 1의 호스트 컴퓨터(105)에 전송할 수 있다. 대안으로, 블록(1665)에서, 도 10의 인스토리지 컴퓨터 컨트롤러(1005)는 출력 스트림의 데이터에 대한 가속 기능을 적용할 수 있고, 블록(1670)에서, 도 10의 인스토리지 컴퓨터 컨트롤러(1005)는 가속 기능의 결과를 도 1의 호스트 컴퓨터(105)에 전송할 수 있다.At this point, there are many options. As shown in block 1655, the instorage computer controller 1005 of FIG. 10 receives the output stream from the transcoder 420 of FIG. 6 and transfers the transcoded data to the host computer 105 of FIG. And, at block 1660, the instorage computer controller 1005 of FIG. 10 may transmit the output dictionary 810 of FIG. 8 to the host computer 105 of FIG. 1. Alternatively, at block 1665, the instance computer controller 1005 of FIG. 10 may apply an acceleration function to the data in the output stream, and at block 1670, the instance computer controller 1005 of FIG. 10 May transmit the result of the acceleration function to the host computer 105 of FIG. 1.

도 12a-16b를 참조하면, 본 발명의 개념의 일부 실시 예가 도시되어 있다. 그러나, 당업자는 블록의 순서를 변경하거나, 블록을 생략하거나, 도면에 도시되지 않은 링크를 포함함으로써 본 발명의 다른 실시 예도 가능하다는 것을 인식할 것이다. 흐름도의 이러한 모든 변형은 명시적으로 설명되든 아니든 본 발명의 실시 예인 것으로 간주된다.12A-16B, some embodiments of the concept of the present invention are shown. However, those skilled in the art will recognize that other embodiments of the present invention are possible by changing the order of blocks, omitting blocks, or including links not shown in the drawings. All such variations of the flowchart, whether expressly described or not, are considered to be embodiments of the invention.

본 발명의 실시 예는 종래 기술에 비해 기술적 이점을 제공한다. 종래의 시스템에서, 디코딩된 데이터는 도 1의 호스트 컴퓨터(105)로 전송된다. 도 1의 호스트 컴퓨터(105)로 전송된 데이터가 비록 선택적이더라도(즉, 도 1의 호스트 컴퓨터(105)로 전송된 데이터는 관심있는 데이터를 포함), 데이터는 여전히 압축 또는 인코딩없이 전송되며, 이는 공간 절약이 선택성을 통해 달성된다는 것을 의미한다. 대조적으로, 스토리지의 감소의 대부분은 압축이 아니라 인코딩을 통해 이루어 지므로, 인코딩 데이터를 도 1의 호스트 컴퓨터(105)로 전송하는 것은 일반적으로 디코딩된 데이터를 도 1의 호스트 컴퓨터(105)에 전송하는 것보다 적은 데이터를 전송하는 것을 동반한다. 또한, 데이터는 하나의 인코딩 방식에서 다른 인코딩 방식으로 트랜스코딩될 수 있으므로, 도 6의 트랜스코더(420)를 사용하는 것은 별도의 동작으로 데이터를 디코딩하고 데이터를 재인코딩하는 것보다 더 효율적일 수 있다.Embodiments of the present invention provide technical advantages over the prior art. In a conventional system, the decoded data is transmitted to the host computer 105 of FIG. 1. Although the data transmitted to the host computer 105 of FIG. 1 is optional (i.e., the data transmitted to the host computer 105 of FIG. 1 contains the data of interest), the data is still transmitted without compression or encoding, which It means that space savings is achieved through selectivity. In contrast, since most of the storage reduction is through encoding rather than compression, transmitting the encoded data to the host computer 105 of FIG. 1 generally transmits the decoded data to the host computer 105 of FIG. It is accompanied by transmitting less data than that. In addition, since data may be transcoded from one encoding method to another, using the transcoder 420 of FIG. 6 may be more efficient than decoding the data and re-encoding the data in a separate operation. .

다음의 논의는 본 발명의 특정 양상이 구현될 수 있는 적합한 머신(들)의 간략한 일반적인 설명을 제공하기 위한 것이다. 기계 또는 기계류는 키보드, 마우스 등과 같은 종래의 입력 장치로부터의 입력뿐만 아니라 다른 기계로부터 수신된 지시어, 가상 현실(VR) 환경과의 상호 작용, 생체 피드백, 또는 기타 입력 신호에 의해 적어도 부분적으로 제어될 수 있다. 본 명세서에서 사용되는 용어 "머신"은 단일 기계, 가상 기계, 또는 통신적으로 결합된 기계, 가상 기계 또는 함께 작동하는 장치의 시스템을 광범위하게 포함하는 것으로 의도된다. 예시적인 기계는 개인용 컴퓨터, 워크 스테이션, 서버, 휴대용 컴퓨터, 핸드 헬드 장치, 전화기, 태블릿 등과 같은 컴퓨팅 장치뿐만 아니라 개인 또는 대중 교통(예: 자동차, 기차, 택시 등)과 같은 운송 장치를 포함한다.The following discussion is intended to provide a brief general description of suitable machine(s) in which certain aspects of the invention may be implemented. The machine or machinery may be at least partially controlled by input from conventional input devices such as keyboards, mice, etc., as well as directives received from other machines, interactions with virtual reality (VR) environments, biofeedback, or other input signals. I can. The term “machine” as used herein is intended to broadly encompass a single machine, a virtual machine, or a system of communicatively coupled machines, virtual machines, or devices working together. Exemplary machines include personal computers, workstations, servers, portable computers, handheld devices, computing devices such as telephones, tablets, and the like, as well as transport devices such as personal or public transport (eg, cars, trains, taxis, etc.).

기계 또는 기계들은 프로그램 가능한 또는 프로그램 불가능한 논리 장치들 또는 어레이들, ASIC (Application Specific Integrated Circuit), 임베디드 컴퓨터들, 스마트 카드들 등과 같은 임베디드 컨트롤러들을 포함할 수 있다. 기계 또는 기계들은 네트워크 인터페이스, 모뎀, 또는 다른 통신 결합들을 통해서와 같이 하나 또는 그보다 많은 원격 기계들에 대한 하나 또는 그보다 많은 연결들을 활용할 수 있다. 기계들은 인트라넷, 인터넷, LAN (local area networks), WAN (wide area networks) 등과 같은 물리적 그리고/또는 논리적 네트워크의 수단으로 서로 연결될 수 있다. 이 분야에 숙력된 자는 네트워크 통신이 다양한 유선 그리고/또는 무선 근거리 또는 원거리 캐리어들 및 무선 주파수(RF), 위성, 마이크로파, IEEE 802.11, 블루투스, 광학, 적외선, 케이블, 레이저 등을 포함하는 프로토콜을 활용함을 이해할 것이다.The machine or machines may include programmable or non-programmable logic devices or arrays, application specific integrated circuit (ASIC), embedded computers, embedded controllers such as smart cards, and the like. The machine or machines may utilize one or more connections to one or more remote machines, such as through a network interface, modem, or other communication combinations. Machines can be connected to each other by means of physical and/or logical networks such as intranet, Internet, local area networks (LAN), wide area networks (WAN), etc. Those skilled in this field utilize various wired and/or wireless short-range or long-distance carriers for network communication and protocols including radio frequency (RF), satellite, microwave, IEEE 802.11, Bluetooth, optical, infrared, cable, laser, etc. You will understand.

본 발명의 기술적 사상의 실시 예들은, 기계에 의해 액세스되는 때에 기계가 작업들을 수행하거나 또는 추상적인 데이터 타입들 또는 저레벨 하드웨어 콘텍스트들을 정의하는 것을 유발하는 함수들, 절차들, 데이터 구조들, 응용 프로그램들 등을 포함하는 연관된 데이터를 참조하여 또는 협력하여 설명될 수 있다. 연관된 데이터는, 예를 들어 RAM, ROM 등과 같은 휘발성 그리고/또는 불휘발성 메모리, 또는 다른 스토리지 장치들, 그리고 하드 드라이브, 플로피 디스크, 광학 스토리지, 테이프들, 플래시 메모리, 메모리 스틱들, 디지털 비디오 디스크들, 생체 스토리지 등을 포함하는 연관된 스토리지 매체에 저장될 수 있다. 연관된 데이터는 물리적 그리고/또는 논리적 네트워크를 포함하는 전송 환경들을 거쳐 패킷들, 직렬 데이터, 병렬 데이터, 전송신호들 등의 형태로 전달되고, 압축된 또는 암호화된 포맷으로 이용될 수 있다. 연관된 데이터는 분산 환경에서 사용될 수 있으며, 기계 액세스에 대해 지역적 그리고/또는 원격으로 저장될 수 있다.Embodiments of the technical idea of the present invention include functions, procedures, data structures, application programs that cause a machine to perform tasks or to define abstract data types or low-level hardware contexts when accessed by a machine. May be described with reference to or in cooperation with associated data including, etc. The associated data is, for example, volatile and/or nonvolatile memory such as RAM, ROM, or other storage devices, and hard drives, floppy disks, optical storage, tapes, flash memory, memory sticks, digital video disks. , Biometric storage, and the like. The associated data is transmitted in the form of packets, serial data, parallel data, transmission signals, etc. through transmission environments including physical and/or logical networks, and may be used in a compressed or encrypted format. The associated data may be used in a distributed environment, and may be stored locally and/or remotely for machine access.

본 발명의 기술적 사상의 실시 예들은 하나 또는 그보다 많은 프로세서들에 의해 실행 가능하며 여기에 설명된 바와 같이 본 발명의 기술적 사상의 원소들을 수행하게 하는 명령들을 포함하는 실재하는 비임시 기계 독출 매체를 포함할 수 있다.Embodiments of the technical idea of the present invention can be executed by one or more processors and include an actual non-temporary machine-readable medium including instructions for executing the elements of the technical idea of the present invention as described herein. can do.

전술한 방법의 다양한 동작은 다양한 하드웨어 그리고/또는 소프트웨어 구성 요소(들), 회로 그리고/또는 모듈(들)과 같은 동작을 수행할 수있는 임의의 적절한 수단에 의해 수행될 수 있다. 소프트웨어는 논리 기능을 구현하기 위한 실행 가능한 명령의 순서화된 목록을 포함할 수 있고, 단일 또는 다중과 같은 명령 실행 시스템, 장치 또는 싱글 또는 멀티-코어 프로세서 또는 프로세서 포함 시스템과 관련하여 사용하기 위한 임의의 "프로세서 판독 가능 매체"로 구현될 수 있다. The various operations of the methods described above may be performed by any suitable means capable of performing operations, such as various hardware and/or software component(s), circuits and/or module(s). Software may contain an ordered list of executable instructions for implementing logical functions, and any instruction execution system, such as single or multiple, for use in connection with a single or multi-core processor or processor containing system. It may be implemented as a “processor-readable medium”.

본 명세서에 개시된 실시 예와 관련하여 설명된 방법 또는 알고리즘 및 기능의 블록 또는 단계는 하드웨어, 프로세서에 의해 실행되는 소프트웨어 모듈, 또는 이 둘의 조합으로 직접 구현될 수 있다. 소프트웨어로 구현되는 경우, 기능들은 유형의 비일시적 컴퓨터 판독 가능 매체 상에 하나 이상의 명령어 또는 코드로서 저장되거나 이를 통해 전송될 수 있다. 소프트웨어 모듈은 RAM (Random Access Memory), 플래시 메모리, ROM (Read Only Memory), EPROM (Electrically Programmable ROM), EEPROM (Electrically Erasable Programmable ROM), 레지스터, 하드 디스크, 이동식 디스크, CD ROM, 또는 당업계에 공지된 임의의 다른 형태의 저장 매체에 저장될 수 있다.Blocks or steps of methods, algorithms, and functions described in connection with the embodiments disclosed herein may be directly implemented in hardware, a software module executed by a processor, or a combination of both. When implemented in software, the functions may be stored as one or more instructions or codes on a tangible non-transitory computer-readable medium or transmitted through it. Software modules include RAM (Random Access Memory), Flash memory, ROM (Read Only Memory), EPROM (Electrically Programmable ROM), EEPROM (Electrically Erasable Programmable ROM), register, hard disk, removable disk, CD ROM, or in the art. It can be stored in any other known type of storage medium.

예시된 실시 예를 참조하여 본 발명의 개념의 원리를 설명하고 도시 하였지만, 예시된 실시 예는 그러한 원리를 벗어나지 않고 배열 및 상세하게 수정될 수 있으며, 임의의 원하는 방식으로 조합될 수 있음을 인식할 것이다. 그리고, 전술한 논의가 특정 실시 예에 초점을 맞추었지만, 다른 구성이 고려된다. 특히, "본 발명의 실시 예에 따른"등과 같은 표현이 본 명세서에서 사용되더라도, 이들 문구는 일반적으로 실시 예의 가능성을 참조하기 위한 것이며, 본 발명의 개념을 특정한 실시 예의 구성으로 제한하려는 것은 아니다. 본 명세서에서 사용 된 바와 같이, 이들 용어는 다른 실시 예에 결합 가능한 동일하거나 상이한 실시 예를 지칭할 수 있다.Although the principles of the concept of the present invention have been described and illustrated with reference to the illustrated embodiments, it will be appreciated that the illustrated embodiments may be arranged and modified in detail without departing from such principles, and may be combined in any desired manner. will be. And, although the above discussion has focused on specific embodiments, other configurations are contemplated. In particular, even if expressions such as "according to an embodiment of the present invention" are used in the present specification, these phrases are generally intended to refer to the possibility of an embodiment, and are not intended to limit the concept of the present invention to the configuration of a specific embodiment. As used herein, these terms may refer to the same or different embodiments that can be combined with other embodiments.

전술한 예시적인 실시 예는 본 발명의 개념을 제한하는 것으로 해석되지 않아야 한다. 비록 몇몇 실시 예들이 설명되었지만, 당업자는 본 개시의 신규한 교시 및 장점을 실질적으로 벗어나지 않으면서 이들 실시 예들에 대한 많은 수정이 가능하다는 것을 쉽게 이해할 것이다. 따라서, 그러한 모든 수정은 청구 범위에 정의된 바와 같은 본 발명의 개념의 범위 내에 포함되도록 의도된다.The above-described exemplary embodiments should not be construed as limiting the concept of the present invention. Although some embodiments have been described, those skilled in the art will readily appreciate that many modifications to these embodiments are possible without substantially departing from the novel teachings and advantages of the present disclosure. Accordingly, all such modifications are intended to be included within the scope of the inventive concept as defined in the claims.

본 발명의 개념의 실시 예는 제한없이 다음의 진술들로 확장될 수 있다:Embodiments of the inventive concept may be extended to the following statements without limitation:

진술 1. 본 발명의 실시 예는: Statement 1. An embodiment of the present invention:

입력 인코딩 데이터를 저장하기 위한 버퍼;A buffer for storing input encoded data;

입력 사전과 출력 사전을 맵핑하기 위한 인덱스 매퍼;An index mapper for mapping an input dictionary and an output dictionary;

상기 입력 인코딩 데이터, 상기 입력 사전 그리고 상기 입력 사전과 상기 출력 사전 간의 맵에 응답하여 수정된 현재 인코딩 데이터를 저장하는 현재 인코딩 버퍼;A current encoding buffer for storing modified current encoding data in response to the input encoded data, the input dictionary, and a map between the input dictionary and the output dictionary;

이전 입력 인코딩 데이터, 상기 입력 사전, 그리고 상기 맵에 응답하여 생성되는 수정된 이전 인코딩 데이터을 저장하는 이전 인코딩 버퍼; 그리고A previous encoding buffer for storing previous input encoded data, the input dictionary, and modified previous encoded data generated in response to the map; And

상기 현재 인코딩 버퍼에 저장된 상기 수정된 현재 인코딩 데이터, 상기 이전 인코딩 버퍼에 저장된 상기 수정된 이전 인코딩 데이터, 그리고 트랜스코딩 룰에 응답하여 출력 스트림을 생성하는 룰 평가기를 포함하는 트랜스코더를 포함한다. And a transcoder including a rule evaluator for generating an output stream in response to the modified current encoding data stored in the current encoding buffer, the modified previous encoding data stored in the previous encoding buffer, and a transcoding rule.

진술 2. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 상기 인덱스 매퍼는 트랜스코딩 룰에 응답한다.Statement 2. An embodiment of the present invention includes a transcoder according to statement 1, and the index mapper responds to the transcoding rule.

진술 3. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 트랜스코딩 룰은 인덱스 매퍼에 응답한다.Statement 3. An embodiment of the present invention includes a transcoder according to statement 1, and the transcoding rule responds to the index mapper.

진술 4. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 여기서 인덱스 매퍼는 입력 사전에서 선택된 서브 세트의 항목들에 응답한다.Statement 4. An embodiment of the invention comprises a transcoder according to statement 1, wherein the index mapper responds to the selected subset of items in the input dictionary.

진술 5. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 룰 평가기는 프로세서, FPGA(Field Programmable Gate Array), ASIC(Application-Specific Integrated Circuit), GPU(Graphics Processing Unit), 또는 범용 GPU (GPGPU) 중 적어도 하나를 포함한다.Statement 5. An embodiment of the present invention includes a transcoder according to Statement 1, and the rule evaluator is a processor, FPGA (Field Programmable Gate Array), ASIC (Application-Specific Integrated Circuit), GPU (Graphics Processing Unit), or general purpose. It includes at least one of GPU (GPGPU).

진술 6. 본 발명의 실시 예는 진술 5에 따른 트랜스코더를 포함하고, 룰 평가기는 트랜스코딩 룰을 구현하기 위한 적어도 하나의 소프트웨어 및 트랜스코딩 룰을 나열하는 테이블을 저장하기 위한 스토리지를 더 포함한다.Statement 6. An embodiment of the present invention includes a transcoder according to statement 5, and the rule evaluator further includes storage for storing at least one software for implementing the transcoding rules and a table listing the transcoding rules. .

진술 7. 본 발명의 실시 예는 진술 5에 따른 트랜스코더를 포함하고, 룰 평가기는 트랜스코딩 룰을 구현하기 위한 회로를 더 포함한다.Statement 7. An embodiment of the present invention includes a transcoder according to statement 5, and the rule evaluator further includes a circuit for implementing the transcoding rule.

진술 8. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 룰 평가기는 트랜스코딩 룰을 사용하여 입력 인코딩 데이터로부터 수정된 현재 인코딩 데이터를 생성하도록 동작한다.Statement 8. An embodiment of the present invention includes a transcoder according to statement 1, and the rule evaluator is operative to generate modified current encoded data from the input encoded data using the transcoding rules.

진술 9. 본 발명의 실시 예는 진술 8에 따른 트랜스코더를 포함하고, 룰 평가기는 수정된 이전 인코딩 데이터를 출력 스트림에 추가하도록 동작한다.Statement 9. An embodiment of the invention includes a transcoder according to statement 8, and the rule evaluator is operative to add the modified previous encoded data to the output stream.

진술 10. 본 발명의 실시 예는 진술 9에 따른 트랜스코더를 포함하고, 룰 평가기는 현재 인코딩 버퍼로부터 수정된 인코딩된 현재 인코딩 데이터를 이전 인코딩 버퍼에서 수정된 이전 인코딩 데이터로 이동시키도록 추가로 동작한다.Statement 10. An embodiment of the present invention comprises a transcoder according to statement 9, and the rule evaluator is further operated to move the modified encoded current encoded data from the current encoding buffer to the modified previous encoded data from the previous encoding buffer. do.

진술 11. 본 발명의 실시 예는 진술 8에 따른 트랜스코더를 포함하고, 룰 평가기는 트랜스코딩 룰을 사용하여 수정된 현재 인코딩 데이터를 포함하도록 수정된 이전 인코딩 데이터를 수정하도록 동작한다.Statement 11. An embodiment of the present invention includes a transcoder according to statement 8, and the rule evaluator is operative to modify the modified previous encoded data to include the modified current encoded data using the transcoding rules.

진술 12. 본 발명의 실시 예는 진술 11에 따른 트랜스코더를 포함하고, 룰 평가기는 수정된 현재 인코딩 데이터를 생성할 때 입력 인코딩 데이터의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하도록 추가로 동작한다.Statement 12. An embodiment of the present invention includes a transcoder according to statement 11, and the rule evaluator is further operated to change the first encoding method of the input encoded data to the second encoding method when generating the modified current encoded data. do.

진술 13. 본 발명의 실시 예는 진술 11에 따른 트랜스코더를 포함하고, 룰 평가기는 수정된 현재 인코딩 데이터를 생성할 때 입력 인코딩 데이터의 제 1 인코딩 방식을 제 3 인코딩 방식으로 변경하도록 추가로 동작한다.Statement 13. An embodiment of the present invention includes a transcoder according to statement 11, and the rule evaluator additionally operates to change the first encoding method of the input encoded data to the third encoding method when generating the modified current encoded data. do.

진술 14. 본 발명의 실시 예는 진술 8에 따른 트랜스코더를 포함하고, 룰 평가기는 입력 인코딩 데이터로부터 입력 인코딩 데이터의 제 1 인코딩 방식을 결정하도록 동작하며, 적어도 2 개의 인코딩 방식들 중 하나인 제 1 인코딩 방식은 입력 인코딩 데이터에서 사용된다.Statement 14. An embodiment of the present invention includes a transcoder according to statement 8, and the rule evaluator is operative to determine a first encoding scheme of the input encoded data from the input encoded data, and is one of at least two encoding schemes. 1 The encoding method is used in the input encoded data.

진술 15. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 제 1 인코딩 방식을 사용하여 입력 인코딩 데이터에서 제 1 청크를 식별하고, 제 2 인코딩을 사용하여 입력 인코딩 데이터에서 제 2 청크를 식별하는 스트림 스플리터를 더 포함한다. Statement 15. An embodiment of the invention comprises a transcoder according to statement 1, identifies a first chunk in the input encoded data using a first encoding scheme, and uses a second encoding to identify a second chunk in the input encoded data. It further comprises a stream splitter to identify the.

진술 16. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 인덱스 매퍼는 입력 사전의 적어도 하나의 항목을 출력 사전의 "무정의(don't care)" 값에 매핑하도록 동작한다.Statement 16. An embodiment of the present invention includes a transcoder according to statement 1, and the index mapper operates to map at least one item of the input dictionary to a "don't care" value of the output dictionary.

진술 17. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 인덱스 매퍼는 "무정의(don't care)" 값을 출력 사전에 추가하도록 동작한다.Statement 17. An embodiment of the present invention includes a transcoder according to statement 1, and the index mapper operates to add a "don't care" value to the output dictionary.

진술 18. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, Statement 18. An embodiment of the present invention includes a transcoder according to statement 1,

입력 인코딩 데이터는 압축된 입력 인코딩 데이터이고; 그리고The input encoded data is compressed input encoded data; And

트랜스코더는 압축해제 엔진을 더 포함한다.The transcoder further includes a decompression engine.

진술 19. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 트랜스코더는 입력 인코딩 데이터의 디코딩없이 입력 인코딩 데이터로부터 출력 스트림을 생성하도록 동작한다.Statement 19. An embodiment of the invention comprises a transcoder according to statement 1, wherein the transcoder is operative to generate an output stream from the input encoded data without decoding the input encoded data.

진술 20. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 트랜스코더는 솔리드 스테이트 드라이브(SSD) 스토리지 장치에 포함된다.Statement 20. An embodiment of the present invention includes a transcoder according to statement 1, wherein the transcoder is included in a solid state drive (SSD) storage device.

진술 21. 본 발명의 실시 예는 진술 20에 따른 트랜스코더를 포함하고, 입력 인코딩 데이터는 SSD 스토리지 장치 내의 스토리지로부터 수신된다.Statement 21. An embodiment of the present invention comprises a transcoder according to statement 20, and input encoded data is received from storage in the SSD storage device.

진술 22. 본 발명의 실시 예에 따른 방법은:Statement 22. A method according to an embodiment of the present invention:

트랜스코더에서, 스토리지 장치로부터의 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계;At a transcoder, receiving a first data chunk from input encoded data from a storage device;

상기 제 1 데이터 청크가 호스트 컴퓨터의 관심 대상인지 결정하는 단계;Determining whether the first data chunk is of interest to a host computer;

상기 호스트 컴퓨터의 관심 대상인 상기 제 1 데이터 청크에 적어도 부분적으로 기초하여 상기 제 1 데이터 청크로부터 제 1 인코딩 데이터를 생성하는 단계;Generating first encoded data from the first data chunk based at least in part on the first data chunk of interest to the host computer;

상기 트랜스코더에서, 상기 스토리지 장치로부터의 상기 입력 인코딩 데이터로부터 제 2 데이터 청크를 수신하는 단계;At the transcoder, receiving a second data chunk from the input encoded data from the storage device;

상기 제 2 데이터 청크가 상기 호스트 컴퓨터의 관심 대상이 아닌지를 결정하는 단계;Determining whether the second data chunk is not of interest to the host computer;

상기 호스트 컴퓨터의 관심 대상이 아닌 상기 제 2 데이터 청크에 적어도 부분적으로 기초하여 상기 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계; 그리고Generating second encoded data from the second data chunk based at least in part on the second data chunk that is not of interest to the host computer; And

상기 제 1 인코딩 데이터 및 제 2 인코딩 데이터를 상기 호스트 컴퓨터에 출력하는 단계를 포함한다.And outputting the first encoded data and the second encoded data to the host computer.

진술 23. 본 발명의 실시 예는 진술 22에 따른 방법을 포함하고, 호스트 컴퓨터서 관심이 없는 제 2 데이터 청크에 적어도 부분적으로 기초하여 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계는, 제 1 인코딩 데이터의 값을 "무정의(don't care)" 값으로 변경하는 단계를 포함한다.Statement 23. An embodiment of the invention comprises a method according to statement 22, wherein the step of generating second encoded data from the second data chunk based at least in part on the second data chunk of no interest at the host computer comprises: 1 changing the value of the encoded data to a "don't care" value.

진술 24. 본 발명의 실시 예는 진술 23에 따른 방법을 포함하고, 호스트 컴퓨터에 관심이 없는 제 2 데이터 청크에 적어도 부분적으로 기초하여 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계는, 제 2 인코딩 데이터를 "무정의(don't care)" 값을 포함하는 제 3 인코딩 데이터와 결합하는 단계를 더 포함한다.Statement 24. An embodiment of the present invention comprises a method according to statement 23, wherein the step of generating second encoded data from the second data chunk based at least in part on the second data chunk not of interest to the host computer comprises: And combining the two encoded data with third encoded data comprising a "don't care" value.

진술 25. 본 발명의 실시 예는 진술 24에 따른 방법을 포함하고, 호스트 컴퓨터에 관심이 없는 제 2 데이터 청크에 적어도 부분적으로 기초하여 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계는, 제 2 데이터 청크 및 제 3 인코딩 데이터 중 적어도 하나의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계를 포함한다. Statement 25. An embodiment of the present invention includes a method according to statement 24, wherein generating second encoded data from the second data chunk based at least in part on the second data chunk not of interest to the host computer comprises: And changing at least one of the second data chunk and the third encoded data to a second encoding method.

진술 26. 본 발명의 실시 예는 진술 25에 따른 방법을 포함하고, 제 2 데이터 청크 및 제 3 인코딩 데이터 중 적어도 하나의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계는, 제 2 인코딩 데이터의 제 1 인코딩 방식을 제 2 인코딩 데이터의 제 2 인코딩 방식으로 변경하는 단계를 포함한다. Statement 26. An embodiment of the present invention includes the method according to statement 25, wherein the step of changing at least one of the second data chunk and the third encoded data into a second encoding scheme comprises: And changing the first encoding method of to a second encoding method of the second encoded data.

진술 27. 본 발명의 실시 예는 진술 25에 따른 방법을 포함하고, 제 2 데이터 청크 및 제 3 인코딩 데이터 중 적어도 하나의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계는, 제 3 인코딩 데이터의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계를 포함한다. Statement 27. An embodiment of the present invention includes the method according to statement 25, wherein the step of changing at least one of the second data chunk and the third encoded data to a second encoding scheme includes: And changing the first encoding method of to the second encoding method.

진술 28. 본 발명의 실시 예는 진술 22에 따른 방법을 포함하고, 호스트 컴퓨터가 관심있는 제 1 데이터 청크에 적어도 부분적으로 기초하여 제 1 데이터 청크로부터 제 1 인코딩 데이터를 생성하는 단계는, 제 1 인코딩 데이터를 제 3 인코딩 데이터와 결합하는 단계를 포함한다. Statement 28. An embodiment of the invention includes a method according to statement 22, wherein the host computer generating first encoded data from the first data chunk based at least in part on the first data chunk of interest comprises: Combining the encoded data with third encoded data.

진술 29. 본 발명의 실시 예는 진술 28에 따른 방법을 포함하고, 호스트 컴퓨터가 관심있는 제 1 데이터 청크에 적어도 부분적으로 기초하여 제 1 데이터 청크로부터 제 1 인코딩 데이터를 생성하는 단계는, 상기 제 1 데이터 청크 및 상기 제 3 인코딩 데이터 중 적어도 하나의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계를 더 포함한다.Statement 29. An embodiment of the present invention comprises a method according to statement 28, wherein the host computer generating first encoded data from the first data chunk based at least in part on the first data chunk of interest comprises: And changing at least one of the first data chunk and the third encoded data to a second encoding method.

진술 30. 본 발명의 실시 예는 진술 29에 따른 방법을 포함하고, 제 1 데이터 청크 및 제 3 인코딩 데이터 중 적어도 하나의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계는, 제 1 데이터 청크의 제 1 인코딩 방식을 제 1 인코딩 데이터의 제 2 인코딩 방식으로 변경하는 단계를 포함한다. Statement 30. An embodiment of the present invention includes the method according to statement 29, wherein the step of changing at least one of the first data chunk and the third encoded data to a second encoding scheme comprises: the first data chunk And changing the first encoding method of to a second encoding method of the first encoded data.

진술 31. 본 발명의 실시 예는 진술 29에 따른 방법을 포함하고, 제 1 데이터 청크 및 제 3 인코딩 데이터 중 적어도 하나의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계는, 제 2 인코딩 데이터의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계를 포함한다. Statement 31. An embodiment of the present invention includes the method according to statement 29, wherein the step of changing at least one of the first data chunk and the third encoded data to a second encoding scheme comprises: And changing the first encoding method of to the second encoding method.

진술 32. 본 발명의 실시 예는 진술 22에 따른 방법을 포함하고, 호스트 컴퓨터가 관심있는 제 1 데이터 청크에 적어도 부분적으로 기초하여 제 1 데이터 청크로부터 제 1 인코딩 데이터를 생성하는 단계는, 트랜스코딩 룰에 적어도 부분적으로 기초하여 제 1 데이터 청크로부터의 제 1 인코딩 데이터를 생성하는 단계를 포함하고; 그리고Statement 32. An embodiment of the present invention comprises a method according to statement 22, wherein the host computer generating first encoded data from the first data chunk based at least in part on the first data chunk of interest comprises: transcoding Generating first encoded data from the first data chunk based at least in part on the rule; And

호스트 컴퓨터가 관심없는 제 2 데이터 청크에 적어도 부분적으로 기초하여 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계는, 트랜스코딩 룰에 적어도 부분적으로 기초하여 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계를 포함한다.Generating, by the host computer, the second encoded data from the second data chunk based at least in part on the second data chunk that is not of interest, generating second encoded data from the second data chunk based at least in part on the transcoding rule. It includes the step of.

진술 33. 본 발명의 실시 예는 진술 22에 따른 방법을 포함하고, 트랜스코더에서 스토리지 장치로부터의 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계는:Statement 33. An embodiment of the present invention includes a method according to statement 22, wherein receiving a first data chunk from input encoded data from a storage device in a transcoder comprises:

스트림 스플리터에서 입력 인코딩 데이터를 수신하는 단계;Receiving input encoded data at the stream splitter;

스트림 스플리터에 의해서 입력 인코딩 데이터의 제 1 인코딩 방식을 사용하여 인코딩된 제 1 데이터 청크 및 제 2 인코딩 방식을 사용하여 인코딩된 제 2 데이터 청크를 식별하는 단계:Identifying, by the stream splitter, a first data chunk encoded using a first encoding scheme of the input encoded data and a second data chunk encoded using a second encoding scheme:

스트림 스플리터로부터 입력 인코딩 데이터의 제 1 데이터 청크를 수신하는 단계를 포함한다.And receiving a first data chunk of input encoded data from the stream splitter.

진술 34. 본 발명의 실시 예는 진술 22에 따른 방법을 포함하며, 상기 방법은:Statement 34. An embodiment of the invention includes a method according to statement 22, the method comprising:

스토리지 장치로부터 입력 사전을 수신하는 단계;Receiving an input dictionary from a storage device;

호스트 컴퓨터의 관심 데이터 및 호스트 컴퓨터의 비관심 데이터에 적어도 부분적으로 기초하여 입력 사전을 출력 사전에 매핑하는 단계; 그리고Mapping the input dictionary to the output dictionary based at least in part on data of interest of the host computer and non-interest data of the host computer; And

출력 사전을 호스트 컴퓨터에 출력하는 단계를 포함한다.And outputting the output dictionary to the host computer.

진술 35. 본 발명의 실시 예는 진술 34에 따른 방법을 포함하고, 호스트 컴퓨터의 관심 데이터 및 호스트 컴퓨터의 비관심 데이터에 적어도 부분적으로 기초하여 입력 사전을 출력 사전에 매핑하는 단계는, 트랜스코딩 룰에 적어도 부분적으로 기초하여 입력 사전을 출력 사전에 매핑하는 단계를 포함한다.Statement 35. An embodiment of the present invention includes a method according to statement 34, wherein mapping the input dictionary to the output dictionary based at least in part on data of interest of the host computer and non-interest data of the host computer includes: Mapping the input dictionary to the output dictionary based at least in part on.

진술 36. 본 발명의 실시 예는 진술 34에 따른 방법을 포함하고, 호스트 컴퓨터의 관심 데이터 및 호스트 컴퓨터의 비관심 데이터에 적어도 부분적으로 기초하여 입력 사전을 출력 사전에 매핑하는 단계는, 입력 사전에서 선택된 항목의 서브셋에 적어도 부분적으로 기초하여 입력 사전을 출력 사전에 매핑하는 단계를 포함한다.Statement 36. An embodiment of the present invention includes a method according to statement 34, wherein mapping the input dictionary to the output dictionary based at least in part on the host computer's data of interest and the host computer's uninterested data comprises: Mapping the input dictionary to the output dictionary based at least in part on the subset of selected items.

진술 37. 본 발명의 실시 예는 진술 22에 따른 방법을 포함하고, 트랜스코더는 입력 인코딩 데이터의 디코딩없이 입력 인코딩 데이터로부터 제 1 인코딩 데이터 및 제 2 인코딩 데이터를 생성하도록 동작한다.Statement 37. An embodiment of the invention comprises a method according to statement 22, wherein the transcoder is operative to generate first encoded data and second encoded data from the input encoded data without decoding the input encoded data.

진술 38. 본 발명의 실시 예는 진술 22에 따른 방법을 포함하며, 트랜스코더는 솔리드 스테이트 드라이브(SSD) 스토리지 장치에 포함된다.Statement 38. An embodiment of the present invention includes a method according to statement 22, wherein the transcoder is included in a solid state drive (SSD) storage device.

진술 39. 본 발명의 실시 예는 진술 38에 따른 방법을 포함하며, Statement 39. An embodiment of the present invention includes a method according to statement 38,

트랜스코더에서 스토리지 장치로부터의 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계는, 트랜스코더에서 SSD 스토리지 장치 내의 스토리지로부터의 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계를 포함하고; 그리고Receiving at the transcoder the first data chunk from the input encoded data from the storage device comprises: receiving at the transcoder the first data chunk from the input encoded data from the storage within the SSD storage device; And

트랜스코더에서 스토리지 장치로부터의 입력 인코딩 데이터로부터 제 2 데이터 청크를 수신하는 단계는, 트랜스코더에서 SSD 스토리지 장치 내의 스토리지로부터의 입력 인코딩 데이터로부터 제 2 데이터 청크를 수신하는 단계를 포함한다.Receiving at the transcoder the second data chunk from the input encoded data from the storage device includes receiving at the transcoder the second data chunk from the input encoded data from the storage in the SSD storage device.

진술 40. 본 발명의 실시 예는 비일시적 스토리지 매체를 포함하는 상품을 포함하고, 비일시적 스토리지 매체는 머신에 의해 실행될 때 다음의 동작들을 수행하는 명령을 저장한다:Statement 40. An embodiment of the present invention includes a product including a non-transitory storage medium, the non-transitory storage medium storing instructions to perform the following operations when executed by the machine:

트랜스코더에서, 스토리지 장치로부터의 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계;At a transcoder, receiving a first data chunk from input encoded data from a storage device;

상기 제 1 데이터 청크가 호스트 컴퓨터의 관심 대상인지 결정하는 단계;Determining whether the first data chunk is of interest to a host computer;

상기 호스트 컴퓨터의 관심 대상인 상기 제 1 데이터 청크에 적어도 부분적으로 기초하여 상기 제 1 데이터 청크로부터 제 1 인코딩 데이터를 생성하는 단계;Generating first encoded data from the first data chunk based at least in part on the first data chunk of interest to the host computer;

상기 트랜스코더에서, 상기 스토리지 장치로부터의 상기 입력 인코딩 데이터로부터 제 2 데이터 청크를 수신하는 단계;At the transcoder, receiving a second data chunk from the input encoded data from the storage device;

상기 제 2 데이터 청크가 상기 호스트 컴퓨터의 관심 대상이 아닌지를 결정하는 단계;Determining whether the second data chunk is not of interest to the host computer;

상기 호스트 컴퓨터의 관심 대상이 아닌 상기 제 2 데이터 청크에 적어도 부분적으로 기초하여 상기 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계; 그리고Generating second encoded data from the second data chunk based at least in part on the second data chunk that is not of interest to the host computer; And

상기 제 1 인코딩 데이터 및 제 2 인코딩 데이터를 상기 호스트 컴퓨터에 출력하는 단계를 수행한다. A step of outputting the first encoded data and the second encoded data to the host computer is performed.

진술 41. 본 발명의 실시 예는 진술 40에 따른 상품을 포함하며, 호스트 컴퓨터의 관심이 없는 제 2 데이터 청크에 적어도 부분적으로 기초하여 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계는, 제 1 인코딩 데이터의 값을 "무정의" 값으로 변경하는 단계를 포함한다.Statement 41. An embodiment of the present invention comprises the product according to statement 40, wherein the step of generating the second encoded data from the second data chunk based at least in part on the second data chunk of no interest of the host computer comprises: 1 changing the value of the encoded data to a "undefined" value.

진술 42. 본 발명의 실시 예는 진술 41에 따른 상품을 포함하고, 여기서 호스트 컴퓨터의 관심이 없는 제 2 데이터 청크에 적어도 부분적으로 기초하여 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계는, 제 2 인코딩 데이터를 "무정의(don't care)" 값을 포함하는 제 3 인코딩 데이터와 결합하는 단계를 포함한다. Statement 42. An embodiment of the invention comprises a product according to statement 41, wherein generating second encoded data from the second data chunk based at least in part on the second data chunk of no interest of the host computer, Combining the second encoded data with third encoded data comprising a "don't care" value.

진술 43. 본 발명의 실시 예는 진술 42에 따른 상품을 포함하며, 여기서 호스트 컴퓨터의 관심이 없는 제 2 데이터 청크에 적어도 부분적으로 기초하여 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계는, 상기 제 2 데이터 청크 및 제 3 인코딩 데이터 중 적어도 하나의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계를 포함한다. Statement 43. An embodiment of the present invention includes a product according to statement 42, wherein generating second encoded data from the second data chunk based at least in part on the second data chunk of no interest of the host computer, wherein: And changing at least one of the second data chunk and the third encoded data to a second encoding method.

진술 44. 본 발명의 실시 예는 진술 43에 따른 상품을 포함하고, 여기서 제 2 데이터 청크 및 제 3 인코딩 데이터 중 적어도 하나의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계는, 제 2 데이터 청크의 제 1 인코딩 방식을 제 2 인코딩 데이터의 제 2 인코딩 방식으로 변경하는 단계를 포함한다. Statement 44. An embodiment of the present invention includes the product according to statement 43, wherein the step of changing at least one of the second data chunk and the third encoded data to a second encoding method includes: And changing the first encoding method of the chunk to a second encoding method of the second encoded data.

진술 45. 본 발명의 실시 예는 진술 43에 따른 상품을 포함하고, 여기서 제 2 데이터 청크 및 제 3 인코딩 데이터 중 적어도 하나의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계는, 제 3 인코딩 데이터의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계를 포함한다.Statement 45. An embodiment of the present invention includes the product according to statement 43, wherein the step of changing at least one of the second data chunk and the third encoded data to a second encoding method comprises: a third encoding And changing the first encoding method of the data to the second encoding method.

진술 46. 본 발명의 실시 예는 진술 40에 따른 상품을 포함하며, 여기서 호스트 컴퓨터의 관심이 있는 제 1 데이터 청크에 적어도 부분적으로 기초하여 제 1 데이터 청크로부터 제 1 인코딩 데이터를 생성하는 단계는, 제 1 인코딩 데이터를 제 3 인코딩 데이터와 결합하는 단계를 포함한다. Statement 46. An embodiment of the invention includes a product according to statement 40, wherein generating first encoded data from the first data chunk based at least in part on the first data chunk of interest of the host computer, Combining the first encoded data with the third encoded data.

진술 47. 본 발명의 실시 예는 진술 46에 따른 상품을 포함하고, 여기서 호스트 컴퓨터의 관심이 있는 제 1 데이터 청크에 적어도 부분적으로 기초하여 제 1 데이터 청크로부터 제 1 인코딩 데이터를 생성하는 단계는, 상기 제 1 데이터 청크 및 상기 제 3 인코딩 데이터 중 적어도 하나의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계를 더 포함한다. Statement 47. An embodiment of the present invention comprises a product according to statement 46, wherein generating first encoded data from the first data chunk based at least in part on the first data chunk of interest of the host computer comprises: And changing at least one of the first data chunk and the third encoded data to a second encoding method.

진술 48. 본 발명의 실시 예는 진술 47에 따른 상품을 포함하며, 여기서 제 1 데이터 청크 및 제 3 인코딩 데이터 중 적어도 하나의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계는, 제 1 데이터 청크의 제 1 인코딩 방식을 제 1 인코딩 데이터의 제 2 인코딩 방식으로 변경하는 단계를 포함한다. Statement 48. An embodiment of the present invention includes a product according to statement 47, wherein the step of changing at least one of the first data chunk and the third encoded data to a second encoding scheme comprises: the first data And changing the first encoding method of the chunk to a second encoding method of the first encoded data.

진술 49. 본 발명의 실시 예는 진술 47에 따른 상품을 포함하며, 여기서 제 1 데이터 청크 및 제 3 인코딩 데이터 중 적어도 하나의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계는, 제 3 인코딩 데이터의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계를 포함한다. Statement 49. An embodiment of the present invention includes the product according to statement 47, wherein the step of changing at least one of the first data chunk and the third encoded data to a second encoding method comprises: a third encoding And changing the first encoding method of the data to the second encoding method.

진술 50. 본 발명의 실시 예는 진술 40에 따른 상품을 포함하며, 여기서 호스트 컴퓨터의 관심이 있는 제 1 데이터 청크에 적어도 부분적으로 기초하여 제 1 데이터 청크로부터 제 1 인코딩 데이터를 생성하는 단계는, 트랜스코딩 룰들에 적어도 부분적으로 기초하여 제 1 데이터 청크로부터 제 1 인코딩 데이터를 생성하는 단계; 그리고Statement 50. An embodiment of the invention comprises a product according to statement 40, wherein generating first encoded data from the first data chunk based at least in part on the first data chunk of interest of the host computer, wherein: Generating first encoded data from the first data chunk based at least in part on the transcoding rules; And

호스트 컴퓨터의 관심이 없는 제 2 데이터 청크에 적어도 부분적으로 기초하여 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계는, 트랜스코딩 룰들에 적어도 부분적으로 기초하여 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계를 포함한다.Generating the second encoded data from the second data chunk based at least in part on the second chunk of data of no interest of the host computer comprises: generating the second encoded data from the second data chunk based at least in part on the transcoding rules. And generating.

진술 51. 본 발명의 실시 예는 진술 40에 따른 상품을 포함하며, 여기서 트랜스코더에서 스토리지 장치로부터의 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계는:Statement 51. An embodiment of the present invention includes a product according to statement 40, wherein receiving a first data chunk from the input encoded data from the storage device at the transcoder comprises:

스트림 스플리터에서 입력 인코딩 데이터를 수신하는 단계;Receiving input encoded data at the stream splitter;

스트림 스플리터에 의해서, 입력 인코딩 데이터의 제 1 인코딩 방식을 사용하여 인코딩되는 제 1 데이터 청크와 제 2 인코딩 방식을 사용하여 인코딩되는 제 2 데이터 청크를 식별하는 단계; 그리고Identifying, by the stream splitter, a first data chunk encoded using a first encoding scheme of the input encoded data and a second data chunk encoded using a second encoding scheme; And

스트림 스플리터로부터 제공되는 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계를 포함한다.And receiving a first data chunk from input encoded data provided from the stream splitter.

진술 52. 본 발명의 실시 예는 진술 40에 따른 상품을 포함하며, 비일시적 스토리지 매체는 머신에 의해 실행될 때 다음을 야기하는 추가 명령을 저장한다:Statement 52. An embodiment of the invention includes a product according to statement 40, wherein the non-transitory storage medium stores additional instructions that, when executed by the machine, cause:

스토리지 장치로부터 입력 사전을 수신하는 단계;Receiving an input dictionary from a storage device;

호스트 컴퓨터의 관심 데이터 및 사기 호스트 컴퓨터의 비관심 데이터에 적어도 부분적으로 기초하여 입력 사전을 출력 사전에 매핑하는 단계; 그리고Mapping the input dictionary to the output dictionary based at least in part on the host computer's interest data and the fraudulent host computer's uninterested data; And

출력 사전을 호스트 컴퓨터에 출력하는 단계.Outputting the output dictionary to the host computer.

진술 53. 본 발명의 실시 예는 진술 52에 따른 상품을 포함하며, 여기서 호스트 컴퓨터의 관심 데이터 및 호스트 컴퓨터에 비관심 데이터에 적어도 부분적으로 기초하여 입력 사전을 출력 사전에 매핑하는 단계는, 트랜스코딩 룰에 적어도 부분적으로 기초하여 입력 사전을 출력 사전에 매핑하는 단계를 포함한다.Statement 53. An embodiment of the present invention includes a product according to statement 52, wherein mapping the input dictionary to the output dictionary based at least in part on data of interest of the host computer and data of non-interest to the host computer comprises: transcoding Mapping the input dictionary to the output dictionary based at least in part on the rule.

진술 54. 본 발명의 실시 예는 진술 52에 따른 상품을 포함하며, 여기서 호스트 컴퓨터의 관심 데이터 및 호스트 컴퓨터에 비관심 데이터에 적어도 부분적으로 기초하여 입력 사전을 출력 사전에 매핑하는 단계는, 입력 사전은 입력 사전에서 선택된 항목의 서브셋에 적어도 부분적으로 기초하여 입력 사전을 출력 사전에 매핑하는 단계를 포함한다.Statement 54. An embodiment of the present invention includes a product according to statement 52, wherein mapping the input dictionary to the output dictionary based at least in part on the data of interest of the host computer and the data of interest to the host computer comprises: Includes mapping the input dictionary to the output dictionary based at least in part on the subset of items selected in the input dictionary.

진술 55. 본 발명의 실시 예는 진술 40에 따른 상품을 포함하고, 여기서 트랜스코더는 입력 인코딩 데이터를 디코딩하지 않고 입력 인코딩 데이터로부터 제 1 인코딩 데이터 및 제 2 인코딩 데이터를 생성하도록 동작한다.Statement 55. An embodiment of the invention comprises a product according to statement 40, wherein the transcoder is operative to generate first and second encoded data from the input encoded data without decoding the input encoded data.

진술 56. 본 발명의 실시 예는 명세서 40에 따른 상품을 포함하며, 트랜스코더는 솔리드 스테이트 드라이브(SSD) 스토리지 장치에 포함된다.Statement 56. An embodiment of the present invention includes a product according to specification 40, and the transcoder is included in a solid state drive (SSD) storage device.

진술 57. 본 발명의 실시 예는 진술 56에 따른 상품을 포함하며, Statement 57. An embodiment of the present invention includes a product according to statement 56,

트랜스코더에서 스토리지 장치로부터의 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계는, 트랜스코더에서 SSD 스토리지 장치 내의 스토리지로부터의 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계를 포함하고; 그리고Receiving at the transcoder the first data chunk from the input encoded data from the storage device comprises: receiving at the transcoder the first data chunk from the input encoded data from the storage within the SSD storage device; And

트랜스코더에서 스토리지 장치로부터의 입력 인코딩 데이터로부터 제 2 데이터 청크를 수신하는 단계는, 트랜스코더에서 SSD 스토리지 장치 내의 스토리지로부터의 입력 인코딩 데이터로부터 제 2 데이터 청크를 수신하는 단계를 포함한다.Receiving at the transcoder the second data chunk from the input encoded data from the storage device includes receiving at the transcoder the second data chunk from the input encoded data from the storage in the SSD storage device.

진술 58. 본 발명의 실시 예는 다음을 포함하는 스토리지 장치를 포함한다:Statement 58. An embodiment of the invention includes a storage device comprising:

입력 인코딩 데이터를 위한 스토리지;Storage for input encoded data;

스토리지 상의 호스트 컴퓨터로부터의 읽기 요청 및 쓰기 요청을 처리하는 컨트롤러;A controller that processes a read request and a write request from a host computer on the storage;

스토리지에 저장된 입력 인코딩 데이터에 적용되는 호스트 컴퓨터로부터 발생하는 속성을 수신하는 인스토리지 컴퓨터(ISC) 컨트롤러; 그리고An Instorage Computer (ISC) controller for receiving an attribute generated from a host computer applied to the input encoded data stored in the storage; And

입력 인코딩 데이터에 대한 입력 사전으로부터 출력 사전으로 매핑하기 위한 인덱스 매퍼를 포함하는 트랜스코더를 포함하되, 입력 사전은 적어도 하나의 제 1 항목 및 적어도 하나의 제 2 항목을 포함하고, 상기 적어도 하나의 제 1 항목은 적어도 하나의 제 3 항목에 매핑되고, 적어도 하나의 제 2 항목은 출력 사전의 "무정의" 항목에 매핑된다. A transcoder including an index mapper for mapping from an input dictionary for input encoded data to an output dictionary, wherein the input dictionary includes at least one first item and at least one second item, and the at least one second item One item is mapped to at least one third item, and at least one second item is mapped to a “undefined” item in the output dictionary.

진술 59. 본 발명의 실시 예는 진술 58에 따른 스토리지 장치를 포함하고, 트랜스코더는 프로세서, FPGA(Field Programmable Gate Array), ASIC(Application-Specific Integrated Circuit), GPU(Graphics Processing Unit), 또는 범용 GPU(GPGPU)들 중 적어도 하나를 포함한다. Statement 59. An embodiment of the present invention includes the storage device according to statement 58, and the transcoder is a processor, a field programmable gate array (FPGA), an application-specific integrated circuit (ASIC), a graphics processing unit (GPU), or a general purpose. It includes at least one of GPUs (GPGPUs).

진술 60. 본 발명의 실시 예는 진술 58에 따른 스토리지 장치를 포함하고, ISC 컨트롤러는 트랜스코더로부터의 출력 인코딩 데이터에 가속 기능을 적용하도록 동작한다.Statement 60. An embodiment of the invention includes the storage device according to statement 58, and the ISC controller is operative to apply an acceleration function to the output encoded data from the transcoder.

진술 61. 본 발명의 실시 예는 진술 60에 따른 스토리지 장치를 포함하고, ISC 컨트롤러는 출력 인코딩 데이터에 대한 가속 기능의 결과를 트랜스코더로부터 호스트 컴퓨터로 출력하도록 동작한다. Statement 61. An embodiment of the present invention includes the storage device according to statement 60, and the ISC controller is operative to output a result of the acceleration function for the output encoded data from the transcoder to the host computer.

진술 62. 본 발명의 실시 예는 진술 58에 따른 스토리지 장치를 포함하고, ISC 컨트롤러는 트랜스코더의 출력 인코딩 데이터를 호스트 컴퓨터에 전달하도록 동작한다.Statement 62. An embodiment of the present invention includes the storage device according to statement 58, and the ISC controller is operative to pass the output encoded data of the transcoder to the host computer.

진술 63. 본 발명의 실시 예는 진술 62에 따른 스토리지 장치를 포함하고, ISC 컨트롤러는 출력 사전을 호스트 컴퓨터에 전달하도록 동작한다.Statement 63. An embodiment of the present invention includes the storage device according to statement 62, and the ISC controller is operative to pass the output dictionary to the host computer.

진술 64. 본 발명의 실시 예는 진술 58에 따른 스토리지 장치를 포함하고, 트랜스코더는 입력 인코딩 데이터 및 입력 사전으로부터 출력 사전으로의 맵에 적어도 부분적으로 기초하여 출력 인코딩 데이터를 생성하도록 동작한다. Statement 64. An embodiment of the invention includes the storage device according to statement 58, wherein the transcoder is operative to generate output encoded data based at least in part on the input encoded data and a map from the input dictionary to the output dictionary.

진술 65. 본 발명의 실시 예는 진술 64에 따른 스토리지 장치를 포함하며, 트랜스코더는:Statement 65. An embodiment of the present invention includes a storage device according to statement 64, wherein the transcoder:

입력 인코딩 데이터를 저장하는 버퍼;A buffer for storing input encoded data;

인덱스 매퍼;Index mapper;

입력 인코딩 데이터에 응답하여 수정된 현재 인코딩 데이터, 수정된 현재 인코딩 데이터 및 입력 사전으로부터 출력 사전으로의 맵을 저장하는 현재 인코딩 버퍼;A current encoding buffer for storing modified current encoding data, modified current encoding data, and a map from the input dictionary to the output dictionary in response to the input encoding data;

이전 입력 인코딩 데이터에 응답하여 수정된 이전 인코딩 데이터와 수정된 이전 인코딩 데이터, 그리고 입력 사전으로부터 출력 사전으로의 맵을 저장하기 위한 이전 인코딩 버퍼; 그리고A previous encoding buffer for storing the modified previous encoding data and the modified previous encoding data in response to the previous input encoding data, and a map from the input dictionary to the output dictionary; And

현재 인코딩 버퍼의 수정된 현재 인코딩 데이터, 이전 인코딩 버퍼의 수정된 이전 인코딩 데이터, 그리고 트랜스코딩 룰들에 응답하여 출력 스트림을 생성하기 위한 룰 평가기를 포함한다. A rule evaluator for generating an output stream in response to the modified current encoding data of the current encoding buffer, the modified previous encoding data of the previous encoding buffer, and the transcoding rules.

진술 66. 본 발명의 실시 예는 진술 65에 따른 스토리지 장치를 포함하며, 트랜스코딩 룰은 속성에 적어도 부분적으로 기초한다.Statement 66. An embodiment of the invention includes a storage device according to statement 65, wherein the transcoding rules are based at least in part on attributes.

진술 67. 본 발명의 실시 예는 진술 65에 따른 스토리지 장치를 포함하고, 룰 평가기는 입력 인코딩 데이터의 디코딩없이, 현재 인코딩 버퍼의 수정된 현재 인코딩 데이터, 이전 인코딩 버퍼의 수정된 이전 인코딩 데이터, 그리고 트랜스코딩 룰에 응답하여 출력 스트림을 생성한다. Statement 67. An embodiment of the present invention includes a storage device according to statement 65, wherein the rule evaluator includes, without decoding the input encoded data, the modified current encoding data of the current encoding buffer, the modified previous encoding data of the previous encoding buffer, and Generate an output stream in response to the transcoding rules.

진술 68. 본 발명의 실시 예는 진술 64에 따른 스토리지 장치를 포함하며, Statement 68. An embodiment of the present invention includes a storage device according to statement 64,

입력 인코딩 데이터는 제 1 인코딩 방식을 사용하고;The input encoded data uses a first encoding scheme;

출력 인코딩 데이터는 제 2 인코딩 방식을 사용하고; 그리고The output encoded data uses a second encoding scheme; And

제 2 인코딩 방식은 제 1 인코딩 방식과 상이하다.The second encoding method is different from the first encoding method.

진술 69. 본 발명의 실시 예는 진술 58에 따른 스토리지 장치를 포함하며, 입력 인코딩 데이터는 스토리지에 칼럼 포맷으로 저장된다.Statement 69. An embodiment of the present invention includes a storage device according to statement 58, and the input encoded data is stored in the storage in a column format.

진술 70. 본 발명의 실시 예는 진술 69에 따른 스토리지 장치를 포함하고, 입력 인코딩 데이터는 아파치 파케이(Apache Parquet) 스토리지 포맷을 사용하여 저장된 입력 파일을 포함한다.Statement 70. An embodiment of the present invention includes a storage device according to statement 69, and the input encoded data includes an input file stored using the Apache Parquet storage format.

진술 71. 본 발명의 실시 예는 진술 69에 따른 스토리지 장치를 포함하고, 입력 인코딩 데이터를 포함하는 칼럼 청크를 처리하고 입력 인코딩 데이터를 트랜스코더에 전달하기 위한 칼럼 청크 프로세서를 더 포함한다.Statement 71. An embodiment of the present invention includes the storage device according to statement 69, and further comprises a column chunk processor for processing a column chunk including input encoded data and transferring the input encoded data to a transcoder.

진술 72. 본 발명의 실시 예는 진술 71에 따른 스토리지 장치를 포함하고, 여기서 칼럼 청크 프로세서는 트랜스코더를 포함한다.Statement 72. An embodiment of the present invention comprises a storage device according to statement 71, wherein the column chunk processor comprises a transcoder.

진술 73. 본 발명의 실시 예는 진술 71에 따른 스토리지 장치를 포함하고, 여기서 칼럼 청크 프로세서는 프로세서, FPGA (Field Programmable Gate Array), ASIC (Application-Specific Integrated Circuit), GPU(Graphics Processing Unit) 또는 범용 GPU(GPGPU) 중 적어도 하나를 포함한다.Statement 73. An embodiment of the present invention includes the storage device according to statement 71, wherein the column chunk processor is a processor, a Field Programmable Gate Array (FPGA), an Application-Specific Integrated Circuit (ASIC), a Graphics Processing Unit (GPU), or It includes at least one of a general purpose GPU (GPGPU).

진술 74. 본 발명의 실시 예는 진술 58에 따른 스토리지 장치를 포함하고, 트랜스코더는 출력 인코딩 데이터를 생성하기 위해 속성에 적어도 부분적으로 기초하여 입력 인코딩 데이터에 적용할 트랜스코딩 룰을 생성하도록 동작한다.Statement 74. An embodiment of the present invention includes the storage device according to statement 58, wherein the transcoder is operative to generate a transcoding rule to be applied to the input encoded data based at least in part on the attribute to generate the output encoded data. .

진술 75. 본 발명의 실시 예는 진술 74에 따른 스토리지 장치를 포함하고, 트랜스코더는 입력 인코딩 데이터를 디코딩하지 않고 출력 인코딩 데이터를 생성하도록 동작한다.Statement 75. An embodiment of the invention includes a storage device according to statement 74, wherein the transcoder is operative to generate output encoded data without decoding the input encoded data.

진술 76. 본 발명의 실시 예는 다음을 포함하는 방법을 포함한다:Statement 76. An embodiment of the present invention includes a method including:

트랜스코더에서 입력 인코딩 데이터에 적용할 속성을 수신하는 단계; Receiving an attribute to be applied to the input encoded data in the transcoder;

입력 인코딩 데이터에 대한 입력 사전에 액세스하는 단계;Accessing an input dictionary for input encoded data;

속성에 의해 커버되는 입력 사전에서 적어도 하나의 제 1 항목 및 속성에 의해 커버되지 않은 입력 사전에서 적어도 하나의 제 2 항목을 식별하는 단계;Identifying at least one first item in the input dictionary covered by the attribute and at least one second item in the input dictionary not covered by the attribute;

속성에 의해 커버되지 않는 사전에서 적어도 하나의 제 2 항목을 배제하는 출력 사전을 생성하는 단계로서, 트랜스코딩 사전은 적어도 제 3 항목 및 "무정의" 항목을 포함하는 단계; 그리고Generating an output dictionary that excludes at least one second item from a dictionary that is not covered by the attribute, the transcoding dictionary comprising at least a third item and a “undefined” item; And

입력 사전의 적어도 하나의 제 1 항목을 출력 사전의 적어도 하나의 제 3 항목에 매핑하고 속성에 의해 커버되지 않은 입력 사전의 적어도 하나의 제 2 항목을 매핑하는 트랜스코더에 의해 출력 사전의 "무정의(don't care)" 항목에 맵핑하는 단계를 포함한다. "Undefined" of the output dictionary by a transcoder that maps at least one first item of the input dictionary to at least one third item of the output dictionary and maps at least one second item of the input dictionary not covered by the attribute (don't care)".

진술 77. 본 발명의 실시 예는 진술 76에 따른 방법을 포함하며, 여기서 입력 인코딩 데이터는 칼럼 포맷으로 저장된다.Statement 77. An embodiment of the present invention includes a method according to statement 76, wherein the input encoded data is stored in a column format.

진술 78. 본 발명의 실시 예는 진술 77에 따른 방법을 포함하고, 여기서 입력 인코딩 데이터는 아파치 파케이(Apache Parquet) 스토리지 포맷을 사용하여 저장된 입력 파일을 포함한다.Statement 78. An embodiment of the present invention comprises a method according to statement 77, wherein the input encoded data comprises an input file stored using the Apache Parquet storage format.

진술 79. 본 발명의 실시 예는 진술 76에 따른 방법을 포함하고, 여기서 입력 인코딩 데이터는 칼럼 포맷으로 저장된 칼럼 청크를 포함한다.Statement 79. An embodiment of the present invention includes a method according to statement 76, wherein the input encoded data includes column chunks stored in a column format.

진술 80. 본 발명의 실시 예는 진술 76에 따른 방법을 포함하며, 상기 방법은:Statement 80. An embodiment of the invention includes a method according to statement 76, the method comprising:

사전 맵을 사용하여 입력 인코딩 데이터를 출력 인코딩 데이터로 트랜스코딩하는 단계; 그리고Transcoding the input encoded data into output encoded data using a dictionary map; And

출력 인코딩 데이터를 출력하는 단계를 포함한다.And outputting the output encoded data.

진술 81. 본 발명의 실시 예는 진술 80에 따른 방법을 포함하며, 사전 맵을 사용하여 입력 인코딩 데이터를 출력 인코딩 데이터로 트랜스코딩하는 단계는:Statement 81. An embodiment of the present invention includes a method according to statement 80, wherein transcoding input encoded data into output encoded data using a dictionary map comprises:

트랜스코더에서 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계;Receiving at the transcoder a first data chunk from the input encoded data;

제 1 데이터 청크가 속성에 의해 커버되는 것으로 결정하는 단계;Determining that the first data chunk is covered by the attribute;

사전 맵을 사용하여 호스트 컴퓨터의 관심이 있는 제 1 데이터 청크에 적어도 부분적으로 기초하여 제 1 데이터 청크로부터 제 1 인코딩 데이터를 생성하는 단계;Generating first encoded data from the first data chunk based at least in part on the first data chunk of interest in the host computer using the dictionary map;

트랜스코더에서, 스토리지 장치로부터의 입력 인코딩 데이터로부터 제 2 데이터 청크를 수신하는 단계;At the transcoder, receiving a second data chunk from input encoded data from a storage device;

상기 제 2 데이터 청크가 상기 속성에 의해 커버되지 않는 것을 결정하는 단계;Determining that the second data chunk is not covered by the attribute;

사전 맵을 사용하여 호스트 컴퓨터에 관심이 없는 제 2 데이터 청크에 적어도 부분적으로 기초하여 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계; 그리고Generating second encoded data from the second data chunk based at least in part on the second data chunk not of interest to the host computer using the dictionary map; And

제 1 인코딩 데이터 및 제 2 인코딩 데이터를 출력하는 단계를 포함한다.And outputting the first encoded data and the second encoded data.

진술 82. 본 발명의 실시 예는 진술 81에 따른 방법을 포함하며, 트랜스코더에서 입력 인코딩 데이터로부터의 제 1 데이터 청크를 수신하는 단계는:Statement 82. An embodiment of the invention includes a method according to statement 81, wherein receiving a first data chunk from the input encoded data in a transcoder comprises:

칼럼 청크 프로세서에서, 인스토리지 컴퓨터(ISC) 컨트롤러로부터 블록 식별자(ID)의 리스트를 수신하는 단계;Receiving, at the column chunk processor, a list of block identifiers (IDs) from an instorage computer (ISC) controller;

칼럼 청크 프로세서에 의해, 블록 ID 리스트에서 블록 ID를 포함하는 칼럼 청크에 액세스하는 단계;Accessing, by the column chunk processor, a column chunk including a block ID in the block ID list;

칼럼 청크 프로세서로부터의 칼럼 청크로부터 입력 인코딩 데이터를 검색하는 단계; 그리고Retrieving input encoded data from the column chunks from the column chunk processor; And

칼럼 청크 프로세서로부의 입력 인코딩 데이터를 트랜스코더로 전달하는 단계를 포함한다. And transferring the input encoded data from the column chunk processor to the transcoder.

진술 83. 본 발명의 실시 예는 진술 81에 따른 방법을 포함하며, 적어도 부분적으로 기초하여 입력 인코딩 데이터에 적용하기 위한 트랜스코딩 룰을 생성하는 단계를 더 포함한다. Statement 83. An embodiment of the present invention includes a method according to statement 81, further comprising generating a transcoding rule for application to the input encoded data based at least in part.

진술 84. 본 발명의 실시 예는 진술 80에 따른 방법을 포함하고, 사전 맵을 사용하여 입력 인코딩 데이터를 출력 인코딩 데이터로 트랜스코딩하는 단계는, 입력 인코딩 데이터를 디코딩하지 않고, 사전 맵을 사용하여 입력 인코딩 데이터를 출력 인코딩 데이터로 트랜스코딩하는 단계를 포함한다. Statement 84. An embodiment of the present invention comprises a method according to statement 80, wherein the transcoding of input encoded data into output encoded data using a dictionary map comprises: without decoding the input encoded data, using a dictionary map Transcoding the input encoded data into the output encoded data.

진술 85. 본 발명의 실시 예는 진술 80에 따른 방법을 포함하며, Statement 85. An embodiment of the present invention includes a method according to statement 80,

입력 인코딩 데이터는 제 1 인코딩 방식을 사용하고;The input encoded data uses a first encoding scheme;

출력 인코딩 데이터는 제 2 인코딩 방식을 사용하고; 그리고The output encoded data uses a second encoding scheme; And

제 2 인코딩 방식은 제 1 인코딩 방식과 상이하다.The second encoding method is different from the first encoding method.

진술 86. 본 발명의 실시 예는 진술 80에 따른 방법을 포함하며, 출력 인코딩 데이터를 출력하는 단계는 출력 인코딩 데이터를 ISC 컨트롤러에 출력하는 단계를 포함한다.Statement 86. An embodiment of the present invention includes a method according to statement 80, wherein outputting the output encoded data comprises outputting the output encoded data to an ISC controller.

진술 87. 본 발명의 실시 예는 진술 86에 따른 방법을 포함하며, 출력 인코딩 데이터를 ISC 컨트롤러에 출력하는 단계는 출력 사전을 ISC 컨트롤러에 출력하는 단계를 더 포함한다.Statement 87. An embodiment of the present invention includes a method according to statement 86, wherein outputting the output encoded data to the ISC controller further comprises outputting the output dictionary to the ISC controller.

진술 88. 본 발명의 실시 예는 진술 87에 따른 방법을 포함하며, ISC 컨트롤러로부터 호스트 컴퓨터로 출력 인코딩 데이터 및 출력 사전을 전달하는 단계를 더 포함한다. Statement 88. An embodiment of the invention includes a method according to statement 87, further comprising passing the output encoded data and output dictionary from the ISC controller to the host computer.

진술 89. 본 발명의 실시 예는 진술 87에 따른 방법을 포함하고, 가속된 데이터를 생성하기 위해 ISC 컨트롤러에 의해 출력 인코딩 데이터에 대해 가속 기능을 수행하는 단계를 더 포함한다.Statement 89. An embodiment of the invention includes a method according to statement 87, further comprising performing an acceleration function on the output encoded data by the ISC controller to generate accelerated data.

진술 90. 본 발명의 실시 예는 진술 89에 따른 방법을 포함하고, ISC 컨트롤러로부터 호스트 컴퓨터로 가속된 데이터를 출력하는 단계를 더 포함한다. Statement 90. An embodiment of the invention includes a method according to statement 89, further comprising outputting accelerated data from the ISC controller to the host computer.

진술 91. 본 발명의 실시 예는 진술 76에 따른 방법을 포함하며, 출력 사전을 출력하는 단계를 더 포함한다.Statement 91. An embodiment of the invention includes a method according to statement 76, further comprising the step of outputting an output dictionary.

진술 92. 본 발명의 실시 예는 진술 76에 따른 방법을 포함하며, 입력 인코딩 데이터에 적용하기 위해 속성을 수신하는 단계는, ISC 컨트롤러로부터 입력 인코딩 데이터에 적용하기 위해 속성을 수신하는 단계를 포함한다.Statement 92. An embodiment of the present invention includes a method according to statement 76, wherein receiving an attribute for application to the input encoded data comprises receiving the attribute for application to the input encoded data from an ISC controller. .

진술 93. 본 발명의 실시 예는 진술 92에 따른 방법을 포함하며, ISC 컨트롤러로부터 입력 사전을 수신하는 단계를 더 포함한다.Statement 93. An embodiment of the present invention includes a method according to statement 92, further comprising receiving an input dictionary from an ISC controller.

진술 94. 본 발명의 실시 예는 진술 76에 따른 방법을 포함하며, 방법은:Statement 94. An embodiment of the invention includes a method according to statement 76, the method comprising:

입력 사전에 속성에 의해 커버되지 않은 항목이 없는 것으로 결정하는 단계; 그리고Determining that there are no items not covered by the attribute in the input dictionary; And

입력 인코딩 데이터를 출력 인코딩 데이터로 트랜스코딩하지 않고 입력 인코딩 데이터를 출력하는 단계를 포함한다.And outputting the input encoded data without transcoding the input encoded data into the output encoded data.

진술 95. 본 발명의 실시 예는 비일시적 스토리지 매체를 포함하는 물품을 포함하고, 비일시적 스토리지 매체는 머신에 의해 실행될 때 다음을 야기하는 명령을 저장한다:Statement 95. An embodiment of the invention includes an article comprising a non-transitory storage medium, the non-transitory storage medium storing instructions that, when executed by a machine, cause:

트랜스코더에서 입력 인코딩 데이터에 적용할 속성을 수신하는 단계; Receiving an attribute to be applied to the input encoded data in the transcoder;

입력 인코딩 데이터에 대한 입력 사전에 액세스하는 단계;Accessing an input dictionary for input encoded data;

속성에 의해 커버되는 입력 사전에서 적어도 하나의 제 1 항목 및 속성에 의해 커버되지 않은 입력 사전에서 적어도 하나의 제 2 항목을 식별하는 단계;Identifying at least one first item in the input dictionary covered by the attribute and at least one second item in the input dictionary not covered by the attribute;

속성에 의해 커버되지 않는 입력 사전에서 적어도 하나의 제 2 항목을 배제하는 출력 사전을 생성하는 단계로서, 트랜스코딩 사전은 적어도 제 3 항목 및 "무정의(don't care)" 항목을 포함하고; 그리고Generating an output dictionary that excludes at least one second item from an input dictionary not covered by the attribute, the transcoding dictionary comprising at least a third item and a “don't care” item; And

트랜스코더에 의해, 입력 사전의 적어도 하나의 제 1 항목을 출력 사전의 적어도 하나의 제 3 항목에 매핑하고, 속성에 의해 커버되지 않은 입력 사전의 적어도 하나의 제 2 항목을 출력 사전의 "무정의(don't care)" 항목에 매핑하는 단계를 포함한다. By the transcoder, at least one first item of the input dictionary is mapped to at least one third item of the output dictionary, and at least one second item of the input dictionary not covered by the attribute is “undefined” in the output dictionary. (don't care)".

진술 96. 본 발명의 실시 예는 진술 95에 따른 상품을 포함하며, 여기서 입력 인코딩 데이터는 칼럼 포맷으로 저장된다.Statement 96. An embodiment of the present invention includes a product according to statement 95, wherein the input encoded data is stored in a column format.

진술 97. 본 발명의 실시 예는 진술 96에 따른 상품을 포함하고, 여기서 입력 인코딩 데이터는 아파치 파케이(Apache Parquet) 스토리지 포맷을 사용하여 저장된 입력 파일을 포함한다.Statement 97. An embodiment of the present invention comprises a product according to statement 96, wherein the input encoded data comprises an input file stored using the Apache Parquet storage format.

진술 98. 본 발명의 실시 예는 진술 95에 따른 상품을 포함하고, 여기서 입력 인코딩 데이터는 칼럼 포맷으로 저장된 칼럼 청크를 포함한다.Statement 98. An embodiment of the present invention includes a product according to statement 95, wherein the input encoded data includes column chunks stored in a column format.

진술 99. 본 발명의 실시 예는 진술 95에 따른 상품을 포함하며, 비일시적 스토리지 매체는 머신에 의해 실행될 때 다음을 야기하는 추가 명령을 저장한다:Statement 99. An embodiment of the invention includes a product according to statement 95, and the non-transitory storage medium stores additional instructions that, when executed by the machine, cause:

사전 맵을 사용하여 입력 인코딩 데이터를 출력 인코딩 데이터로 트랜스코딩하는 단계; 그리고Transcoding the input encoded data into output encoded data using a dictionary map; And

출력 인코딩 데이터를 출력하는 단계를 포함한다.And outputting the output encoded data.

진술 100. 본 발명의 실시 예는 진술 99에 따른 상품을 포함하며, 사전 맵을 사용하여 입력 인코딩 데이터를 출력 인코딩 데이터로 트랜스코딩하는 단계는:Statement 100. An embodiment of the present invention includes a product according to statement 99, wherein the steps of transcoding input encoded data into output encoded data using a dictionary map include:

트랜스코더에서 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계;Receiving at the transcoder a first data chunk from the input encoded data;

제 1 데이터 청크가 속성에 의해 커버되는 것으로 결정하는 단계;Determining that the first data chunk is covered by the attribute;

사전 맵을 사용하여 호스트 컴퓨터의 관심이 있는 제 1 데이터 청크에 적어도 부분적으로 기초하여 제 1 데이터 청크로부터 제 1 인코딩 데이터를 생성하는 단계;Generating first encoded data from the first data chunk based at least in part on the first data chunk of interest in the host computer using the dictionary map;

트랜스코더에서 스토리지 장치로부터의 입력 인코딩 데이터로부터 제 2 데이터 청크를 수신하는 단계;Receiving a second data chunk from the input encoded data from the storage device at the transcoder;

제 2 데이터 청크가 속성에 의해 커버되지 않는 것을 결정하는 단계;Determining that the second data chunk is not covered by the attribute;

사전 맵을 사용하여 호스트 컴퓨터의 관심이 없는 제 2 데이터 청크에 적어도 부분적으로 기초하여 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계; 그리고Generating second encoded data from the second data chunk based at least in part on the second data chunk of no interest of the host computer using the prior map; And

제 1 인코딩 데이터 및 제 2 인코딩 데이터를 출력하는 단계를 포함한다.And outputting the first encoded data and the second encoded data.

진술 101. 본 발명의 실시 예는 잔술 100에 따른 상품을 포함하며, 트랜스코더에서 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계는:Statement 101. An embodiment of the present invention includes a commodity according to residual 100, and receiving a first data chunk from the input encoded data in a transcoder comprises:

칼럼 청크 프로세서에서, 인스토리지 컴퓨터(ISC) 컨트롤러로부터 블록 식별자(ID)의 리스트를 수신하는 단계;Receiving, at the column chunk processor, a list of block identifiers (IDs) from an instorage computer (ISC) controller;

칼럼 청크 프로세서에 의해, 블록 식별자(ID) 리스트에서 블록 식별자(ID)를 포함하는 칼럼 청크에 액세스하는 단계;Accessing, by a column chunk processor, a column chunk including a block identifier (ID) in a block identifier (ID) list;

칼럼 청크 프로세서에 의해, 칼럼 청크로부터 입력 인코딩 데이터를 검색하는 단계; 그리고Retrieving, by the column chunk processor, input encoded data from the column chunk; And

입력 인코딩 데이터를 칼럼 청크 프로세서로부터 트랜스코더로 전달하는 단계를 포함한다. Passing the input encoded data from the column chunk processor to the transcoder.

진술 102. 본 발명의 실시 예는 진술 100에 따른 상품을 포함하며, 비일시적 스토리지 매체는 머신에 의해 실행될때 속성의 적어도 부분적으로 기초하여 트랜스코딩 룰을 생성하고, 입력 인코딩 데이터에 적용하는 추가의 명령어를 저장한다. Statement 102. An embodiment of the present invention includes a product according to statement 100, wherein the non-transitory storage medium generates a transcoding rule based at least in part on the attributes when executed by the machine, and applies additional data to the input encoded data. Save the command.

진술 103. 본 발명의 실시 예는 진술 99에 따른 상품을 포함하고, 사전 맵을 사용하여 입력 인코딩 데이터를 출력 인코딩 데이터로 트랜스코딩하는 단계는, 입력 인코딩 데이터의 디코딩없이 사전 맵을 사용하여 입력 인코딩 데이터를 출력 인코딩 데이터로 트랜스코딩하는 단계를 포함한다. Statement 103. An embodiment of the present invention includes the product according to statement 99, and the step of transcoding the input encoded data into the output encoded data using a dictionary map comprises: encoding the input using a dictionary map without decoding the input encoded data. Transcoding the data into output encoded data.

진술 104. 본 발명의 실시 예는 진술 99에 따른 상품을 포함하며,Statement 104. An embodiment of the present invention includes a product according to statement 99,

입력 인코딩 데이터는 제 1 인코딩 방식을 사용하고;The input encoded data uses a first encoding scheme;

출력 인코딩 데이터는 제 2 인코딩 방식을 사용하고; 그리고The output encoded data uses a second encoding scheme; And

제 2 인코딩 방식은 제 1 인코딩 방식과 상이하다.The second encoding method is different from the first encoding method.

진술 105. 본 발명의 실시 예는 진술 99에 따른 상품을 포함하며, 출력 인코딩 데이터를 출력하는 단계는 출력 인코딩 데이터를 ISC 컨트롤러에 출력하는 단계를 포함한다.Statement 105. An embodiment of the present invention includes a product according to statement 99, and the step of outputting the output encoded data includes outputting the output encoded data to the ISC controller.

진술 106. 본 발명의 실시 예는 진술 105에 따른 상품을 포함하며, 출력 인코딩 데이터를 ISC 컨트롤러에 출력하는 단계는 출력 사전을 ISC 컨트롤러에 출력하는 단계를 더 포함한다.Statement 106. An embodiment of the present invention includes a product according to statement 105, and outputting the output encoded data to the ISC controller further comprises outputting an output dictionary to the ISC controller.

진술 107. 본 발명의 실시 예는 진술 106에 따른 상품을 포함하며, 비일시적 스토리지 매체는 머신에 의해 실행될 때, 출력 인코딩 데이터 및 출력 사전을 ISC 컨트롤러로부터 호스트 컴퓨터로 전달한다. Statement 107. An embodiment of the present invention includes a product according to statement 106, wherein the non-transitory storage medium, when executed by a machine, transfers output encoded data and output dictionary from the ISC controller to the host computer.

진술 108. 본 발명의 실시 예는 진술 106에 따른 상품을 포함하며, 비일시적 스토리지 매체는 머신에 의해 실행될 때, 가속된 데이터를 생성하기 위해 ISC 컨트롤러에 의해 출력 인코딩 데이터에 대해 가속 기능을 수행하는 추가 명령을 저장한다. Statement 108. An embodiment of the invention includes a product according to statement 106, wherein the non-transitory storage medium, when executed by a machine, performs an acceleration function on the output encoded data by the ISC controller to generate accelerated data. Save additional commands.

진술 109. 본 발명의 실시 예는 진술 108에 따른 상품을 포함하며, 비일시적 스토리지 매체는 머신에 의해 실행될 때, 가속된 데이터를 ISC 컨트롤러로부터 호스트 컴퓨터로 출력하는 추가 명령을 저장한다.Statement 109. An embodiment of the present invention includes a product according to statement 108, wherein the non-transitory storage medium stores additional instructions for outputting accelerated data from the ISC controller to the host computer when executed by the machine.

진술 110. 본 발명의 실시 예는 진술 95에 따른 상품을 포함하고, 비일시적 스토리지 매체는 머신에 의해 실행될 때 출력 사전을 출력하는 추가 명령을 저장한다.Statement 110. An embodiment of the invention includes a product according to statement 95, and the non-transitory storage medium stores an additional instruction that outputs an output dictionary when executed by the machine.

진술 111. 본 발명의 실시 예는 진술 95에 따른 상품을 포함하고, 입력 인코딩 데이터에 적용하기 위해 속성을 수신하는 단계는, ISC 컨트롤러로부터 입력 인코딩 데이터에 적용할 속성을 수신하는 단계를 포함한다.Statement 111. An embodiment of the present invention includes a product according to statement 95, and receiving an attribute for application to the input encoded data includes receiving an attribute to be applied to the input encoded data from an ISC controller.

진술 112. 본 발명의 실시 예는 진술 111에 따른 상품을 포함하며, 비일시적 스토리지 매체는 머신에 의해 실행될 때, ISC 컨트롤러로부터 입력 사전을 수신하는 추가 명령을 저장한다.Statement 112. An embodiment of the present invention includes a product according to statement 111, wherein the non-transitory storage medium stores an additional instruction to receive an input dictionary from the ISC controller when executed by the machine.

진술 113. 본 발명의 실시 예는 진술 95에 따른 상품을 포함하며, 비일시적 스토리지 매체는 머신에 의해 실행될 때, 다음을 야기하는 추가 명령을 저장한다:Statement 113. An embodiment of the present invention includes a product according to statement 95, and the non-transitory storage medium stores additional instructions that, when executed by the machine, cause:

입력 사전에서 속성에 의해 커버되지 않는 항목이 없는 것으로 결정하는 단계; 그리고Determining that there are no items not covered by the attribute in the input dictionary; And

입력 인코딩 데이터를 출력 인코딩 데이터로 트랜스코딩하지 않고 입력 인코딩 데이터를 출력하는 단계를 포함한다.And outputting the input encoded data without transcoding the input encoded data into the output encoded data.

결과적으로, 본 명세서에 기술된 실시 예들에 대한 다양한 순열을 고려하여, 이러한 상세한 설명 및 첨부 자료는 단지 예시적인 것으로 의도되며, 본 발명의 개념의 범위를 제한하는 것으로 간주되어서는 안된다. 그러므로, 본 발명의 개념으로서 청구되는 것은 다음의 청구 범위의 범주 및 사상 및 그 등가물 내에 있을 수 있는 모든 변경들이다.Consequently, in view of the various permutations of the embodiments described herein, this detailed description and accompanying material are intended to be illustrative only, and should not be regarded as limiting the scope of the inventive concept. Therefore, what is claimed as a concept of the present invention are all changes that may come within the scope and spirit of the following claims and their equivalents.

Claims (10)

입력 인코딩 데이터를 저장하기 위한 스토리지;
호스트 컴퓨터로부터의 상기 스토리지에 대한 읽기 요청 및 쓰기 요청을 처리하는 컨트롤러;
상기 호스트 컴퓨터로부터 제공되는 상기 스토리지에 저장된 상기 입력 인코딩 데이터에 적용되는 속성을 수신하는 인스토리지 컴퓨터(ISC) 컨트롤러; 그리고
상기 입력 인코딩 데이터의 입력 사전을 출력 사전으로 매핑하기 위한 인덱스 매퍼(Mapper)를 포함하는 트랜스코더를 포함하되,
상기 입력 사전은 적어도 하나의 제 1 엔트리 및 적어도 하나의 제 2 엔트리를 포함하고, 상기 적어도 하나의 제 1 엔트리는 상기 출력 사전의 적어도 하나의 제 3 엔트리에 매핑되며, 상기 적어도 하나의 제 2 엔트리는 상기 출력 사전의 “무정의(don't care)”엔트리에 매핑되는 스토리지 장치.
Storage for storing input encoded data;
A controller that processes a read request and a write request for the storage from a host computer;
An instance computer (ISC) controller configured to receive an attribute applied to the input encoded data stored in the storage provided from the host computer; And
Including a transcoder including an index mapper (Mapper) for mapping the input dictionary of the input encoded data to an output dictionary,
The input dictionary includes at least one first entry and at least one second entry, the at least one first entry is mapped to at least one third entry of the output dictionary, and the at least one second entry Is mapped to a "don't care" entry in the output dictionary.
제 1 항에 있어서,
상기 트랜스코더는 프로세서, FPGA(Field Programmable Gate Array), ASIC(Application-Specific Integrated Circuit), GPU(Graphics Processing Unit) 그리고 범용 GPU(GPGPU) 중 적어도 하나를 포함하는 스토리지 장치.
The method of claim 1,
The transcoder is a storage device including at least one of a processor, a field programmable gate array (FPGA), an application-specific integrated circuit (ASIC), a graphics processing unit (GPU), and a general-purpose GPU (GPGPU).
제 1 항에 있어서,
상기 인스토리지 컴퓨터(ISC) 컨트롤러는 상기 트랜스코더로부터의 출력 인코딩 데이터에 가속 기능을 적용하도록 동작하는 스토리지 장치.
The method of claim 1,
The storage device of the Instorage Computer (ISC) controller operative to apply an acceleration function to the output encoded data from the transcoder.
제 1 항에 있어서,
상기 트랜스코더는 상기 입력 인코딩 데이터 및 상기 입력 사전으로부터 상기 출력 사전으로의 상기 맵에 적어도 부분적으로 기초하여 출력 인코딩 데이터를 생성하도록 동작하는 스토리지 장치.
The method of claim 1,
The transcoder is operative to generate output encoded data based at least in part on the input encoded data and the map from the input dictionary to the output dictionary.
제 4 항에 있어서,
상기 트랜스코더는:
상기 입력 인코딩 데이터를 저장하는 버퍼;
인덱스 매퍼;
수정된 현재 인코딩 데이터를 저장하는 현재 인코딩 버퍼;
수정된 이전 인코딩 데이터를 저장하는 이전 인코딩 버퍼; 그리고
상기 현재 인코딩 버퍼에 저장된 상기 수정된 현재 인코딩 데이터, 상기 이전 인코딩 버퍼에 저장된 상기 수정된 이전 인코딩 데이터, 그리고 트랜스코딩 룰들에 응답하여 출력 스트림을 생성하는 룰 평가기를 포함하되,
상기 수정된 현재 인코딩 데이터는 상기 입력 인코딩 데이터 및 상기 입력 사전으로부터 상기 출력 사전으로의 상기 맵에 응답하여 생성되며,
상기 수정된 이전 인코딩 데이터는 이전 입력 인코딩 데이터 및 상기 입력 사전으로부터 상기 출력 사전으로의 상기 맵에 응답하여 생성되는 스토리지 장치.
The method of claim 4,
The transcoder is:
A buffer for storing the input encoded data;
Index mapper;
A current encoding buffer for storing the modified current encoding data;
A previous encoding buffer for storing the modified previous encoded data; And
A rule evaluator generating an output stream in response to the modified current encoding data stored in the current encoding buffer, the modified previous encoding data stored in the previous encoding buffer, and transcoding rules,
The modified current encoding data is generated in response to the input encoding data and the map from the input dictionary to the output dictionary,
The modified previous encoded data is generated in response to previous input encoded data and the map from the input dictionary to the output dictionary.
제 5 항에 있어서,
상기 트랜스코딩 룰은 상기 속성에 적어도 부분적으로 기초하는 스토리지 장치.
The method of claim 5,
The transcoding rule is based at least in part on the attribute.
제 1 항에 있어서,
상기 입력 인코딩 데이터는 상기 스토리지에 칼럼 포맷으로 저장되는 스토리지 장치.
The method of claim 1,
The input encoded data is stored in the storage in a column format.
제 7 항에 있어서,
상기 입력 인코딩 데이터를 포함하는 칼럼 청크를 처리하고, 상기 입력 인코딩 데이터를 상기 트랜스코더로 전달하는 칼럼 청크 프로세서를 더 포함하는 스토리지 장치.
The method of claim 7,
The storage device further comprises a column chunk processor that processes the column chunk including the input encoded data and transfers the input encoded data to the transcoder.
트랜스코더에서, 입력 인코딩 데이터에 적용할 속성을 수신하는 단계;
상기 입력 인코딩 데이터에 대한 입력 사전에 액세스하는 단계;
상기 입력 사전에서 상기 속성에 의해 커버되는 적어도 하나의 제 1 엔트리와, 상기 입력 사전에서 상기 속성에 의해 커버되지 않은 적어도 하나의 제 2 엔트리를 식별하는 단계;
상기 입력 사전에서 상기 속성에 의해 커버되지 않는 상기 적어도 하나의 제 2 엔트리를 배제하는 출력 사전과, 적어도 하나의 제 3 엔트리 및 “무정의” 엔트리를 포함하는 트랜스코딩 사전을 생성하는 단계; 그리고
상기 트랜스코더에 의해, 상기 입력 사전의 상기 적어도 하나의 제 1 엔트리를 상기 출력 사전의 상기 적어도 하나의 제 3 엔트리에 매핑하고, 상기 입력 사전에서 상기 속성에 의해 커버되지 않는 상기 적어도 하나의 제 2 엔트리를 상기 출력 사전의 “무정의” 엔트리에 맵핑하는 사전 맵을 생성하는 단계를 포함하는 방법.
Receiving, at the transcoder, an attribute to be applied to the input encoded data;
Accessing an input dictionary for the input encoded data;
Identifying at least one first entry in the input dictionary covered by the attribute and at least one second entry in the input dictionary not covered by the attribute;
Generating a transcoding dictionary including an output dictionary excluding the at least one second entry not covered by the attribute from the input dictionary, at least one third entry, and a “undefined” entry; And
By the transcoder, mapping the at least one first entry of the input dictionary to the at least one third entry of the output dictionary, and the at least one second not covered by the attribute in the input dictionary Generating a dictionary map that maps an entry to a “undefined” entry in the output dictionary.
명령어들을 저장하는 비일시적 스토리지 매체를 포함하는 상품에 있어서, 상기 명령어들이 머신에 의해 실행될 때:
트랜스코더에서, 입력 인코딩 데이터에 적용하기 위한 속성을 수신하는 단계;
상기 입력 인코딩 데이터가 저장된 입력 사전을 액세스하는 단계;
상기 입력 사전에서 상기 속성에 의해 커버되는 적어도 하나의 제 1 엔트리와, 상기 입력 사전에서 상기 속성에 의해 커버되지 않은 적어도 하나의 제 2 엔트리를 식별하는 단계;
상기 입력 사전에서 상기 속성에 의해 커버되지 않는 상기 적어도 하나의 제 2 엔트리를 배제하는 출력 사전과, 적어도 하나의 제 3 엔트리 및 “무정의” 엔트리를 포함하는 트랜스코딩 사전을 생성하는 단계; 그리고
상기 트랜스코더에 의해, 상기 입력 사전의 상기 적어도 하나의 제 1 엔트리를 상기 출력 사전의 상기 적어도 하나의 제 3 엔트리에 매핑하고, 상기 입력 사전에서 상기 속성에 의해 커버되지 않는 상기 적어도 하나의 제 2 엔트리를 상기 출력 사전의 “무정의” 엔트리에 맵핑하는 사전 맵을 생성하는 단계를 포함하는 상품.
A product comprising a non-transitory storage medium storing instructions, wherein the instructions are executed by a machine:
At the transcoder, receiving an attribute to apply to the input encoded data;
Accessing an input dictionary in which the input encoded data is stored;
Identifying at least one first entry in the input dictionary covered by the attribute and at least one second entry in the input dictionary not covered by the attribute;
Generating a transcoding dictionary including an output dictionary excluding the at least one second entry not covered by the attribute from the input dictionary, at least one third entry, and a “undefined” entry; And
By the transcoder, mapping the at least one first entry of the input dictionary to the at least one third entry of the output dictionary, and the at least one second not covered by the attribute in the input dictionary Creating a dictionary map that maps an entry to a “undefined” entry in the output dictionary.
KR1020200046258A 2019-04-16 2020-04-16 Using predicates in conditional transcoder for column store KR20200121761A (en)

Applications Claiming Priority (8)

Application Number Priority Date Filing Date Title
US201962834900P 2019-04-16 2019-04-16
US62/834,900 2019-04-16
US201962945883P 2019-12-09 2019-12-09
US201962945877P 2019-12-09 2019-12-09
US62/945,877 2019-12-09
US62/945,883 2019-12-09
US16/820,675 US11184021B2 (en) 2019-03-15 2020-03-16 Using predicates in conditional transcoder for column store
US16/820,675 2020-03-16

Publications (1)

Publication Number Publication Date
KR20200121761A true KR20200121761A (en) 2020-10-26

Family

ID=72913839

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020200046258A KR20200121761A (en) 2019-04-16 2020-04-16 Using predicates in conditional transcoder for column store
KR1020200046249A KR20200121760A (en) 2019-04-16 2020-04-16 Conditional transcoding for encoded data

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020200046249A KR20200121760A (en) 2019-04-16 2020-04-16 Conditional transcoding for encoded data

Country Status (4)

Country Link
JP (1) JP7381393B2 (en)
KR (2) KR20200121761A (en)
CN (1) CN111832257B (en)
TW (1) TWI825305B (en)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115719059B (en) * 2022-11-29 2023-08-08 北京中科智加科技有限公司 Morse grouping error correction method

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6549666B1 (en) * 1994-09-21 2003-04-15 Ricoh Company, Ltd Reversible embedded wavelet system implementation
CA2156889C (en) * 1994-09-30 1999-11-02 Edward L. Schwartz Method and apparatus for encoding and decoding data
US5861827A (en) * 1996-07-24 1999-01-19 Unisys Corporation Data compression and decompression system with immediate dictionary updating interleaved with string search
EP2487798B1 (en) * 2004-12-07 2016-08-10 Nippon Telegraph And Telephone Corporation Information compression-coding device, its decoding device, method thereof, program thereof and recording medium storing the program
US7102552B1 (en) * 2005-06-07 2006-09-05 Windspring, Inc. Data compression with edit-in-place capability for compressed data
JP4266218B2 (en) * 2005-09-29 2009-05-20 株式会社東芝 Recompression encoding method, apparatus, and program for moving image data
US20080266144A1 (en) * 2007-04-30 2008-10-30 Jen-Te Chen Encoding Method which Encodes Codes in Consideration of Shape
US8090027B2 (en) * 2007-08-29 2012-01-03 Red Hat, Inc. Data compression using an arbitrary-sized dictionary
US7889102B2 (en) * 2009-02-26 2011-02-15 Red Hat, Inc. LZSS with multiple dictionaries and windows
US8159374B2 (en) * 2009-11-30 2012-04-17 Red Hat, Inc. Unicode-compatible dictionary compression
US9385751B2 (en) * 2014-10-07 2016-07-05 Protein Metrics Inc. Enhanced data compression for sparse multidimensional ordered series data
EP3119003A3 (en) * 2015-07-13 2017-03-01 Fujitsu Limited Encoding computer program, encoding method, encoding apparatus, decoding computer program, decoding method, and decoding apparatus
JP2017028372A (en) * 2015-07-16 2017-02-02 沖電気工業株式会社 Coding scheme conversion device, method and program
CN108197087B (en) * 2018-01-18 2021-11-16 奇安信科技集团股份有限公司 Character code recognition method and device

Also Published As

Publication number Publication date
CN111832257A (en) 2020-10-27
JP7381393B2 (en) 2023-11-15
KR20200121760A (en) 2020-10-26
TWI825305B (en) 2023-12-11
TW202107856A (en) 2021-02-16
CN111832257B (en) 2023-02-28
JP2020178347A (en) 2020-10-29

Similar Documents

Publication Publication Date Title
US11139827B2 (en) Conditional transcoding for encoded data
US8898337B2 (en) Real-time multi-block lossless recompression
US9390099B1 (en) Method and apparatus for improving a compression ratio of multiple documents by using templates
US5870036A (en) Adaptive multiple dictionary data compression
US10187081B1 (en) Dictionary preload for data compression
CN107682016B (en) Data compression method, data decompression method and related system
US8407378B2 (en) High-speed inline data compression inline with an eight byte data path
US9479194B2 (en) Data compression apparatus and data decompression apparatus
US20150113220A1 (en) Efficient one-pass cache-aware compression
CN104579356A (en) Method and system for boosting decompression in the presence of reoccurring Huffman trees
JPH07261977A (en) Method and device for compressing data and method and device for restoring data
KR20200121761A (en) Using predicates in conditional transcoder for column store
KR20240078422A (en) Conditional transcoding for encoded data
TW202311996A (en) Systems and method for data compressing
JP7305609B2 (en) A device that processes received data
Kella et al. Apcfs: Autonomous and parallel compressed file system
Mohamed Wireless Communication Systems: Compression and Decompression Algorithms
Mubi et al. Performance Evaluation of Forward Difference Scheme on Huffman Algorithm to Compress and Decompress Data
Rajendra 16 BIT UNICODE TEXT COMPRESSION