KR20240078422A - Conditional transcoding for encoded data - Google Patents

Conditional transcoding for encoded data Download PDF

Info

Publication number
KR20240078422A
KR20240078422A KR1020240065311A KR20240065311A KR20240078422A KR 20240078422 A KR20240078422 A KR 20240078422A KR 1020240065311 A KR1020240065311 A KR 1020240065311A KR 20240065311 A KR20240065311 A KR 20240065311A KR 20240078422 A KR20240078422 A KR 20240078422A
Authority
KR
South Korea
Prior art keywords
data
encoding
dictionary
input
chunk
Prior art date
Application number
KR1020240065311A
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,665 external-priority patent/US11139827B2/en
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20240078422A publication Critical patent/KR20240078422A/en

Links

Images

Classifications

    • 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
    • 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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement

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

트랜스코더가 개시된다. 트랜스코더는 입력 인코딩 데이터를 저장하기 위한 버퍼를 포함할 수 있다. 인덱스 매퍼는 입력 사전을 출력 사전에 매핑할 수 있다. 현재 인코딩 버퍼는 입력 인코딩 데이터, 입력 사전 및 입력 사전으로부터 출력 사전으로의 맵에 응답할 수 있는 수정된 현재 인코딩 데이터를 저장할 수 있다. 이전 인코딩 버퍼는 입력 인코딩 데이터, 입력 사전, 그리고 입력 사전으로부터 출력 사전으로의 맵에 응답할 수 있는 수정된 이전 인코딩 데이터를 저장할 수 있다. 룰 평가기는 현재 인코딩 버퍼에서 수정된 현재 인코딩 데이터, 이전 인코딩 버퍼에서 수정된 이전 인코딩 데이터 및 트랜스코딩 룰에 응답하여 출력 스트림을 생성할 수 있다.The transcoder is started. The transcoder may include a buffer to store input encoded data. The index mapper can map an input dictionary to an output dictionary. The current encoding buffer may store input encoding data, an input dictionary, and modified current encoding data that may be responsive to a map from the input dictionary to the output dictionary. The previous encoding buffer may store input encoding data, an input dictionary, and modified previous encoding data that may respond to a map from the input dictionary to the output dictionary. The rule evaluator may generate an output stream in response to current encoding data modified in the current encoding buffer, previous encoding data modified in the previous encoding buffer, and transcoding rules.

Description

인코딩된 데이터에 대한 조건부 트랜스코딩{CONDITIONAL TRANSCODING FOR ENCODED DATA}Conditional transcoding for encoded data {CONDITIONAL TRANSCODING FOR ENCODED DATA}

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

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

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

본 발명의 실시 예에 따른 트랜스코더는, 입력 인코딩 데이터를 저장하기 위한 버퍼, 입력 사전과 출력 사전을 맵핑하기 위한 인덱스 매퍼, 상기 입력 인코딩 데이터, 상기 입력 사전 그리고 상기 입력 사전과 상기 출력 사전 간의 맵에 응답하여 수정된 현재 인코딩 데이터를 저장하는 현재 인코딩 버퍼, 이전 입력 인코딩 데이터, 상기 입력 사전, 그리고 상기 맵에 응답하여 생성되는 수정된 이전 인코딩 데이터를 저장하는 이전 인코딩 버퍼, 그리고 상기 현재 인코딩 버퍼에 저장된 상기 수정된 현재 인코딩 데이터, 상기 이전 인코딩 버퍼에 저장된 상기 수정된 이전 인코딩 데이터, 그리고 트랜스코딩 룰에 응답하여 출력 스트림을 생성하는 룰 평가기를 포함한다. A transcoder according to an embodiment of the present invention includes a buffer for storing input encoding data, an index mapper for mapping an input dictionary and an output dictionary, a map between the input encoding data, the input dictionary, and the input dictionary and the output dictionary. a current encoding buffer storing current encoding data modified in response to, previous input encoding data, the input dictionary, and a previous encoding buffer storing modified previous encoding data generated in response to the map, and in the current encoding buffer and a rule evaluator that generates an output stream in response to the stored modified current encoding data, the modified previous encoding data stored in the previous encoding buffer, and a transcoding rule.

본 발명의 실시 예에 따른 방법은, 트랜스코더에서, 스토리지 장치로부터의 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계, 상기 제 1 데이터 청크가 호스트 컴퓨터의 관심 대상인지 결정하는 단계, 상기 호스트 컴퓨터의 관심 대상인 상기 제 1 데이터 청크에 적어도 부분적으로 기초하여 상기 제 1 데이터 청크로부터 제 1 인코딩 데이터를 생성하는 단계, 상기 트랜스코더에서, 상기 스토리지 장치로부터의 상기 입력 인코딩 데이터로부터 제 2 데이터 청크를 수신하는 단계, 상기 제 2 데이터 청크가 상기 호스트 컴퓨터의 관심 대상이 아닌지를 결정하는 단계, 상기 호스트 컴퓨터의 관심 대상이 아닌 상기 제 2 데이터 청크에 적어도 부분적으로 기초하여 상기 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계, 그리고 상기 제 1 인코딩 데이터 및 제 2 인코딩 데이터를 상기 호스트 컴퓨터에 출력하는 단계를 포함한다.A method according to an embodiment of the invention includes, at a transcoder, receiving a first data chunk from input encoded data from a storage device, determining whether the first data chunk is of interest to a host computer, the host computer generating a first encoded data from the first data chunk based at least in part on the first data chunk of interest, receiving, at the transcoder, a second data chunk from the input encoded data from the storage device. determining whether the second data chunk is not of interest to the host computer, performing a second encoding from the second data chunk based at least in part on the second data chunk that is not of interest to the host computer. Generating data and outputting the first encoded data and the second encoded data to the host computer.

본 발명의 실시 예에 따른 명령어들을 저장하는 비일시적 스토리지 매체를 포함하는 상품은, 머신에 의해서 상기 명령어들이 실행될 때, 트랜스코더에서, 스토리지 장치로부터의 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계, 상기 제 1 데이터 청크가 호스트 컴퓨터의 관심 대상인지 결정하는 단계, 상기 호스트 컴퓨터의 관심 대상인 상기 제 1 데이터 청크에 적어도 부분적으로 기초하여 상기 제 1 데이터 청크로부터 제 1 인코딩 데이터를 생성하는 단계, 상기 트랜스코더에서, 상기 스토리지 장치로부터의 상기 입력 인코딩 데이터로부터 제 2 데이터 청크를 수신하는 단계, 상기 제 2 데이터 청크가 상기 호스트 컴퓨터의 관심 대상이 아닌지를 결정하는 단계, 상기 호스트 컴퓨터의 관심 대상이 아닌 상기 제 2 데이터 청크에 적어도 부분적으로 기초하여 상기 제 2 데이터 청크로부터 제 2 인코딩 데이터를 생성하는 단계, 그리고 상기 제 1 인코딩 데이터 및 제 2 인코딩 데이터를 상기 호스트 컴퓨터에 출력하는 단계를 수행한다.An article comprising a non-transitory storage medium storing instructions according to an embodiment of the present invention includes the steps of: receiving, at a transcoder, a first data chunk from input encoded data from a storage device when the instructions are executed by a machine; , determining whether the first data chunk is of interest to a host computer, 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, In a transcoder, receiving a second data chunk from the input encoded data from the storage device, determining whether the second data chunk is not of interest to the host computer, Generating second encoded data from the second data chunk based at least in part on the second data chunk, and outputting the first encoded data and the second encoded data to the host computer.

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

도 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 shows 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.
Figure 2 shows some additional details of the machine of Figure 1.
Figure 3 shows the storage device of Figure 1 and the processor of Figure 1 exchanging the same data using different approaches.
Figure 4 shows the storage device of Figure 1 and the processor of Figure 1 exchanging transcoded data according to an embodiment of the present invention.
Figure 5 shows details of the storage device of Figure 1 according to an embodiment of the present invention.
Figure 6 shows details of the transcoder of Figure 4 according to an embodiment of the present invention.
Figure 7 shows the stream splitter of Figure 6, which separates input encoded data into chunks according to an embodiment of the present invention.
Figure 8 shows the index mapper of Figure 6, which maps an input dictionary to an output dictionary according to an embodiment of the present invention.
Figure 9 shows an example file saved in column format.
FIG. 10 shows the storage device of FIG. 1 implementing transcoding for data stored in a column format, according to an embodiment of the present invention.
FIG. 11 shows the column chunk processor of FIG. 10 that implements transcoding for data stored in column format according to an embodiment of the present invention.
FIGS. 12A to 12C are flowcharts of exemplary operations of the transcoder of FIGS. 4 to 6 for transcoding data according to an embodiment of the present invention.
FIG. 13 is a flow diagram showing an example procedure for the stream splitter of FIG. 6 to separate input encoded data into chunks.
FIGS. 14A to 14B are flowcharts showing 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.
FIG. 15 is a flowchart showing an example 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.
Figures 16A-16B are flowcharts illustrating example procedures for the in-storage computer controller of Figure 10 for managing attributes received from the host computer of Figure 1 and potentially performing acceleration functions on transcoded data.

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

여기에서 제1, 제2 등과 같은 용어들이 다양한 원소들을 설명하기 위하여 사용되지만, 이러한 원소들은 이러한 용어들에 의해 한정되지 않는다. 이러한 용어들은 하나의 원소를 다른 하나의 원소와 구별하기 위해서만 사용된다. 예를 들어, 본 발명의 기술적 사상의 범위로부터 멀어지지 않으면서 제1 모듈은 제2 모듈로 명명될 수 있다. 마찬가지로, 제2 모듈은 제1 모듈로 명명될 수 있다.Although terms such as first, second, etc. are used herein to describe various elements, these elements are not limited by these terms. These terms are used only to distinguish one element from another. For example, the first module may be named the second module without departing from the scope of the technical idea of the present invention. Likewise, the second module may be named 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 the appended claims, singular expressions are intended to include plural expressions as well, unless clearly indicated from the context. The term “and/or” is intended to include any and all possible combinations of one or more associated items. The terms “comprise” and/or “comprising” when used in the detailed description specify the presence of the recited features, integers, steps, operations, elements, and/or components, and include one or It does not exclude the presence or addition of many other properties, integers, steps, operations, elements, components, and/or groups thereof. The elements and features of the drawings are not necessarily to scale.

예를 들면, 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 bring some processing capabilities closer to an SSD has several advantages. First, the connection between the SSD and the near processor can support higher bandwidth than connecting the SSD with the host processor, allowing for faster data transfer. Second, by eliminating the need for the host processor to process data, the near processor can process the data while the host processor can perform other functions.

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

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

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

