KR20240078422A - Conditional transcoding for encoded data - Google Patents
Conditional transcoding for encoded data Download PDFInfo
- 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
Links
- 230000004044 response Effects 0.000 claims abstract description 13
- 238000000034 method Methods 0.000 claims description 162
- 238000013507 mapping Methods 0.000 claims description 23
- 238000012545 processing Methods 0.000 claims description 18
- 230000008859 change Effects 0.000 claims description 9
- 238000012856 packing Methods 0.000 description 45
- 230000008569 process Effects 0.000 description 27
- 230000006835 compression Effects 0.000 description 23
- 238000007906 compression Methods 0.000 description 23
- 230000006870 function Effects 0.000 description 20
- 230000001133 acceleration Effects 0.000 description 12
- 230000008901 benefit Effects 0.000 description 12
- 238000012546 transfer Methods 0.000 description 11
- 239000007787 solid Substances 0.000 description 7
- 238000004458 analytical method Methods 0.000 description 6
- 238000006243 chemical reaction Methods 0.000 description 5
- 230000014509 gene expression Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000013519 translation Methods 0.000 description 5
- 238000013459 approach Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000009467 reduction Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000006837 decompression Effects 0.000 description 3
- 238000001914 filtration Methods 0.000 description 3
- 230000005055 memory storage Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000007774 longterm Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 206010000060 Abdominal distension Diseases 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 208000024330 bloating Diseases 0.000 description 1
- 239000000969 carrier Substances 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000013403 standard screening design Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000029305 taxis Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/126—Character encoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/151—Transformation
- G06F40/157—Transformation using dictionaries or tables
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance 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
본 발명은 일반적으로 스토리지 장치에 관한 것으로, 보다 구체적으로는 스토리지 장치 내의 데이터에 대한 트랜스코딩에 관한 것이다.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.
프로세서(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)의 예는 임시 파일, 애플리케이션에 의해 로컬로 사용되는 데이터(다른 스토리지 위치로부터 복사되었을 수 있음) 등을 포함할 수 있다.
프로세서(110) 및 메모리(115)는 다양한 애플리케이션이 실행될 수 있는 운영 체제를 지원할 수도 있다. 이들 애플리케이션은 메모리(115) 또는 스토리지 장치(120)로부터 데이터를 판독하거나 기록하기 위한 요청을 발행할 수 있다. 메모리(115)는 "단기"로 지칭되는 데이터를 저장하는데 사용될 수 있는 반면, 스토리지 장치(120)는 "장기(long-term)", 즉, 데이터가 장기적으로 저장될 것으로 예상되는 데이터를 저장하는데 사용될 수 있다. 스토리지 장치(120)는 장치 드라이버(130)를 사용하여 액세스될 수 있다. 스토리지 장치(120)는 하드 디스크 드라이브(HDD), 솔리드 스테이트 드라이브(SSD), 그리고 임의의 다른 원하는 포맷과 같은 임의의 원하는 포맷일 수 있다.
도 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,
도 3은 다른 접근법들을 사용하여 동일한 데이터를 전달하는 도 1의 스토리지 장치(120) 및 도 1의 프로세서(110)를 보여준다. 하나의 접근법(일반적인 접근법)에서, 데이터는 스토리지 장치(120)내의 스토리지(305, 예를 들어, 하드 디스크 드라이브 상의 플래터(platter)들 또는 SSD와 같은 플래시 메모리 스토리지 장치 내의 플래시 메모리 칩들일 수 있음)로부터 읽혀지고, 프로세서(110)로 직접 전송될 수 있다. 스토리지 장치(120) 상에 저장된(인코딩된 그리고/또는 압축된) 총 데이터가 X 바이트라면, 이는 프로세서(110)로 전송될 데이터의 양이다. 이 분석은, 인코딩 그리고/또는 압축된 데이터를 저장하는데 사용되는 스토리지의 양을 고려하는데, 인코딩되지 않고 압축되지 않은 데이터는 아마도 더 많은 바이트 수일 것이다(그렇지 않은 경우에는 데이터를 인코딩 그리고/또는 압축하는 데 이점이 없을 수 있음). 따라서, 예를 들어, 데이터가 인코딩되지 않고 압축되지 않은 약 10GB의 스토리지를 사용할 수 있지만, 인코딩 그리고/또는 압축될 때 약 5GB의 스토리지를 사용할 수 있다면, 약 10GB가 아닌 약 5GB의 데이터가 스토리지 장치(120)에서 프로세서(110)로 전송될 수 있다.Figure 3 shows the
데이터를 전송하기 위해 제공된 대역폭(그리고 결과적으로 전송에 영향을 미치는 사용된 시간)의 관점에서 스토리지(120)로부터 프로세서(110)로의 데이터 전송을 고려할 수도 있다. 스토리지 장치(120)에 저장된 데이터가 인코딩 그리고/또는 압축될 경우, 스토리지 장치(120)에 저장된 데이터가 프로세서(110)로 직접 전송될 때(화살표(310)를 통해 도시됨)에는 스토리지 장치(120)에 저장된 총 데이터는 초당 B바이트의 유효 속도로 전송될 수 있다. 상술한 예를 계속하면, 스토리지 장치(120)와 프로세서(110) 사이의 연결이 초당 약 1 GB의 대역폭을 포함하는 상황을 고려하기로 한다. 인코딩 그리고/또는 압축된 데이터는 약 5GB의 공간을 차지할 수 있기 때문에, 인코딩 그리고/또는 압축된 데이터는 총 5 초 동안 약 1GB/초의 전송율로 전송될 수 있다. 그러나 (인코딩 그리고/또는 압축 전) 저장된 총 데이터는 약 10GB이므로, 데이터의 유효 전송률 B는 초당 약 2GB이다(약 10GB의 인코딩되지 않고 압축되지 않은 데이터가 약 5 초 내에 전송되므로).Data transfer from
대조적으로, 인스토리지 프로세서(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-
두 공식의 간단한 비교는 인스토리지 프로세서(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-
도 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
상술한 모든 프로세스들은 스토리지 장치(120) 내에서 발생할 수 있다. 트랜스코더(420)가 압축 해제된 데이터(415)를 처리하고 트랜스코딩된 데이터(425)를 생성하면, 트랜스코딩된 데이터(425)는 호스트 컴퓨터(105)에 제공될 수 있다. 디코더(430)는 트랜스코딩된 데이터(425)를 디코딩하여 필터링된 플레인 데이터(435)를 생성할 수 있다. 필터링된 플레인 데이터(435)는 프로세서(110)에 제공될 수 있으며, 그 후 필터링된 플레인(plain) 데이터(435)에 대해 원하는 동작이 수행될 수 있다.All of the above-described processes may occur within
디코더(430)가 트랜스코딩된 데이터(425)를 디코딩하는 것은 트랜스코딩된 데이터(425)에 적용된 인코딩에 관한 무언가를 아는 것을 포함할 수 있음을 주목해야 한다. 이 정보는, 예를 들어, 트랜스코딩된 데이터(425)에 사용된 특정 인코딩 방식, 또는 트랜스코딩된 데이터(425)에 사용된 사전을 포함할 수 있다. 도 4는 이 정보가 스토리지 장치(120)로부터 호스트 컴퓨터(105)로 전달되는 것을 미도시하였지만, 이 정보는 트랜스코딩된 데이터(425)와 병렬로(또는 그 일부로서) 호스트 컴퓨터(105)로 전달될 수 있다. 물론, 트랜스코딩된 데이터(425)는 실제로 인코딩되지 않고 압축되지 않은 경우(트랜스코더(420)의 연산 결과가 인코딩되지 않고 압축되지 않은 데이터를 전송하는 것보다 더 많은 수의 실제 바이트를 전송하는 경우 발생할 수 있음), 트랜스코딩된 데이터(425)는 인코딩 방식 또는 사전에 관한 정보를 생략할 수 있다.It should be noted that
이 시점에서, 인코딩과 압축의 차이점을 논의할 가치가 있다. 데이터 저장에 사용되는 스토리지 양을 줄이려는 두 가지 개념이 관련되어 있지만, 몇 가지 차이점이 있다. 인코딩에는 직접 포함하는 데 너무 길고 비교적 적은 수의 구별되는 값들을 갖는 데이터에 인덱스를 제공하는 사전을 사용하는 것을 일반적으로 수반한다. 예를 들어, 약 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.
사전의 값은 사전이 되는 값의 수가 클수록 줄어들 수 있다. 예를 들어, 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
원래 시퀀스를 저장하기 위한 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
비트 패킹을 사용할 때, 데이터는 임의의 원하는 방식으로 패킹될 수 있다. 예를 들면, 각 값이 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
SSD 컨트롤러(510)는 변환 계층(525, 플래시 변환 계층(FTL)이라고도 함)을 포함할 수 있다. 변환 계층(525)은 도 1의 머신(105)에 의해 제공되는 논리 블록 어드레스(LBA)를 데이터가 실제로 저장되는 SSD(120)의 물리적 블록 주소 (PBA) 변환하는 기능을 수행할 수 있다. 이러한 방식으로, 도 1의 머신(105)은 데이터가 실제로 저장되는 스토리지 장치(120) 상의 물리적 주소를 알 필요없이 자신의 고유 주소 공간을 사용하여 데이터를 참조할 수 있다. 이는, 예를 들어, 데이터가 업데이트될 때 유리할 수 있다: 스토리지 장치(120)는 데이터를 원래 위치에서 업데이트하지 않을 수 있기 때문에, 스토리지 장치(120)는 기존 데이터를 무효화하고 스토리지 장치(120)상의 새로운 PBA에 업데이트를 기록할 수 있다. 또는, 가비지 컬렉션을 위해 선택된 블록에 데이터가 저장되어 있는 경우, 그 데이터는 블록이 소거되기 전에 스토리지 장치(120)상의 새로운 블록에 기록될 수 있다. 변환 계층(525)을 업데이트함으로써, 도 1의 머신(105)은 데이터가 다른 물리 블록 어드레스(PBA)로 이동함에 따라 데이터가 실제로 저장되는 위치와는 분리되어 있다.
SSD 컨트롤러(510)는 또한 파일-블록 맵(530)을 포함할 수 있다. 파일-블록 맵(530)은 파일에 대한 데이터를 저장하는데 어떤 블록이 사용되는지를 지정할 수 있다. 파일-블록 맵(530)은, 예를 들어, 데이터가 칼럼 포맷으로 저장될 때 사용될 수 있다. 파일-블록 맵(530)은 변환 계층(525)의 일부일 수 있고(이 경우 파일-블록 맵(530)은 스토리지 장치(120)의 개별 컴포넌트로 간주되지 않을 수 있음), 또는 변환 계층(525)을 보완할 수 있거나(예를 들어, 변환 계층(525)은 비교적 적은 수의 블록을 사용하는 데이터에 사용되는 반면, 파일-블록 맵(530)은 비교적 많은 수의 블록을 사용하는 데이터에 사용될 수 있다), 또는 변환 계층(525)을 완전히 대체 할 수 있다(이 경우 변환 계층(525)은 SSD 컨트롤러(510)에 존재하지 않을 수 있음).
SSD 컨트롤러(510)는 또한 트랜스코더(420)를 포함할 수 있다. 그러나 본 발명의 실시 예는 스토리지 장치(120) 내의 다른 곳에 트랜스코더(420)를 갖는 구성을 포함할 수 있다(예를 들어, 트랜스코더(420)는 많은 가능성들 중에서도 스토리지 장치(120) 내의 다른 곳의 범용 프로세서(적절한 소프트웨어를 실행), FPGA, ASIC, GPU, 또는 GPGPU를 사용하여 구현), 또는 심지어 스토리지 장치(120) 외부에 존재할 수도 있다.
스토리지 장치(120)는 또한 스토리지 장치(120)에 저장된 데이터를 사용하는 방법을 제어하는 명령어를 실행할 수 있는 도 3의 인스토리지 프로세서(315, 도 5에는 미도시됨)를 포함할 수 있다. 또한, 도 3의 인스토리지 프로세서(315)는 도 1의 프로세서(110) 대신에 스토리지 장치(120) 상에서 로컬로 동작을 실행하기 위해 인스토리지 컴퓨팅 기능을 위해 사용될 수 있다. 트랜스코더(420)와 같이, 도 3의 인스토리지 프로세서(315)는 스토리지 장치(120) 내의 어딘가에 위치하는 범용 프로세서(적절한 소프트웨어를 실행하는), FPGA, ASIC, GPU, 또는 GPGPU를 사용하거나, 심지어 스토리지 장치(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
도 6은 도 4의 트랜스코더(420)의 세부 사항을 보여준다. 도 6을 참조하면, 트랜스코더(420)는 입력 사전, 입력 스트림 및 인코딩 타입과 같은 다양한 입력을 수신하고, 출력 사전 및 출력 스트림과 같은 다양한 출력을 생성할 수 있다. 요컨대, 트랜스코더(420)는 인코딩 타입에 의해 지정된 인코딩 방식을 사용하여 인코딩될 수 있는 입력 스트림을 취하도록 동작할 수 있고, 출력 스트림을 생성할 수 있다. (입력 스트림이 인코딩될 수 있지만, 이하의 설명은 입력 스트림이 압축되지 않는 상황을 고려한다: 입력 스트림이 압축되면, 입력 스트림은 추가 처리 전에 압축해제될 것이다.) 출력 스트림은 입력 스트림과 동일한 인코딩 방식, 또는 상이한 인코딩 방식을 사용하여 인코딩될 수 있다(또는 둘 다: 이하에서 논의되는 바와 같이, 하이브리드 인코딩 방식이 사용될 때 일부 데이터는 하나의 인코딩 방식에서 다른 인코딩 방식으로 변경될 수 있다).Figure 6 shows details of
또한, 입력 스트림과 출력 스트림간에 인코딩 방식이 변경되지 않아도 인코딩 자체가 변경될 수 있다. 예를 들어, 특정 값이 입력 및 출력 사전의 다른 인덱스에 지정된 경우, 사전의 변경 사항이 실제 데이터에 사용된 값에 반영되어야 한다. 이를 위해, 트랜스코더(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,
이 마지막 두 요점의 예로, 위의 표 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
이들 동작을 달성하기 위해, 트랜스코더(420)는 다양한 컴포넌트를 포함할 수 있다. 트랜스코더(420)는 서큘러 버퍼(605, Circular buffer), 스트림 스플리터(610), 인덱스 매퍼(615), 현재 인코딩 버퍼(620), 이전 인코딩 버퍼(625), 트랜스코딩 룰(630) 및 룰 평가기(635)를 포함할 수 있다.To accomplish these operations,
서큘러 버퍼(605)는 도 1의 스토리지 장치(120) 내에 위치하는 도 3의 스토리지(305)로부터 오는 데이터 스트림을 수신할 수 있다. 처리할 데이터 전체가 클 수 있으므로(예를 들어, 몇 기가 바이트 또는 테라 바이트의 데이터) 한 번에 모든 데이터를 로드하여 일부 스토리지 내에서 처리하려고 하면 비현실적 일 수 있다. 따라서, 입력 스트림은 스트림으로서 수신되고 버퍼링되어, 데이터가 전체 데이터 세트보다 더 작은 단위로 처리될 수 있게해야 한다. 도 6은 버퍼(605)를 서큘러 버퍼로서 도시하지만, 본 발명의 실시 예는 입력 스트림으로부터 수신된 데이터를 저장하기 위해 임의의 유형의 버퍼를 사용할 수 있다.
스트림 스플리터(610)는 서큘러 버퍼(605)로부터 데이터를 취하여 그 데이터를 청크들로 분할할 수 있다. 청크는 이후 인덱스 매퍼(615)로 전달될 수 있다. 청크는 트랜스코더(420) 내의 다른 구성 요소에 의해 처리될 데이터의 단위를 나타낼 수 있고, 그 용어가 다른 문맥에서 사용될 수 있으므로 용어 "청크"와 혼동되어서는 안된다(예를 들어, 그 용어인 "칼럼 청크"는 아래도 9를 참조하여 사용될 수 있다).
도 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
도 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),
특정 청크를 인코딩하는데 사용되는 인코딩 방식을 결정하는 한 가지 방법은 청크 내의 특정 비트의 값을 검사하는 것일 수 있다. 예를 들어, 칼럼 스토리지 포맷은 첫 번째 바이트의 최하위 비트를 사용하여 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
반면, 청크(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
물론, 도 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,
둘째, 청크(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.
셋째, 상술한 논의는 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
도 8은 입력 사전을 출력 사전에 매핑하는 도 6의 인덱스 매퍼(615)를 보여준다. 도 8을 참조하면, 인덱스 매퍼(615)는 입력 사전(805)을 수신하고 출력 사전(810)을 생성하는 것으로 도시되어 있다. 도 1의 호스트 컴퓨터(105)가 어떤 데이터에 관심이 있는지에 대한 정보가 주어지면, 인덱스 매퍼(615)는 출력 사전(810)을 생성할 수 있다. 인덱스 매퍼(615)는 또한 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 생성할 수 있다. 상술한 예를 계속하면, 이 맵은 표 3에 도시된 맵핑을 특정할 수 있다. 도시된 바와 같이 "3"은 인덱스 "1"에 매핑 될 수 있으며; 다른 모든 인덱스는 인덱스 "0"에 매핑될 수 있다.Figure 8 shows the
인덱스 매퍼(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
인덱스 매퍼(615)에 관한 네 번째 포인트는 더 미묘하다. 인덱스 매퍼(615)는 출력 사전(810)에 "무정의(don't care)" 값이라는 새로운 항목을 효과적으로 추가한다. 구현을 단순화하기 위해 인덱스 매퍼(615)는 항상 "무정의(don't care)" 값에 대해 동일한 인덱스를 사용하는 것이 이해된다. 입력 사전(805)의 크기는 데이터 세트에 따라 변할 수 있으므로, 인덱스 "0"이 항상 사용될 수 있다.The fourth point about the
그러나, 데이터 세트의 모든 데이터가 도 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
상술한 예는 "무정의(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
비트 오버플로(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
그러나 비트 패킹에서 비트 오버플로 문제가 여전히 발생할 수 있으므로 이 솔루션은 유용하지만 충분하지 않을 수 있다. 비트 패킹에서 비트 오버플로를 피하기 위해, 출력 사전(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
다시 도 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
이것은 "인코딩 데이터는 언제 결합될 수 있는가?"라는 질문으로 이어진다. 그에 대한 짧은 대답은, 도 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
표 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
표 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
표 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
이 청크는 "무정의(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
표 4의 제 4 행에서, 룰 평가기(635)에 의해 처리된 제 4 청크는 "[5, RLE], 1"이다. 이 청크는 관심있는 데이터(값 "1")를 포함하지 않을 수 있으므로, 룰 평가기(635)는 값 "1"을 값 "0"(무정의 데이터임을 지시하는)으로 대체하기 위해 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다. 도In
이 청크는 "무정의(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
표 4의 제 5 행에서, 룰 평가기(635)에 의해 처리된 제 2 청크는 "[1, BP], 3"이다. 이 청크는 관심있는 데이터(값 "3")를 포함할 수 있기 때문에, 값 "3"을 값 "1"로 대체하기 위해 룰 평가기(635)는 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다. 이 트랜스코딩된 청크는 관심있는 데이터를 포함할 수 있는 반면, 이전 인코딩 버퍼(625)는 "무정의(don't care)" 데이터를 포함할 수 있기 때문에, 이 트랜스코딩된 청크는 이전 인코딩 버퍼(625)의 청크와 결합되지 않을 수 있다.In
이 시점에서, 일반적으로 이전 인코딩 버퍼(625)의 트랜스코딩된 데이터는 출력 스트림으로 출력되고 현재 트랜스코딩된 청크는 이전 인코딩 버퍼(625)로 이동될 것이다. 그러나 현재의 트랜스코딩된 청크는 입력 스트림에서 마지막 청크이므로, 양쪽 트랜스코딩된 청크가 출력될 수 있다(물론, 이전 인코딩 버퍼(625)의 청크가 먼저 출력된다). 표 4의 제 6 행은 최종 출력을 보여준다.At this point, typically the transcoded data in the
두 번째 예에서, 도 1의 호스트 컴퓨터(105)는 한국 국민에 관한 자료를 요청했다. 표 1에서 볼 수 있듯이, "한국"의 인덱스는 "2"이다. 따라서 출력 사전은 표 5와 같이 나타낼 수 있다.In the second example,
표 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
표 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
표 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
표 6의 제 4 행에서, 룰 평가기(635)에 의해 처리된 제 4 청크는 "[5, RLE], 1"이다. 이 청크는 관심있는 데이터(값 "1")를 포함하지 않으므로, 값 "1"을 값 "0"(무정의 데이터임을 지시하는)으로 대체하기 위해 룰 평가기(635)는 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다.In
이 청크는 "무정의(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
표 6의 제 5 행에서, 룰 평가기(635)에 의해 처리된 제 2 청크는 "[1, BP], 3"이다. 이 청크는 관심있는 데이터(값 "3")를 포함하지 않을 수 있으므로, 값 "3"을 값 "0"(무정의 데이터임을 지시하는)으로 대체하기 위해 룰 평가기(635)는 도 8의 입력 사전(805)으로부터 출력 사전(810)으로의 맵을 사용할 수 있다.In
이 청크는 "무정의(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
마지막으로, 제 5 청크는 입력 스트림의 마지막 청크이므로, 룰 평가기(635)는 이전 인코딩 버퍼(625)에 트랜스코딩된 데이터를 출력할 수 있다. 표 6의 제 6 행은 최종 출력을 나타낸다.Finally, since the fifth chunk is the last chunk of the input stream, the
위의 예들 중 어느 것도 연속적인 청크가 관심있는 데이터를 포함하는 상황을 보여주지는 않는다. 본 발명의 실시 예는 이러한 상황을 상이한 방식으로 처리할 수 있다. 본 발명의 일 실시 예에서, 현재 인코딩 버퍼(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
룰 평가기(635)는 트랜스코딩 룰(630)을 사용하여 관심있는 데이터 및 관심없는 데이터, 이전 인코딩 버퍼(625)에 저장되는 데이터 vs. 출력될 수 있는 데이터, 그리고 청크가 하나의 인코딩 방식으로부터 다른 인코딩 방식으로 트랜스코딩될 수 있는지 여부를 결정할 수 있다. The
전술한 바와 같이, 룰 평가기(635)는 또한 인덱스 매퍼(615)를 포함할 수 있다. 룰 평가기(635)가 인덱스 매퍼(615)를 포함하는 본 발명의 실시 예에서, 룰 평가기(635)는 트랜스코딩 룰(630)이 적용되기 전에 현재 인코딩 버퍼(620)의 내용에 인덱스 매퍼(615)를 적용할 수 있다.As mentioned above,
표 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
표 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
상기 논의는 일반적으로 데이터에 대해 트랜스코딩이 어떻게 수행될 수 있는지를 설명한다. 그러나 데이터가 칼럼 포맷으로 저장될 때 칼럼 포맷은 트랜스코딩을 유용하기 위해 활용될 수 있다. 이 활용을 설명하기 전에, 칼럼 포맷을 이해하는 것이 유용하다. 설명을 목적으로, 칼럼 포맷은 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
파일 메타 데이터(905)는 파일과 관련된 메타 데이터를 포함할 수 있다. 다른 메타 데이터도 저장될 수 있지만, 도 9는 파일-블록 맵(915) 및 사전 페이지(920)를 포함하는 파일 메타 데이터(905)를 보여준다. 사전 페이지(920)는 상술한 표 1에 도시된 사전과 같은 파일의 데이터 내의 값을 인코딩하는데 사용되는 사전일 수 있다. 사전 페이지(920)는 또한 예를 들어, 하나의 사전은 국가 이름을 저장하고 다른 사전은 성(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-
일반적으로 단일 칼럼 청크는 여러 블록에 걸쳐있을 수 있으며, 단일 블록은 다수의 칼럼 청크들을 저장할 수 있다. 데이터가 저장된 위치와 해당 데이터가 나타내는 내용(예: 그 데이터가 포함된 파일)을 식별할 수 있는 어떤 방법이 있는한 데이터 저장에 대한 보다 일반적인 해결책에는 거의 어려움이 없다. 그러나 이 논의의 목적으로, 칼럼 청크가 단일 블록에 적합하고 블록들이 칼럼 청크를 공유하지 않는 상황을 고려하기로 한다. 따라서, 칼럼 청크들(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
사전 페이지(925)는 칼럼 청크(910-1) 내의 데이터에 사용되는 사전을 저장할 수 있다. 사전 페이지(920)에서와 같이, 사전 페이지(925)는 파일 내의 상이한 데이터를 인코딩하는데 사용될 수 있는 다수의 사전을 저장할 수 있다.The
여기서, 왜 도 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
이제 칼럼 포맷이 설명되었고, 칼럼 포맷을 사용하는 스토리지 장치 내의 도 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
스토리지 장치(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을 참조하여 설명된다.
인스토리지 컴퓨터 컨트롤러(1005) 및 칼럼 청크 프로세서(1010)는 다른 가능성 중에서도 적절히 프로그래밍된 범용 프로세서, FPGA, ASIC, GPU 또는 GPGPU를 사용하여 구현될 수 있다. 인스토리지 컴퓨터 컨트롤러(1005) 및 칼럼 청크 프로세서(1010)는 동일한 하드웨어 또는 다른 하드웨어를 사용하여 구현될 수 있고(예를 들어, 인스토리지 컴퓨터 컨트롤러(1005)는 ASIC으로 구현될 수 있는 반면, 칼럼 청크 프로세서(1010)는 FPGA로 구현될 수 있음), 그것들은 단일 유닛 또는 개별 컴포넌트들로서 구현될 수 있다.The in-
도 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
트랜스코더(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
인덱스 매퍼(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
예로서, 미국 시민을 포함하는 데이터 세트의 항목 수를 카운트하기 위한 도 6의 호스트 컴퓨터(105)로부터의 쿼리(query)를 다시 고려한다. 이 쿼리가 도착하면, 속성이 추출될 수 있다(예를 들면: "시민권 = 미국": 속성의 정확한 포맷은 데이터 세트 포맷 및 쿼리 제출에 사용된 응용 프로그램에 따라 다를 수 있다). 도 8의 입력 사전(805)의 검사(표 1에 표시된 것과 같은)는 "미국"을 "3" 값으로 대체하는데 사용될 수 있다. 따라서, 인덱스 매퍼(615)에 제공된 속성은 "시민권 = 3"을 지정할 수 있고, 그 후에 인덱스 매퍼(615)는 도 8의 출력 사전(810, 표 2에 표시된 것과 같은), 그리고 표 3에 표시된 맵을 생성할 수 있다. As an example, consider again the query from
속성 평가기(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
또한 도 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
도 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
입력 스트림으로부터 처리할 데이터가 여전히 있다고 가정하면, 블록 (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
인코딩 데이터의 청크가 도 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
반면, 블록(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
도 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
다시 현재 청크가 도 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
반면, 블록(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
도 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
도 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
제 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
도 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
도 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
도 14a 내지 14b는 본 발명의 실시 예에 따른 칼럼 포맷으로 데이터를 트랜스코딩하기 위한 도 10의 칼럼 청크 프로세서(1010) 그리고/또는 도 4 및 도 6의 트랜스코더(420)에 대한 예시적인 절차의 흐름도를 보여준다. 도 14a 내지 도 14b는 또한 적어도 하나의 실시 예에서 도 6의 스트림 스플리터(610)가 어떻게 도 13의 블록(1305)에서 설명된 바와 같이 입력 인코딩 데이터를 수신하는지에 대한 확장된 예를 또한 보여준다. 14A to 14B illustrate example procedures for the
도 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
블록(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),
도 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
도 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
블록(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
블록(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
이 시점에서 다양한 옵션들이 존재한다. 블록(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
도 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
다음의 논의는 본 발명의 특정 양상이 구현될 수 있는 적합한 머신(들)의 간략한 일반적인 설명을 제공하기 위한 것이다. 기계 또는 기계류는 키보드, 마우스 등과 같은 종래의 입력 장치로부터의 입력뿐만 아니라 다른 기계로부터 수신된 지시어, 가상 현실(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. 본 발명의 실시 예는:
입력 인코딩 데이터를 저장하기 위한 버퍼;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에 따른 트랜스코더를 포함하고, 상기 인덱스 매퍼는 트랜스코딩 룰에 응답한다.
진술 3. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 트랜스코딩 룰은 인덱스 매퍼에 응답한다.Statement 3. An embodiment of the present invention includes a transcoder according to
진술 4. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 여기서 인덱스 매퍼는 입력 사전에서 선택된 서브 세트의 항목들에 응답한다.
진술 5. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 룰 평가기는 프로세서, FPGA(Field Programmable Gate Array), ASIC(Application-Specific Integrated Circuit), GPU(Graphics Processing Unit), 또는 범용 GPU (GPGPU) 중 적어도 하나를 포함한다.
진술 6. 본 발명의 실시 예는 진술 5에 따른 트랜스코더를 포함하고, 룰 평가기는 트랜스코딩 룰을 구현하기 위한 적어도 하나의 소프트웨어 및 트랜스코딩 룰을 나열하는 테이블을 저장하기 위한 스토리지를 더 포함한다.Statement 6. An embodiment of the present invention includes a transcoder according to
진술 7. 본 발명의 실시 예는 진술 5에 따른 트랜스코더를 포함하고, 룰 평가기는 트랜스코딩 룰을 구현하기 위한 회로를 더 포함한다.Statement 7. An embodiment of the present invention includes a transcoder according to
진술 8. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 룰 평가기는 트랜스코딩 룰을 사용하여 입력 인코딩 데이터로부터 수정된 현재 인코딩 데이터를 생성하도록 동작한다.Statement 8. An embodiment of the present invention includes a transcoder according to
진술 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
진술 16. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 인덱스 매퍼는 입력 사전의 적어도 하나의 항목을 출력 사전의 "무정의(don't care)" 값에 매핑하도록 동작한다.Statement 16. An embodiment of the present invention includes a transcoder according to
진술 17. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 인덱스 매퍼는 "무정의(don't care)" 값을 출력 사전에 추가하도록 동작한다.Statement 17. An embodiment of the present invention includes a transcoder according to
진술 18. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, Statement 18. Embodiments of the present invention include a transcoder according to
입력 인코딩 데이터는 압축된 입력 인코딩 데이터이고; 그리고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
진술 20. 본 발명의 실시 예는 진술 1에 따른 트랜스코더를 포함하고, 트랜스코더는 솔리드 스테이트 드라이브(SSD) 스토리지 장치에 포함된다.Statement 20. An embodiment of the present invention includes a transcoder according to
진술 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 컨트롤러에 출력하는 단계를 포함한다.
진술 106. 본 발명의 실시 예는 진술 105에 따른 상품을 포함하며, 출력 인코딩 데이터를 ISC 컨트롤러에 출력하는 단계는 출력 사전을 ISC 컨트롤러에 출력하는 단계를 더 포함한다.Statement 106. An embodiment of the present invention includes a product according to
진술 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에 따른 상품을 포함하고, 비일시적 스토리지 매체는 머신에 의해 실행될 때 출력 사전을 출력하는 추가 명령을 저장한다.
진술 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.
상기 룰 평가기는 프로세서, 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).
상기 룰 평가기는 트랜스코딩 룰을 사용하여 상기 입력 인코딩 데이터로부터 상기 수정된 현재 인코딩 데이터를 생성하도록 동작하는 트랜스코더.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.
상기 룰 평가기는 상기 트랜스코딩 룰을 사용하여 상기 수정된 현재 인코딩 데이터를 포함하도록 상기 수정된 이전 인코딩 데이터를 수정하도록 동작하는 트랜스코더.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.
상기 룰 평가기는 상기 입력 인코딩 데이터 및 상기 수정된 이전 인코딩 데이터 중 적어도 하나의 제 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 청크를 식별하고, 제 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.
상기 인덱스 매퍼는 상기 입력 사전의 적어도 하나의 항목을 출력 사전의 "무정의(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.
상기 트랜스코더는 상기 입력 인코딩 데이터의 디코딩없이 상기 입력 인코딩 데이터로부터 출력 스트림을 생성하도록 동작하는 트랜스코더.
According to claim 1,
The transcoder is operative to generate an output stream from the input encoded data without decoding the input encoded data.
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)
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)
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 |
-
2020
- 2020-04-15 TW TW109112659A patent/TWI825305B/en active
- 2020-04-16 KR KR1020200046249A patent/KR20200121760A/en not_active Application Discontinuation
- 2020-04-16 JP JP2020073662A patent/JP7381393B2/en active Active
- 2020-04-16 KR KR1020200046258A patent/KR20200121761A/en unknown
- 2020-04-16 CN CN202010298627.5A patent/CN111832257B/en active Active
-
2024
- 2024-05-20 KR KR1020240065311A patent/KR20240078422A/en active Application Filing
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 |