본 발명의 일부 실시 예에서, 칼럼 스토리지는 스토리지 공간을 줄이기 위해 데이터 인코딩(예를 들어, RLE(Run Length Encoding)) 그리고/또는 압축 (snappy)을 사용할 수 있다. 압축이 아닌 인코딩은 주요 엔트로피 감소를 제공할 수 있다. 인코딩 후 압축율은 작아지는 경향이 있다(약 2 미만).In some embodiments of the invention, column storage may use data encoding (e.g., Run Length Encoding (RLE)) and/or compression (snappy) to reduce storage space. Encoding rather than compression can provide major entropy reduction. After encoding, the compression ratio 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 an encoding algorithm, the encoded data mat is near-processed without inflating the results (i.e., when 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 bloating 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 in conjunction with embodiments of the present invention. Embodiments of the invention described below will focus on RLE and bit packing, but embodiments of the invention can be extended to include other encoding algorithms.

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

본 발명의 실시 예들은 데이터를 팽창시키지 않고 인코딩 데이터를 필터링 할 수 있게 한다. 필터링된 데이터는 변환 룰들을 사용하여 인코딩 데이터에 내장된 인코딩 정보를 사용하여 재인코딩될 수 있다. 본 발명의 실시 예들에서의 트랜스코더는 인코딩 데이터를 필터링하고 호스트로 전송되는 인코딩을 수정할 수 있다. 따라서, 호스트가 일반(plain) 데이터(압축 알고리즘 그리고/또는 인코딩 데이터의 효율성에 따라 인코딩/압축 데이터에 비해 상당히 클 수 있는)를 처리해야하는 대신에, 호스트는 인코딩 데이터를 수신하고 처리할 수 있다. 호스트와 스토리지 장치 사이의 대역폭은 데이터를 전송하는데 걸리는 시간에 실질적으로 영향을 줄 수 있는 한계를 가질 수 있기 때문에, 인코딩 데이터를 전송하는 것은 일반 데이터(필터링되거나 그렇지 않은)를 전송하는 것에 비해 처리 시간을 절약할 수 있다.Embodiments of the present invention enable filtering of encoded data without inflating the data. 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. Therefore, instead of the host having to process plain data (which can be significantly 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. Because the bandwidth between the host and the storage device can have limitations that can substantially affect the time it takes to transfer data, sending encoded data requires less processing time compared to sending plain data (filtered or unfiltered). You can save.

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

인덱스 매퍼는 출력 스트림과 함께 사용하기 위해 입력된 사전 맵으로부터 축소된 사전 맵으로의 맵핑을 제공할 수 있다.The index mapper can provide a mapping from the input dictionary map to the reduced dictionary map for use with the 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, outputs the previous encoding buffer (and then outputs the previous encoding buffer). replace the buffer), or perform other actions. For example, if the transcoder identifies values that are considered "don't care" values in the current encoding buffer (discussed further below), those values will be replaced with existing "don't care" values in the previous encoding buffer. It can be combined with the value "(don't care)".

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

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

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

인코딩은 부호없는 바이트의 그룹 수와 뒤따르는 하나 이상의 바이트의 묶음 값들 목록을 포함한다. 그룹의 값들의 최대 수는 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 a group number of unsigned bytes followed by a list of group values of one or more bytes. The maximum number of values in a group is 8 and the maximum number of groups can be 63. Therefore, for example, to represent the data '00000000 00000001 00000000 00000001 00000000 00000001 00000000 00000001 (decimal value 01010101)', the group is '00000001 (group 1) (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 use encoding. In every 8-bit group, the most significant bit may indicate whether the current byte is the last byte of the value or whether there is at least one subsequent byte. If 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 displayed as '00000001', the decimal value '2' may be displayed as '00000010', and so on until '01111111 (decimal value 127)'. The decimal value '128' can be displayed as '10000000 00000001', the decimal value '129' can be displayed as '10000000 00000010', etc. Basically, binary values are divided into groups of 7 bits, with each group of 7 bits starting with 1, except for the highest group. For example, the decimal value '16,384' can be displayed as '10000000 10000000 00000001'.

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

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

그러나 수행되는 가속화 연산(예를 들어, 연산은 데이터베이스에 있는 미국 시민의 수를 계산하는 것일 수 있다)은 미국 시민에게 관심이 있을 수 있다. 따라서, 다른 국가의 시민은 작업과 관련이 없다: 이들은 "무정의" 값이다. 트랜스코더는 연산이 적용되는 데이터를 반영하기 위해 사전과 인덱스를 매핑할 수 있다.However, the accelerated operation being performed (for example, the operation may be calculating the number of U.S. citizens in a database) may be of interest to U.S. citizens. Therefore, citizens of other countries are not relevant to the task: these are “indefinite” values. The transcoder can map dictionaries and indices to reflect the data to which operations are applied.

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

본 발명의 실시 예들에 따른 트랜스코더가 어떻게 인코딩 데이터를 위한 대체 사전을 제공할 수 있는지 이해하기 위해, 데이터가 많은 사람들에 대한 시민권 정보를 포함하는 상황을 고려한다. 각 개인이 시민인 국가의 이름은 매우 길지만 국가 이름의 수는 상대적으로 적기 때문에(200 개국을 대표하더라도 약 8 비트를 차지할 수 있고, 여전히 국가 이름의 문자당 1바이트로 각 시민들의 국가 이름 문자열을 저장하는 것으로 상당한 비용이 절감), 사전은 저장되는 데이터의 양을 의미있게 줄일 수 있다. 이러한 인코딩은 임의의 원하는 인코딩 방식(예를 들어, RLE 인코딩, 사전 압축, 프리픽스 인코딩, 비트 패킹, 클러스터 인코딩, 스파스 인코딩 및 간접 인코딩)을 사용할 수 있다.To understand how a transcoder according to embodiments of the present invention can provide an alternative dictionary for encoded data, consider a situation where the data contains citizenship information for many people. Although the names of the countries of which each individual is a citizen are very long, the number of country names is relatively small (even representing 200 countries would only take up about 8 bits, which would still make each citizen's country name string at 1 byte per character of the country name). However, dictionaries can significantly reduce the amount of data stored. Such encoding may use any desired encoding scheme (e.g., RLE encoding, dictionary 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 predicate (filtering the data) looks for only US citizens, then data related to citizens of other countries is not of interest. For example, a host might want to know how many U.S. citizens are in its database. As a result of the conversion, the dictionary can be reduced to one entry for US citizens (there may be an implicit or explicit entry for the "don't care" entry), and the RLE encoding can be converted to a non-US citizen. It can be compressed to combine adjacent RLE items for citizens of different countries. Therefore, the encoding of data is compressed into a dictionary containing 1 (or 2) rows. Since data related to non-US citizens can be indexed into a single entry in the new dictionary, the actual encoding data can also be reduced. Therefore, by pushing a Predicate into the transcoder, encoded data can be filtered and new encodings can be provided that ultimately reduce the amount of data transmitted to the host. A dictionary map may represent a mapping between an original dictionary and a transcoding dictionary.

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

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

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

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

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

트랜스코딩 사전에 "무정의(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 operation technically adds the entry to the dictionary (since the original dictionary does not contain such a value). Adding these items may cause new problems. Adding a "don't care" entry to the transcoding dictionary typically occurs in the first entry of the transcoding dictionary (index 0), and is intended to represent a value that does not match an attribute. However, generating a new value for a "don't care" item can be expensive: that is, the system being launched will have to scan the entire dictionary (since all existing indices are 1 apart) and try again. It can be mapped. Adding a "don't care" entry may result in memory reallocation or a bitwidth overflow: for example, if all possible values for a given number of bits are already in use as dictionary indices. Inserting a "don't care" entry into the dictionary may increase the number of bits used to represent the index by one. If a data page uses part of a dictionary, the bitwidth of the data page may be smaller, and adding a "don't care" entry to the transcoding dictionary can result in a single valid value from the data page. It becomes unusable. For example, with a bitwidth of 1, adding a "don't care" entry may contain more values than can be represented using a single bit, whereas with a bitwidth of 2 , there may be room for space for "don't care" entries without overflowing the bitwidth.

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

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

도 1은 본 발명의 일 실시 예에 따른 인코딩 데이터의 트랜스코딩을 지원할 수 있는 솔리드 스테이트 드라이브(Solid State Drive: SSD)를 포함하는 시스템을 보여준다. 도 1에서 호스트 컴퓨터일 수 있는 머신(105)은 프로세서(110), 메모리(115) 및 스토리지 장치(120)를 포함할 수 있다. 프로세서(110)는 임의의 다양한 프로세서일 수 있다. 도 1은 단일 프로세서(110)를 도시하지만, 머신(105)은 임의의 수의 프로세서를 포함할 수 있으며, 각각의 프로세서는 싱글-코어 또는 멀티-코어 프로세서일 수 있고, 임의의 원하는 조합으로 조합될 수 있다.Figure 1 shows a system including a solid state drive (SSD) capable of supporting transcoding of encoded data according to an embodiment of the present invention. Machine 105, which may be a host computer in FIG. 1, may include a processor 110, memory 115, and storage device 120. Processor 110 may be any of a variety of processors. 1 shows a single processor 110, machine 105 may include any number of processors, each processor may be a single-core or multi-core processor, and can be combined in any desired combination. It 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)의 예는 임시 파일, 애플리케이션에 의해 로컬로 사용되는 데이터(다른 스토리지 위치로부터 복사되었을 수 있음) 등을 포함할 수 있다.Processor 110 may be connected to memory 115. The memory 115 may be flash memory, Dynamic Random Access Memory (DRAM), Static Random Access Memory (SRAM), Persistent Random Access Memory (Persistent Random Access Memory), Ferroelectric Random Access Memory (FRAM), or magnetoresistive random access memory ( It may be any of a variety of memory, such as non-volatile random access memory (NVRAM), such as MRAM), etc. 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 “short-term,” where the data is not expected to be stored 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), etc.

프로세서(110) 및 메모리(115)는 다양한 애플리케이션이 실행될 수 있는 운영 체제를 지원할 수도 있다. 이들 애플리케이션은 메모리(115) 또는 스토리지 장치(120)로부터 데이터를 판독하거나 기록하기 위한 요청을 발행할 수 있다. 메모리(115)는 "단기"로 지칭되는 데이터를 저장하는데 사용될 수 있는 반면, 스토리지 장치(120)는 "장기(long-term)", 즉, 데이터가 장기적으로 저장될 것으로 예상되는 데이터를 저장하는데 사용될 수 있다. 스토리지 장치(120)는 장치 드라이버(130)를 사용하여 액세스될 수 있다. 스토리지 장치(120)는 하드 디스크 드라이브(HDD), 솔리드 스테이트 드라이브(SSD), 그리고 임의의 다른 원하는 포맷과 같은 임의의 원하는 포맷일 수 있다.Processor 110 and memory 115 may support an operating system on which various applications can run. 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,” whereas storage device 120 may be used to store data that is “long-term,” i.e., where the data is expected to be stored for a long period of time. can be used Storage device 120 may be accessed using device driver 130. Storage device 120 may be of any desired format, such as a hard disk drive (HDD), 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 details of the machine of Figure 1. 2, machine 105 generally may include one or more processors 110, which may include a clock 205 and a memory controller 125 that may be used to coordinate the operation of the machine's components. . 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 may also be coupled to buses 215, which may be an input/output interface that may be managed using a user interface 220 and an input/output engine 225, among other components. Can be mounted on a port.

도 3은 다른 접근법들을 사용하여 동일한 데이터를 전달하는 도 1의 스토리지 장치(120) 및 도 1의 프로세서(110)를 보여준다. 하나의 접근법(일반적인 접근법)에서, 데이터는 스토리지 장치(120)내의 스토리지(305, 예를 들어, 하드 디스크 드라이브 상의 플래터(platter)들 또는 SSD와 같은 플래시 메모리 스토리지 장치 내의 플래시 메모리 칩들일 수 있음)로부터 읽혀지고, 프로세서(110)로 직접 전송될 수 있다. 스토리지 장치(120) 상에 저장된(인코딩된 그리고/또는 압축된) 총 데이터가 X 바이트라면, 이는 프로세서(110)로 전송될 데이터의 양이다. 이 분석은, 인코딩 그리고/또는 압축된 데이터를 저장하는데 사용되는 스토리지의 양을 고려하는데, 인코딩되지 않고 압축되지 않은 데이터는 아마도 더 많은 바이트 수일 것이다(그렇지 않은 경우에는 데이터를 인코딩 그리고/또는 압축하는 데 이점이 없을 수 있음). 따라서, 예를 들어, 데이터가 인코딩되지 않고 압축되지 않은 약 10GB의 스토리지를 사용할 수 있지만, 인코딩 그리고/또는 압축될 때 약 5GB의 스토리지를 사용할 수 있다면, 약 10GB가 아닌 약 5GB의 데이터가 스토리지 장치(120)에서 프로세서(110)로 전송될 수 있다.Figure 3 shows the storage device 120 of Figure 1 and the processor 110 of Figure 1 transferring the same data using different approaches. In one approach (the general approach), the data is stored in storage 305 in storage device 120, which may be, for example, platters on a hard disk drive or flash memory chips in a flash memory storage device, such as an SSD. It can 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, then this is the amount of data to be transferred to processor 110. This analysis takes into account the amount of storage used to store encoded and/or compressed data, where unencoded and uncompressed data would probably be bytes larger (otherwise, the amount of storage used to encode and/or compress the data would be larger). may not be advantageous). So, for example, if data has approximately 10 GB of storage available unencoded and uncompressed, but has approximately 5 GB of storage available when encoded and/or compressed, then approximately 5 GB of data, rather than approximately 10 GB, will be stored on the storage device. 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 affecting the transfer). When data stored in storage device 120 is encoded and/or compressed, when data stored in storage device 120 is transmitted directly to processor 110 (as shown by arrow 310), storage device 120 ) can be transferred at an effective rate of B bytes per second. Continuing with the example described above, let us consider a situation where the connection between storage device 120 and processor 110 includes a bandwidth of approximately 1 GB per second. Because encoded and/or compressed data can occupy approximately 5 GB of space, encoded and/or compressed data can be transmitted at a transfer rate of approximately 1 GB/sec for a total of 5 seconds. However, since the total data stored (before encoding and/or compression) is about 10 GB, the effective transfer rate of data B is about 2 GB per second (since about 10 GB of unencoded and uncompressed data is transferred 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 an in-storage processor 315 is used to pre-process data to reduce the amount of data transmitted to processor 110, less raw data will be transmitted. (since the in-storage processor 315 is more selective about the data being transferred). Meanwhile, the in-storage processor 315 decompresses and processes the data. (You can also decode the data if possible). Accordingly, the amount of data to be transferred from in-storage processor 315 to processor 110 may be reduced by the selection of data, but may also be increased by the amount of compression (and possibly encoding): logarithmically, in-storage Data to be transferred from processor 315 to processor 110 (shown via arrow 320) may be expressed in 'X*Y*Z' gigabytes, where 'X' is the encoded and/or compressed 'Y' is the amount of space used to store the data, 'Y' is the compression ratio (how much data is stored reduced using compression (and possibly encoding)), and 'Z' is the selectivity ratio (how much data is selected from the uncompressed data). )am. Similarly, the effective rate at which data can be transferred from the storage 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 that using the in-storage processor 315 to select data to send to processor 110 when 'X*Y*Z < It shows excellence when Y*Z < 1'. Otherwise, the amount of data to be transmitted after preprocessing by the in-storage processor 315 is greater than the amount of data encoded and/or compressed even if the in-storage processor 315 does not apply selectivity: i.e., the in-storage processor 315 It is more efficient to transmit the original encoded and/or compressed data than to attempt to select data to transmit to 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)로 전달될 수 있다. 트랜스코딩은 하나의 인코딩에서 다른 인코딩으로 데이터를 변환하는 프로세스로 생각할 수 있다.FIG. 4 shows the storage device 120 of FIG. 1 and the processor 110 of FIG. 1 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 storage 305 (again, storage 305 may be 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 passed to decompressor 410, which may decompress the data to produce decompressed data 415. The decompressor 410 (or decompression engine) may perform hardware decompression or use appropriate circuitry (general-purpose processor, field programmable gate array (FPGA), application-specific integrated circuit (ASIC), graphics processing unit (GPU), or general purpose (GPGPU). The decompressed data 415 may be additionally encoded because encoding and compression may be separate processes. Transcoding can be thought of as a process of converting data from one encoding to another encoding.

상술한 모든 프로세스들은 스토리지 장치(120) 내에서 발생할 수 있다. 트랜스코더(420)가 압축 해제된 데이터(415)를 처리하고 트랜스코딩된 데이터(425)를 생성하면, 트랜스코딩된 데이터(425)는 호스트 컴퓨터(105)에 제공될 수 있다. 디코더(430)는 트랜스코딩된 데이터(425)를 디코딩하여 필터링된 플레인 데이터(435)를 생성할 수 있다. 필터링된 플레인 데이터(435)는 프로세서(110)에 제공될 수 있으며, 그 후 필터링된 플레인(plain) 데이터(435)에 대해 원하는 동작이 수행될 수 있다.All of the above-described processes may occur within storage device 120. Once transcoder 420 processes decompressed data 415 and produces transcoded data 425, transcoded data 425 may be provided to host computer 105. The decoder 430 may decode the transcoded data 425 to generate filtered plain data 435. The filtered plain 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 decoder 430 decoding transcoded data 425 may include knowing something about the encoding applied to transcoded data 425. This information may include, for example, the specific encoding scheme used in the transcoded data 425, or the dictionary used in the transcoded data 425. 4 does not show this information being transferred from storage device 120 to host computer 105, but this information is transferred to host computer 105 in parallel with (or as part of) transcoded data 425. It can be delivered. Of course, the transcoded data 425 is actually unencoded and uncompressed (if the result of the operation of the transcoder 420 transmits a larger number of actual bytes than would transmit unencoded and uncompressed data). may occur), the transcoded data 425 may omit information about the 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. Although the two concepts of reducing the amount of storage used to store data are related, there are some differences. Encoding usually involves using a dictionary to provide an index to data that is too long to contain directly and has a relatively small number of distinct values. For example, there are about 195 different countries. If your data stores information about the citizenship of a large number of people, including each person's nationality directly will use a large amount of space, using at least a few bytes (assuming 1 byte per character in the name of the country). I do it. On the other hand, all values 1-195 can be expressed using a single byte. By using a dictionary to represent country names and storing an index of the appropriate country names in the data, the amount of data to be stored can be significantly 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" could instead be displayed in a dictionary as shown in Table 1, and " It is displayed as "3, 3, 2, 2, 2, 2, 0, 1, 0, 0, 0, 0, 0, 3" and is reduced from 153 characters to 40 characters. Even considering the 52-character dictionary, simply using a dictionary can save a lot of money.

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

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

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

다시 인코딩 방식으로 돌아가서, 사전이 설정되면, 데이터를 추가적으로 인코딩하는 데 사용할 수 있는 여러 가지 다른 인코딩 방식이 존재한다. 이러한 인코딩 방식의 예는 런 길이 인코딩(Run Length Encoding: 이하, RLE), 비트 패킹, 프리픽스 인코딩, 클러스터 인코딩, 스파스 인코딩 및 간접 인코딩을 포함한다: 본 발명의 실시 예는 다른 인코딩 방식을 또한 사용할 수도 있다. 런 길이 인코딩(RLE) 및 비트 패킹은 나중에 다양한 예제에서 사용되므로 여기에서 설명한다; 다른 인코딩 방식에 관한 정보는 쉽게 찾을 수 있다.Going back to encoding methods, once the dictionary is set up, there are several different encoding methods 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 may also use other encoding schemes. It may be possible. Run length encoding (RLE) and bit packing are discussed here as they will be used in various examples later; Information about other encoding methods 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 four times in a row, instead of storing the value "2" four times (which would use 4 bytes of storage), we store the number of occurrences of the value "2" ("4") and can be stored together (2 bytes of storage available). So, continuing the example above, the sequence "3, 3, 2, 2, 2, 2, 0, 1, 0, 0, 0, 0, 0, 3" becomes "[2, RLE], 3, [ 4, RLE] 2, [1, RLE] 0, [1, RLE], 1, [5, RLE], 0, [1, RLE], 3". The "[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 the expression includes an indicator that RLE encoding is used is related to the potential use of hybrid encoding schemes, 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 14 bytes to store the original sequence, 12 bytes does not significantly reduce the amount of space to store data. However, proportionally this encoding can reduce the amount of storage required for this data by approximately 14%. With data taking up about 5GB, even a roughly 14% reduction in used storage is a significant savings, potentially saving around 700MB.

각 값의 발생 횟수에 대한 대안으로서, 각 그룹의 시작 위치가 저장될 수 있다. 각 값의 발생 횟수 대신 시작 위치를 사용하는 경우, 데이터는 "[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. If you use 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 uses RLE to describe situations where repeated values fit into a single byte. Otherwise, what if, for example, the repeated value is "1000" ("1000" can be stored using 10 bits)? In this case, RLE can serialize values into 7-bit groups. The 8th bit of each byte, which may be the most significant bit in the byte, may indicate whether the byte continues from 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, let's consider the value "1000". The value "1000" can be expressed in binary as "11 1110 1000". Because this representation uses 10 bits, the value may be too large to store in a single byte. Therefore, the value can be divided into groups of 7 bits (leading '0's are added so that each group contains 7 bits): "0000111 1101000". Now, you can add a "1" in front of the first byte of a sequence to indicate that the value it represents continues in the next byte, and a "0" in front of the second byte in a sequence to indicate that the value ends at that byte. Therefore, the bit sequence becomes “10000111 01101000”. When the system reads this bit sequence, it looks at the most significant bit in each byte, determines whether the value lasts beyond that byte, or ends with that byte, and removes that bit when reassembling the bit sequence into a value. You can see that Therefore, "10000111 01101000" becomes "0000001111101000" (adding two additional leading zeros brings the representation up to 2 bytes), and the original value "1000" can be recovered.

물론, 각 바이트에서 하나의 비트가 바이트 값의 연속인지 여부를 식별하는 데 사용되는 경우, 해당 비트는 값의 일부로 사용되지 않을 수 있다. 따라서, 값이 단일 바이트에 맞더라도 다른 바이트에서 값이 계속되지 않음을 나타내는 추가 비트가 포함될 수 있다. 또한, 값이 8 비트에 맞지만 7 비트에는 맞지 않는 경우(예를 들면, 128에서 255 사이의 값), 다음 바이트에서 값을 계속 사용할지 여부를 나타내는 비트를 사용할 때 2 바이트를 사용하여 전체 값을 나타낼 수 있다(값의 최상위 비트가 인코딩에서 다음 7 비트 그룹으로 이동하기 때문에).Of course, if one bit in each byte is used to identify whether the byte value is a continuation or not, that bit may not be used as part of the value. Therefore, even if a value fits a single byte, additional bits may be included to indicate that the value is not continued in other bytes. Additionally, if a value fits in 8 bits but not 7 bits (for example, a value between 128 and 255), 2 bytes are used to store the entire value, with the bit indicating whether to continue using the value in the next byte. can be represented (since the most significant bit of the value is moved 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, the bits may be given from most significant bit to least significant bit, or from least significant bit to most significant bit; Bytes can be similarly aligned in two ways. Thus, for example, if the bytes are presented from least significant to most significant, but the bits of each byte are presented from most significant to least significant and use consecutive bits, the value "16384" may be encoded as "10000000 10000000 00000001". This bit sequence can be interpreted as follows: The first bit of each byte is a continuation 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 the consecutive bits, what remains is "0000000 0000000 0000001". When the bytes are reordered from most significant to least significant (and reorganized into existing 8-bit groups by discarding leading '0's), the value becomes "01000000 00000000", which corresponds to the binary value "16384".

반면, 비트 패킹(Bit Packing)은 값이 전체 바이트보다 적은 비트를 사용할 수 있다는 아이디어를 이용한다. 예를 들어, 저장될 값이 0, 1, 2 및 3을 포함하는 경우, 2 비트가 각각의 값을 나타내는데 사용될 수 있다. 전체 바이트는 각 값을 저장하는 데 사용될 수 있지만, 전체 바이트를 사용한다는 것은 스토리지의 75%가 실제로 사용되지 않음을 의미한다. 비트 패킹은 단일 바이트(또는 바이트 시퀀스)에 하나 이상의 값을 저장하여 이 현상을 활용한다. 비트 패킹은 값 시퀀스가 단일 값이 아닌 반복될 때 특히 유리하다.Bit packing, on the other hand, uses the idea that bits whose value is less than the total byte can be used. For example, if the values to be stored include 0, 1, 2, and 3, 2 bits may be used to represent each value. A full byte can be used to store each value, but using a full byte means that 75% of the storage is actually unused. Bit packing takes advantage of this phenomenon by storing more than one value in a single byte (or byte sequence). Bit packing is especially advantageous when the 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 approximately 4 bits to uniquely identify each value (i.e., values greater than 15 are not used). Let’s consider (not). Instead of storing each value separately (requiring a total of 8 bytes), you can use the "[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 byte is repeated four times. (Like RLE encoding, bit packing encoding can 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 about a 75% reduction in the amount of storage used by the sequence.

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

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

인코딩과 압축 모두는 데이터 표현을 저장하는데 사용되는 공간을 줄이려고 하기 때문에, 그 이점이 배가되지 않을 수 있다. 인코딩과 압축 모두 데이터 저장에 사용되는 공간을 줄이는 것을 시도한다. 그러나 데이터가 (인코딩과 같은) 한 가지 방식으로 압축되면, (압축과 같은) 다른 압축 방식을 적용하는 것이 도움이 되지 않을 수 있다. 압축은 데이터가 인코딩된 후 데이터에 적용될 수 있으며, 여전히 사용되는 저장 공간의 양을 약간 감소시킬 수 있지만, 인코딩 데이터에 대한 압축의 영향은 인코딩되지 않은 데이터에 대한 압축의 이점보다 적을 수 있다. (압축되는 데이터에 관계없이 데이터를 압축하는 모든 방식을 동일한 이점으로 적용할 수 있다면, 단순히 반복된 압축 방식을 적용하는 것만으로도 임의의 모든 데이터를 엄청나게 작은 크기로 줄일 수 있기를 희망할 것이다. 조금만 생각해 보면 쉽게 명백한 것처럼, 그러한 결과는 현실 세계에서는 현실적이지 않다.)Because both encoding and compression attempt to reduce the space used to store data representations, their benefits may not be multiplied. Both encoding and compression attempt to reduce the space used to store data. However, if data is compressed in one way (such as encoding), applying a different compression method (such as compression) may not help. Compression can be applied to the data after it has been encoded, and may still slightly reduce the amount of storage space used, but the impact of compression on encoded data may be less than the benefit of compression on unencoded data. (If all methods of compressing data could be applied to the same advantage, regardless of the data being compressed, one 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 after 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) 상의 가비지 컬렉션 및 다른 동작과 함께 읽기 및 쓰기 동작을 관리할 수 있다.Figure 5 shows details of storage device 120 of Figure 1. Referring to FIG. 5 , the storage device 120 is shown as an SSD, but embodiments of the present invention may support other types for the storage device 120 with appropriate modifications. As shown in FIG. 5, the storage device 120 includes 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 (from 520-1 to 520-4). Host interface layer 505 may manage communications between storage device 120 and machine 105 of FIG. 1 . These communications may include requests to read data from and to write data to storage device 120 . The SSD controller 510 may use a flash memory controller (not shown in FIG. 5) to manage read and write operations along with garbage collection and other operations on the flash memory chips 515-1 to 515-8.

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

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

SSD 컨트롤러(510)는 또한 트랜스코더(420)를 포함할 수 있다. 그러나 본 발명의 실시 예는 스토리지 장치(120) 내의 다른 곳에 트랜스코더(420)를 갖는 구성을 포함할 수 있다(예를 들어, 트랜스코더(420)는 많은 가능성들 중에서도 스토리지 장치(120) 내의 다른 곳의 범용 프로세서(적절한 소프트웨어를 실행), FPGA, ASIC, GPU, 또는 GPGPU를 사용하여 구현), 또는 심지어 스토리지 장치(120) 외부에 존재할 수도 있다.SSD controller 510 may also include transcoder 420. However, embodiments of the invention may include configurations with transcoder 420 elsewhere within storage device 120 (e.g., transcoder 420 may be located elsewhere within storage device 120, among many possibilities). It may be implemented using a general-purpose processor (running appropriate software), 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) 외부에 구현될 수도 있다.Storage device 120 may also include an in-storage processor 315 (not shown in FIG. 5) of FIG. 3 that can execute instructions that control how to use data stored in storage device 120. Additionally, the in-storage processor 315 of FIG. 3 may be used for in-storage computing functions to execute operations locally on the storage device 120 instead of the processor 110 of FIG. 1. Like transcoder 420, in-storage processor 315 of FIG. 3 may use a general-purpose processor (running appropriate software), FPGA, ASIC, GPU, or GPGPU located somewhere within storage device 120, or even It may also be implemented outside of 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)로 구성될 수 있다.5 illustrates a storage device 120 including eight flash memory chips 515-1 to 515-8 comprised of four channels 520-1 to 520-4, according to an embodiment of the present invention. Can support any number of flash memory chips configured with any number of channels. Similarly, Figure 5 shows that the SSD controller 510 may include a transcoder 420 and/or the in-storage processor 315 of Figure 3, although embodiments of the present invention, unlike Figure 5, do not include a transcoder. It may be configured as 420 or the in-storage processor 315 of FIG. 3.

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

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

IDID 국가nation 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 an example of these last two points, let us again consider the dictionary shown in Table 1 above. We now consider a situation in which host computer 105 of Figure 1 was interested in data regarding U.S. citizens. Table 1 represents the data received from the input stream and can therefore be viewed as an input dictionary. Meanwhile, Table 2 may be an output dictionary representing data of the output stream. There are at least three caveats about Table 2. First, Table 2 contains two items compared to the four items shown in Table 1. Second, Table 2 includes items marked "Don't Care" (although used by other names, at this point the data expressed by the corresponding value is of interest to the host computer 105 of Figure 1). Because there is none). Third, "United States of America" has 'ID3' in Table 1, but "United States of America" has 'ID1' in Table 2. This final caveat means that references to 'ID3' in the input stream may 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 accomplish 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 rule evaluation. It may include group (635).

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

스트림 스플리터(610)는 서큘러 버퍼(605)로부터 데이터를 취하여 그 데이터를 청크들로 분할할 수 있다. 청크는 이후 인덱스 매퍼(615)로 전달될 수 있다. 청크는 트랜스코더(420) 내의 다른 구성 요소에 의해 처리될 데이터의 단위를 나타낼 수 있고, 그 용어가 다른 문맥에서 사용될 수 있으므로 용어 "청크"와 혼동되어서는 안된다(예를 들어, 그 용어인 "칼럼 청크"는 아래도 9를 참조하여 사용될 수 있다).Stream splitter 610 can take data from circular buffer 605 and split 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 different components within transcoder 420 and should not be confused with the term “chunk” as the term may be used in other contexts (e.g., the term “chunk”). “Column chunks” can also be used, see 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 the stream splitter 610 of FIG. 6 splitting input encoded data, which may be part (or all) of an input stream, into chunks. In Figure 7, the input data is shown as containing three encoded data: "[1, BP], 3, 3, [4, RLE], 2, [5, RLE], 0" among other data. . As discussed above, these chunks represent data encoded using bit packing and RLE encoding schemes. This encoding represents the (unencoded) sequence of values "3, 3, 2, 2, 2, 2, 0, 0, 0, 0, 0". For each individual encoding, host computer 105 of Figure 1 may or may not be interested in that data (or portions of that data). Whether the host computer 105 of FIG. 1 is interested in each encoding value may depend on the transcoding rules 630: The stream splitter 610 of FIG. 6 determines which host computer 105 of FIG. You may not know if you are interested in the data. Accordingly, stream splitter 610 of FIG. 6 may split the input data stream into chunks where each chunk includes a different piece of encoded data. Accordingly, chunk 705-1 has the encoding “[1, BP], 3, 3”, chunk 705-2 has the encoding “[4, RLE], 2”, and chunk 705-3 has the encoding “[1, BP], 3, 3”. May include the encoding "[5, RLE], 0".

도 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 Figure 7. First, note also the example input stream shown in Figure 7, where some data is encoded using bit packing and some data is encoded using RLE. If all data is encoded using a single encoding scheme (e.g., RLE), stream splitter 610 of FIG. 6 can in fact determine the encoding type input to transcoder 420 of FIG. 6. However, sometimes hybrid encoding methods are used. In a hybrid encoding scheme, some data may be encoded using one encoding scheme (e.g. RLE), and some data may be encoded using another encoding scheme (e.g. bit packing) (the concept is The encoding method used in can also be generalized to more than one). In the hybrid encoding method, since the information itself does not tell the stream splitter 610 which data is encoded with which encoding method, the transcoder 420 of FIG. 6 may not receive the encoding type as input. Instead, stream splitter 610 in Figure 6 can look at the chunks themselves and determine which encoding scheme is used for each chunk.

특정 청크를 인코딩하는데 사용되는 인코딩 방식을 결정하는 한 가지 방법은 청크 내의 특정 비트의 값을 검사하는 것일 수 있다. 예를 들어, 칼럼 스토리지 포맷은 첫 번째 바이트의 최하위 비트를 사용하여 RLE 또는 비트 패킹을 사용하여 특정 데이터 청크가 인코딩될 수 있는지 여부를 나타낼 수 있다: 해당 비트의 값이 "0"인 경우에는 RLE가 사용될 수 있다고, 그 비트의 값이 "1"이면 비트 패킹이 사용될 수 있다. 그런 다음이 이 비트는 바이트에서 제거되고, 나머지 비트는 논리적으로 1비트 오른쪽으로 시프트되어 인코딩에 사용되는 값을 생성한다.One way to determine the encoding scheme used to encode a particular chunk may be to examine the values of specific bits within the chunk. For example, a columnar storage format may use the least significant bit of the first byte to indicate whether a particular chunk of data can be encoded using RLE or bit packing: if the value of that bit is "0", then RLE can be used, and if the value of that bit is "1", bit packing can be used. This bit is then removed from the byte, and the remaining bits are logically shifted right by 1 bit to produce 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, let's consider 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 a “1,” stream splitter 610 in Figure 6 may determine that this chunk can 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 by one bit, creating the byte “00000001”. The first (most significant) bit of this byte may be "0", so stream splitter 610 of Figure 6 will cause the byte to be simply "00000001" (with a "0" bit indicating that the value may not continue 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. Afterwards, the stream splitter 610 in FIG. 6 can read the next byte “00110011”. Because the most significant bit of this byte may be “0,” stream splitter 610 of Figure 6 knows that this value will not continue in the next byte. Consecutive bits are removed and a leading zero is added to produce the value "00110011", which represents the values "3" and "3". Accordingly, stream splitter 610 of FIG. 6 may determine that the encoding uses bit packing to indicate that the value “3” may be repeated twice.

반면, 청크(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, we decide to consider chunk (705-2). Chunk 705-2 will contain the bit sequence “00001000 00000010”. When the stream splitter 610 of FIG. 6 reads the first byte “00001000”, it can check the lowest bit (last “0”). Since the least significant bit may be “0,” stream splitter 610 in Figure 6 may determine that this chunk can be encoded using RLE. This least significant bit is removed and the remaining bits of the first byte are logically shifted to the right by one bit, creating the byte "00000100". The first (most significant) bit of this byte may be a "0", so stream splitter 610 of Figure 6 causes the byte to be simply "00000100" (with a "0" bit indicating that the value may not continue in the next byte). may be removed, and another reading "0" may be added) and that its value (to be determined) may be repeated four times. Afterwards, the stream splitter 610 of FIG. 6 can read the next byte “00000010”. Because the most significant bit of this byte may be “0,” stream splitter 610 of Figure 6 knows that this value will not continue into the next byte. The value "00000010" can be produced by removing consecutive bits and adding leading zeros. Accordingly, stream splitter 610 of Figure 6 may determine that the encoding uses RLE to indicate that the value "2" may be repeated four times.

물론, 도 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, stream splitter 610 in Figure 6 may not perform all of this analysis on the bit sequence. All stream splitters 610 in Figure 6 read bytes until a byte is encountered with "0" as the most significant bit (this sequence of bytes indicates the encoding scheme and number of repetitions of the upcoming value), then reads bytes with "0" as the most significant bit. Bytes are read until another byte is encountered (this sequence of bytes represents the value being encoded). Stream splitter 610 in Figure 6 may pass the read bits (representing the entire encoded chunk) to index mapper 615 in Figure 6 (and for further processing by rule evaluator 635 in Figure 6). ): The index mapper 615 of FIG. 6 and/or the rule evaluator 635 of FIG. 6 performs the analysis described to determine which encoding scheme is used for a chunk and which value(s) are so encoded. It can be done. However, when the stream splitter 610 of FIG. 6 (or index mapper 615 of FIG. 6 or any other component of the inventive concept) performs 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 pass the encoding type to other components according to policy to avoid repetition of this analysis. This behavior can be particularly important if the bits that identify the encoding scheme are removed from the chunk as it is processed: without the encoding type, components that later process the encoded data may not 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 consecutive chunks encoded using RLE. Stream splitter 610 in Figure 6 can be expected to consider all consecutive RLE encodings as a single chunk (separating the chunks using different encoding schemes). However, keep in mind that the goal is to transcode the input stream, consolidating all data of no interest into a single "don't care" value. Recall that stream splitter 610 in Figure 6 may not have information about the data of which host computer 105 in Figure 1 is interested. If stream splitter 610 in Figure 6 considers all encodings using the same encoding scheme to be the same chunk, stream splitter 610 in Figure 6 will eventually determine the data of interest to host computer 105 in Figure 1. It is mixed with data that does not exist. Furthermore, if all data within the input stream is encoded using the same encoding scheme, the entire input stream will be considered a single chunk, which precludes the functionality of the stream splitter 610 as part of the transcoder 420 in Figure 6. It is done.

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

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

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

도 8은 입력 사전을 출력 사전에 매핑하는 도 6의 인덱스 매퍼(615)를 보여준다. 도 8을 참조하면, 인덱스 매퍼(615)는 입력 사전(805)을 수신하고 출력 사전(810)을 생성하는 것으로 도시되어 있다. 도 1의 호스트 컴퓨터(105)가 어떤 데이터에 관심이 있는지에 대한 정보가 주어지면, 인덱스 매퍼(615)는 출력 사전(810)을 생성할 수 있다. 인덱스 매퍼(615)는 또한 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 생성할 수 있다. 상술한 예를 계속하면, 이 맵은 표 3에 도시된 맵핑을 특정할 수 있다. 도시된 바와 같이 "3"은 인덱스 "1"에 매핑 될 수 있으며; 다른 모든 인덱스는 인덱스 "0"에 매핑될 수 있다.Figure 8 shows the index mapper 615 of Figure 6 mapping an input dictionary to an output dictionary. 8, the index mapper 615 is shown receiving an input dictionary 805 and generating an output dictionary 810. Given information about what data host computer 105 of FIG. 1 is interested in, index mapper 615 can generate output dictionary 810. Index mapper 615 may also create a map from input dictionary 805 to output dictionary 810. Continuing with the example described above, this map may specify the mapping shown in Table 3. As shown, "3" can be mapped to index "1"; All other indices 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, although the index mapper 615 is shown as a separate component from the transcoder 420 in FIG. 6, the index mapper 615 can operate in conjunction with the rule evaluator 635 in FIG. 6 (or a portion thereof). can be implemented as). Second, how index mapper 615 can generate output dictionary 810 (and the map shown in Table 3) may depend on the data of interest to host computer 105 of Figure 1. A method by which the index mapper 615 learns data of interest from the host computer 105 of FIG. 1 will be described with reference to FIG. 11 described later. Third, transcoding data may involve both the index mapper 615 that maps the input dictionary 805 to the output dictionary 810 and the transcoding rules 630 of FIG. 6: Transcoding rules 630 of FIG. 6 ) depends on the map from the input dictionary 805 to the output dictionary 810. The converse is not true: the map from the input dictionary 805 to the output dictionary 810 (and the resulting operation of the index mapper 615) can be generated without reference to the transcoding rules 630 of FIG. 6. there is.

인덱스 매퍼(615)에 관한 네 번째 포인트는 더 미묘하다. 인덱스 매퍼(615)는 출력 사전(810)에 "무정의(don't care)" 값이라는 새로운 항목을 효과적으로 추가한다. 구현을 단순화하기 위해 인덱스 매퍼(615)는 항상 "무정의(don't care)" 값에 대해 동일한 인덱스를 사용하는 것이 이해된다. 입력 사전(805)의 크기는 데이터 세트에 따라 변할 수 있으므로, 인덱스 "0"이 항상 사용될 수 있다.The fourth point about the index mapper 615 is more subtle. Index mapper 615 effectively adds a new entry to the output dictionary 810, a "don't care" value. To simplify implementation, it is understood that the index mapper 615 always uses the same index for “don't care” values. The size of the input dictionary 805 may vary depending on the data set, so 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 happens if it turns out that all of the data in the data set is of interest to host computer 105 of Figure 1? In this case, index mapper 615 added entries to output dictionary 810, but no entries were removed from output dictionary 810. The combination of these two facts means that the output dictionary 810 can be larger (by one entry) than the input dictionary 805. Let us consider a situation where the input dictionary 805 has exactly 2n entries for some value of n. This fact means that every index into the input dictionary 805 can be expressed 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 now 'n+1 bits are in the data set. This means that it is used to represent all possible values: This problem is called 'bit overflow'. These additional bits may affect the encoded data, requiring the addition of new bits to represent the data correctly. Accordingly, a single small change to the output dictionary 810 can have a huge ripple effect on the data representation, significantly increasing 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 where the introduction of a "don't care" entry adds a new bit representing all possible indices to the output dictionary 810, but the size of the output dictionary 810 increases with A similar problem can occur if new bits are incremented to where they can be used to represent all possible indices. Consider again the input dictionary shown in Table 1, and consider a situation where host computer 105 of Figure 1 is interested in Chinese and Indian citizens (indexes "0" and "1" in Table 1). These indices can be expressed using a single bit (since 1 bit can be used to represent the values "0" and "1"). By encoding these values using bit packing, eight of these values can be packed into a single byte. However, if the index "0" is assigned to the "don't care" value in the output dictionary 810, the indices for China and India will have different values (e.g. "1" and "2"). is mapped. The value "2" uses 2 bits, so no more 8 values can be packed into a single byte: a bit overflow has occurred.

비트 오버플로(bit overflow) 문제에 대한 사용 가능한 몇 가지 솔루션이 있다. 하나는 입력 사전(805)에 대한 임의의 인덱스가 도 1의 호스트 컴퓨터(105)의 관심이 없는 데이터를 나타내는지 확인하는 것이다. 입력 사전(805)의 모든 데이터가 호스트 컴퓨터(105)에 관심이 있는 것으로 밝혀지면, 입력 스트림을 트랜스코딩하는 것은 전혀 의미가 없으며, 입력 스트림은 수정없이 출력 스트림에 직접 매핑될 수 있다.There are several available solutions to the bit overflow problem. One is to check whether any index into the input dictionary 805 represents data that is not of interest to the host computer 105 of Figure 1. If all the data in the input dictionary 805 is found to be of interest to the host computer 105, then there is absolutely no point in transcoding the input stream, 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, bit overflow issues can still occur in bit packing, so while this solution is useful, it may not be sufficient. 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. You can. Two possible solutions will be described here. One solution is to assign the highest possible index in the output dictionary 810 to the "don't care" value: this first transfers all indices of interest from the input dictionary 805 to the output dictionary 810. After mapping, use the lowest unused index as the "don't care" value. Another solution is to identify an index in the input dictionary 805 that is not of interest to the host computer 105 of Figure 1 and use that index as a "don't care" value. In both solutions, the index into the input dictionary 805 is not replaced by a larger index in the output dictionary 810, which avoids bit overflow problems. A disadvantage of this solution is that it may not be possible to select an index for "don't care" that is 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 again to Figure 6, the current chunk (which can be processed by index mapper 615) may be stored in current encoding buffer 620. From there, rule evaluator 635 can evaluate the encoding data in the current encoding buffer 620 along with the encoding data in the previous encoding buffer 625 and determine whether the encoding should be changed and what data should be output to the output stream. do. In short, the rule evaluator 635 can determine whether the encoding data in the current encoding buffer 620 can be combined with the encoding data in the previous encoding buffer 625. If so, the encoding data in the current encoding buffer 620 may be added to the encoding data in the previous encoding buffer 625; If not, the encoded data in the previous encoding buffer 625 can be output to the output stream, and the encoded data in the current encoding buffer 620 can be moved to the previous encoding buffer 625. (This analysis takes into account situations where there is data in the previous encoding buffer 625. If the previous encoding buffer 625 does not contain data, as may happen, for example, with the first data chunk, then the current encoding There are no issues with attempting to combine encoded data in buffer 620 with transcoded data in 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 encoded data be combined?” The short answer is that chunks of encoded data can be combined when the chunks both represent data that host computer 105 of FIG. 1 is interested in or data that host computer 105 is not interested in. Some examples may help explain how rule evaluator 635 operates. In both examples, the input stream contains 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 what was output to the output stream at that time.

line 현재 인코딩 버퍼current encoding buffer 이전 인코딩 버퍼old 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 rule evaluator 635 is “[1, BP], 3, 3”. Since this chunk may contain data of interest (value "3"), rule evaluator 635 uses the output dictionary 805 of FIG. 8 to replace value "3" with value "1". A map to (810) can be used. This transcoded chunk may 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 row 2 of Table 4, the second chunk to be processed by rule evaluator 635 is “[4, RLE], 2”. This chunk may not contain the data of interest (the value "2"), so to replace the value "2" with the value "0" (this data represents "don't care" data) Rule evaluator 635 may use the map from input dictionary 805 to output dictionary 810 in FIG. 8 . This chunk may contain "don't care" data, but since the previous encoding buffer 625 may contain data of interest, the data in the previous encoding buffer 625 (Table 4 may be output to an output stream (as shown in the third row), and the currently transcoded chunk may 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 row 3 of Table 4, the third chunk processed by rule evaluator 635 is “[1, BP], 0, 1”. Since this chunk may not contain the data of interest (the values "0" and "1"), a rule is created to replace the value "0" and value "1" with the value "0" (indicating that it is undefined data). Evaluator 635 may use the map from input dictionary 805 of FIG. 8 to output dictionary 810.

이 청크는 "무정의(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 the chunk in the previous encoding buffer 625 uses RLE, so either encoding method can be replaced by the other. In this example, bit packing-encoded data may be transcoded using RLE. (If two or more values are stored as a single value using bit packing, the entire group can be duplicated, meaning that the number of duplicated values can be a multiple of the number of packed values. On the other hand, RLE stores a single value ) As a result, the previous encoding buffer 625 can now store "[6, RLE] 0" (as shown in the fourth row of Table 4), which is It combines the "don't care" value and the two "don't care" values from the third chunk.

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

이 청크는 "무정의(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 It can be. Since both chunks use RLE as the encoding method to encode the same "don't care" value, the rule evaluator 635 increments the duplicate value of the chunk in the previous encoding buffer 625 to create two chunks. Chunks can be combined. As a result, the previous encoding buffer 625 can now store "[11, RLE] 0" (as shown in row 5 of Table 4), which is the four "don'ts" from the second chunk. It combines the "'t care" value, the two "don't care" values from the third chunk, and the five "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 row 5 of Table 4, the second chunk processed by rule evaluator 635 is “[1, BP], 3”. Since this chunk may contain data of interest (value "3"), rule evaluator 635 uses the output dictionary 805 of FIG. 8 to replace value "3" with value "1". A map to (810) can be used. Since this transcoded chunk may contain data of interest, while the previous encoding buffer 625 may contain "don't care" data, this transcoded chunk may contain data of interest. It may not be combined with the chunk in (625).

이 시점에서, 일반적으로 이전 인코딩 버퍼(625)의 트랜스코딩된 데이터는 출력 스트림으로 출력되고 현재 트랜스코딩된 청크는 이전 인코딩 버퍼(625)로 이동될 것이다. 그러나 현재의 트랜스코딩된 청크는 입력 스트림에서 마지막 청크이므로, 양쪽 트랜스코딩된 청크가 출력될 수 있다(물론, 이전 인코딩 버퍼(625)의 청크가 먼저 출력된다). 표 4의 제 6 행은 최종 출력을 보여준다.At this point, typically the transcoded data in the previous encoding buffer 625 will be output to the output stream and the currently transcoded chunks 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 in 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, host computer 105 of Figure 1 requested data regarding 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 국가nation 00 무정의(Don't Care)Don't Care 1One 한국korea

line 현재 인코딩 버퍼current encoding buffer 이전 인코딩 버퍼old 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 rule evaluator 635 is “[1, BP], 3, 3”. Since this chunk may contain data of no interest (the value "3"), a rule is evaluated to replace the value "3" with the value "0" (indicating it is "don't care" data). Group 635 may use the map from input dictionary 805 of FIG. 8 to output dictionary 810. This transcoded chunk may 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 row 3 of Table 6, the third chunk processed by rule evaluator 635 is “[1, BP], 0, 1”. Since this chunk may not contain the data of interest (the values "0" and "1"), a rule is created to replace the value "0" and value "1" with the value "0" (indicating that it is undefined data). Evaluator 635 may use the map from input dictionary 805 of FIG. 8 to output dictionary 810. This chunk may contain data of no interest, but the previous encoding buffer 625 may contain data of interest, so the data in the previous encoding buffer 625 will be ) is output to the output stream, the currently transcoded chunk may 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 row 3 of Table 6, the third chunk processed by rule evaluator 635 is “[1, BP], 0, 1”. Since this chunk may not contain the data of interest (the values "0" and "1"), a rule is created to replace the value "0" and value "1" with the value "0" (indicating that it is undefined data). Evaluator 635 may use the map from input dictionary 805 of FIG. 8 to output dictionary 810. This chunk may contain data of no interest, but the previous encoding buffer 625 may contain data of interest, so the data in the previous encoding buffer 625 will be ) may be output to the output stream and the currently transcoded chunk (as shown in the fourth row of Table 6) may be moved to the previous encoding buffer 625.

표 6의 제 4 행에서, 룰 평가기(635)에 의해 처리된 제 4 청크는 "[5, RLE], 1"이다. 이 청크는 관심있는 데이터(값 "1")를 포함하지 않으므로, 값 "1"을 값 "0"(무정의 데이터임을 지시하는)으로 대체하기 위해 룰 평가기(635)는 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다.In row 4 of Table 6, the fourth chunk processed by rule evaluator 635 is “[5, RLE], 1”. Since this chunk does not contain the data of interest (the value "1"), the rule evaluator 635 uses the input dictionary of FIG. 8 to replace the value "1" with the value "0" (indicating undefined data). The 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, these two chunks are combined. It can be. This chunk uses RLE, but the chunk in the previous encoding buffer 625 uses bit packing, so either encoding scheme can be replaced by the other. In this example, encoded data in bit packing may be transcoded using RLE. (Again, RLE can be chosen because single values rather than groups of values can be duplicated.) As a result, the old encoding buffer 625 now has "[7, RLE] 0" (shown in row 5 of Table 4). ), which combines the two "don't care" values from the third chunk and the five "don't care" values from the fourth chunk.

표 6의 제 5 행에서, 룰 평가기(635)에 의해 처리된 제 2 청크는 "[1, BP], 3"이다. 이 청크는 관심있는 데이터(값 "3")를 포함하지 않을 수 있으므로, 값 "3"을 값 "0"(무정의 데이터임을 지시하는)으로 대체하기 위해 룰 평가기(635)는 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다.In row 5 of Table 6, the second chunk processed by rule evaluator 635 is “[1, BP], 3”. Since this chunk may not contain the data of interest (the value “3”), the rule evaluator 635 uses the 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, these two chunks are combined. It can be. This chunk uses bit packing, but the chunk in the previous encoding buffer 625 uses RLE, so either encoding method can be replaced by the other. In this example, 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 is two "don't care" values in the third chunk and five "don't care" values in the fourth chunk. It combines the "don't care" value with one "don't care" value from 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 can 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 examples above illustrate a situation where consecutive chunks contain the data of interest. Embodiments of the present invention may handle this situation in different ways. In one embodiment of the invention, any chunk of the previous encoding buffer 625 may be output to the output stream when the current encoding buffer 620 contains data of interest (i.e., the current encoding buffer 620 If it contains data of interest, no attempt is made to combine data in the current encoding buffer 620 with data in the previous encoding buffer 625). In another embodiment of the 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 invention, whether such a combination is feasible may depend on whether the values of interest 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, if both chunks contain data about Korean citizens, it may be possible to combine the two chunks.

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

전술한 바와 같이, 룰 평가기(635)는 또한 인덱스 매퍼(615)를 포함할 수 있다. 룰 평가기(635)가 인덱스 매퍼(615)를 포함하는 본 발명의 실시 예에서, 룰 평가기(635)는 트랜스코딩 룰(630)이 적용되기 전에 현재 인코딩 버퍼(620)의 내용에 인덱스 매퍼(615)를 적용할 수 있다.As mentioned above, rule evaluator 635 may also include index mapper 615. In an embodiment of the invention in which the rule evaluator 635 includes an index mapper 615, the rule evaluator 635 applies the index mapper to the contents of the current encoding buffer 620 before the transcoding rules 630 are 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 embodiments of the invention where different encoding schemes may be used, the rules may be varied accordingly: all such variations are considered embodiments of the invention. Additionally, embodiments of the present invention may include rules for managing transcoding data between two or more different types of encoding methods. For example, a hybrid encoding scheme may use three different encoding schemes: The transcoding rule 630 in Figure 6 allows the current encoding buffer 620 and the previous encoding buffer 625 in Figure 6 to use any other encoding. When containing encoded data, you can use a pair of methods to 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 represents data that may be of interest to the host computer 105 of FIG. 1, and DC represents data that may not be of interest to the host computer 105. (How data is identified as being of interest or not will be further explained with reference to Figure 11 below.) If variables (e.g., x, y, or z) are used, these variables They may represent a count of the number of values that are or are 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: Start group The group contains the x values of interest in the group, the y values of interest in the middle of the group, and the z values 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 division packed value' must be met. Finally, the PEB (in the output column) may indicate that when a rule is selected for an application, anything previously stored in the encoding buffer 625 may be output to the output stream. Table 7 also considers the situation where any data has already been mapped by the index mapper 615, and therefore contains values corresponding to the output dictionary 810 of FIG. 8.

rule 현재 인코딩 버퍼current encoding buffer 이전 인코딩 버퍼old 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 PEBP.E.B. 22 [r, RLE] DC[ r ,RLE]DC [r 1, RLE] DC[ r 1 , R L E ] DC [r 1 + r, RLE] DC[ r 1 + r , R L E ] DC Next chunkNext chunk 33 [r, RLE] DC[ r ,RLE]DC Anything elseAnything else [r, RLE] DC[ r ,RLE]DC Next chunkNext chunk PEBP.E.B. 44 [g, BP], P[ g , BP], P AnythingAnything [g, BP], P[ g , BP], P Next chunkNext chunk PEBP.E.B. 55 [g, BP] DC(y)[ g , BP]DC( y ) [r 1, RLE] DC[ r 1 , R L E ] DC [r 1 + y, RLE] DC[ r 1 + y , R L E ] DC Next chunkNext chunk 66 [g, BP] DC(y), P(z)[ g , BP] DC( y ), P( z ) [r 1, RLE] DC[ r 1 , R L E ] DC [r 1 + y, RLE] DC[ r 1 + y , R L E ] 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 , R L E ] 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 ) PEBP.E.B. 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 ) PEBP.E.B. 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 ) PEBP.E.B.

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

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

파일 메타 데이터(905)는 파일과 관련된 메타 데이터를 포함할 수 있다. 다른 메타 데이터도 저장될 수 있지만, 도 9는 파일-블록 맵(915) 및 사전 페이지(920)를 포함하는 파일 메타 데이터(905)를 보여준다. 사전 페이지(920)는 상술한 표 1에 도시된 사전과 같은 파일의 데이터 내의 값을 인코딩하는데 사용되는 사전일 수 있다. 사전 페이지(920)는 또한 예를 들어, 하나의 사전은 국가 이름을 저장하고 다른 사전은 성(Surnames)을 저장하는 것처럼, 파일내 다른 데이터를 인코딩하기 위해 사용될 수 있는 다중 사전들을 저장할 수 있다.File metadata 905 may include metadata related to files. Figure 9 shows file metadata 905 including a file-block map 915 and a dictionary page 920, although other metadata may also be stored. The dictionary page 920 may be a dictionary used to encode values in data in 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 other data in the file, for example, one dictionary storing country names and another dictionary 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)은 파일에 대한 칼럼 청크를 저장하는 칼럼 청크들을 찾는 데 사용될 수 있다.)File-block map 915 may identify the block storing the 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 column chunk 910-1, 910-2, and 910-3, or the page order is determined by the column chunks 910-1, 910-3. 2 and 910-3). File-block map 915 may provide information regarding which blocks are used to store all files stored in storage device 120 of FIG. 1. File-block map 530 of FIG. 5 And, the file-block map 915 is similar to the file-block map 530 of FIG. 5, except that it can provide information regarding which blocks are used to store the files shown in FIG. 9. can do. (Of course, both file-block maps can be used together: the file-block map 530 of FIG. 5 is used to find blocks that store file metadata 905 for each file, and the file-block map 530 of FIG. The file-block map 915 can be used to find the column chunks that store the column chunk for the 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. There is little difficulty with more general solutions to data storage, as long as there is some way to identify where the data is stored and what that data represents (e.g. the file that contains that data). However, for the purposes of this discussion, we will consider the situation where a column chunk fits into a single block and blocks do not share column chunks. 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 column chunk 910-1 (column chunks 910-2 and 910-3 are similar) there is a dictionary page 925 and data pages 930-1, 930-2, and 930-3. It can exist. Although Figure 9 shows three data pages, embodiments of the invention may include any number (0 or more) of data pages within a column chunk. Data pages can store the actual data of a file by dividing it into units that fit each page.

사전 페이지(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 the file.

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

이제 칼럼 포맷이 설명되었고, 칼럼 포맷을 사용하는 스토리지 장치 내의 도 4의 트랜스코더(420)를 사용하기 위한 적응에 대한 설명이 가능하다. 도 10은 데이터가 칼럼 포맷으로 저장된 트랜스코딩을 구현하도록 구성된 도 1의 스토리지 장치(120)를 보여준다. 도 10에 도시된 바와 같이, 스토리지 장치(120)는 호스트 인터페이스 계층(505), 스토리지 장치 컨트롤러(510) 및 스토리지(515)를 포함할 수 있으며, 이들의 기능은 상술한 도 5를 참조하여 설명된 바와 유사하게 기능한다(다시, 스토리지 장치(120)는 SSD, 하드 디스크 드라이브, 또는 칼럼 포맷을 사용할 수 있는 임의의 다른 스토리지 장치일 수 있다).Now that the columnar format has been described, an explanation is available for adaptations for use of transcoder 420 of FIG. 4 in storage devices that use the columnar format. FIG. 10 shows the storage device 120 of FIG. 1 configured to implement transcoding where data is stored in a columnar format. As shown in FIG. 10, the storage device 120 may include a host interface layer 505, a storage device controller 510, and storage 515, the functions of which are described with reference to FIG. 5 described above. (Again, storage device 120 may be an SSD, hard disk drive, or any other storage device that can use a columnar 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을 참조하여 설명된다.Storage device 120 may also include an in-storage computer controller 1005, a column chunk processor 1010, and an in-storage computer 315. The in-storage computer controller 1005 can manage information transmitted to the in-storage computer 315 and the column chunk processor 1010. For example, host computer 105 of FIG. 1 may request that storage device 120 perform some acceleration function, such as counting the number of citizens of a particular country, and in-storage computer controller 1005 may Identification of country of interest) may be provided to the column chunk processor 1010. In-storage computer controller 1005 may also access data, particularly column chunks, from storage 515 and provide that data to column chunk processor 1010. The in-storage computer controller 1005 may also determine the encoding scheme used for the data (assuming a single encoding scheme is used to use column chunks or entire files rather than a hybrid encoding scheme), and the column chunk processor 1010 Provides an encoding type. Finally, the in-storage computer controller 1005 again receives the transcoded data from the column chunk processor 1010 and, as appropriate, stores the transcoded data in response to a request from the host computer 105 of FIG. 1 (FIG. It may return to the host computer 105 of FIG. 1 or the in-storage computer 315 (via the host interface layer 505 of 1). The structure and operation of the column chunk processor 1010 are explained with reference to FIG. 11 below.

인스토리지 컴퓨터 컨트롤러(1005) 및 칼럼 청크 프로세서(1010)는 다른 가능성 중에서도 적절히 프로그래밍된 범용 프로세서, FPGA, ASIC, GPU 또는 GPGPU를 사용하여 구현될 수 있다. 인스토리지 컴퓨터 컨트롤러(1005) 및 칼럼 청크 프로세서(1010)는 동일한 하드웨어 또는 다른 하드웨어를 사용하여 구현될 수 있고(예를 들어, 인스토리지 컴퓨터 컨트롤러(1005)는 ASIC으로 구현될 수 있는 반면, 칼럼 청크 프로세서(1010)는 FPGA로 구현될 수 있음), 그것들은 단일 유닛 또는 개별 컴포넌트들로서 구현될 수 있다.The in-storage computer controller 1005 and column chunk processor 1010 may be implemented using a suitably programmed general-purpose processor, FPGA, ASIC, GPU, or GPGPU, among other possibilities. In-storage computer controller 1005 and column chunk processor 1010 may be implemented using the same hardware or different hardware (e.g., in-storage computer controller 1005 may be implemented as an ASIC, while column chunk processor 1010 may be implemented using Processor 1010 may be implemented with an FPGA), they may be implemented as a single unit or as separate 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)에 즉시 적합하지 않을 수 있는 데이터를 위한 임시 저장소로서 동작할 수 있다.Figure 11 shows the column chunk processor 1010 of Figure 10 configured to transcode data stored in column format. Referring to FIG. 11, the column chunk processor 1010 can receive an input stream, encoding type, and properties as input, and generate an output stream as output. The input stream may be stored in input buffer 1105. The input stream can be a single page of data from a column chunk, or it can be all of the data within the column chunk. Data from input buffer 1105 may be provided as an input stream to transcoder 420 (as described above with reference to FIG. 6): The encoding type may be received from the in-storage computer controller 1005. It should be noted that the transcoder 420 may include the circular buffer 605 of Figure 6, so the input buffer 1105 may be omitted: the data is sent to the stream splitter 610 of Figure 6 for operation. It may be stored in the circular buffer 605 of FIG. 6. However, in some embodiments of the invention, circular buffer 605 in Figure 6 may not be large enough to store an entire data page or column chunk (or data may be removed from circular buffer 605 in Figure 6). (the input stream can provide data faster than the input stream). In this case, input buffer 1105 may act as temporary storage for data that may not immediately fit into circular buffer 605 of Figure 6.

트랜스코더(420)의 출력(도 6을 참조하여 설명된 출력 스트림)은 출력 버퍼(1110)에 저장될 수 있다. 다시, 트랜스코더(420)에 의해 생성됨에 따라 데이터가 목적지로 직접 전송될 수 있지만, 완전한 데이터 페이지 또는 칼럼 청크와 같은 특정 단위로 데이터를 전송하는 것이 유용할 수 있다. 이러한 상황에서, 출력 버퍼(1110)는 적절한 데이터 단위가 생성될 때까지 출력 스트림을 저장할 수 있다. 그 시점에서, 칼럼 청크 프로세서(1010)는 요청된 트랜스코딩 작업에 적합하게 출력 스트림을 도 10의 인스토리지 컴퓨터 컨트롤러(1005)로 전송하거나, 도 1의 호스트 컴퓨터(105)에 전송할 수 있다.The output of transcoder 420 (the output stream described with reference to FIG. 6) may be stored in output buffer 1110. Again, data may be transmitted directly to its destination as it is produced by transcoder 420, but it may be useful to transmit data in specific units, such as complete data pages or column chunks. In this situation, output buffer 1110 may store the output stream until an appropriate data unit is generated. At that point, column chunk processor 1010 may transmit the output stream to in-storage computer controller 1005 of FIG. 10 or host computer 105 of FIG. 1 as appropriate for 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 (shown external to the transcoder 420 in FIG. 11, although the index mapper 615 may be part of the transcoder 420 as shown in FIG. 6) includes an attribute evaluator 1115. and “Don Care (No Justice)” may receive information from the evaluator 1120. Attribute evaluator 1115 receives attributes from in-storage computer controller 1005 of Figure 10 and uses the attributes to determine data of interest. The comparison operator uses attributes to identify which values in the input dictionary 805 of FIG. 8 (which may be any of the dictionary pages 920, 925 of FIG. 9) are of interest to the host computer 105 of FIG. 1. Can be used by evaluator 1115. Doncare evaluator 1120 may operate similarly (but in mirror form) to identify data of no interest. It should be noted that the attribute evaluator 1115 and the money evaluator 1120 operate complementary, so it is possible to use either evaluator (data that does not meet the criteria for one evaluator) As a result, it fits the criteria of other evaluators): Therefore, either the attribute evaluator 1115 or the money evaluator 1120 can be omitted. This information may be provided by the attribute evaluator 1115 and the doncare evaluator 1120 to the index mapper 615, which may select the output dictionary of FIG. 8 from the input dictionary 805 of FIG. 8. It is 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 host computer 105 of Figure 6 to count the number of items in a data set containing United States citizens. When this query arrives, attributes can be extracted (e.g.: "Citizenship = United States": the exact format of the attribute may vary depending on the dataset format and the application used to submit the query). An inspection of the input dictionary 805 of Figure 8 (such as shown in Table 1) can be used to replace "United States" with the value "3". Accordingly, the attribute provided to index mapper 615 may specify "citizenship = 3", after which index mapper 615 will output the output dictionary 810 of Figure 8 (as shown 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 attribute evaluator 1115 may also be provided to transcoder 420 for use in constructing transcoding rules 630 of FIG. 6. Because the transcoding rules 630 of FIG. 6 depend on the host computer 105 of FIG. 1 knowing the data of interest, the transcoding rules 630 of FIG. 6 are adapted to use the results of the attribute evaluator 1115. It can be adapted. For example, consider again the rule shown in Table 7. The results of attribute evaluator 1115 (or the map from input dictionary 805 in FIG. 8 to output dictionary 810 (described in Table 3)) may be used to set appropriate values for P and DC in various rules. You can.

또한 도 11에서, 속성(predicate)은 입력 스트림으로서 트랜스코더(420)에 입력되는 모든 데이터에 적용된다는 것에 유의해야 한다. 속성이 도 1의 호스트 컴퓨터(105)가 쿼리를 제출하는 데이터 세트 전체에 적용될 것이라고 결론을 내는 것이 합리적이지만, 트랜스코더(420)는 입력 스트림이 데이터 세트의 일부를 나타낼지라도 입력 스트림을 완전한 것으로 본다. 예를 들어, 칼럼 청크 프로세서(1010)는 트랜스코더(420)를 사용하는 자기 자신의 "입력 스트림"으로서 도 9의 각 데이터 페이지들(930-1, 930-2 및 930-3)를 처리할 수 있다. 트랜스코더(420)는 입력 스트림이 나타내는 것에 대해 알지 못하므로, 이 프로세스는 문제없이 작동한다.It should also be noted that in Figure 11, the attribute (predicate) is applied to all data input to the transcoder 420 as an input stream. Although it is reasonable to conclude that the properties will apply to the entire data set for which host computer 105 of Figure 1 submits a query, transcoder 420 views the input stream as complete, even if it represents only a portion of the data set. . For example, column chunk processor 1010 may process each of the data pages 930-1, 930-2, and 930-3 in FIG. 9 as its own “input stream” using transcoder 420. You can. Since the transcoder 420 has no knowledge of 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)가 새로운 입력 스트림을 처리할 것으로 예상될 때까지).FIGS. 12A to 12C show flowcharts of exemplary procedures for transcoding data by the transcoder 420 of FIGS. 4 and 6 according to an embodiment of the present invention. At block 1205 of Figure 12A, transcoder 420 of Figure 6 may check whether there is still data to be received from the input stream. Generally, this input stream can come from any source, but as discussed previously in Figures 9-11, this input stream can be pages of data from column chunks when the data is stored in a columnar format. When there is no more data remaining to be received from the input stream, at block 1210 the transcoder 420 of Figure 6 encodes any remaining transcoders in either the previous encoding buffer 625 of Figure 6 or the current encoding buffer 620 of Figure 6. You can check whether there is coded data. If transcoded data remains in either the previous encoding buffer 625 in FIG. 6 or the current encoding buffer 620 in FIG. 6, the transcoded data in the previous encoding buffer 625 in FIG. 6 is sent to the output stream. is output, and then the transcoded data in the current encoding buffer 625 of FIG. 6 is output. In most situations, the current encoding buffer 620 of FIG. 6 should be empty, since the rule evaluator 635 may operate on data in the current encoding buffer 620 of FIG. 6. Even in situations where data may remain in the current encoding buffer 620 of FIG. 6 as a result of applying the transcoding rule 630 of FIG. 6 (e.g., as shown in rules 6-9 of Table 7), The rule evaluator 635 in FIG. 6 is used before the transcoder 420 in FIG. 6 finds new data from the input stream (via the circular buffer 605 in FIG. 6 and the stream splitter 610 in FIG. 6). It will act on that data: transcoder 420 in Figure 6 may wait for the current encoding buffer 620 in Figure 6 to be cleared before attempting to process the next chunk of data in the input stream. However, if transcoded data remains in the current encoding buffer 620 of FIG. 6, the transcoded data may be output to an output stream. Once all data has been output to the output stream at block 1215, processing may be terminated (until transcoder 420 of Figure 6 is expected to process a 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 there is still data to process from the input stream, at block 1220 the circular buffer 605 of Figure 6 may receive the next encoded data from the input stream, after which the stream splitter 610 of Figure 6 may split the encoded data. The first chunk can be identified and the chunk can be delivered to the index mapper 615 of FIG. 6. (In an embodiment of the invention in which the index mapper 615 of Figure 6 is provided as an effective part of the rule evaluator 635 of Figure 6, the stream splitter 610 of Figure 6 divides the encoded data chunk into the current encoding buffer of Figure 6. 620.) At block 1225, the index mapper 615 of FIG. 6, or the rule evaluator 635 of FIG. 6, may determine whether a chunk of data is of interest, more specifically: , depending on whether the data chunk contains data requested by the host computer 105 of FIG. 1 (e.g., from an attribute).

인코딩 데이터의 청크가 도 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 data of interest to the host computer 105 of FIG. 1, then 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 in Figure 8 to the output dictionary 810 in Figure 8 to re-encode any data in the chunk. At block 1235, rule evaluator 635 of FIG. 6 may check whether data transcoded in previous encoding buffer 625 of FIG. 6 is of interest to host computer 105 of FIG. 1. If not (and recall that the current chunk is of interest to the host computer 105 of FIG. 1 as determined at block 1225 of FIG. 12A), then at block 1240 the transcoder 420 of FIG. 6 ) may output the transcoded data from the previous encoding buffer 625 of FIG. 6 to an output stream, and at block 1245 the transcoder 420 of FIG. 6 may output the currently transcoded chunk to the previous encoding buffer 625 of FIG. After storing in encoding buffer 625, the procedure returns to block 1205 in Figure 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, if, as determined at block 1235, the previous encoding buffer 625 of Figure 6 also stored data of interest to the host computer 105 of Figure 1, then at block 1250 the rule evaluator of Figure 6 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 Figure 6 uses one of the chunks (either the chunk in the current encoding buffer 620 in Figure 6 or the chunk in the previous encoding buffer 625 in Figure 6). You can change the encoding method. (In situations where more than one encoding method is used, the rule evaluator 635 in Figure 6 determines the encoding method used for the two chunks of the current encoding buffer 620 in Figure 6 and the previous encoding buffer 625 in Figure 6. ) Then, if chunks in 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 scheme, the rule of FIG. 6 is evaluated at block 1260. Group 635 may combine the two chunks into a single chunk, which may be stored in the previous encoding buffer 625 of FIG. 6, after which the process may return to block 1205 of FIG. 12A.

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

다시 현재 청크가 도 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 Figure 12B, which illustrates the operations performed when a current chunk is of interest to host computer 105 of Figure 1 (as determined at block 1225 of Figure 12A). If the chunk is not currently of interest to host computer 105 of FIG. 1 (as determined at block 1225 of FIG. 12A), the index mapper 615 of FIG. 6 (or FIG. 6) at block 1265 (FIG. 12C) The rule evaluator 635 in will use the map from the input dictionary 805 in Figure 8 to the output dictionary 810 in Figure 8 to re-encode all data in the chunk (in particular, the "undefined" values). You can. At block 1270, rule evaluator 635 of Figure 6 may check whether data transcoded in previous encoding buffer 625 of Figure 6 is of interest to host computer 105 of Figure 1. If so (recall that the current chunk is not of interest to the host computer 105 of FIG. 1, as determined at block 1225 of FIG. 12A), then at block 1275 the transcoder 420 of FIG. 6 may output the transcoded data in the previous encoding buffer 625 of FIG. 6 to an output stream, and at block 1280, the transcoder 420 of FIG. 6 may transmit the current transcode to the previous encoding buffer 625 of FIG. The coded chunk can be stored, and then the process returns to block 1205 in 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, if, as determined at block 1270, the previous encoding buffer 625 of Figure 6 also stores data of no interest to the host computer 105 of Figure 1, then at block 1285 the rule evaluator of Figure 6 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 evaluates one of the chunks (either the chunk in the current encoding buffer 620 in FIG. 6 or the chunks in the previous encoding buffer 625 in FIG. 6 You can change the encoding method used by one of the following: (In situations where more than one encoding method is used, the rule evaluator 635 in Figure 6 determines the encoding method used for both chunks of the current encoding buffer 620 in Figure 6 and the previous encoding buffer 625 in Figure 6. can be changed.) Then, if chunks in 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 scheme, the rule of FIG. 6 is used 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, after which the process may return to block 1205 of FIG. 12A.

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

도 12a-12c 전체에 걸쳐, 도 6의 이전 인코딩 버퍼(625)에 일부 데이터가 존재한다는 암시적인 가정이 존재한다. 예를 들어, 블록들(1235 및 1270)은 도 6의 이전 인코딩 버퍼(625)에 일부 데이터가 있는 상황을 설명한다. 결합될 데이터 청크들의 결합을 지원하기 위해, 트랜스코딩된 데이터가 도 6의 이전 인코딩 버퍼(625)에 버퍼링될 수 있기 때문에 이것은 일반적으로 합리적인 가정이다(데이터가 이미 출력 스트림으로 출력된 경우에는 청크 결합을 시도하기에는 너무 늦을 수 있다). 그러나, 도 6의 이전 인코딩 버퍼(625)에 저장된 데이터가 없는 상황이 있을 수 있다. 일례로서, 입력 스트림의 최초 청크가 처리될 때, 이전의 인코딩 버퍼(625)에는 데이터가 전혀 존재하지 않는다(그 입력 스트림에서 이전에 처리된 것이 없기 때문에).Throughout Figures 12A-12C, there is an implicit assumption that some data is present in the previous encoding buffer 625 of Figure 6. For example, blocks 1235 and 1270 describe a situation where there is some data in the previous encoding buffer 625 of Figure 6. This is generally a reasonable assumption since the transcoded data may be buffered in the previous encoding buffer 625 of Figure 6 to support the combining of data chunks to be combined (chunk combining if the data has already been output to the output stream) It may be too late to try). However, there may be situations 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 in the previous encoding buffer 625 (since 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 data chunk combining, in which case there is absolutely no value in storing the previous chunk in the previous encoding buffer 625 of Figure 6. If there is no data in the previous encoding buffer 625 of FIG. 6, a comparison of the current chunk with the (non-existent) chunk from the previous encoding buffer 625 of FIG. 6 or the (non-existent) chunk from the previous encoding buffer 625 of FIG. There is no point in outputting chunks that do not work. A simple solution is that if there is no data in the previous encoding buffer 625 of Figure 6, nothing that depends on the presence of data in the previous encoding buffer 625 is performed. Thus, for example, in Figure 12B, if there is no data in previous encoding buffer 625, processing may jump directly from block 1230 to block 1245 (and 12C, processing may jump directly from block 1265 to block 1280 (to buffer the currently transcoded chunk in the previous encoding buffer 625 of FIG. 6). ).

도 12b 및 12c의 면밀한 검토를 통해, 둘 사이의 차이가 상대적으로 적음을 알 수 있다. 주목할 만한 약간의 차이는 블록들(1230 및 1265), 그리고 블록들(1235 및 1270)을 떠나는 상이한 분기들에 있다. 실제로, 이러한 차이 조차도 비교적 의미는 작다: 블록들(1230 및 1265)은 모두 도 8의 출력 사전(810)에 기초한 재 인코딩에 관한 것이다(블록 1265는 "무정의" 값의 사용을 구체적으로 명명함). 그리고 블록들(1235 및 1270)을 떠나는 분기가 상이하게 레이블링되어 있지만, 그 이유는 블록들(1235 및 1270)이 현재 청크가 이전 청크와 결합될 수 있는지를 결정하는 것에 관한 것이기 때문이다. 이에 따라, 도 12b 및 도 12c는 동작 시퀀스와 관련하여 약간의 명확성의 손실을 희생하면서 이론적으로 결합될 수 있다.Close examination of Figures 12b and 12c shows that the difference between them is relatively small. Some notable differences are in blocks 1230 and 1265, and the different branches leaving blocks 1235 and 1270. In practice, even this difference is relatively minor: blocks 1230 and 1265 both relate to re-encoding based on the output dictionary 810 of Figure 8 (block 1265 specifically names the use of an “undefined” value ). And although the branches leaving blocks 1235 and 1270 are 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 theoretically be combined at the expense of some loss of clarity with respect to the operational sequences.

도 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)에).FIG. 13 shows a flow diagram of an example procedure for the stream splitter 610 of FIG. 6 for splitting input encoded data into chunks. Referring to Figure 13, at block 1305, stream splitter 610 of Figure 6 may receive input encoded data (originating from storage 305 of Figure 3 within storage device 120 of Figure 1). , which may be buffered in a buffer such as the input buffer 1105 in FIG. 11 or the circular buffer 605 in FIG. 6. At block 1310, stream splitter 610 of FIG. 6 may divide the input encoded data into chunks. At block 1315, stream splitter 610 of Figure 6 may transmit the chunk to transcoder 420 of Figure 6 (or to index mapper 615 of Figure 6 or current encoding buffer 620 of Figure 6). ).

도 14a 내지 14b는 본 발명의 실시 예에 따른 칼럼 포맷으로 데이터를 트랜스코딩하기 위한 도 10의 칼럼 청크 프로세서(1010) 그리고/또는 도 4 및 도 6의 트랜스코더(420)에 대한 예시적인 절차의 흐름도를 보여준다. 도 14a 내지 도 14b는 또한 적어도 하나의 실시 예에서 도 6의 스트림 스플리터(610)가 어떻게 도 13의 블록(1305)에서 설명된 바와 같이 입력 인코딩 데이터를 수신하는지에 대한 확장된 예를 또한 보여준다. 14A to 14B illustrate example procedures for the column chunk processor 1010 of FIG. 10 and/or the transcoder 420 of FIGS. 4 and 6 for transcoding data into a column format according to an embodiment of the present invention. Shows a flow chart. Figures 14A-14B also show an expanded example of how the stream splitter 610 of Figure 6 receives input encoded data as described at block 1305 of Figure 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)에 저장된 데이터의 블록일 수 있음).At block 1405 of Figure 14A, the column chunk processor 1010 of Figure 10 processes the file-block map 915 of Figure 9 for a file, or alternatively or cumulatively the file-block map 530 of Figure 5. ) can be accessed. At block 1410, the column chunk processor 1010 of FIG. 10 uses 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. You can use it. If each of the column chunks 910-1, 910-2, and 910-3 in Figure 9 includes its own dictionary page 925 in Figure 9, the dictionary page 925 in Figure 9 is the file meta in Figure 9. Data 905 may be omitted, in which case block 1410 may be omitted as shown by dashed 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 (which may be stored in the storage device of FIG. 1 ( may be a block of data stored in 120).

블록(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)에 (순서대로)전달할 수 있다. At block 1425 (FIG. 14B), column chunk processor 1010 of FIG. 10 may determine whether there are more column chunks (blocks) to access. Otherwise (column chunks no longer exist), the processor terminates. On the other hand (if column chunks exist), at block 1430, the column chunk processor 1010 of Figure 10 processes the dictionary of Figure 9 from the column chunks 910-1, 910-2, or 910-3 of Figure 9. Page 925 can be accessed. If the file metadata 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 store the dictionary page 920 of FIG. 9. 925 may be omitted, as shown by dashed line 1435, and block 1430 may be omitted. At block 1440, column chunk processor 1010 of FIG. 10 processes data pages 930-1, 930- of FIG. 9 from column chunks 910-1, 910-2, and 910-3 of FIG. 9. 2 and 930-3) can be accessed. At block 1445, column chunk processor 1010 of Figure 10 processes input dictionary 805 of Figure 8 and data pages 930-1, 930-2, and 930-3 of Figure 9 for the column chunk. It can be delivered (in that order) to the transcoder 420 in Figure 6, the stream splitter 610 in Figure 6, or the index mapper 615 in Figure 6.

도 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 shows a flow diagram of an example 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 Figure 15, at block 1505, the index mapper 615 of Figure 6 may receive the input dictionary 805 of Figure 8 (e.g., from the column chunk processor 1010 of Figure 10). . At block 1510, index mapper 615 of Figure 6 may determine which data in input dictionary 805 of Figure 8 is of interest. The index mapper 615 of FIG. 6 makes this determination using, for example, attributes provided from the host computer 105 of FIG. 1, perhaps via the in-storage computer controller 1005 of FIG. 10. At block 1515, index mapper 615 of FIG. 6 may generate output dictionary 810 of FIG. 8. Output dictionary 810 may contain all entries of interest to host computer 105 of FIG. 1, but may contain all entries of no interest to host computer 105 of FIG. 1 into one "don't care." "It can be integrated by value. At block 1520, index mapper 615 of FIG. 6 may map values from input dictionary 805 of FIG. 8 to dictionary 810 of FIG. 8. Finally, at block 1525, index mapper 615 of FIG. 8 may output 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-16B illustrate the in-storage computer controller of FIG. 10 for managing attributes received from the host computer 105 of FIG. 1 and potentially performing acceleration functions for transcoded data according to an embodiment of the present invention. A flow diagram of an example procedure for (1005) is shown. At block 1605 of FIG. 16A, the in-storage computer controller 1005 of FIG. 10 may receive attributes from the host computer 105 of FIG. 1. At block 1610, the in-storage computer controller 1005 of Figure 10 may access the input dictionary 805 of Figure 8 to obtain encoded data covered by the query. At block 1615, the in-storage computer controller 1005 of Figure 10 may identify an item in the input dictionary 805 of Figure 8 that is covered by the attribute (i.e., of interest to the host computer 105 of Figure 1). 8 entry in the input dictionary 805). At block 1620, in-storage computer controller 1005 of Figure 10 may generate output dictionary 810 of Figure 8 containing the items covered by the attribute. At block 1625, the in-storage computer controller 1005 of Figure 10 maps the items of the input dictionary 805 of Figure 8 covered by the attribute to the items of the output dictionary 810 of Figure 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 in-storage computer controller 1005 of FIG. 10 may identify items in the input dictionary 805 of FIG. 8 that are not covered by the attribute (i.e., the in-storage computer controller 1005 of FIG. 1 entries in the input dictionary 805 of Figure 8 that are not of interest). At block 1635, in-storage computer controller 1005 of Figure 10 may add a “don't care” entry to output dictionary 810 of Figure 8. At block 1640 (FIG. 16B), the in-storage computer controller 1005 of FIG. 10 divides items of the input dictionary that are not covered by attributes into "don't care" items of the output dictionary 810 of FIG. 8. 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 (within the transcoder 420 of FIG. 6) adapts the transcoding rules 630 of FIG. 6 according to a query from the host computer 105 of FIG. 1. You can use properties to do this. At block 1650, index mapper 615 of FIG. 6 and rule evaluator 635 of FIG. 6 (potentially both located within transcoder 420 of FIG. 6) encode data from an input stream to an output stream. To transcode, one may use the map from the input dictionary 805 of Figure 8 to the output dictionary 810 of Figure 8 and the transcoding rules 630 of Figure 6 (as discussed above with reference to Figures 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, a variety of options exist. As shown at block 1655, in-storage computer controller 1005 of FIG. 10 receives the output stream from transcoder 420 of FIG. 6 and transmits the transcoded data to host computer 105 of FIG. 1. Transferring, at block 1660, the in-storage 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 in-storage computer controller 1005 of FIG. 10 may apply acceleration functions to data in the output stream, and at block 1670, the in-storage computer controller 1005 of FIG. 10 may apply acceleration functions to the data in the output stream. Can transmit the results of the acceleration function to the host computer 105 of FIG. 1.

도 12a-16b를 참조하면, 본 발명의 개념의 일부 실시 예가 도시되어 있다. 그러나, 당업자는 블록의 순서를 변경하거나, 블록을 생략하거나, 도면에 도시되지 않은 링크를 포함함으로써 본 발명의 다른 실시 예도 가능하다는 것을 인식할 것이다. 흐름도의 이러한 모든 변형은 명시적으로 설명되든 아니든 본 발명의 실시 예인 것으로 간주된다.12A-16B, some embodiments of the inventive concept 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 flowcharts are considered embodiments of the invention, whether or not explicitly described.

본 발명의 실시 예는 종래 기술에 비해 기술적 이점을 제공한다. 종래의 시스템에서, 디코딩된 데이터는 도 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 host computer 105 of Figure 1. Although the data transmitted to host computer 105 of FIG. 1 is optional (i.e., the data transmitted to host computer 105 of FIG. 1 includes data of interest), the data is still transmitted without compression or encoding, which This means that space savings are achieved through selectivity. In contrast, since most of the reduction in storage is achieved through encoding rather than compression, transmitting encoded data to host computer 105 of FIG. 1 is generally equivalent to transmitting decoded data to host computer 105 of FIG. 1. It involves transmitting less data than Additionally, because data can be transcoded from one encoding scheme to another, using transcoder 420 in Figure 6 may be more efficient than decoding and re-encoding the data in separate operations. .

다음의 논의는 본 발명의 특정 양상이 구현될 수 있는 적합한 머신(들)의 간략한 일반적인 설명을 제공하기 위한 것이다. 기계 또는 기계류는 키보드, 마우스 등과 같은 종래의 입력 장치로부터의 입력뿐만 아니라 다른 기계로부터 수신된 지시어, 가상 현실(VR) 환경과의 상호 작용, 생체 피드백, 또는 기타 입력 신호에 의해 적어도 부분적으로 제어될 수 있다. 본 명세서에서 사용되는 용어 "머신"은 단일 기계, 가상 기계, 또는 통신적으로 결합된 기계, 가상 기계 또는 함께 작동하는 장치의 시스템을 광범위하게 포함하는 것으로 의도된다. 예시적인 기계는 개인용 컴퓨터, 워크 스테이션, 서버, 휴대용 컴퓨터, 핸드 헬드 장치, 전화기, 태블릿 등과 같은 컴퓨팅 장치뿐만 아니라 개인 또는 대중 교통(예: 자동차, 기차, 택시 등)과 같은 운송 장치를 포함한다.The following discussion is intended to provide a brief general description of suitable machine(s) on which certain aspects of the invention may be implemented. The machine or machinery may be controlled at least in part by input from conventional input devices such as a keyboard, mouse, etc., as well as instructions received from other machines, interaction with a virtual reality (VR) environment, biometric feedback, or other input signals. You can. As used herein, the term “machine” is intended to broadly encompass a single machine, a virtual machine, or a system of communicatively coupled machines, virtual machines, or devices operating together. Exemplary machines include computing devices such as personal computers, workstations, servers, portable computers, handheld devices, phones, tablets, etc., as well as transportation devices such as personal or public transportation (e.g., automobiles, 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 embedded controllers such as programmable or non-programmable logic devices or arrays, Application Specific Integrated Circuit (ASIC), embedded computers, smart cards, etc. 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 may be connected to each other by means of physical and/or logical networks, such as intranets, the Internet, local area networks (LANs), wide area networks (WANs), etc. Those skilled in this field will understand that network communications utilize a variety of wired and/or wireless short-range and long-range carriers and protocols including radio frequency (RF), satellite, microwave, IEEE 802.11, Bluetooth, optical, infrared, cable, laser, etc. You will understand that

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

본 발명의 기술적 사상의 실시 예들은 하나 또는 그보다 많은 프로세서들에 의해 실행 가능하며 여기에 설명된 바와 같이 본 발명의 기술적 사상의 원소들을 수행하게 하는 명령들을 포함하는 실재하는 비임시 기계 독출 매체를 포함할 수 있다.Embodiments of the inventive concept are executable by one or more processors and include a tangible, non-transitory machine-readable medium containing instructions to perform elements of the inventive concept as described herein. can do.

전술한 방법의 다양한 동작은 다양한 하드웨어 그리고/또는 소프트웨어 구성 요소(들), 회로 그리고/또는 모듈(들)과 같은 동작을 수행할 수있는 임의의 적절한 수단에 의해 수행될 수 있다. 소프트웨어는 논리 기능을 구현하기 위한 실행 가능한 명령의 순서화된 목록을 포함할 수 있고, 단일 또는 다중과 같은 명령 실행 시스템, 장치 또는 싱글 또는 멀티-코어 프로세서 또는 프로세서 포함 시스템과 관련하여 사용하기 위한 임의의 "프로세서 판독 가능 매체"로 구현될 수 있다. The various operations of the above-described method may be performed by any suitable means capable of performing the operations, such as various hardware and/or software component(s), circuit(s) and/or module(s). The software may include an ordered list of executable instructions for implementing logical functions, and may contain any instruction execution system, device, such as single or multi-core, for use in connection with a single or multi-core processor or system containing the processor. 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, 또는 당업계에 공지된 임의의 다른 형태의 저장 매체에 저장될 수 있다.The blocks or steps of methods or algorithms and functions described in connection with the embodiments disclosed herein may be implemented directly as hardware, software modules executed by a processor, or a combination of the two. If implemented in software, the functions may be stored on or transmitted over as one or more instructions or code on a tangible, non-transitory computer-readable medium. The software module may be 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 as known in the art. It may be stored in any other known form of storage medium.

예시된 실시 예를 참조하여 본 발명의 개념의 원리를 설명하고 도시 하였지만, 예시된 실시 예는 그러한 원리를 벗어나지 않고 배열 및 상세하게 수정될 수 있으며, 임의의 원하는 방식으로 조합될 수 있음을 인식할 것이다. 그리고, 전술한 논의가 특정 실시 예에 초점을 맞추었지만, 다른 구성이 고려된다. 특히, "본 발명의 실시 예에 따른"등과 같은 표현이 본 명세서에서 사용되더라도, 이들 문구는 일반적으로 실시 예의 가능성을 참조하기 위한 것이며, 본 발명의 개념을 특정한 실시 예의 구성으로 제한하려는 것은 아니다. 본 명세서에서 사용 된 바와 같이, 이들 용어는 다른 실시 예에 결합 가능한 동일하거나 상이한 실시 예를 지칭할 수 있다.Although the principles of the inventive concept have been described and illustrated with reference to illustrated embodiments, it will be recognized that the illustrated embodiments may be arranged and detailed without departing from the principles thereof, and may be combined in any desired manner. will be. And, although the foregoing discussion focuses on specific embodiments, other configurations are contemplated. In particular, although expressions such as “according to embodiments of the present invention” are used in the present specification, these phrases are generally intended to refer to the possibility of embodiments, and are not intended to limit the concept of the present invention to the configuration of specific embodiments. 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 inventive concept. Although several embodiments have been described, those skilled in the art will readily appreciate that many modifications may be made to these embodiments without departing substantially 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 without limitation to the following statements:

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

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

입력 사전과 출력 사전을 맵핑하기 위한 인덱스 매퍼;an index mapper to map input and output dictionaries;

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

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

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

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

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

진술 4. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 여기서 인덱스 매퍼는 입력 사전에서 선택된 서브 세트의 항목들에 응답한다.Statement 4. An embodiment of the invention includes a transcoder according to statement 1, wherein the index mapper responds to a 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, a Field Programmable Gate Array (FPGA), an Application-Specific Integrated Circuit (ASIC), a Graphics Processing Unit (GPU), or a general-purpose Includes at least one 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 at least one software for implementing a transcoding rule and storage for storing 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 circuitry for implementing transcoding rules.

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

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

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

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

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

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

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

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

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

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

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

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

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

진술 19. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 트랜스코더는 입력 인코딩 데이터의 디코딩없이 입력 인코딩 데이터로부터 출력 스트림을 생성하도록 동작한다.Statement 19. An embodiment of the present invention includes a transcoder according to statement 1, wherein the transcoder is operative to generate an output stream from 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 includes a transcoder according to statement 20, wherein input encoded data is received from storage in an SSD storage device.

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

트랜스코더에서, 스토리지 장치로부터의 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계;At the 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 데이터 청크를 수신하는 단계;receiving, at the transcoder, 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. Embodiments of the invention include a method according to statement 22, wherein generating second encoded data from a second data chunk based at least in part on a second data chunk of no interest to the host computer comprises: 1 It includes the step of 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. Embodiments of the invention include a method according to statement 23, generating second encoded data from a second data chunk based at least in part on a second data chunk that is not of interest to the host computer, comprising: and combining the second encoded data with third encoded data containing a “don’t care” value.

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

진술 27. 본 발명의 실시 예는 진술 25에 따른 방법을 포함하고, 제 2 데이터 청크 및 제 3 인코딩 데이터 중 적어도 하나의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계는, 제 3 인코딩 데이터의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하는 단계를 포함한다. Statement 27. An embodiment of the present invention includes a method according to statement 25, wherein changing the first encoding scheme of at least one of the second data chunk and the third encoded data to a second encoding scheme comprises: changing the first encoding scheme of at least one of the second data chunk and the third encoded data to a second encoding scheme; It includes changing the first encoding method 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 generates first encoded data from a first data chunk based at least in part on the first data chunk of interest, comprising: and combining the encoded data with third encoded data.

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

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

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

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

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

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

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

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

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

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

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

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

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

진술 36. 본 발명의 실시 예는 진술 34에 따른 방법을 포함하고, 호스트 컴퓨터의 관심 데이터 및 호스트 컴퓨터의 비관심 데이터에 적어도 부분적으로 기초하여 입력 사전을 출력 사전에 매핑하는 단계는, 입력 사전에서 선택된 항목의 서브셋에 적어도 부분적으로 기초하여 입력 사전을 출력 사전에 매핑하는 단계를 포함한다.Statement 36. Embodiments of the present invention include a method according to statement 34, wherein mapping an input dictionary to an output dictionary based at least in part on data of interest in the host computer and data of interest in the host computer comprises: in the input dictionary and 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 includes a method according to statement 22, wherein the transcoder operates to generate first encoded data and second encoded data from input encoded data without decoding the input encoded data.

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

진술 39. 본 발명의 실시 예는 진술 38에 따른 방법을 포함하며, Statement 39. Embodiments of the invention include methods according to statement 38,

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

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

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

트랜스코더에서, 스토리지 장치로부터의 입력 인코딩 데이터로부터 제 1 데이터 청크를 수신하는 단계;At the 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 데이터 청크를 수신하는 단계;receiving, at the transcoder, 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 인코딩 데이터를 상기 호스트 컴퓨터에 출력하는 단계를 수행한다. Outputting the first encoded data and the second encoded data to the host computer is performed.

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

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

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

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

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

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

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

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

호스트 컴퓨터의 관심이 없는 제 2 데이터 청크에 적어도 부분적으로 기초하여 제 2 데이터 청크로부터 제 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 includes generating second encoded data from the second data chunk based at least in part on transcoding rules. Includes creation steps.

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

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

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

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

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

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

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

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

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

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

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

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

진술 57. 본 발명의 실시 예는 진술 56에 따른 상품을 포함하며, Statement 57. Embodiments of the present invention include products according to Statement 56,

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

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

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

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

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

스토리지에 저장된 입력 인코딩 데이터에 적용되는 호스트 컴퓨터로부터 발생하는 속성을 수신하는 인스토리지 컴퓨터(ISC) 컨트롤러; 그리고an in-storage computer (ISC) controller that receives attributes originating from a host computer applied to input encoded data stored in storage; and

입력 인코딩 데이터에 대한 입력 사전으로부터 출력 사전으로 매핑하기 위한 인덱스 매퍼를 포함하는 트랜스코더를 포함하되, 입력 사전은 적어도 하나의 제 1 항목 및 적어도 하나의 제 2 항목을 포함하고, 상기 적어도 하나의 제 1 항목은 적어도 하나의 제 3 항목에 매핑되고, 적어도 하나의 제 2 항목은 출력 사전의 "무정의" 항목에 매핑된다. A transcoder comprising an index mapper for mapping from an input dictionary to an output dictionary for input encoded data, wherein the input dictionary includes at least one first item and at least one second item, the at least one first item The first item is mapped to at least one third item, and at least one second item is mapped to an “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 a storage device according to statement 58, wherein 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 Includes at least one of GPUs (GPGPU).

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

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

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

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

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

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

입력 인코딩 데이터를 저장하는 버퍼;Buffer to store input encoding data;

인덱스 매퍼;index mapper;

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

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

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

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

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

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

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

출력 인코딩 데이터는 제 2 인코딩 방식을 사용하고; 그리고The output encoded data uses a second encoding method; 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, wherein input encoded data is stored in the storage in a columnar format.

진술 70. 본 발명의 실시 예는 진술 69에 따른 스토리지 장치를 포함하고, 입력 인코딩 데이터는 아파치 파케이(Apache Parquet) 스토리지 포맷을 사용하여 저장된 입력 파일을 포함한다.Statement 70. An embodiment of the present invention includes a storage device according to statement 69, wherein 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 a storage device according to statement 69, and further includes a column chunk processor for processing column chunks containing input encoded data and delivering the input encoded data to the transcoder.

진술 72. 본 발명의 실시 예는 진술 71에 따른 스토리지 장치를 포함하고, 여기서 칼럼 청크 프로세서는 트랜스코더를 포함한다.Statement 72. An embodiment of the present invention includes a storage device according to statement 71, wherein the column chunk processor includes 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 a 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 Includes at least one general-purpose GPU (GPGPU).

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

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

진술 76. 본 발명의 실시 예는 다음을 포함하는 방법을 포함한다:Statement 76. Embodiments of the present invention include methods comprising:

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

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

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

속성에 의해 커버되지 않는 사전에서 적어도 하나의 제 2 항목을 배제하는 출력 사전을 생성하는 단계로서, 트랜스코딩 사전은 적어도 제 3 항목 및 "무정의" 항목을 포함하는 단계; 그리고generating an output dictionary that excludes at least one second item from the dictionary that is not covered by the attribute, wherein the transcoding dictionary includes at least a third item and an “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 that is not covered by the attribute It includes a step of mapping to the “(don’t care)” item.

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

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

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

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

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

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

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

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

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

사전 맵을 사용하여 호스트 컴퓨터의 관심이 있는 제 1 데이터 청크에 적어도 부분적으로 기초하여 제 1 데이터 청크로부터 제 1 인코딩 데이터를 생성하는 단계;generating first encoded data from a first data chunk based at least in part on a first data chunk of interest to 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 a second data chunk based at least in part on a second data chunk that is not of interest to the host computer using the dictionary map; and

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

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

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

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

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

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

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

진술 84. 본 발명의 실시 예는 진술 80에 따른 방법을 포함하고, 사전 맵을 사용하여 입력 인코딩 데이터를 출력 인코딩 데이터로 트랜스코딩하는 단계는, 입력 인코딩 데이터를 디코딩하지 않고, 사전 맵을 사용하여 입력 인코딩 데이터를 출력 인코딩 데이터로 트랜스코딩하는 단계를 포함한다. Statement 84. 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, without decoding the input encoded data, using the dictionary map: and transcoding the input encoded data into output encoded data.

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

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

출력 인코딩 데이터는 제 2 인코딩 방식을 사용하고; 그리고The output encoded data uses a second encoding method; 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 includes 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 includes outputting an output dictionary to the ISC controller.

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

진술 89. 본 발명의 실시 예는 진술 87에 따른 방법을 포함하고, 가속된 데이터를 생성하기 위해 ISC 컨트롤러에 의해 출력 인코딩 데이터에 대해 가속 기능을 수행하는 단계를 더 포함한다.Statement 89. Embodiments of the present invention include 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 present 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 present invention includes a method according to statement 76, further comprising outputting an output dictionary.

진술 92. 본 발명의 실시 예는 진술 76에 따른 방법을 포함하며, 입력 인코딩 데이터에 적용하기 위해 속성을 수신하는 단계는, ISC 컨트롤러로부터 입력 인코딩 데이터에 적용하기 위해 속성을 수신하는 단계를 포함한다.Statement 92. Embodiments of the invention include a method according to statement 76, wherein receiving attributes to apply to input encoded data comprises receiving attributes to apply to 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. Embodiments of the invention include a method according to Statement 76, wherein:

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

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

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

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

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

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

속성에 의해 커버되지 않는 입력 사전에서 적어도 하나의 제 2 항목을 배제하는 출력 사전을 생성하는 단계로서, 트랜스코딩 사전은 적어도 제 3 항목 및 "무정의(don't care)" 항목을 포함하고; 그리고generating an output dictionary that excludes at least one second item in the input dictionary that is not covered by the attribute, wherein the transcoding dictionary includes 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 that is not covered by the attribute is mapped to an “undefined” It includes a step of mapping to the “(don’t care)” item.

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

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

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

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

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

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

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

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

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

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

트랜스코더에서 스토리지 장치로부터의 입력 인코딩 데이터로부터 제 2 데이터 청크를 수신하는 단계;Receiving, at the transcoder, 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 a second data chunk based at least in part on a second data chunk that is not of interest to the host computer using the dictionary map; and

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

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

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

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

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

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

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

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

진술 104. 본 발명의 실시 예는 진술 99에 따른 상품을 포함하며,Statement 104. Embodiments of the present invention include products according to Statement 99,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Claims (8)

입력 인코딩 데이터를 저장하기 위한 버퍼;
입력 사전으로부터 출력 사전으로 맵핑하기 위한 인덱스 매퍼;
상기 입력 인코딩 데이터, 상기 입력 사전 그리고 상기 입력 사전으로부터 상기 출력 사전 으로의 맵에 응답하는 수정된 현재 인코딩 데이터를 저장하는 현재 인코딩 버퍼;
이전 입력 인코딩 데이터, 상기 입력 사전, 그리고 상기 입력 사전으로부터 상기 출력 사전으로의 상기 맵에 응답하는 수정된 이전 인코딩 데이터를 저장하는 이전 인코딩 버퍼; 그리고
상기 현재 인코딩 버퍼에 저장된 상기 수정된 현재 인코딩 데이터, 상기 이전 인코딩 버퍼에 저장된 상기 수정된 이전 인코딩 데이터, 그리고 트랜스코딩 룰들에 응답하여 출력 스트림을 생성하는 룰 평가기를 포함하는 트랜스코더.
a buffer for storing input encoding data;
an index mapper for mapping from an input dictionary to an output dictionary;
a current encoding buffer storing modified current encoding data responsive to the input encoding data, the input dictionary, and a map from the input dictionary to the output dictionary;
a previous encoding buffer storing previous input encoding data, the input dictionary, and modified previous encoding data responsive to the map from the input dictionary to the output dictionary; and
A transcoder comprising a rule evaluator that generates 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.
제 1 항에 있어서,
상기 룰 평가기는 프로세서, FPGA(Field Programmable Gate Array), ASIC(Application-Specific Integrated Circuit), GPU(Graphics Processing Unit) 그리고 범용 GPU(GPGPU) 중 적어도 하나를 포함하는 트랜스코더.
According to claim 1,
The rule evaluator is a transcoder that includes 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 항에 있어서,
상기 룰 평가기는 트랜스코딩 룰을 사용하여 상기 입력 인코딩 데이터로부터 상기 수정된 현재 인코딩 데이터를 생성하도록 동작하는 트랜스코더.
According to claim 1,
A transcoder wherein the rule evaluator is operative to generate the modified current encoded data from the input encoded data using transcoding rules.
제 3 항에 있어서,
상기 룰 평가기는 상기 트랜스코딩 룰을 사용하여 상기 수정된 현재 인코딩 데이터를 포함하도록 상기 수정된 이전 인코딩 데이터를 수정하도록 동작하는 트랜스코더.
According to claim 3,
and the rule evaluator is operative to modify the modified previously encoded data to include the modified current encoded data using the transcoding rules.
제 4 항에 있어서,
상기 룰 평가기는 상기 입력 인코딩 데이터 및 상기 수정된 이전 인코딩 데이터 중 적어도 하나의 제 1 인코딩 방식을 제 2 인코딩 방식으로 변경하도록 동작하는 트랜스코더.
According to claim 4,
The rule evaluator is operable to change a first encoding method of at least one of the input encoding data and the modified previous encoding data to a second encoding method.
제 1 항에 있어서,
제 1 인코딩 방식을 사용하여 상기 입력 인코딩 데이터에서 제 1 청크를 식별하고, 제 2 인코딩 방식을 사용하여 상기 입력 인코딩 데이터에서 제 2 청크를 식별하는 스트림 스플리터를 더 포함하는 트랜스코더.
According to claim 1,
The transcoder further comprising a stream splitter that identifies a first chunk in the input encoded data using a first encoding scheme and identifies a second chunk in the input encoded data using a second encoding scheme.
제 1 항에 있어서,
상기 인덱스 매퍼는 상기 입력 사전의 적어도 하나의 항목을 출력 사전의 "무정의(don't care)" 값에 매핑하도록 동작하는 트랜스코더.
According to claim 1,
A transcoder wherein the index mapper is operative to map at least one item of the input dictionary to a “don't care” value of the output dictionary.
제 1 항에 있어서,
상기 트랜스코더는 상기 입력 인코딩 데이터의 디코딩없이 상기 입력 인코딩 데이터로부터 출력 스트림을 생성하도록 동작하는 트랜스코더.
According to claim 1,
The transcoder is operative to generate an output stream from the input encoded data without decoding the input encoded data.
KR1020240065311A 2019-04-16 2024-05-20 Conditional transcoding for encoded data KR20240078422A (en)

Applications Claiming Priority (9)

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,665 2020-03-16
US16/820,665 US11139827B2 (en) 2019-03-15 2020-03-16 Conditional transcoding for encoded data
KR1020200046249A KR20200121760A (en) 2019-04-16 2020-04-16 Conditional transcoding for encoded data

Related Parent Applications (1)

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

Publications (1)

Publication Number Publication Date
KR20240078422A true KR20240078422A (en) 2024-06-03

Family

ID=72913839

Family Applications (3)

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

Family Applications Before (2)

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

Country Status (4)

Country Link
JP (1) JP7381393B2 (en)
KR (3) KR20200121760A (en)
CN (1) CN111832257B (en)
TW (1) TWI825305B (en)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11791838B2 (en) * 2021-01-15 2023-10-17 Samsung Electronics Co., Ltd. Near-storage acceleration of dictionary decoding
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
US7646317B2 (en) * 2007-04-30 2010-01-12 Jen-Te Chen Decoding method utilizing temporally ambiguous code and apparatus using the same
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
CN106354699B (en) * 2015-07-13 2021-05-18 富士通株式会社 Encoding method, encoding device, decoding method, and decoding device
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
TW202107856A (en) 2021-02-16
TWI825305B (en) 2023-12-11
KR20200121761A (en) 2020-10-26
JP7381393B2 (en) 2023-11-15
KR20200121760A (en) 2020-10-26
CN111832257A (en) 2020-10-27
JP2020178347A (en) 2020-10-29
CN111832257B (en) 2023-02-28

Similar Documents

Publication Publication Date Title
US11838035B2 (en) Using predicates in conditional transcoder for column store
US8898337B2 (en) Real-time multi-block lossless recompression
US9503123B1 (en) Random access to compressed data using bitwise indices
KR20240078422A (en) Conditional transcoding for encoded data
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
US8456332B2 (en) Systems and methods for compression of logical data objects for storage
US8933828B2 (en) Using variable encodings to compress an input data stream to a compressed output data stream
US9479194B2 (en) Data compression apparatus and data decompression apparatus
US8937563B2 (en) Using variable length encoding to compress an input data stream to a compressed output data stream
CN104579356A (en) Method and system for boosting decompression in the presence of reoccurring Huffman trees
WO2017039906A1 (en) Modifying a compressed block of data
TW202311996A (en) Systems and method for data compressing
Kella et al. Apcfs: Autonomous and parallel compressed file system

Legal Events

Date Code Title Description
A107 Divisional application of patent