CN111832257B - 编码数据的条件转码 - Google Patents
编码数据的条件转码 Download PDFInfo
- Publication number
- CN111832257B CN111832257B CN202010298627.5A CN202010298627A CN111832257B CN 111832257 B CN111832257 B CN 111832257B CN 202010298627 A CN202010298627 A CN 202010298627A CN 111832257 B CN111832257 B CN 111832257B
- Authority
- CN
- China
- Prior art keywords
- data
- dictionary
- input
- encoded data
- block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- 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
- 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
-
- 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
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
公开了一种转码器。转码器可以包括用于存储输入编码数据的缓冲器。索引映射器可以将输入词典映射到输出词典。当前编码缓冲器可以存储修改的当前编码数据,其可以响应于输入编码数据、输入词典以及从输入词典到输出词典的映射。先前编码缓冲器可以存储修改的先前编码数据,其可以响应于输入编码数据、输入词典以及从输入词典到输出词典的映射。规则评估器可以响应于当前编码缓冲器中的修改的当前编码数据、先前编码缓冲器中的修改的先前编码数据以及转码规则来生成输出流。
Description
相关申请数据
本申请要求2020年3月16日提交的美国临时专利申请序列号16/820,665、2019年4月16日提交的美国临时专利申请序列号62/834,900、2019年12月9日提交的美国临时专利申请序列号62/945,877以及2019年12月9日提交的美国临时专利申请序列号62/945,883的利益,出于所有目的,通过引用将其全部合并于此。
技术领域
本发明构思总体上涉及存储设备,并且更具体地涉及在存储设备内对数据进行转码。
背景技术
诸如固态驱动器(SSD)的存储设备可以存储相对大量的数据。主机处理器可以从SSD请求数据以对数据执行操作。根据连接主机处理器和SSD的特定架构,将数据发送到主机处理器可能需要相对大量的时间。例如,如果使用第3代外围组件互连高速(PCIe)的4条通道连接主机处理器和SSD,则SSD和主机处理器之间可以承载的最大数据量约为每秒4GB。
仍然需要减少发送到主机的数据量,并利用分列格式的好处。
发明内容
根据本发明构思的实施例的一个方面,提供一种转码器,包括:缓冲器,用于存储输入编码数据;索引映射器,用于从输入词典映射到输出词典;当前编码缓冲器,用于存储修改的当前编码数据,所述修改的当前编码数据响应于输入编码数据、输入词典以及从输入词典到输出词典的映射;先前编码缓冲器,用于存储修改的先前编码数据,所述修改的先前编码数据响应于先前输入编码数据、输入词典以及从输入词典到输出词典的映射;以及规则评估器,用于响应于当前编码缓冲器中的修改的当前编码数据、先前编码缓冲器中的修改的先前编码数据以及转码规则来生成输出流。
根据本发明构思的实施例的另一个方面,提供一种方法,包括:在转码器从存储设备接收输入编码数据的第一数据块;确定主机计算机对第一数据块感兴趣;至少部分地基于主机计算机感兴趣的第一数据块从第一数据块生成第一编码数据;在转码器从存储设备接收输入编码数据的第二数据块;确定主机计算机对第二数据块不感兴趣;至少部分地基于主机计算机不感兴趣的第二数据块从第二数据块生成第二编码数据;以及将第一编码数据和第二编码数据输出到主机计算机。
根据本发明构思的实施例的再一个方面,提供一种非暂时性存储介质,所述非暂时性存储介质在其上存储有指令,在由机器执行时使得:在转码器从存储设备接收输入编码数据的第一数据块;确定主机计算机对第一数据块感兴趣;至少部分地基于主机计算机感兴趣的第一数据块从第一数据块生成第一编码数据;在转码器从存储设备接收输入编码数据的第二数据块;确定主机计算机对第二数据块不感兴趣;至少部分地基于主机计算机不感兴趣的第二数据块从第二数据块生成第二编码数据;以及将第一编码数据和第二编码数据输出到主机计算机。
附图说明
图1示出根据本发明构思的实施例的包括可以支持对编码数据进行转码的诸如固态驱动器(SSD)的存储设备的系统。
图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示出根据本发明构思的实施例的图10的存储内计算控制器管理从图1的主机接收的断言并且潜在地对转码数据执行加速功能的示例程序的流程图。
具体实施方式
现在将详细参照本发明构思的实施例,其示例在附图中示出。在以下详细描述中,阐述了许多具体细节以使得能够全面理解本发明构思。然而,应当理解,本领域普通技术人员可以在没有这些具体细节的情况下实践发明构思。在其他情况下,没有详细描述公知的方法,程序,组件,电路和网络,以免不必要地使实施例的各方面不清楚。
将理解,尽管本文可以使用术语第一,第二等来描述各种元件,但是这些元件不应受到这些术语的限制。这些术语仅用于区分一个元件和另一个元件。例如,在不脱离本发明构思的范围的情况下,第一模块可以被称为第二模块,并且类似地,第二模块可以被称为第一模块。
在本文的发明构思的描述中使用的术语仅出于描述特定实施例的目的,并且不旨在限制本发明概念。如在发明概念和所附权利要求的描述中所使用的,单数形式“一”,“一个”和“该”也旨在包括复数形式,除非上下文另外明确指出。还应理解,本文所用的术语“和/或”是指并涵盖一个或多个相关联所列项目的任何和所有可能的组合。还将理解,当在本说明书中使用术语“包括”和/或“包含”时,指定所述特征,整数,步骤,操作,元件和/或组件的存在,但并不排除存在或一个或多个其他特征,整数,步骤,操作,元件,组件和/或其组的添加。附图的组件和特征不一定按比例绘制。
将一些处理能力放置在更接近SSD的地方(例如,使用现场可编程门阵列(FPGA),专用集成电路(ASIC),图形处理单元(GPU)或一些其他处理器)具有一些优势。首先,与将SSD与主机处理器连接相比,SSD与附处理器之间的连接可支持更高的带宽,从而实现更快的数据传输。第二,通过使主处理器不必处理数据,主处理器可以执行其他功能,而近处理器则负责数据处理。
但是,当对数据进行压缩或编码时,数据的近存储处理存在潜在的缺点。为了对原始数据进行操作,一些近存储处理器可能在对数据进行操作之前对数据进行解压缩或解码。此外,近存储处理器可以将结果报告回主处理器。如果在结果中发送到主机处理器的数据量大于原始数据量,则使用近存储处理器引入的增益可能会丢失,或者在最坏的情况下,与首先将压缩或编码数据发送到主机处理器相比,导致向主机处理器发送更多数据。
另外,尽管通常可以对数据进行转码,但是当数据以分列格式(columnar format)存储时,可以进行一些修改以利用分列格式。
以压缩格式对数据进行近数据处理可能会否定分流(offload)的一些益处。如果SSD和主机处理器之间的连接支持X字节/秒的传输,使用压缩率Y压缩数据,并且选择进行传输的数据量为Z,则近处理器发送到主处理器的数据量可以是X*Y*Z。如果此乘积小于X,即如果Y*Z<1,则加速(近处理)可能是有益的。
在本发明构思的一些实施例中,分列存储可以使用数据编码(例如,游程长度编码(RLE))和/或压缩(snappy)来减少存储占用空间。编码而不是压缩可以提供主熵降低。编码之后的压缩率趋于较小(大约小于2)。
例如,在本发明构思的一些实施例中,可以至少部分基于编码算法对编码数据进行近处理而不会扩大结果(也就是说,与将编码原始数据发送给主机处理器相比,导致将更大的结果发送给主机处理器)。可以使用而不扩大结果的编码算法可以包括但不限于词典压缩,前缀编码,游程长度编码(RLE),集群编码,稀疏编码和间接编码:其他编码算法也可以结合本发明构思的实施例的使用。尽管下面描述的发明构思的实施例可能关注于RLE和位填塞(bit packing),但是发明构思的实施例可以扩展以覆盖其他编码算法。
还有另一个问题是如何教转码器过滤哪些数据。这尤其是可以将减小正在存储的数据大小的词典存储在存储数据的位置以外的其他位置的问题。分列存储(这种存储格式的示例)简化了感兴趣的数据的定位。但是,因为词典可能被存储在与数据分离的地方,所以系统可能需要能够定位词典以及所讨论的数据以执行转码。
本发明构思的实施例使得能够对编码的数据进行滤波而不扩大数据。可以使用转换规则使用嵌入在编码数据中的编码信息来对过滤数据进行重新编码。本发明构思的实施例中的转码器可以过滤编码数据并修改发送到主机的编码。因此,代替主机必须处理平实(plain)数据(相对于编码/压缩数据而言可能非常大,取决于压缩算法和/或编码数据的有效性),主机可以接收并处理编码数据。由于主机与存储设备之间的带宽可能会受到限制,这会严重影响发送数据所需的时间,因此与发送平实数据(已过滤或未过滤)相比,发送编码数据可以节省处理时间。
循环缓冲器可以存储足够的数据以一次处理。本发明构思的实施例可以用使用其他结构的缓冲器代替循环缓冲器。
索引映射器可以提供从输入词典映射到与输出流一起使用的精简词典映射的映射。
当前编码缓冲器可以根据适当的编码存储从输入流读取的数据。规则评估器使用来自转码规则,当前编码缓冲器和先前编码缓冲器中的信息,可以决定如何处理当前编码缓冲器中的数据。根据当前编码缓冲器中的数据是否可以与先前编码缓冲器中的数据组合,规则评估器可以基于当前编码缓冲器中的数据更新先前编码缓冲器,输出先前编码缓冲器(和用当前编码缓冲器替换先前编码缓冲器),或采取其他动作。例如,如果转码器在当前编码缓冲器中已经识别被视为“无关”值(在下文中进一步讨论)的值,则这些值可以与先前编码缓冲器中的现有“无关”值组合。
流分离器可以用于识别使用不同编码进行编码的输入流的不同部分(流)。如果使用单编码方案,则编码方案可以作为参数(即,编码类型)被传递。否则,如果使用多编码方案(即,未使用编码类型),则通过检查输入流本身来确定用于给定流的编码方案。例如,以分列存储格式编码存储的数据的第一字节可以包含编码类型信息。对于RLE和位填塞的混合,如果LSB为0,则编码类型=RLE;如果LSB为1,则编码类型=位填塞。
作为各种编码如何工作的示例,请考虑RLE和位填塞(BP)。在RLE中,使用可变无符号整数表示值被重复的频率,然后给出固定长度值。因此,例如,代替发送0000001100000011 00000011 00000011 00000011 00000011 00000011 00000011 00000011(十进制值3的9个副本),可以将数据编码为00001001(十进制值9)00000011(十进制值3),指示00000011应该被重复9次。
在BP中,可以将确定占用更少空间的数据与其他值组合。例如,如果通常使用8位存储数据,则要存储4个值,总共要占用32位。但是,如果已知每个值占用的位不超过4位,则可以将两个值存储在单个字节中:简而言之,这是位填塞。由于存在一些开销来指示要填塞哪些数据与不填塞哪些数据,因此节省的空间比所描述的要少,但是仍然是有益的。
编码包括无符号字节中的组数,然后是一个或多个字节中的填塞值列表。组中的最大值数目可以是8,并且最大组数可以是63。因此,例如,为了表示数据0000000000000001 00000000 00000001 00000000 00000001 00000000 00000001(十进制值0 1 01 0 1 0 1),可以将组定义为00000001(组1)00010000(0,1)00010000(0,1)00010000(0,1)00010000(0,1)。
如上所述,RLE(和其他编码)可以使用可变无符号整数。可变无符号整数也可以使用编码。在每八位组中,最高有效位可以指示当前字节是值中的最后一个字节,还是存在至少一个后续字节。在使用多个字节的情况下,最低有效字节首先呈现,并且最高有效字节最后呈现。因此,例如,十进制值1可以被表示为00000001,十进制值2可以被表示为00000010,依此类推,直到01111111(十进制值127)。十进制值128可以被表示为10000000 00000001,十进制值129可以被表示为10000000 00000010,依此类推。本质上,二进制值被划分为7位的组,除最高有效组外,每7位组前有1。例如,十进制值16,384可以被表示为1000000010000000 00000001。
当使用转码器处理编码数据时,一些数据可能被视为“无关”数据。也就是说,可能存在一些对正在执行的操作没有价值的数据。由于转码器的操作,被认为是“无关”数据的数据可能会映射到不同值。
考虑数据库存储各种人的公民身份信息的情况。可以使用字符串(例如“China”,“Korea”,“India”,“United States”等)存储公民身份。但是由于公民身份的可能值是从有限的集合中得出的,因此可以使用词典来减少存储在数据库中的数据量。因此,例如,值“0”可以代表China,值“1”可以代表India,值“2”可以代表Korea,且值“3”可以代表UnitedStates,并且代表值(索引)而不是国家/地区名称被存储在数据库中。由于有195个国家/地区(截至2019年7月19日),一个字节可以用于存储索引,远少于用于使用每个字符一个字节存储国家名称的字符串。
但是,正在执行的加速操作可能会对美国公民感兴趣:例如,该操作可能是对数据库中美国公民的数量进行计数。因此,其他国家/地区的公民与操作无关:他们是“无关”值。转码器可以映射词典和索引,以反映操作所适用的数据。
分列格式可以使用RLE或位填塞来编码信息。假设以分列存储格式存储的值字符串的一部分,可以使用一位来指示数据是使用RLE还是位填塞存储;然后可以相应地理解其余数据。
为了理解根据本发明构思的实施例的转码器可以如何提供用于编码数据的替换词典,考虑数据包括大量人的公民信息的情况。因为每个人都是公民所在的国家/地区的名称很长,但是国家/地区名称的数量却相对较小(即使代表200个国家/地区,也将占用大约8位,通过将每个公民的国家名称字符串以每个字符一个字节存储在国家名称中,仍然可以明显节省),词典提供显著减少的所存储的数据量。该编码可以使用任何期望的编码方案:例如,RLE编码,词典压缩,前缀编码,位填塞,集群编码,稀疏编码和间接编码。
现在,如果正使用的断言(predicate)(数据过滤)只是为了定位美国公民,则不感兴趣与其他公民有关的数据。例如,主机可能有兴趣知道数据库中有多少美国公民。作为转换的结果,词典可能会减少到用于美国公民的一个条目(对于“无关”条目也可能是隐式或显式条目),并且RLE编码可能被“压缩”以组合非美国的各国公民的相邻RLE条目。因此,数据的编码被压缩为包括1(或2)行的词典。由于与非美国公民有关的数据可以被索引到新词典中的单个条目,因此实际编码数据也可以被减少。因此,通过将断言下推到转码器中,可以对编码数据进行过滤,并提供减少最终发送到主机的数据量的新编码。词典映射可以表示原始词典到转码词典的映射。
现场可编程门阵列(FPGA)可以用于实现(除其他特征之外)转码器,但是本发明构思的实施例可以包括其他形式的实现,包括例如专用集成电路(ASIC),图形处理单元(GPU)或其他执行软件的处理器。另外,存储内计算(ISC)控制器可以与FPGA分开,或者也可以实现为FPGA的一部分。
给定要对其执行加速功能(诸如过滤)的特定文件,ISC控制器可以使用File2Block Map来识别存储文件的数据的文件上的块及其顺序。ISC控制器可以被实现为主机内的组件(与存储设备本身分开),也可以是作为存储设备的一部分的控制器。可以访问这些块,以提供可以(通过输入缓冲器)输入到转码器的输入流。
当文件以分列格式存储时,数据的单位可以是列块(column chunk),列块本身可以包括多个数据页。也就是说,输入缓冲器可以从存储设备中的存储模块接收列块,使得转码器可以对列块进行操作。通常,每个列块可以包括其自己的元数据,该元数据可以指定用于该列块的编码方案和/或要应用于该列块中的数据的词典。然而,并非所有存储格式都使用这种布置:例如,分列存储格式可以将元数据存储在文件的单独区域中(而不是在每个列块中):此元数据可以指定整个文件使用的编码和词典。因此,当使用这种分列存储格式存储文件时,ISC控制器可以从文件的元数据区域(使用File2Block Map定位)中检索编码和词典,并将该信息提供给转码器,而不是假设转码器将从列块中接收所需的任何信息。(当然,当使用分列存储格式时,在列块中可能没有词典页。)请注意,尽管相同编码方案可以应用于每个列块,但编码方案本身可以是混合方案,使用两个或更多个独特的编码方案,并在适当时在它们之间进行切换。例如,混合编码方案可以组合RLE编码和位填塞。
除了确定词典和编码方案之外,ISC控制器还可以提取要应用于编码数据的断言,并将该断言下推到转码器。然后,转码器可以各种方式使用所有这些信息。例如,关于与文件一起使用的编码的信息可以被用于选择要与数据一起使用的转码规则,而词典和断言可以被用于生成转码词典和词典映射。
断言评估器可以使用断言来确定词典中哪些条目是感兴趣的条目,哪些不是,从而生成存储感兴趣值(以及可能表示“无关”条目的值)的转码词典和将原始词典中的索引映射到转码词典的词典映射。
如果转码词典中包括“无关”值的条目,则此操作从技术上在词典中添加条目(因为原始词典中不包括这样的值)。添加这样的条目可能会引入新的问题。向转码词典添加“无关”条目通常发生在转码词典的第一个条目(索引0),意在表示与断言不匹配的值。但是为“无关”条目创建新值可能是昂贵的:公开的系统可能会扫描并重新映射整个词典(因为所有现有索引都减1)。添加“无关”条目也可能导致存储器重新分配或导致位宽溢出:例如,如果给定位数的每个可能值已被用作词典索引,则向词典添加“无关”条目可能会将用于表示索引的位数增加1。如果数据页使用词典的一部分,则数据页可能具有更小的位宽,并且向转码词典添加“无关”条目意味着一个有效值可能不会在数据页中被使用。例如,如果位宽为1,则添加“无关”条目可能包含比使用单位表示更多的值,而如果位宽为2,则可以存在空间容纳“无关”条目,而不会溢出位宽。
解决此问题的方法是确定断言下推是否将导致词典大小的减少。如果词典将减少至少一个条目,则存在用于“无关”条目的空间,而不必担心位宽溢出。如果词典不会减少至少一个条目,则可以将编码数据直接发送到ISC控制器/主机,而无需执行转码,从而避免转码可能增加数据量的可能性。
注意,转码器的输出可以(通过输出缓冲器)被发送回ISC控制器。这有两个目的。首先,尽管将断言下推到转码器中可能会产生转码数据,但是可能仍然存在要对转码数据执行的操作。例如,如果主机尝试计算文件中的美国公民人数,则转码数据将标识那些公民,但不对他们进行计数:该操作可以由ISC控制器作为加速功能执行。第二,可以将转码数据发送回主机以进行进一步的操作。ISC控制器与主机通信,因此提供将转码数据发送到主机的路径。
图1示出根据本发明构思的实施例的包括可以支持对编码数据进行转码的固态驱动器(SSD)的系统。在图1中,可以是主机计算机的机器105可以包括处理器110,存储器115和存储设备120。处理器110可以是任何种类的处理器。尽管图1示出单个处理器110,但是机器105可以包括任何数量的处理器,每个处理器可以是单核或多核处理器,并且可以以任何期望的组合被混合。
处理器110可以耦合到存储器115。存储器115可以是任何种类的存储器,诸如闪存,动态随机存取存储器(DRAM),静态随机存取存储器(SRAM),持久性随机存取存储器,铁电随机存取存储器(FRAM),或非易失性随机存取存储器(NVRAM),诸如磁阻随机存取存储器(MRAM)等。存储器115也可以是不同存储器类型的任何期望的组合,并且可以由存储器控制器125来管理。存储器115可以用于存储可以称为“短期”的数据:也就是说,预计不会长时间存储的数据。短期数据的示例可以包括临时文件,应用在本地使用的数据(可能已从其他存储位置复制了数据)等。
处理器110和存储器115还可以支持各种应用可以运行的操作系统。这些应用可以发出从存储器115或存储设备120读取数据或将数据写入存储器115或存储设备120的请求。尽管存储器115可以用于存储可以被称为“短期”的数据,但是存储设备120可以用于存储可以被称为“长期”的数据:也就是说,预期将长时间存储的数据。可以使用设备驱动器130来访问存储设备120。存储设备120可以具有任何期望的格式,诸如硬盘驱动器,固态驱动器(SSD)以及任何其他期望的格式。
图2示出图1的机器的细节。在图2中,通常,机器105可以包括一个或多个处理器110,其可以包括存储器控制器125和时钟205,可被用于协调机器的组件的操作。作为示例,处理器110还可以被耦合到存储器115,其可以包括随机存取存储器(RAM),只读存储器(ROM)或其他状态保存介质。处理器110还可以被耦合到存储设备120以及网络连接器210,网络连接器210可以是例如以太网连接器或无线连接器。处理器110还可以被连接到总线215,除其他组件外,用户接口220和可以使用输入/输出引擎225管理的输入/输出接口端口可以连接到总线215。
图3示出图1的存储设备120和图1的处理器110使用不同方法通信相同数据。在一种方法(传统方法)中,数据可以被从存储设备120内的存储305(例如可以是硬盘驱动器上的盘片或诸如SSD的闪存存储设备中的闪存芯片)读取,并直接发送到处理器110。如果存储在存储设备120上的全部数据(编码和/或压缩)是X字节,则这是要发送到处理器110的数据量。请注意,此分析考虑用于存储编码和/或压缩数据的存储量:未编码和未压缩数据大概是更大的字节数(否则编码和/或压缩数据可能没有任何好处)。因此,例如,如果数据可以使用大约10GB的未编码和未压缩存储,但是在编码和/或压缩时可以使用大约5GB的存储,则大约5GB的数据而不是大约10GB可以从存储设备120被传递到处理器110。
还可以根据提供的用于传递数据的带宽(以及因此用于进行传递的时间)来考虑从存储器120到处理器110的数据传递。如果存储在存储设备120上的数据被编码和/或压缩,则当存储在存储设备120上的全部数据可以被直接发送到处理器110(通过箭头310显示)时,可以以B字节/秒的有效速率发送存储在存储设备120上的全部数据。继续前面的示例,考虑存储设备120和处理器110之间的连接包括大约1GB/秒的带宽的情况。因为编码和/或压缩数据可以占用大约5GB的空间,所以编码和/或压缩数据可以以大约1GB/秒的连接发送,总共需要5秒。但是,由于存储的全部数据(在编码和/或压缩之前)约为10GB,因此数据的有效传输速率B约为2GB/秒(因为大约5秒内发送了大约10GB的未编码和未压缩数据)。
相反,如果存储内处理器315用于预处理数据,以尝试减少发送到处理器110的数据量,则可能发送更少的原始数据(因为存储内处理器315关于发送什么数据可能更具选择性)。另一方面,存储内处理器315可以解压缩数据以进行处理(并且还可能对数据进行解码)。因此,可以通过选择数据来减少从存储内处理器315发送到处理器110的数据量,但是也可以通过压缩量(并且可能是编码量)来增加数据量:从代数上说,从存储内处理器315发送到处理器110的数据(通过箭头320示出)可以被表示为X*Y*Z G字节(GB),其中,X是用于存储编码和/或压缩数据的空间量,Y是压缩率(使用压缩(可能是编码)减少多少数据存储),Z是选择率(从未压缩数据中选择多少数据)。类似地,可以将数据从存储内处理器315发送到处理器110的有效速率变为B*Y*Z字节/秒。
对两个公式的直接比较表明,当X*Y*Z<X(或B*Y*Z<B)时,也就是说,当Y*Z<1时,使用存储内处理器315选择要发送到处理器110的数据是更好的。否则,即使没有存储内处理器315应用其选择性,存储内处理器315进行预处理之后要发送的数据量也要大于编码和/或压缩数据的量:与存储内处理器315尝试选择要发送到处理器110的数据相比,仅发送原始编码和/或压缩数据更为有效。
图4示出根据本发明构思的实施例的图1的存储设备120和图1的处理器110通信转码数据。在图4中,编码和/或压缩数据被存储在存储305中(再次,存储305可以表示硬盘驱动器中的盘片,诸如SSD的闪存存储设备中的闪存芯片,或用于数据的一些其他物理存储)。该数据(压缩数据405)可以被传递到解压缩器410,该解压缩器410可以对数据进行解压缩,从而产生解压缩数据415。解压缩器410(也称为解压缩引擎)可以使用硬件解压缩或通过在适当电路上运行的软件(诸如作为通用处理器,现场可编程门阵列(FPGA),专用集成电路(ASIC),图形处理单元(GPU)或通用GPU(GPGPU))来实现。由于编码和压缩可以是分开的处理,因此仍可以对解压缩数据415进行编码。然后可以将解压缩数据415传递到转码器420,转码器420可以对数据执行转码。转码可以被认为是将数据从一种编码转换为另一种编码的处理。
所有上述处理可以在存储设备120内发生。但是一旦转码器420处理了解压缩数据415并产生了转码数据425,转码数据425就可以被提供给主机计算机105。然后,解码器430可以对转码数据425进行解码,从而产生过滤平实数据435。过滤平实数据435然后可以被提供给处理器110,处理器110然后可以对过滤平实数据435执行所需的任何操作。
注意,对于解码器430而言,对转码数据425进行解码可以包括知晓关于应用于转码数据425的编码的一些内容。该信息可以包括例如在转码数据425中使用的特定编码方案或在转码数据425中使用的词典。尽管图4没有示出该信息从存储设备120传递到主机计算机105,但是该信息可以与转码数据425并行(或作为其一部分)被传递到主机计算机105。当然,如果转码数据425实际上未被编码且未被压缩(如果转码器420的结果将发送比发送未编码的和未压缩数据更多的实际字节,则可能发生),则转码数据425可以省略有关编码方案或词典的任何信息。
对此,可能值得讨论编码和压缩之间的差异。这两个概念是相关的(都涉及尝试减少用于存储数据的存储量),但是存在一些差异。编码通常涉及使用词典,该词典对直接包含会很长且具有相对较少数量的不同值的数据提供索引。例如,大约有195个不同的国家。如果数据存储了有关大量人的公民身份的信息,包括每个人的直接居住的国家,使用大量空间:至少几个字节(假设国家名称每个字符一个字节)。另一方面,可以使用单个字节来表示值1-195。使用词典表示国家的名称,并在数据中存储相应国家名称的索引,可以显着减少要存储的数据量,而不会丢失任何信息。例如,信息“美国,美国,韩国,韩国,韩国,韩国,中国,印度,中国,中国,中国,中国,中国,美国”可以由表1所示的词典代替表示,结果信息被表示为“3,3,2,2,2,2,0,1,0,0,0,0,0,3”:从153个字符减少到40个字符。即使将词典中的52个字符考虑在内,仅使用词典也可以节省大量资金。
表1
ID | 国家 |
0 | 中国 |
1 | 印度 |
2 | 韩国 |
3 | 美国 |
词典的值数量变得越大,词典的值可以减少。例如,如果有1,000,000个不同的可能值,则每个索引可以使用20位来存储索引。当然,这仍然可能少于直接用于存储值的位数,但是编码的好处(相对于存储未编码的数据)可能会减少。并且如果为数据中每个条目存储的值可能是唯一的,或者用于存储索引的空间量与用于存储值的空间量大致相同,则使用词典编码实际上会增加要存储的数据量。继续关于人的数据的示例,使用词典存储他们的年龄并不比直接存储年龄更有效。
另一方面,压缩通常使用诸如霍夫曼码的编码方案。可以分析数据以确定每个数据的相对频率,将更短的代码分配给更频繁的数据,并且将更长的代码分配给更不频繁的数据。摩尔斯电码尽管不是霍夫曼码,但却是一个众所周知的代码示例,该代码对更频繁的数据使用更短的序列,对更不频繁的数据使用更长的序列。例如,字母“E”可以由序列“点”表示(后跟一个空格),而字母“J”可以由序列“点划划划”(后面跟一个空格)表示。(因为摩尔斯电码使用空格来表示一个符号结束而另一符号开始,并且一个符号的序列可能是另一符号的序列的前缀(请注意,“E”由点表示,而“J”以点开始,但包含其他符号),所以摩尔斯电码不是正确的霍夫曼码。但是,许多人在一种程度上熟悉摩尔斯电码,这使其成为更通用的代码示例,该代码对更频繁的数据使用更短的符号,对较不频繁的数据使用较长的符号)。
返回到编码方案,一旦建立词典,就有许多不同的编码方案可用于进一步编码数据。这样的编码方案的示例包括游程长度编码,位填塞,前缀编码,集群编码,稀疏编码和间接编码:本发明构思的实施例还可以使用其他编码方案。游程长度编码和位填塞在此进行了讨论,因为稍后将在各种示例中使用它们。可以很容易找到有关其他编码方案的信息。
游程长度编码(RLE)依赖于值通常成组出现的前提。代替单独存储每个值,可以存储值的单个副本以及代表该值在数据中出现频率的数字。例如,如果值“2”连续出现四次,代替将值“2”存储四次(可能使用四个字节的存储),值“2”可以与出现次数(“4”)一起存储(这可以使用两个字节的存储)。因此,继续以上示例,序列“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”,并且该值重复两次;其他RLE编码相似。(该表示包括使用RLE编码的指示符的原因与混合编码方案的潜在使用有关,下面参考图7进行讨论。)该序列可以总共使用12个字节:对于每种编码,一个字节存储下一个值重复的次数,一个字节存储要重复的值。
与存储原始序列的14个字节相比,12个字节在存储数据的空间量上没有大的减少。但按比例,此编码表示此数据所需的存储量减少了约14%。即使占用约5GB的数据所使用的存储空间减少了约14%,也是大量节省:可以节省约700MB。
作为每个值的出现次数的替代,可以存储每个组的开始位置。当使用开始位置代替每个值的出现次数的计数时,数据可以被表示为“[0,RLE],3,[2,RLE],2,[6,RLE],0,[7,RLE],1,[8,RLE],0,[13,RLE],3”。
上面的讨论描述了使用RLE重复的值适合单个字节的情况。如果不是这种情况怎么办:例如,如果重复的值是“1000”(“1000”可以使用10位存储)怎么办?在那种情况下,RLE可以以7位为一组序列化该值。每个字节中的第八位(可能是该字节中的最高有效位)可以表示该字节是否在另一个字节中继续。
例如,考虑值“1000”。在二进制中,值“1000”可以被表示为“11 11101000”。由于此表示使用10位,因此该值可能太大而无法被存储在单个字节中。因此,该值可以分到七位的组(添加前导零,使得每个组包含七个位):“0000111 1101000”。现在,序列中的第一个字节可以以“1”开头,以表示它所代表的值在下一个字节中继续,序列中的第二个字节可以以“0”开头,以表示该值以该字节结尾。因此,位序列变为“10000111 01101000”。当系统读取该位序列时,系统可以知道查看每个字节中的最高有效位,以确定该值是继续超出该字节还是以该字节结束,并在将位序列重新组合为值时删除该位。因此,“10000111 01101000”变为“0000001111101000”(添加了两个附加前导零以使表示达到完整的两个字节),从而允许恢复原始值“1000”。
当然,如果每个字节中的一位用于标识该字节是否是值的延续,则该位可能不会用作值的一部分。因此,即使一个值可能适合单个字节,也可能包括指示该值不在另一个字节中继续的附加位。此外,如果该值适合8位而不适合7位(例如,介于128和255之间的值),则当使用指示值是否在下一个字节中继续的位时,可以使用两个字节来表示完整值(因为该值的最高有效位将移至编码中的下一个七位组)。
当使用RLE时,可以按任何所需顺序呈现位和/或字节。例如,可以从最高有效位到最低有效位,或者从最低有效位到最高有效位来呈现这些位;字节可以类似地以两种方式排序。因此,例如,在字节以从最低有效到最高有效呈现,而每个字节中的位从最高有效到最低有效呈现,并且使用连续位的情况下,可以将值“16384”编码为“10000000 1000000000000001”。该位序列可以解释如下:每个字节中的第一位是连续位(“1”表示该值在下一个字节继续,“0”表示该值在下一个字节中不继续)。除去连续位后,剩下的就是“00000000000000 0000001”。当字节从最高有效位到最低有效位重新排序(并重组为常规的八位组,丢弃前导零)时,该值变为“01000000 00000000”,对于值“6384”而言是二进制。
另一方面,位填塞利用了这样的想法,即值可以使用比整个字节更少的位。例如,如果要存储的值包括0、1、2和3,则可以使用两位来表示每个值。尽管可以使用完整字节来存储每个值,但是使用完整字节意味着实际上75%的存储没有使用。位填塞通过在单个字节(或字节序列)中存储多个值来利用这种现象。当值序列重复而不是单个值时,位填塞特别有利。
例如,考虑序列“0,1,0,1,0,1,0,1”,并考虑大约四个位用于唯一地标识每个值的情况(即,使用不大于15的值)。代替单独存储每个值(总共需要八个字节),可以使用编码“[4,BP]0,1”。该编码表示单个字节存储代表值“0”的四个位和代表值“1”的四个位,然后将该字节重复四次。(如RLE编码,位填塞编码可以包括使用位填塞对数据进行编码以用于混合编码方案的指示符。)第一个字节表示组中数据要被重复的次数;第二个字节将值本身存储在组中。这种编码可以使用大约两个字节来存储数据,从而导致该序列使用的存储量减少了大约75%。
当使用位填塞时,可以以任何所需的方式填塞数据。例如,当填塞序列“0,1”(每个值使用四个位)时,该序列可以被表示为“00010000”(将值从最低有效位到最高有效位填塞)或“00000001”(将值从最高有效位到最低有效位填塞)。位填塞的一些实现方式可以使用这两种策略,但是随后颠倒将位放置到流中的顺序(因此,最低有效位的量首先出现)。其他技术也可以用于在位填塞中填塞位。
当然,位填塞不限制可能适合单个字节的组。如RLE,位填塞中的值可以使用一位来标识值是否在下一个字节中继续。
因为编码和压缩都试图减少用于存储数据表示的空间量,所以它们的益处可能不会成倍增加。编码和压缩都试图减少用于存储数据的空间量。但是,一旦以一种方式(诸如编码)压缩了数据,那么应用进一步的紧缩方案(诸如压缩)可能就没有多大用处了。可以在对数据进行编码之后将压缩应用于数据,并且仍然可以减少所使用的存储空间量,但是对编码数据压缩的影响可能小于对未编码数据压缩的益处。(如果不管被压缩的数据如何,每种压缩数据的方案都能得到同等的收益,则人们可能希望仅通过应用重复压缩方案就可以将任何数据缩减到荒谬的小尺寸。经过一番思考,显而易见的是,这样的结果在现实世界中是不现实的。)
图5示出图1的存储设备120的细节。在图5中,存储设备120被示为SSD,但是本发明构思的实施例可以支持具有适当修改的存储设备120的其他形式。在图5中,存储设备120可以包括主机接口层(HIL)505,SSD控制器510以及各种闪存芯片515-1至515-8(也称为“闪存存储器”),它们可以被组织成各种通道520-1至520-4。主机接口层505可以管理图1的存储设备120和机器105之间的通信。这些通信可以包括读取请求,以从存储设备120读取数据并将数据写入存储设备120。SSD控制器510可以使用闪存控制器(图5中未示出)管理对闪存芯片515-1至515-8的读取和写入操作以及垃圾收集和其他操作。
SSD控制器510可以包括转换层525(也称为闪存转换层(FTL))。转换层525可以执行如图1的机器105提供的将逻辑块地址(LBA)转换到实际存储数据的SSD 120上的物理块地址(PBA)的功能。以这种方式,图1的机器105可以使用其自己的地址空间来引用数据,而不必知道实际存储数据的存储设备120上的物理地址。例如,在更新数据时,这可能是有益的:由于存储设备120可能无法就地更新数据,因此存储设备120可以使现有数据无效,并将更新写入存储设备120上的新PBA。或者,如果将数据存储在被选择用于垃圾收集的块中,则可以在擦除块之前将数据写入存储设备120上的新块。通过更新转换层525,当数据移动到不同的PBA时,图1的机器105与实际存储数据的位置隔离。
SSD控制器510还可以包括文件到块映射530。文件到块映射530可以指定哪些块用于存储哪些文件的数据。例如,当数据以分列格式存储时,可以使用文件到块映射530。文件到块映射530可以是转换层525的一部分(在这种情况下,文件到块映射530可以不被认为是存储设备120的单独组件),或者它可以补充转换层525(例如,转换层525可以被用于使用相对较少数量的块的数据,而文件到块映射530可以被用于采用相对更多数量的块的数据),或者它可以完全替代转换层525(在这种情况下在SSD控制器510中可能不存在转换层525)。
SSD控制器510还可以包括转码器420。但是,本发明构思的实施例可以包括在存储设备120内其他地方甚至在存储设备120的外部具有转码器420的配置(例如,可以在存储设备120内的某处使用通用处理器(运行合适的软件),FPGA,ASIC,GPU或GPGPU等实现转码器420(除其他可能性外))。
存储设备120还可以包括图3的存储内处理器315(图5中未示出),可以执行控制如何使用存储在存储设备120上的数据的指令。图3中的存储内处理器315还可以用于存储内计算功能,以在存储设备120上而不是在图1的处理器110上本地执行操作。像转码器420那样,可以使用通用处理器(运行合适的软件),FPGA,ASIC,GPU或GPGPU在存储设备120内某处(除其他可能性外)实现图3的存储内处理器315,甚至在存储设备120外部。
尽管图5将存储设备120示出为包括被组织成四个通道520-1至520-4的八个闪存芯片515-1至515-8,但是本发明构思的实施例可以支持被组织成任意数量的通道的任意数量的闪存芯片。类似地,尽管图5示出SSD控制器510可以包括转码器420和/或图3的存储内处理器315,但是本发明构思的实施例可以配置有转码器420或图3的存储内处理器315,而不是图5所示。
图6示出图5的转码器420的细节。在图6中,转码器420可以接收各种输入,诸如输入词典,输入流和编码类型,并且产生各种输出,诸如输出词典和输出流。简而言之,转码器420可以进行操作以获取输入流,该输入流可以使用由编码类型指定的编码方案来编码,并且可以产生输出流。(尽管可以对输入流进行编码,但是下面的讨论考虑了不压缩输入流的情况:如果输入流被压缩,则可以在进一步处理之前对输入流进行解压缩。)可以使用与输入流相同的编码方案,或可以使用不同的编码方案(或两者:如下所述,当使用混合编码方案时,一些数据可以从一种编码方案改变为另一种编码方案)对输出流进行编码。
另外,即使在输入流和输出流之间编码方案不变,编码本身也可能改变。例如,如果将特定值分配给输入词典和输出词典中的不同索引,则词典中的改变应当被反映在实际数据中使用的值中。为此,转码器420还可以采用输入词典并将其映射到输出词典。
表2
ID | 国家 |
0 | 无关 |
1 | 美国 |
作为最后两点的示例,请再次考虑上面表1中所示的词典。现在考虑图1的主机计算机105对有关美国公民的数据感兴趣的情况。表1可以被看作是输入词典,因为它代表了输入流中正在接收的数据。另一方面,表2可以是输出词典,代表输出流中的数据。关于表2至少要注意三点。首先,与表1所示的四个条目相比,表2包括两个条目。第二,表2包括标有“无关”的条目(尽管可以使用任何其他名称,但是因为由对应值表示的数据此时对于图1的主机计算机105来说是不感兴趣的)。第三,尽管“美国”在表1中具有ID 3,但是“美国”在表2中具有ID 1。这最后一点意味着,输入流中对ID 3的任何引用可以被改变为在输出流中引用ID 1(否则数据可能毫无意义)。
为了完成这些操作,转码器420可以包括各种组件。转码器420可以包括循环缓冲器605,流分离器610,索引映射器615,当前编码缓冲器620,先前编码缓冲器625,转码规则630和规则评估器635。
循环缓冲器605可以接收来自图1的存储设备120内的图3的存储器305的数据流。由于要处理的整个数据可能很大(例如,数GB或TB的数据),因此尝试一次加载所有数据并在某个存储内将其作为单元进行处理可能是不切实际的。因此,可以将输入流作为流接收并进行缓冲,从而允许以比整个数据集更小的单元来处理数据。尽管图6将缓冲器605示出为循环缓冲器,但是本发明构思的实施例可以使用任何类型的缓冲器来存储从输入流接收的数据。
流分离器610可以从循环缓冲器605获取数据,并将该数据划分为块。然后可以将这些块传递给索引映射器615。块可以表示将由转码器420内的其他组件处理的数据单元,并且不应与术语“列块”混淆,因为该术语可以在其他上下文中使用(例如,可以参考下面的图9使用“列块”作为该术语)。
图7示出图6的流分离器610,将可以作为输入流的一部分(或全部)的输入编码数据划分成块。在图7中,输入数据被示出为除其他数据之外包括三段编码数据:“[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可能对该数据不感兴趣。图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”。
关于图7至少有两个额外点值得注意。首先,还要注意,在图7所示的示例输入流中,一些数据使用位填塞进行编码,而一些数据使用RLE进行编码。如果使用单编码方案(例如,RLE)对所有数据进行编码,则图6的流分离器610可以根据输入到图6的转码器420的编码类型来确定该事实。但有时会使用混合编码方案。在混合编码方案中,可以使用一种编码方案(诸如RLE)对一些数据进行编码,并且可以使用另一种编码方案(诸如位填塞)对一些数据进行编码(该概念还可以推广到在混合编码方案中使用两种以上编码方案)。在混合编码方案中,图6的转码器420可以不接收编码类型作为输入,因为单独该信息不能告诉图6的流分离器610使用哪种编码方案对什么数据进行了编码。而是,图6的流分离器610可以通过查看块本身来确定对每个块使用了哪种编码方案。
确定用于编码特定块的编码方案的一种方法可以是通过检查块中特定位的值。例如,分列存储格式可以使用第一个字节中的最低有效位来指示数据的特定块是使用RLE还是位填塞被编码:如果该位的值为“0”,则可以使用RLE,如果该位的值为“1”,则可以使用位填塞。然后可以从字节中删除该位,并将其余位在逻辑上向右移一位,以产生编码所使用的值。
例如,考虑块705-1。块705-1将包括位序列“00000011 00110011”。当图6的流分离器610读取第一字节“00000011”时,图6的流分离器610可以检查最低有效位(最后一个“1”)。因为最低有效位可以是“1”,所以图6的流分离器610可以确定此块可以使用位填塞来编码。该最低有效位可以被去除,并且第一字节中的其余位在逻辑上向右移一位,从而产生字节“00000001”。由于该字节的第一(最高有效)位可以是“0”,因此图6的流分离器610可以确定该字节可以仅是“00000001”(指示可以在下一字节中不继续该值的“0”位可以被去除并且添加另一个前导零),指示该组(尚待确定)可以被重复一次。然后,图6的流分离器610可以读取下一个字节“00110011”。由于该字节的最高有效位可以是“0”,因此图6的流分离器610可以知道此值不会继续到下一个字节。可以去除连续位并添加前导零,从而产生值“00110011”,其表示值“3”和“3”。因此,图6的流分离器610可以确定编码使用位填塞,以表示值“3”可以被重复两次。
另一方面,考虑块705-2。块705-2将包括位序列“00001000 00000010”。当图6的流分离器610读取第一字节“00001000”时,图6的流分离器610可以检查最低有效位(最后的“0”)。因为最低有效位可以是“0”,所以图6的流分离器610可以确定可以使用RLE对该块进行编码。该最低有效位可以被去除,并且第一字节中的其余位在逻辑上向右移一位,从而产生字节“00000100”。由于该字节的第一(最高有效)位可以是“0”,因此图6的流分离器610可以确定该字节可以仅是“00000100”(指示可以在下一字节中不继续该值的“0”位可以被去除并且添加另一个前导零),指示该值(尚待确定)可以被重复四次。然后,图6的流分离器610可以读取下一个字节“00000010”。由于该字节的最高有效位可以是“0”,因此图6的流分离器610可以知道此值不会继续到下一个字节。可以去除连续位并添加前导零,从而产生值“00000010”。因此,图6的流分离器610可以确定编码使用RLE,以表示值“2”可以被重复四次。
当然,图6的流分离器610可能不会对任一位序列进行所有此类分析。图6的所有流分离器610可能要做的是读取字节,直到遇到以“0”为最高有效位的字节为止(此字节序列将指示编码方案和即将到来的值的重复次数),然后读取字节直到遇到以“0”为最高有效位的另一个字节(此字节序列表示要编码的值(或多个))。然后,图6的流分离器610可以将那些读取位(代表编码块的整体)传递给图6的索引映射器615(以及用于图6的规则评估器635以后处理):图6的索引映射器615(和/或图6的规则评估器635)可以执行所描述的分析以确定什么编码方案用于块以及什么值(或多个)被如此编码。但是,如果图6的流分离器610(或者图6的索引映射器615,或者本发明构思的任何其他组件)执行分析以确定用于编码数据的特定块的编码方案,则图6的流分离器610(或图6的索引映射器615,或其他组件)可以将编码类型传递给下游其他组件,以避免重复这种分析。在处理块时从块中去除标识编码方案的位的情况下,此操作可能特别重要:如果没有编码类型,则稍后处理编码数据的组件可能无法正确处理编码数据。
第二,注意块705-2和705-3代表均使用RLE编码的连续块。可以预期的是,图6的流分离器610将所有连续RLE编码视为单个块(基于使用不同编码方案来分离块)。但是回顾一下,目标是对输入流进行转码,以便将不感兴趣的所有数据合并为单个“无关”值。回顾图6的流分离器610可能不具有关于图1的主机计算机105对什么数据感兴趣的信息。如果图6的流分离器610认为使用相同编码方案的所有编码都属于同一块,则图6的流分离器610可能最终将图1的主机计算机105感兴趣的数据与图1的主机计算机105不感兴趣的数据混合。另外,如果使用相同编码方案对输入流中的所有数据进行编码,则整个输入流将被视为单个块,这将消除图6的流分离器610作为图6的转码器420的一部分的效用。
第三,尽管以上讨论关注于使用一位来区分两种不同编码方案的混合编码方案,但是本发明构思的实施例可以被一般化为使用多于两种的不同编码方案的混合编码方案。当然,如果使用多于两种的编码方案,则可以使用一个以上的位来区分不同的编码方案。例如,如果使用三个或四个编码方案,则可以使用两个位来区分编码方案,如果使用五个、六个、七个或八个不同编码方案,则可以使用三个位来区分不同编码方案等。
(也请注意,用于区分编码方案的位也可以用于其他目的。例如,考虑使用三种编码方案的情况。如果第一个字节的最低有效位具有特定值(诸如“0”),则可以使用一种编码方案(诸如RLE),下一个最低有效位用于表示该值。但是,如果第一个字节的最低有效位是另一个特定值(诸如“1”),则可以使用下一个最低有效位来区分其余两种编码方案(诸如位填塞和集群编码))。
返回图6,索引映射器615可以从流分离器610接收块。然后,索引映射器615可以将来自输入词典的编码值映射到输出词典中的编码值。例如,再次考虑上面表1和表2中所示的词典。由于可能对与“美国”相对应的值感兴趣,因此在编码块中遇到值“3”时,可以将其替换为值“1”,当在编码块中遇到所有其他值时,所有其他值都可以替换为值“0”。
图8示出将输入词典映射到输出词典的图6的索引映射器。在图8中,示出索引映射器615,其接收输入词典805并生成输出词典810。给定关于图1的主机计算机105对什么数据感兴趣的信息,索引映射器615可以生成输出词典810。索引映射器615也可以生成从输入词典805到输出词典810的映射。继续以上示例,该映射可以指定表3中所示的映射。如所看到的,索引“3”可以映射到索引“1”;所有其他索引可以映射到索引“0”。
表3
输入索引 | 输出索引 |
0 | 0 |
1 | 0 |
2 | 0 |
3 | 1 |
关于索引映射器615存在一些值得注意的点。首先,尽管索引映射器615被示为图6的转码器420的单独组件,但是索引映射器615可以与图6的规则评估器635结合工作(或者被实现为图6的规则评估器635的一部分)。第二,索引映射器615如何生成输出词典810(以及表3所示的映射)可以取决于图1的主机计算机105对什么数据感兴趣。下面参照图11讨论索引映射器如何可以学习图1的主机计算机105对什么数据感兴趣。第三,转码数据可以涉及将输入词典805映射到输出词典810的索引映射器615以及图6的转码规则630两者:图6的转码规则630可以取决于从输入词典805到输出词典810的映射。反之则不成立:可以生成从输入词典805到输出词典810的映射(因此索引映射器615的操作)而无需参考转码规则630。
关于索引映射器615的第四点更加微妙。注意,索引映射器615有效地向输出词典810添加新条目:“无关”值。为了简化实现方式,对于索引映射器615始终将相同索引用于“无关”值是有意义的。由于输入词典805的大小可以根据数据集而变化,因此可以始终使用索引“0”。
但是,如果结果发现图1的主机计算机105对数据集中的所有数据感兴趣,将会发生什么?在那种情况下,索引映射器615已经将条目添加到输出词典810,但是没有删除输出词典810中的条目。结合这两个事实,意味着输出词典810可能比输入词典805大(一个条目)。考虑对于一些n值,输入词典805恰好具有2n个条目的情况。这个事实意味着可以使用n位来表示输入词典805中的每个索引。向输出词典810添加“无关”条目意味着输出词典810中现在有2n+1条目,这意味着n+1位现在用于表示数据集中的所有可能值:此问题称为位溢出。此附加位可能会影响编码数据,因此需要添加新位以正确表示数据。因此,对输出词典810的单个小改变可能对数据表示产生巨大的连锁反应,并且可能导致用于表示编码数据的存储量的显著增加。
尽管以上示例关注于引入“无关”条目在输出词典810中添加表示所有可能的索引的新位的情况,但是即使将输出词典810的大小增加到新位可用于表示所有可能索引的点,也可能发生类似情况。再次考虑表1中所示的输入词典,并考虑图1的主机计算机105对中国和印度公民感兴趣(表1中的索引“0”和“1”)的情况。这些索引可以使用单个位来表示(因为一个位可以被用来表示值“0”和“1”)。如果使用位填塞对这些值进行编码,则可以将八个这样的值填塞到一个字节中。但是,如果将索引“0”分配给输出词典810中的“无关”值,则中国和印度的索引将映射到其他值(例如,“1”和“2”)。由于值“2”使用两位,因此不再可能将八个值填塞到一个字节中:发生位溢出。
对于位溢出问题,有一些解决方案可以使用。一种是检查以查看输入词典805中的任何索引是否表示图1的主机计算机105不感兴趣的数据。如果事实证明输入词典805中的所有数据是主机计算机105感兴趣的,则根本没有必要对输入流进行转码,并且输入流可以直接映射到输出流而无需修改。
但是这种解决方案尽管有用,但可能还不够,因为在位填塞中仍然可能发生位溢出的问题。为了避免位填塞中的位溢出,解决方案可以是确保用于表示输出词典810中的任何索引的位数不大于用于表示输入词典805中的任何索引的位数。在这里描述两种可能的解决方案。一种解决方案可以是将输出词典810中的最高可能索引分配给“无关”值:也就是说,首先将所有感兴趣的索引从输入词典805映射到输出词典810,然后使用最低未使用索引用于“无关”值。另一解决方案可以是识别输入词典805中的图1的主机计算机105不感兴趣的索引,然后将该索引用作“无关”值。在两种解决方案中,输入词典805中的索引不会被输出词典810中的更大索引替换,这可以避免位溢出问题。这样的解决方案的缺点在于,不可能为“无关”选择独立于输入词典805的索引。
再次返回图6,当前块(可能由索引映射器615处理)可以存储在当前编码缓冲器620中。从那里,规则评估器635可以评估当前编码缓冲器620中的编码数据以及先前编码缓冲器625中的编码数据,并确定是否应改变编码以及应将哪些数据输出到输出流。简而言之,规则评估器635可以确定当前编码缓冲器620中的编码数据是否可以与先前编码缓冲器625中的编码数据组合。如果可以,则可以将当前编码缓冲器620中的编码数据添加到先前编码缓冲器625中的编码数据;否则,可以将先前编码缓冲器625中的编码数据输出到输出流,并且可以将当前编码缓冲器620中的编码数据移动到先前编码缓冲器625。(该分析考虑了先前编码缓冲器625中存在数据的情况。如果先前编码缓冲器625不包含数据,如可能与第一块数据一起发生,则无需担心尝试将当前编码缓冲器620中的编码数据与先前编码缓冲器625中的转码数据进行合并。)
这引出了下一个问题:什么时候可以合并编码数据?简短的答案是,当编码数据的块表示图1的主机计算机105感兴趣的数据或主机计算机105不感兴趣的数据二者时,可以组合这些块。一些示例可以帮助说明规则评估器635如何操作。在两个示例中,输入流包括相同的数据:“[1,BP],3,3,[4,RLE],2,[1,BP],0,1,[5,RLE],1,[1,BP],3”,输入词典如表1所示。在两个示例中,行表示当前编码缓冲器620和先前编码缓冲器625中的内容的“快照”以及那时已输出到输出流的内容。
在第一示例中,图1的主机计算机105已经请求有关美国公民的数据。如表1所示,“美国”的索引为“3”。因此,输出词典可以如表2所示。
表4
行 | 当前编码缓冲器 | 先前编码缓冲器 | 输出流 |
1 | [1,BP],3,3 | ||
2 | [4,RLE],2 | [1,BP],1,1 | |
3 | [1,BP],0,1 | [4,RLE],0 | [1,BP],1,1 |
4 | [5,RLE],1 | [6,RLE],0 | [1,BP],1,1 |
5 | [1,BP],3 | [11,RLE],0 | [1,BP],1,1 |
6 | [1,BP],1,1,[11,RLE],0,[1,BP],1 |
如表4的第1行所示,规则评估器635可以处理的第一块为“[1,BP],3,3”。由于该块可以包括感兴趣的数据(值“3”),因此规则评估器635可以使用从图8的输入词典805到图8的输出词典810的映射,用值“1”替换值“3”。然后,可以将该转码块移动到先前编码缓冲器625(如表4的第2行所示)。
在表4的第2行中,规则评估器635处理的第二块为“[4,RLE],2”。由于该块可能不包括感兴趣的数据(值“2”),因此规则评估器635可以使用从图8的输入词典805到输出图8的词典810的映射,用值“0”值替换“2”(表示此数据是“无关”数据)。由于该块可能包含“无关”数据,但是先前编码缓冲器625可能包含感兴趣的数据,因此先前编码缓冲器625中的数据可以输出到输出流(如表4第3行所示),并且当前转码块可以被移动到先前编码缓冲器625(如表4的第3行所示)。
在表4的第3行中,规则评估器635处理的第三块是“[1,BP],0,1”。由于该块可能不包括感兴趣的数据(值“0”和“1”),因此规则评估器635可以使用从图8的输入词典805到输出图8的词典810的映射,用值“0”替换值“0”和“1”(表示此数据是“无关”数据)。
由于该块可能包含“无关”数据,并且先前编码缓冲器625已经可能包含“无关”数据,因此可以组合这两个块。由于该块使用位填塞,但是先前编码缓冲器625中的块使用RLE,因此可以用另一种编码方案替换这两种编码方案之一。在此示例中,可以使用RLE对位填塞编码的数据进行转码。(如果使用位填塞将两个或多个值存储在单个值中,则整个组可以被复制,这意味着复制的值的数量可以是填塞的值的数量的倍数。另一方面,RLE复制单个值)。结果,先前编码缓冲器625现在可以存储“[6,RLE]0”(如表4的第4行所示),其将第二块的四个“无关”值和第三块的两个“无关”值组合。
在表4的第4行中,规则评估器635处理的第四块是“[5,RLE],1”。由于该块可能不包括感兴趣的数据(值“1”),因此规则评估器635可以使用从图8的输入词典805到输出图8的词典810的映射,用值“0”替换值“1”(表示此数据是“无关”数据)。
由于该块可以包含“无关”数据,并且先前编码缓冲器625已经可以包含“无关”数据,因此可以组合这两个块。两个块均使用RLE作为编码方案来编码相同“无关”值,因此规则评估器635可以通过增加先前编码缓冲器625中的块中的复制值来组合两个块。结果,先前编码缓冲器625现在可以存储“[11,RLE]0”(如表4第5行所示),将第二块中的四个“无关”值,第三个中的两个“无关”值,以及第四块中的五个“无关”值组合。
在表4的第5行中,规则评估器635处理的第二块为“[1,BP],3”。由于该组块可以包括感兴趣的数据(值“3”),因此规则评估器635可以使用从图8的输入词典805到输出图8的词典810的映射,用值“1”替换值“3”。注意,由于该转码块可以包含感兴趣的数据,而先前编码缓冲器625可以包含“无关”数据,因此该转码块可以不与先前编码缓冲器625中的块组合。
对此,通常将先前编码缓冲器625中的转码数据输出到输出流,并且将当前转码块移动到先前编码缓冲器625。但是由于当前转码块是输入流中的最后一个块,因此可以输出两个转码块(当然,首先输出先前编码缓冲器625中的块)。表4的第6行示出最终输出。
在第二示例中,图1的主机计算机105已经请求有关韩国公民的数据。如表1所示,“韩国”的索引为“2”。因此,输出词典如表5所示。
表5
ID | 国家 |
0 | 无关 |
1 | 韩国 |
表6
如表6的第1行中所示,规则评估器635处理的第一块为“[1,BP],3,3”。由于该块可以包括不感兴趣的数据(值“3”),因此规则评估器635可以使用从图8的输入词典805到输出图8的词典810的映射,用值“0”替换值“3”(表示此数据为“无关”数据)。然后,可以将该转码块移动到先前编码缓冲器625(如表6的第2行所示)。
在表6的第2行中,规则评估器635处理的第二块为“[4,RLE],2”。由于该块可以包括感兴趣的数据(值“2”),因此规则评估器635可以使用从图8的输入词典805到输出图8的词典810的映射,用值“1”替换值“2”。由于该组块可能包含感兴趣的数据,但是先前编码缓冲器625可能包含不感兴趣的数据,因此先前编码缓冲器625中的数据可以输出到输出流(如表6的第3行所示),并且当前转码块可以被移动到先前编码缓冲器625(如表6的第3行所示)。
在表6的第3行中,规则评估器635处理的第三块是“[1,BP],0,1”。由于该块可能不包括感兴趣的数据(值“0”和“1”),因此规则评估器635可以使用从图8的输入词典805到输出图8的词典810的映射,用值“0”替换值“0”和“1”(表示此数据是“无关”数据)。由于此块可能包含不感兴趣的数据,但先前编码缓冲器625可能包含感兴趣的数据,因此先前编码缓冲器625中的数据可以被输出到输出流(如表6的第4行所示),并且当前转码块可以被移动到先前编码缓冲器625(如表6的第4行所示)。
在表6的第4行中,规则评估器635处理的第四块为“[5,RLE],1”。由于该块可能不包括感兴趣的数据(值“1”),因此规则评估器635可以使用从图8的输入词典805到输出图8的词典810的映射,用值“0”替换值“1”(表示此数据是“无关”数据)。
由于该块可以包含“无关”数据,并且先前编码缓冲器625可以包含“无关”数据,因此可以将这两个块组合。由于该块使用RLE,但是先前编码缓冲器625中的块使用位填塞,因此可以用其他编码方案替换这两种编码方案之一。在此示例中,可以使用RLE对位填塞编码数据进行转码。(再次,可以选择RLE,因为可以复制单个值而不是一组值。)结果,先前编码缓冲器625现在存储“[7,RLE]0”(如表6的第5行所示),其将第三块的两个“无关”值与第四块的五个“无关”值组合。
在表6的第5行中,规则评估器635处理的第二块为“[1,BP],3”。由于该块可能不包括感兴趣的数据(值“3”),因此规则评估器635可以使用从图8的输入词典805到输出图8的词典810的映射,用值“0”替换值“3”(“无关”值)。
由于该块可以包含“无关”数据,并且先前编码缓冲器625可以包含“无关”数据,因此可以将这两个块组合。由于该块使用位填塞,但是先前编码缓冲器625中的块使用RLE,因此可以用其他编码方案替换这两种编码方案之一。在此示例中,可以使用RLE对位填塞编码数据进行转码。结果,先前编码缓冲器625现在存储“[8,RLE]0”,其将第三块的2个“无关”值,第四块的五个“无关”值,以及第五块中的一个“无关”值组合。
最终,由于第五块是输入流的最后一个块,因此规则评估器635可以输出先前编码缓冲器625中的转码数据。表6的第6行示出最终输出。
以上示例均未示出连续块包括感兴趣的数据的情况。本发明构思的实施例可以以不同的方式处理这种情况。在本发明构思的一个实施例中,当当前编码缓冲器620包含感兴趣的数据时,先前编码缓冲器625中的任何块可以被输出到输出流(也就是说,如果当前编码缓冲器620包含感兴趣的数据,则不尝试将当前编码缓冲器620中的数据与先前编码缓冲器625中的数据进行组合)。在本发明构思的另一实施例中,可以组合当前编码缓冲器620和先前编码缓冲器625中的块。但是在本发明构思的这样的实施例中,这样的组合是否可行可以取决于感兴趣的值是否相同。例如,如果一个块包括关于中国公民的数据,而另一块包括关于韩国公民的数据,则取决于本发明构思的实施例,这些块可以被组合或可以不被组合。另一方面,如果两个块都包括有关韩国公民的数据,则将两个块合并可能是可行的。
规则评估器635可以使用转码规则630来确定什么数据是感兴趣的和什么数据是不感兴趣的,可以输出什么数据与可以在先前编码缓冲器625中存储什么数据,以及块是否可以从一个编码方案转码到另一个编码方案。确切的规则可以根据数据可以使用的编码方案有所不同。
如上所述,规则评估器635也可以包括索引映射器615。在规则评估器635包括索引映射器615的本发明构思的实施例中,规则评估器635可以在应用转码规则630之前将索引映射器615应用到当前编码缓冲器620的内容。
表7示出当使用的编码方案可以是RLE或位填塞时可以使用的一些规则。在可以使用其他编码方案的本发明构思的实施例中,可以相应地改变规则:所有这样的变化被认为是本发明构思的实施例。此外,本发明构思的实施例可以包括管理在两种以上不同类型的编码方案之间转码数据的规则。例如,混合编码方案可以使用三种不同的编码方案:然后,图6的转码规则630可以指定在图6的当前编码缓冲器620和图6的先前编码缓冲器625包含使用任何一对不同编码方案编码的数据时如何对数据进行转码。
在表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=0,y≠0和y≥16除以每个填塞值的位数。最终,PEB(在输出列中)可以指示当选择规则用于应用时存储在先前编码缓冲器625中的任何内容可以输出到输出流。表7还考虑了任何数据已经由索引映射器615进行映射,因此包含与图8的输出词典810相对应的值的情况。
表7
上面的讨论描述了一般如何可以对数据执行转码。但是,当数据以分列格式存储时,可以利用分列格式来使转码受益。在描述这种利用之前,了解分列格式是有用的。为了说明的目的,参考SSD描述了分列格式,但是本发明构思的实施例可以包括可以利用分列格式的其他存储设备。
图9示出以分列格式存储的示例文件。在图9中,示出文件。文件可以包括文件元数据905和列块910-1、910-2和910-3。尽管图9示出三个列块910-1至910-3,但是本发明构思的实施例可以包括任意数量(零个或多个)的块而没有限制。
文件元数据905可以包括与文件有关的元数据。尽管也可以存储其他元数据,但是图9将文件元数据905示出为包括文件到块映射915和词典页920。词典页920可以是用于对文件的数据内的值进行编码的词典,诸如以上表1中所示的词典。词典页920也可以是存储多个词典,可用于对文件中的不同数据进行编码:例如,一个词典可能存储国家/地区名称,而另一本词典可能存储姓氏。
文件到块映射915可以识别存储单独列块910-1、910-2和910-3的块及其相对顺序。文件到块映射915还可以指定每个列块910-1、910-2和910-3内的数据页的顺序,或者可以在列块910-1、910-2和910-3内指定页顺序。除了文件到块映射530可以提供关于哪些块用于存储图1的存储设备120上存储的每个文件的信息,文件到块映射915可以提供关于哪些块用于存储图9所示的文件的信息之外,文件到块映射915可以类似于图5的文件到块映射530。(当然,两个文件到块映射可以一起使用:图5的文件到块映射530可以用于定位存储每个文件的文件元数据905的块,然后在文件元数据905中的文件到块映射915可以用于定位存储文件的列块的列块。)
通常,单个列块可以跨越多个块区,并且单个块区可以存储多个列块。只要有一种方法可以识别数据存储在何处以及该数据代表什么(例如,哪个文件包含该数据),那么在更通用的数据存储解决方案中几乎没有困难。但是出于讨论的目的,考虑列块可以适合单个块区,而这些块区不共享列块的情况。因此,列块910-1、910-2和910-3中的每一个可以被存储在单独块区中。
在列块910-1内(列块910-2和910-3类似)可以是词典页925和数据页930-1、930-2和930-3。尽管图9示出三个数据页,但是本发明构思的实施例可以在列块中包括任意数量(零个或多个)的数据页。数据页可以存储文件的实际数据,被划分为可以适合各个页的单元。
词典页925可以存储用于列块910-1内的数据的词典。如词典页920,词典页925可以存储可以用于对文件内的不同数据进行编码的多个词典。
可能会产生一个问题,即为什么图9示出词典页920和词典页925两者。原因是词典页920和925可以在分列格式的不同实现中使用。例如,一个分列存储格式可以对整个文件使用单个词典,其可以被存储在词典页920中。但是另一列式格式可以在每个列块910-1、910-2和910-3中使用单独的词典页925。使用词典页925的优点是,如果特定列块不使用词典,或者在特定列块中的数据中未使用一些值,则可以从词典页925中省略此类信息,从而减小词典页925的大小(甚至完全删除)。但是另一方面,不同列块中的多个词典页925可能导致数据复制:相同词典条目可能用于多个列块中。这就是词典页920和925用虚线示出的原因:根据所使用的分列存储格式,可以省略其中的任何一个。(实际上,甚至可能发生该文件根本不使用词典的情况,在这种情况下,词典页920和925都可能被省略。)
现在已经描述了分列格式,可以描述在使用分列格式的存储设备中使用图4的转码器420的适应。图10示出图1的存储设备120被配置为实现以分列格式存储数据的转码。在图10中,存储设备120可以包括主机接口层505,存储设备控制器510和存储515,它们的功能类似于参照图5的描述(再次,存储设备120可以是SSD,硬盘驱动器或可以使用分列格式的任何其他存储设备)。
存储设备120还可以包括存储内计算控制器1005,列块处理器1010和存储内计算315。存储内计算控制器1005可以管理将什么信息发送到存储内计算315和列块处理器1010。例如,当图1的主机计算机105请求存储设备120执行一些加速功能-诸如对特定国家的公民计数时,存储内计算控制器1005可以将断言(识别感兴趣的国家)提供给列块处理器1010。存储内计算控制器1005还可以从存储515访问数据-特别是列块,并将该数据提供给列块处理器1010。存储内计算控制器1005还可以确定数据中使用的编码方案(假设对于列块或整个文件使用了单个编码方案,而不是混合编码方案),并将编码类型提供给列块处理器1010。最后,根据来自图1的主机计算机105的请求,存储内计算控制器1005可以将数据从列块处理器转码回去,并将该转码数据返回给图1的主机计算机105(通过主机接口层505)或存储内计算315。下面参照图11讨论列块处理器1010的结构和操作。
除其他可能性外,可以使用适当编程的通用处理器,FPGA,ASIC,GPU或GPGPU来实现存储内计算控制器1005和列块处理器1010。可以使用相同硬件或不同硬件来实现存储内计算控制器1005和列块处理器1010(例如,存储内计算控制器1005可以被实现为ASIC,而列块处理器1010可以被实现为FPGA),它们可以实现为单个单元或单独组件。
图11示出图10的列块处理器1010,被配置为实现以分列格式存储数据的转码。在图11中,列块处理器1010可以接收输入流,编码类型和断言作为输入,并且可以产生输出流作为输出。输入流可以被存储在输入缓冲器1105中。输入流可以是来自列块的单个数据页,或者可以是列块中的所有数据。然后可以将来自输入缓冲器1105的数据作为输入流提供给转码器420(如上参照图6所述):转码器420还可以从图10的存储内计算控制器1005接收编码类型,如参照图10所讨论的。注意,由于转码器420可以包括图6的循环缓冲器605,因此可以省略输入缓冲器1105:可以将数据存储在图6的循环缓冲器605中,图6的流分离器610可以在循环缓冲器605上操作。但是在本发明构思的一些实施例中,图6的循环缓冲器605可能不足以存储整个数据页或列块(或者输入流提供数据的速度可能比从图6的循环缓冲器605中移除数据的速度快),在这种情况下,输入缓冲器1105可以充当临时存储库,用于可能不立即适合图6的循环缓冲器605的数据。
转码器420的输出-上面参照图6描述的输出流-可以被存储在输出缓冲器1110中。在此,尽管可以如转码器420所产生的那样将数据直接发送到其目的地,但是以诸如完整数据页或列块的特定单元发送数据可能是有用的。在这种情况下,输出缓冲器1110可以存储输出流,直到已经产生适当的数据单元为止。此时,列块处理器1010可以根据请求的转码操作将输出流发送到图10的存储内计算控制器1005或图1的主机计算机105。
索引映射器615(尽管索引映射器615可以是图6所示的转码器420的一部分,但索引映射器615示出在图11的转码器420的外部)可以从断言评估器1115和“无关”评估器1120接收信息。断言评估器1115可以从图10的存储内计算控制器1005接收断言,并使用断言确定对什么数据感兴趣。断言评估器1115可以使用比较操作符来识别图1的主机计算机105对图8的输入词典805中的哪些值(可能是图9的词典页920和925中的任一个)感兴趣。“无关”评估器1120可以类似地操作(但是以镜像形式),以识别对什么数据不感兴趣。请注意,由于断言评估器1115和“无关”评估器1120在操作上是互补的,因此有可能使用两个评估器之一(不满足一个评估器的标准任何数据因此适合另一个评估器的标准):因此,可以省略断言评估器1115和“无关”评估器1120中的一个。该信息可以由断言评估器1115和“无关”评估器1120提供给索引映射器615,从而使索引映射器615能够建立从图8的输入词典805到图8的输出词典810的映射。
作为示例,再次考虑来自图6的主机计算机105的查询,以对数据集中包含美国公民的条目数量进行计数。当此查询到达时,可以提取断言(例如,“公民身份=美国”:断言的确切格式可以取决于数据集的格式和用于提交查询的应用)。图8的输入词典805的检查(诸如表1所示)可以用于用值“3”替换“美国”。因此,提供给索引映射器615的断言可以指定“公民身份=3”,此后索引映射器615可以生成图8的输出词典810(诸如表2所示)和表3所示的映射。
注意,断言评估器1115的结果也可以被提供给转码器420,以用于构造图6的转码规则630。由于图6的转码规则630可以取决于知道图1的主机计算机105对什么数据感兴趣,因此图6的转码规则630可以适于使用断言评估器1115的结果。例如,再次考虑表7中所示的规则。断言评估器1115的结果(或者甚至是从图8的输入词典805到图8的输出词典810的映射(诸如表3所示))可以用于在各种规则中为P和DC建立适当值。
还要注意,在图11中,断言适用于输入到转码器420的任何数据作为输入流。尽管可以合理地断定该断言将应用于图1的主机计算机105提交查询的整个数据集,但是即使输入流可能代表数据集的一部分,转码器420也将输入流视为完整的。例如,列块处理器1010可以使用转码器420将图9的每个数据页930-1、930-2和930-3处理为其自己的“输入流”。由于转码器420不知道输入流表示什么,因此该处理毫无问题地进行。
图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中的转码数据。在大多数情况下,图6的当前编码缓冲器620中应该没有任何东西,因为规则评估器635可以对图6的当前编码缓冲器620中的数据进行操作。即使在作为应用图6的转码规则630的结果可能将数据留在图6的当前编码缓冲器620中的情况下(例如,如表7的规则6-9所示),图6的规则评估器635可以与图6的规则评估器635一起使用。然后,图6中的转码器420也将在图6的转码器420将从输入流中寻找新数据(通过图6的循环缓冲器605和图6的流分离器610)之前对该数据进行操作:图6的转码器420可以在尝试处理输入流中的数据的下一个块之前等待图6的当前编码缓冲器620被清空。但是在转码数据保留在图6的当前编码缓冲器620中的情况下,可以将转码数据输出到输出流。一旦在块1215处所有数据已被输出到输出流,则处理可以结束(直到图6的转码器420被期望处理新的输入流为止)。
假设仍然有来自输入流的数据要处理,则在块1220,图6的循环缓冲器605可以从输入流接收下一个编码数据,之后,图6的流分离器610可以识别编码数据中的第一块,并将该块转发到图6的索引映射器615。(在图6的索引映射器615实际上是图6的规则评估器635的一部分的本发明构思的实施例中,图6的流分离器610可以将编码数据的块放置在图6的当前编码缓冲器620中)。在块1225,图6的索引映射器615(或图6的规则评估器635)可以确定数据的块是否是感兴趣的:更具体地,数据的块是否包括由图1的主机计算机105请求的数据(例如,来自断言)。
如果编码数据的块包括图1的主机计算机105感兴趣的数据,则在块1230(图12B),图6的索引映射器615(或图6的规则评估器635)可以使用从图8的输入词典805到图8的输出词典810的映射,以重新编码块中的任何数据。在块1235,图6的规则评估器635可以检查以查看图6的先前编码缓冲器625中是否有任何转码数据是图1的主机计算机105感兴趣的。如果不是(并且回顾当前块是图1的主机计算机105感兴趣的,如在图12A的块1225所确定),则在块1240中,图6的转码器420可以将图6的先前编码缓冲器625中的转码数据输出到输出流,并且在块1245,图6的转码器420可以将当前转码块存储在图6的先前编码缓冲器625中,其后处理可以返回到图12A的块1205。
另一方面,如果图6的先前编码缓冲器625也存储图1的主机计算机105感兴趣的数据,如块1235所确定,则在块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可以将两个块组合成单个块,其可以被存储在图6的先前编码缓冲器625中,之后处理可以返回到图12A的块1205。
注意,图12B示出当前块可以被转码两次:一次在块1230中(当值被更新为对应于图8的输出词典810时)以及一次在块1255中(当从一种编码方案改变为另一种编码方案时,如果当前块的编码方案改变)。尽管可以分别执行这两个操作,但也可以将这两个操作组合在一起:也就是说,同时改变编码方案并更新值。本发明构思的实施例包括单独地和作为单个步骤执行这些操作。
回顾图12B描述了当图1的主机计算机105对当前块感兴趣时执行的操作(如图12A的块1225所确定)。在图1的主机计算机105对当前块不感兴趣的情况下(再次,如在图12A的块1225所确定),在块1265(图12C),图6的索引映射器615(或图6的规则评估器635)可以使用从图8的输入词典805到图8的输出词典810的映射,以重新编码块中的任何数据(特别地,“无关”值)。在块1270,图6的规则评估器635可以检查以查看图6的先前编码缓冲器625中是否有任何转码数据是图1的主机计算机105是感兴趣的。如果是(并且回顾当前块不是图1的主机计算机105感兴趣的,如在图12A的块1225所确定),则在块1275,图6的转码器420可以将图6的先前编码缓冲器625中的转码数据输出到输出流,并且在块1280,图6的转码器420可以将当前转码块存储在图6的先前编码缓冲器625中,其后处理可以返回到图12A的块1205。
另一方面,如果图6的先前编码缓冲器625也存储了图1的主机计算机105不感兴趣的数据,如块1270所确定,则在块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可以将两个块组合成单个块,其可以被存储在图6的先前编码缓冲器625中,之后处理可以返回到图12A的块1205。
注意,图12C示出当前块可以被转码两次:一次在块1265中(当值被更新以对应于图8的输出词典810时)以及一次在块1290中(当从一种编码方案改变为另一种编码方案时,如果当前块的编码方案改变)。尽管可以分别执行这两个操作,但也可以将这两个操作组合在一起:也就是说,同时改变编码方案并更新值。本发明构思的实施例包括单独地和作为单个步骤执行这些操作。
在图12A-图12C中,存在一个隐含的假设,即在图6的先前编码缓冲器625中存在一些数据。例如,块1235和1270描述了在图6的先前编码缓冲器625中存在一些数据的情况。这通常是合理的假设,由于可以将转码数据缓存在图6的先前编码缓冲器625,以支持组合可以组合的数据块(如果数据已经输出到输出流,则尝试组合这些块为时已晚)。然而,可能存在图6的先前编码缓冲器625中没有存储数据的情况。作为一个示例,当处理输入流的第一块时,在先前编码缓冲器625中没有数据(因为先前在该输入流中没有任何处理)。作为第二示例,可能存在不支持组合数据块的编码方案,在这种情况下,将先前块存储在图6的先前编码缓冲器625中几乎没有价值。如果在图6的先前编码缓冲器625中没有数据,则没有必要执行当前块与图6的先前编码缓冲器625中的(不存在)块的比较,或从图6的先前编码缓冲器625输出(不存在)块。简单的解决方案是,如果在图6的先前的编码缓冲器625中没有数据,则不会依赖于先前编码缓冲器625中数据的存在的任何事情都可以完成。因此,例如,在图12B中,如果在先前编码缓冲器625中没有数据,则处理可以直接从块1230跳到块1245(以在图6的先前编码缓冲器625中缓冲当前转码块),并且在图12C中,处理可以直接从块1265跳到块1280(以在图6的先前编码缓冲器625中缓冲当前转码块)。
仔细检查图12B和图12C将示出两者之间的差异相对较小。注意到一些差异在块1230和1265中,以及从块1235和1270离开的不同分支。实际上,即使这些差异也具有相对较小的意义:块1230和1265均基于基于图8的输出词典810的重新编码(块1265仅专门指定“无关”值的使用)。并且,尽管离开块1235和1270的分支被不同地标记,原因是因为块1235和1270都是关于确定当前块是否可以与先前块组合。因此,从理论上讲,可以将图12B-图12C组合,尽管以牺牲一些操作顺序的清晰度为代价
图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)。
图14A-图14B示出根据本发明构思的实施例的图10的列块处理器1010和/或图4和图6的转码器420对以分列格式存储的数据进行转码的示例过程的流程图。在至少一个实施例中,图14A至图14B的流分离器610也可以被看作是图6的流分离器610如何可以接收输入编码数据的扩展,如图6的块1305中所述。
在图14A中,在块1405,图10的列块处理器1010可以为文件访问图9的文件到块映射915(或者可替换地或累积地,图5的文件到块映射530)。在块1410,图10的列块处理器1010可以使用图9的文件到块映射915来定位图9的文件元数据905,因此图9的输入词典920。如果图9的每个列块910-1、910-2和910-3包括其自己的图9的词典页925,则图9的词典页920可以从图9的文件元数据905中省略,在这种情况下,可以省略块1410,如虚线1415所示。然后,使用图9的文件到块映射915,在块1420,图10的列块处理器1010可以识别文件的列块(其可以是存储在图1的存储设备120上的数据块)。
在块1425(图14B),图10的列块处理器1010可以确定是否有更多的列块(块)要访问。如果不是,则处理完成。否则,在块1430,图10的列块处理器1010可以从图9的列块910-1、910-2或910-3访问图9的词典页925。如果图9的文件元数据905存储图9的词典页920,则图9的列块910-1、910-2和910-3可以省略图9的词典页925,在这种情况下,可以省略块1430,如虚线1435所示。在块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。
图15示出根据本发明构思的实施例图6的索引映射器615将图8的输入词典805映射到图8的输出词典810的示例过程的流程图。在图15中,在块1505,图6的索引映射器615可以接收图8的输入词典805(例如,来自图10的列组处理器1010)。在块1510,图6的索引映射器615可以确定图8的输入词典805中的什么数据感兴趣。图6的索引映射器615使用例如从图1的主机计算机105接收的断言来进行该确定,可能通过图10的存储内计算控制器1005。在块1515,图6的索引映射器可以生成图8的输出词典810。输出词典810可以包括图1的主机计算机105感兴趣的所有条目,但是可以将图1中的主机计算机105不感兴趣的所有条目合并到单个“无关”值。在块1520,图6的索引映射器615可以将图8的输入词典805的值映射到图8的输出词典810。最后,在块1525,图6的索引映射器615可以输出图8的输出词典810。
图16A-图16B示出根据本发明构思的实施例的图10的存储内计算控制器1005管理从图1的主机计算机105接收的断言并且潜在地对转码数据执行加速功能的示例过程的流程图。在图16A中,在块1605,图10的存储内计算控制器1005可以从图1的主机计算机105接收断言。在块1610,图1的存储内计算控制器1005可以对查询覆盖的编码数据访问图8的输入词典805。在块1615,图10的存储内计算控制器1005可以识别由断言覆盖的图8的输入词典805中的条目(也就是说,图1的主机计算机105感兴趣的图8的输入词典805中的条目)。在块1620,图10的存储内计算控制器1005可以创建包括断言覆盖的条目的图8的输出词典810。在块1625,图1的存储内计算控制器1005可以将断言覆盖的图8的输入词典805中的条目映射到图8的输出词典810中的条目。
在块1630,图1的存储内计算控制器1005可以识别断言未覆盖的图8的输入词典805中的条目(也就是说,图1的主机计算机105不感兴趣的图8的输入词典805中的条目)。在块1635,图10的存储内计算控制器1005可以将“无关”条目添加到图8的输出词典810。在块1640(图16B),图10的存储内计算控制器1005可以将断言未覆盖的输入词典中的条目映射到图8的输出词典810中的“无关”条目。
在块1645,图6的规则评估器635(在图6的转码器420内)可以使用断言来适应图6的转码规则630用于来自图1的主机计算机105的查询。在块1650,图6的索引映射器615和图6的规则评估器635(可以都在图6的转码器420内)可以使用从图8的输入词典805到图8的输出词典810的映射和图6的转码规则630,以将编码数据从输入流转码为输出流(如以上参照图12A-图12C所讨论的)。
此时,存在各种选择。如块1655中所示,图10的存储内计算控制器1005可以从图6的转码器420接收输出流,并且可以将转码数据转发到图1的主机计算机105,并且在块1660,在图10的存储内计算控制器1005可以将图8的输出词典810发送到图1的主机计算机105。可选地,在块1665,图10的存储内计算控制器1005可以将加速功能应用于输出流中的数据,并且在块1670,图10的存储内计算控制器1005可以将加速功能的结果发送到图1的主机计算机105。
在图12A-图16B中,示出本发明构思的一些实施例。但是,本领域技术人员将认识到,通过改变块的顺序,通过省略块或通过包括图中未示出的链接,本发明构思的其他实施例也是可行的。不论是否明确描述,流程图的所有这些变型都被认为是本发明构思的实施例。
本发明构思的实施例提供了优于现有技术的技术优势。在传统系统中,解码数据被发送到图1的主机计算机105。即使发送到图1的主机计算机105的数据是选择性的(也就是说,发送到图1的主机计算机105的数据包括感兴趣的数据),仍可以在未压缩或编码情况下发送数据,这意味着通过选择性实现了空间节省。相反,由于存储空间减少的大部分是通过编码而不是压缩来实现的,因此与将解码数据发送到图1的主机计算机105相比,将编码数据发送到图1的主机计算机105通常涉及发送更少的数据。此外,由于可以将数据从一种编码方案编码转码为另一种编码方案,因此使用图6的转码器420可以比解码数据和将数据重新编码作为单独操作更有效。
以下讨论旨在提供可以实现本发明构思的特定方面的一个或多个合适的机器的简要的一般描述。可以至少部分地通过来自传统输入设备(例如键盘,鼠标等)的输入以及通过从另一个机器接收的指令,与虚拟现实(VR)环境,生物特征反馈或其他输入信号的交互来控制一个或多个机器。如本文所使用,术语“机器”旨在广泛地涵盖单机器,虚拟机或通信耦合机器,虚拟机或一起操作的设备的系统。示例性机器包括诸如个人计算机,工作站,服务器,便携式计算机,手持式设备,电话,平板电脑等的计算设备,以及诸如私人或公共交通工具的运输设备,例如,汽车,火车,出租车等。
一个或多个机器可以包括嵌入式控制器,诸如可编程或非可编程逻辑设备或阵列,专用集成电路(ASIC),嵌入式计算机,智能卡等。一个或多个机器可以利用到一个或多个远程机器的一个或多个连接,诸如通过网络接口,调制解调器或其他通信耦合。机器可以通过诸如内联网,互联网,局域网,广域网等的物理和/或逻辑网络互连。本领域的技术人员将理解,网络通信可以利用各种有线和/或网络无线短程或长程载波和协议,包括射频(RF),卫星,微波,电气和电子工程师协会(IEEE)802.11,光学,红外,电缆,激光等。
可以参考或结合包括功能,程序,数据结构,应用程序等的关联数据来描述本发明构思的实施例,当其被机器访问时,其导致机器执行任务或定义抽象数据类型或低级硬件上下文。关联数据可以存储在例如易失性和/或非易失性存储器中,例如,RAM,ROM等,或其他存储设备及其关联存储介质中,包括硬盘驱动器,软盘,光存储,磁带,闪存,存储棒,数字视频磁盘,生物存储等。关联数据可以通过传输环境(包括物理和/或逻辑网络)以数据包,串行数据,并行数据,传播信号等的形式进行传递,并且可以以压缩或加密格式使用。关联数据可以在分布式环境中使用,并且可以本地和/或远程存储以供机器访问。
本发明构思的实施例可以包括一种有形的非暂时性的机器可读介质,该介质包括可由一个或多个处理器执行的指令,该指令包括用于执行本文所述的本发明构思的元件的指令。
可以通过能够执行操作的任何合适的装置来执行上述方法的各种操作,诸如各种硬件和/或软件组件,电路和/或模块。软件可以包括用于实现逻辑功能的可执行指令的有序列表,并且可以体现在任何“处理器可读介质”中,以供指令执行系统,装置或设备(诸如单核或多核处理器或包含处理器的系统)使用或与其结合使用。
结合本文公开的实施例描述的方法,算法和功能的块或步骤可以直接体现在硬件中,在由处理器执行的软件模块中或在两者的组合中。如果以软件实现,则这些功能可以作为一个或多个指令或代码存储在有形的非暂时性计算机可读介质上或作为一个或多个指令或代码在其上传输。软件模块可以驻留在随机存取存储器(RAM),闪存,只读存储器(ROM),电可编程ROM(EPROM),电擦除可编程ROM(EEPROM),寄存器,硬盘,可移动磁盘,CDROM中或本领域已知的任何其他形式的存储介质。
已经参考图示的实施例描述和图示了本发明构思的原理,将认识到,图示的实施例可以在布置和细节上进行修改而不背离这种原理,并且可以以任何期望的方式组合。此外,尽管前述讨论集中于特定实施例,但是可以构想其他配置。特别地,即使在本文中使用诸如“根据本发明构思的实施例”的表达,这些短语也意在大体上参考实施例的可能性,并且不旨在将本发明构思限于特定的实施例配置。如本文所使用的,这些术语可以参考可组合成其他实施例的相同或不同的实施例。
前述说明性实施例不应被解释为限制其发明构思。尽管已经描述了一些实施例,但是本领域技术人员将容易认识到,在实质上不脱离本公开的新颖教导和优点的情况下,可以对那些实施例进行许多修改。因此,所有这些修改旨在被包括在如权利要求书所限定的本发明构思的范围内。
本发明构思的实施例可以无限制地扩展到以下陈述:
陈述1.本发明构思的实施例包括一种转码器,包括:
缓冲器,用于存储输入编码数据;
索引映射器,用于从输入词典映射到输出词典;
当前编码缓冲器,用于存储修改的当前编码数据,所述修改的当前编码数据响应于输入编码数据、输入词典以及从输入词典到输出词典的映射;
先前编码缓冲器,用于存储修改的先前编码数据,所述修改的先前编码数据响应于先前输入编码数据、输入词典以及从输入词典到输出词典的映射;以及
规则评估器,用于响应于当前编码缓冲器中的修改的当前编码数据、先前编码缓冲器中的修改的先前编码数据以及转码规则来生成输出流。
陈述2.本发明构思的实施例包括根据陈述1所述的转码器,其中,索引映射器响应于转码规则。
陈述3.本发明构思的实施例包括根据陈述1所述的转码器,其中,转码规则响应于索引映射器。
陈述4.本发明构思的实施例包括根据陈述1所述的转码器,其中,索引映射器响应于输入词典中条目的选择子集。
陈述5.本发明构思的实施例包括根据陈述1所述的转码器,其中,规则评估器包括处理器、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、图形处理单元(GPU)或通用GPU(GPGPU)中的至少一个。
陈述6.本发明构思的实施例包括根据陈述5所述的转码器,其中,规则评估器还包括至少一个软件,用于实现转码规则和存储列出转码规则的表。
陈述7.本发明构思的实施例包括根据陈述5所述的转码器,其中,规则评估器还包括用于实现转码规则的电路。
陈述8.本发明构思的实施例包括根据陈述1所述的转码器,其中,规则评估器操作来使用转码规则从输入编码数据生成修改的当前编码数据。
陈述9.本发明构思的实施例包括根据陈述8所述的转码器,其中,规则评估器操作来将修改的先前编码数据添加到输出流。
陈述10.本发明构思的实施例包括根据陈述9所述的转码器,其中,规则评估器还操作来将修改的当前编码数据从当前编码缓冲器移动到先前编码缓冲器中的修改的先前编码数据。
陈述11.本发明构思的实施例包括根据陈述8所述的转码器,其中,规则评估器操作来使用转码规则将修改的先前编码数据修改为包括修改的当前编码数据。
陈述12.本发明构思的实施例包括根据陈述11所述的转码器,其中,当生成修改的当前编码数据时,规则评估器还操作来将输入编码数据的第一编码方案改变为第二编码方案。
陈述13.本发明构思的实施例包括根据陈述11所述的转码器,其中,当生成修改的当前编码数据时,规则评估器还操作来将输入编码数据的第一编码方案改变为第二编码方案。
陈述14.本发明构思的实施例包括根据陈述8所述的转码器,其中,规则评估器操作来从输入编码数据确定输入编码数据的第一编码方案,所述第一编码方案是输入编码数据使用的至少两种编码方案中的一种。
陈述15.本发明构思的实施例包括根据陈述1所述的转码器,还包括流分离器,用于识别输入编码数据中使用第一编码方案的第一块和输入编码数据中使用第二编码方案的第二块。
陈述16.本发明构思的实施例包括根据陈述1所述的转码器,其中,索引映射器操作来将输入词典中的至少一个条目映射为输出词典中的“无关”值。
陈述17.本发明构思的实施例包括根据陈述1所述的转码器,其中,索引映射器操作来将“无关”值添加到输出词典。
陈述18.本发明构思的实施例包括根据陈述1所述的转码器,其中:
输入编码数据为压缩输入编码数据;以及
转码器还包括解压缩引擎。
陈述19.本发明构思的实施例包括根据陈述1所述的转码器,其中,转码器操作来从输入编码数据产生输出流,而不对输入编码数据进行解码。
陈述20.本发明构思的实施例包括根据陈述1所述的转码器,其中,转码器被包括在固态驱动器(SSD)存储设备中。
陈述21.本发明构思的实施例包括根据陈述20所述的转码器,其中,从SSD存储设备内的存储接收输入编码数据。
陈述22.本发明构思的实施例包括一种方法,包括:
在存储设备的转码器接收输入编码数据的第一数据块;
确定主机计算机对第一数据块感兴趣;
至少部分地基于主机计算机感兴趣的第一数据块从第一数据块生成第一编码数据;
在存储设备的转码器接收输入编码数据的第二数据块;
确定主机计算机对第二数据块不感兴趣;
至少部分地基于主机计算机不感兴趣的第二数据块从第二数据块生成第二编码数据;以及
将第一编码数据和第二编码数据输出到主机计算机。
陈述23.本发明构思的实施例包括根据陈述22所述的方法,其中,至少部分地基于主机计算机不感兴趣的第二数据块从第二数据块生成第二编码数据包括:将第一编码数据中的值改变为“无关”值。
陈述24.本发明构思的实施例包括根据陈述23所述的方法,其中,至少部分地基于主机计算机不感兴趣的第二数据块从第二数据块生成第二编码数据还包括:将第二编码数据与包括“无关”值的第三编码数据组合。
陈述25.本发明构思的实施例包括根据陈述24所述的方法,其中,至少部分地基于主机计算机不感兴趣的第二数据块从第二数据块生成第二编码数据还包括:将第二数据块和第三编码数据中的至少一个的第一编码方案改变为第二编码方案。
陈述26.本发明构思的实施例包括根据陈述25所述的方法,其中,将第二数据块和第三编码数据中的至少一个的第一编码方案改变为第二编码方案包括:将第二数据块的第一编码方案改变为第二编码数据中的第二编码方案
陈述27.本发明构思的实施例包括根据陈述25所述的方法,其中,将第二数据块和第三编码数据中的至少一个的第一编码方案改变为第二编码方案包括:将第三编码数据的第一编码方案改变为第二编码方案。
陈述28.本发明构思的实施例包括根据陈述22所述的方法,其中,至少部分地基于主机计算机感兴趣的第一数据块从第一数据块生成第一编码数据包括:将第一编码数据和第三编码数据组合。
陈述29.本发明构思的实施例包括根据陈述28所述的方法,其中,至少部分地基于主机计算机感兴趣的第一数据块从第一数据块生成第一编码数据还包括:将第一数据块和第三编码数据中的至少一个的第一编码方案改变为第二编码方案。
陈述30.本发明构思的实施例包括根据陈述29所述的方法,其中,将第一数据块和第三编码数据中的至少一个的第一编码方案改变为第二编码方案包括:将第一数据块的第一编码方案改变为第一编码数据中的第二编码方案。
陈述31.本发明构思的实施例包括根据陈述29所述的方法,其中,将第一数据块和第三编码数据中的至少一个的第一编码方案改变为第二编码方案包括:将第三编码数据的第一编码方案改变为第二编码方案。
陈述32.本发明构思的实施例包括根据陈述22所述的方法,其中,至少部分地基于主机计算机感兴趣的第一数据块从第一数据块生成第一编码数据包括:至少部分地基于转码规则从第一数据块生成第一编码数据;以及
至少部分地基于主机计算机不感兴趣的第二数据块从第二数据块生成第二编码数据包括:至少部分地基于转码规则从第二数据块生成第二编码数据。
陈述33.本发明构思的实施例包括根据陈述22所述的方法,其中,在存储设备的转码器接收输入编码数据的第一数据块包括:
在流分离器接收输入编码数据;
在输入编码数据通过流分离器识别第一数据块和第二数据块,第一数据块是使用第一编码方案编码的且第二数据块是使用第二编码方案编码的;以及
从流分离器接收输入编码数据的第一数据块。
陈述34.本发明构思的实施例包括根据陈述22所述的方法,还包括:
从存储设备接收输入词典;
至少部分地基于主机计算机感兴趣的数据和主机计算机不感兴趣的数据,将输入词典映射到输出词典;以及
将输出词典输出到主机计算机。
陈述35.本发明构思的实施例包括根据陈述34所述的方法,其中,至少部分地基于主机计算机感兴趣的数据和主机计算机不感兴趣的数据,将输入词典映射到输出词典包括:至少部分地基于转码规则将输入词典映射到输出词典。
陈述36.本发明构思的实施例包括根据陈述34所述的方法,其中,至少部分地基于主机计算机感兴趣的数据和主机计算机不感兴趣的数据,将输入词典映射到输出词典包括:至少部分地基于输入词典中条目的选择子集将输入词典映射到输出词典。
陈述37.本发明构思的实施例包括根据陈述22所述的方法,其中,转码器操作来从输入编码数据产生第一编码数据和第二编码数据,而不对输入编码数据进行解码。
陈述38.本发明构思的实施例包括根据陈述22所述的方法,其中,转码器被包括在固态驱动器(SSD)存储设备中。
陈述39.本发明构思的实施例包括根据陈述38所述的方法,其中:
在转码器从存储设备接收输入编码数据的第一数据块包括:在转码器从SSD存储设备内的存储接收输入编码数据的第一数据块;以及
在转码器从存储设备接收输入编码数据的第二数据块包括:在转码器从SSD存储设备内的存储接收输入编码数据的第二数据块。
陈述40.本发明构思的实施例包括一种产品,包括非暂时性存储介质,所述非暂时性存储介质其上存储有指令,在由机器执行时使得:
在转码器从存储设备接收输入编码数据的第一数据块;
确定主机计算机对第一数据块感兴趣;
至少部分地基于主机计算机感兴趣的第一数据块从第一数据块生成第一编码数据;
在转码器从存储设备接收输入编码数据的第二数据块;
确定主机计算机对第二数据块不感兴趣;
至少部分地基于主机计算机不感兴趣的第二数据块从第二数据块生成第二编码数据;以及
将第一编码数据和第二编码数据输出到主机计算机。
陈述41.本发明构思的实施例包括根据陈述40所述的产品,其中,至少部分地基于主机计算机不感兴趣的第二数据块从第二数据块生成第二编码数据包括:将第一编码数据中的值改变为“无关”值。
陈述42.本发明构思的实施例包括根据陈述41所述的产品,其中,至少部分地基于主机计算机不感兴趣的第二数据块从第二数据块生成第二编码数据还包括:将第二编码数据与包括“无关”值的第三编码数据组合。
陈述43.本发明构思的实施例包括根据陈述42所述的产品,其中,至少部分地基于主机计算机不感兴趣的第二数据块从第二数据块生成第二编码数据还包括:将第二数据块和第三编码数据中的至少一个的第一编码方案改变为第二编码方案。
陈述44.本发明构思的实施例包括根据陈述43所述的产品,其中,将第二数据块和第三编码数据中的至少一个的第一编码方案改变为第二编码方案包括:将第二数据块的第一编码方案改变为第二编码数据中的第二编码方案。
陈述45.本发明构思的实施例包括根据陈述43所述的产品,其中,将第二数据块和第三编码数据中的至少一个的第一编码方案改变为第二编码方案包括:将第三编码数据的第一编码方案改变为第二编码方案。
陈述46.本发明构思的实施例包括根据陈述40所述的产品,其中,至少部分地基于主机计算机感兴趣的第一数据块从第一数据块生成第一编码数据包括:将第一编码数据和第三编码数据组合。
陈述47.本发明构思的实施例包括根据陈述46所述的产品,其中,至少部分地基于主机计算机感兴趣的第一数据块从第一数据块生成第一编码数据还包括:将第一数据块和第三编码数据中的至少一个的第一编码方案改变为第二编码方案。
陈述48.本发明构思的实施例包括根据陈述47所述的产品,其中,将第一数据块和第三编码数据中的至少一个的第一编码方案改变为第二编码方案包括:将第一数据块的第一编码方案改变为第一编码数据中的第二编码方案。
陈述49.本发明构思的实施例包括根据陈述47所述的产品,其中,将第一数据块和第三编码数据中的至少一个的第一编码方案改变为第二编码方案包括:将第三编码数据的第一编码方案改变为第二编码方案。
陈述50.本发明构思的实施例包括根据陈述40所述的产品,其中,至少部分地基于主机计算机感兴趣的第一数据块从第一数据块生成第一编码数据包括:至少部分地基于转码规则从第一数据块生成第一编码数据;以及
至少部分地基于主机计算机不感兴趣的第二数据块从第二数据块生成第二编码数据包括:至少部分地基于转码规则从第二数据块生成第二编码数据。
陈述51.本发明构思的实施例包括根据陈述40所述的产品,其中,在转码器从存储设备接收输入编码数据的第一数据块包括:
在流分离器接收输入编码数据;
在输入编码数据中通过流分离器识别第一数据块和第二数据块,第一数据块是使用第一编码方案编码的且第二数据块是使用第二编码方案编码的;以及
从流分离器接收输入编码数据的第一数据块。
陈述52.本发明构思的一个实施例包括根据陈述40所述的产品,所述非暂时性存储介质在其上存储进一步的指令,在由机器执行时,使得:
从存储设备接收输入词典;
至少部分地基于主机计算机感兴趣的数据和主机计算机不感兴趣的数据,将输入词典映射到输出词典;以及
将输出词典输出到主机计算机。
陈述53.本发明构思的实施例包括根据陈述52所述的产品,其中,至少部分地基于主机计算机感兴趣的数据和主机计算机不感兴趣的数据,将输入词典映射到输出词典包括:至少部分地基于转码规则将输入词典映射到输出词典。
陈述54.本发明构思的实施例包括根据陈述52所述的产品,其中,至少部分地基于主机计算机感兴趣的数据和主机计算机不感兴趣的数据,将输入词典映射到输出词典包括:至少部分地基于输入词典中条目的选择子集将输入词典映射到输出词典。
陈述55.本发明构思的实施例包括根据陈述40所述的产品,其中,转码器操作来从输入编码数据产生第一编码数据和第二编码数据,而不对输入编码数据进行解码。
陈述56.本发明构思的实施例包括根据陈述40所述的产品,其中,转码器被包括在固态驱动器(SSD)存储设备中。
陈述57.本发明构思的实施例包括根据陈述56所述的产品,其中:
在转码器从存储设备接收输入编码数据的第一数据块包括:在转码器从SSD存储设备内的存储接收输入编码数据的第一数据块;以及
在转码器从存储设备接收输入编码数据的第二数据块包括:在转码器从SSD存储设备内的存储接收输入编码数据的第二数据块。
陈述58.本发明构思的实施例包括一种存储设备,包括:
存储,用于输入编码数据;
控制器,用于处理来自存储器上的主机计算机的读取请求和写入请求;
存储内计算(ISC)控制器,用于接收源自主机计算机的断言,所述断言被应用于存储在存储中的输入编码数据;以及
转码器,包括索引映射器,从用于输入编码数据的输入词典映射到输出词典,所述输入词典包括至少一个第一条目和至少一个第二条目,至少一个第一条目映射到输出词典中的至少一个第三条目,并且至少一个第二条目映射到输出词典中的“无关”条目。
陈述59.本发明构思的实施例包括根据陈述58所述的存储设备,其中,转码器包括处理器、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、图形处理单元(GPU)或通用GPU(GPGPU)中的至少一个。
陈述60.本发明构思的实施例包括根据陈述58所述的存储设备,其中,ISC控制器操作来将加速功能应用于来自转码器的输出编码数据。
陈述61.本发明构思的实施例包括根据陈述60所述的存储设备,其中,ISC控制器还操作来将对来自转码器的输出编码数据进行加速功能的结果输出到主机计算机。
陈述62.本发明构思的实施例包括根据陈述58所述的存储设备,其中,ISC控制器操作来将转码器的输出编码数据转发到主机计算机。
陈述63.本发明构思的实施例包括根据陈述62所述的存储设备,其中,ISC控制器还操作来将输出词典转发到主机计算机。
陈述64.本发明构思的实施例包括根据陈述58所述的存储设备,其中,转码器操作来至少部分地基于输入编码数据和从输入词典到输出词典的映射来生成输出编码数据。
陈述65.本发明构思的实施例包括根据陈述64所述的存储设备,其中,转码器包括:
缓冲器,用于存储输入编码数据;
索引映射器;
当前编码缓冲器,用于存储修改的当前编码数据,所述修改的当前编码数据响应于输入编码数据以及从输入词典到输出词典的映射;
先前编码缓冲器,用于存储修改的先前编码数据,所述修改的先前编码数据响应于先前输入编码数据以及从输入词典到输出词典的映射;以及
规则评估器,用于响应于当前编码缓冲器中的修改的当前编码数据、先前编码缓冲器中的修改的先前编码数据以及转码规则来生成输出流。
陈述66.本发明构思的实施例包括根据陈述65所述的存储设备,其中,转码规则至少部分地基于断言。
陈述67.本发明构思的实施例包括根据陈述65所述的存储设备,其中,规则评估器响应于当前编码缓冲器中的修改的当前编码数据、先前编码缓冲器中的修改的先前编码数据和转码规则生成输出流,而不对输入编码数据进行解码。
陈述68.本发明构思的实施例包括根据陈述64所述的存储设备,其中:
输入编码数据使用第一编码方案;
输出编码数据使用第二编码方案;以及
第二编码方案不同于第一编码方案。
陈述69.本发明构思的实施例包括根据陈述58所述的存储设备,其中,输入编码数据以分列格式存储在存储中。
陈述70.本发明构思的实施例包括根据陈述69所述的存储设备,其中,输入编码数据包括使用Apache Parquet存储格式存储的输入文件。
陈述71.本发明构思的实施例包括根据陈述69所述的存储设备,还包括列块处理器,用于处理包括输入编码数据的列块并将输入编码数据转发到转码器。
陈述72.本发明构思的实施例包括根据陈述71所述的存储设备,其中,列块处理器包括转码器。
陈述73.本发明构思的实施例包括根据陈述71所述的存储设备,其中列块处理器包括处理器、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、图形处理单元(GPU)或通用GPU(GPGPU)中的至少一个。
陈述74.本发明构思的实施例包括根据陈述58所述的存储设备,其中,转码器操作来至少部分地基于断言生成应用于输入编码数据的转码规则,以产生输出编码数据。
陈述75.本发明构思的实施例包括根据陈述74所述的存储设备,其中,转码器操作来产生输出编码数据而不解码输入编码数据。
陈述76.本发明构思的实施例包括一种方法,包括:
在转码器接收应用于输入编码数据的断言;
为输入编码数据访问输入词典;
识别输入词典中断言覆盖的至少一个第一条目以及输入词典中断言未覆盖的至少一个第二条目;
生成输出词典,所述输出词典在词典中排除断言未覆盖的至少一个第二条目,转码词典包括至少第三条目和“无关”条目;以及
由转码器生成词典映射,所述词典映射将输入词典中的至少一个第一条目映射到输出词典中的至少一个第三条目,并将输入词典中断言未覆盖的至少一个第二条目映射到输出词典中的“无关”条目。
陈述77.本发明构思的实施例包括根据陈述76所述的方法,其中,输入编码数据以分列格式存储。
陈述78.本发明构思的实施例包括根据陈述77所述的方法,其中,输入编码数据包括使用Apache Parquet存储格式存储的输入文件。
陈述79.本发明构思的实施例包括根据陈述76所述的方法,其中,输入编码数据包括以分列格式存储的列块。
陈述80.本发明构思的实施例包括根据陈述76所述的方法,还包括:
使用词典映射将输入编码数据转码为输出编码数据;以及
输出输出编码数据。
陈述81.本发明构思的实施例包括根据陈述80所述的方法,其中,使用词典映射将输入编码数据转码为输出编码数据包括:
在转码器接收输入编码数据的第一数据块;
确定断言覆盖第一数据块;
使用词典映射至少部分地基于主机计算机感兴趣的第一数据块从第一数据块中生成第一编码数据;
在转码器从存储设备接收输入编码数据的第二数据块;
确定断言未覆盖第二数据块;
使用词典映射至少部分地基于主机计算机不感兴趣的第二数据块从第二数据块生成第二编码数据;以及
输出第一编码数据和第二编码数据。
陈述82.本发明构思的实施例包括根据陈述81所述的方法,其中,在转码器接收输入编码数据的第一数据块包括:
在列块处理器从存储内计算(ISC)控制器接收块标识符(ID)的列表;
通过列块处理器访问块ID列表中包括块ID的列块;
通过列块处理器从列块中检索输入编码数据;以及
将输入编码数据从列块处理器转发到转码器。
陈述83.本发明构思的实施例包括根据陈述81所述的方法,还包括:至少部分地基于断言生成应用于输入编码数据的转码规则。
陈述84.本发明构思的实施例包括根据陈述80所述的方法,其中,使用词典映射将输入编码数据转码为输出编码数据包括:使用词典映射将输入编码数据转码为输出编码数据,而无需解码输入编码数据。
陈述85.本发明构思的实施例包括根据陈述80所述的方法,其中:
输入编码数据使用第一编码方案;
输出编码数据使用第二编码方案;以及
第二编码方案不同于第一编码方案。
陈述86.本发明构思的实施例包括根据陈述80的方法,其中,输出输出编码数据包括将输出编码数据输出到ISC控制器。
陈述87.本发明构思的实施例包括根据陈述86所述的方法,其中,将输出编码数据输出到ISC控制器还包括将输出词典输出到ISC控制器。
陈述88.本发明构思的实施例包括根据陈述87所述的方法,还包括将输出编码数据和输出词典从ISC控制器转发到主机计算机。
陈述89.本发明构思的实施例包括根据陈述87所述的方法,还包括由ISC控制器对输出编码数据执行加速功能以产生加速数据。
陈述90.本发明构思的实施例包括根据陈述89所述的方法,还包括将加速数据从ISC控制器输出到主机计算机。
陈述91.本发明构思的实施例包括根据陈述76所述的方法,还包括输出输出词典。
陈述92.本发明构思的实施例包括根据陈述76所述的方法,其中,接收要应用于输入编码数据的断言包括从ISC控制器接收要应用于输入编码数据的断言。
陈述93.本发明构思的实施例包括根据陈述92所述的方法,还包括从ISC控制器接收输入词典。
陈述94.本发明构思的实施例包括根据陈述76所述的方法,还包括:
确定输入词典中没有断言未覆盖的条目;以及
输出输入编码数据而不将输入编码数据转码为输出编码数据。
陈述95.本发明构思的实施例包括一种产品,包括非暂时性存储介质,所述非暂时性存储介质其上存储有指令,在由机器执行时使得:
在转码器接收应用于输入编码数据的断言;
为输入编码数据访问输入词典;
识别输入词典中断言覆盖的至少一个第一条目以及输入词典中断言未覆盖的至少一个第二条目;
生成输出词典,所述输出词典在词典中排除断言未覆盖的至少一个第二条目,转码词典包括至少第三条目和“无关”条目;以及
由转码器生成词典映射,所述词典映射将输入词典中的至少一个第一条目映射到输出词典中的至少一个第三条目,并将输入词典中断言未覆盖的至少一个第二条目映射到输出词典中的“无关”条目。
陈述96.本发明构思的实施例包括根据陈述95所述的产品,其中,输入编码数据以分列格式存储。
陈述97.本发明构思的实施例包括根据陈述96所述的产品,其中,输入编码数据包括使用Apache Parquet存储格式存储的输入文件。
陈述98.本发明构思的实施例包括根据陈述95所述的产品,其中,输入编码数据包括以分列格式存储的列块。
陈述99.本发明构思的实施例包括根据陈述95所述的产品,所述非暂时性存储介质在其上存储进一步的指令,在由机器执行时,使得:
使用词典映射将输入编码数据转码为输出编码数据;以及
输出输出编码数据。
陈述100.本发明构思的实施例包括根据陈述99所述的产品,其中,使用词典映射将输入编码数据转码为输出编码数据包括:
在转码器接收输入编码数据的第一数据块;
确定断言覆盖第一数据块;
使用词典映射至少部分地基于主机计算机感兴趣的第一数据块从第一数据块中生成第一编码数据;
在转码器从存储设备接收输入编码数据的第二数据块;
确定断言未覆盖第二数据块;
使用词典映射至少部分地基于主机计算机不感兴趣的第二数据块从第二数据块生成第二编码数据;以及
输出第一编码数据和第二编码数据。
陈述101.本发明构思的实施例包括根据陈述100所述的产品,其中,在转码器接收输入编码数据的第一数据块包括:
在列块处理器从存储内计算(ISC)控制器接收块标识符(ID)的列表;
通过列块处理器访问块ID列表中包括块ID的列块;
通过列块处理器从列块中检索输入编码数据;以及
将输入编码数据从列块处理器转发到转码器。
陈述102.本发明构思的实施例包括根据陈述100所述的产品,所述非暂时性存储介质在其上存储进一步的指令,在由机器执行时,使得:至少部分地基于断言生成应用于输入编码数据的转码规则。
陈述103.本发明构思的实施例包括根据陈述99所述的产品,其中,使用词典映射将输入编码数据转码为输出编码数据包括:使用词典映射将输入编码数据转码为输出编码数据,而无需解码输入编码数据。
陈述104.本发明构思的实施例包括根据陈述99所述的产品,其中:
输入编码数据使用第一编码方案;
输出编码数据使用第二编码方案;以及
第二编码方案不同于第一编码方案。
陈述105.本发明构思的实施例包括根据陈述99的产品,其中,输出输出编码数据包括将输出编码数据输出到ISC控制器。
陈述106.本发明构思的实施例包括根据陈述105所述的产品,其中,将输出编码数据输出到ISC控制器还包括将输出词典输出到ISC控制器。
陈述107.本发明构思的实施例包括根据陈述106所述的产品,所述非暂时性存储介质在其上存储进一步的指令,在由机器执行时,使得:将输出编码数据和输出词典从ISC控制器转发到主机计算机。
陈述108.本发明构思的实施例包括根据陈述106所述的产品,所述非暂时性存储介质在其上存储进一步的指令,在由机器执行时,使得:由ISC控制器对输出编码数据执行加速功能以产生加速数据。
陈述109.本发明构思的实施例包括根据陈述108所述的产品,所述非暂时性存储介质在其上存储进一步的指令,在由机器执行时,使得:将加速数据从ISC控制器输出到主机计算机。
陈述110.本发明构思的实施例包括根据陈述95所述的产品,所述非暂时性存储介质在其上存储进一步的指令,在由机器执行时,使得:输出输出词典。
陈述111.本发明构思的实施例包括根据陈述95所述的产品,其中,接收要应用于输入编码数据的断言包括从ISC控制器接收要应用于输入编码数据的断言。
陈述112.本发明构思的实施例包括根据陈述111所述的产品,所述非暂时性存储介质在其上存储进一步的指令,在由机器执行时,使得:从ISC控制器接收输入词典。
陈述113.本发明构思的实施例包括根据陈述95所述的产品,所述非暂时性存储介质在其上存储进一步的指令,在由机器执行时,使得:
确定输入词典中没有断言未覆盖的条目;以及
输出输入编码数据而不将输入编码数据转码为输出编码数据。
因此,鉴于本文描述的实施例的多种变型,该详细描述和所附材料仅旨在示例性说明,而不应被视为限制本发明构思的范围。因此,作为发明构思要求保护的内容是落入所附权利要求及其等同物的范围和精神之内的所有此类修改。
Claims (16)
1.一种转码器,包括:
缓冲器,用于存储输入编码数据;
索引映射器,用于从输入词典映射到输出词典;
当前编码缓冲器,用于存储修改的当前编码数据,所述修改的当前编码数据响应于输入编码数据、输入词典以及从输入词典到输出词典的映射;
先前编码缓冲器,用于存储修改的先前编码数据,所述修改的先前编码数据响应于先前输入编码数据、输入词典以及从输入词典到输出词典的映射;以及
规则评估器,用于响应于当前编码缓冲器中的修改的当前编码数据、先前编码缓冲器中的修改的先前编码数据以及转码规则来生成输出流。
2.根据权利要求1所述的转码器,其中,规则评估器包括处理器、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、图形处理单元(GPU)和通用GPU(GPGPU)中的至少一个。
3.根据权利要求1所述的转码器,其中,规则评估器操作来使用转码规则从输入编码数据生成修改的当前编码数据。
4.根据权利要求3所述的转码器,其中,规则评估器操作来使用转码规则将修改的先前编码数据修改为包括修改的当前编码数据。
5.根据权利要求4所述的转码器,其中,规则评估器还操作来将输入编码数据和修改的先前编码数据中的至少一个的第一编码方案改变为第二编码方案。
6.根据权利要求1所述的转码器,还包括:流分离器,用于识别输入编码数据中使用第一编码方案的第一块以及输入编码数据中使用第二编码方案的第二块。
7.根据权利要求1所述的转码器,其中,索引映射器操作来将输入词典中的至少一个条目映射为输出词典中的“无关”值。
8.根据权利要求1所述的转码器,其中,转码器操作来从输入编码数据产生输出流,而不对输入编码数据进行解码。
9.一种用于转码的方法,包括:
通过缓冲器存储输入编码数据;
通过索引映射器从输入词典映射到输出词典;
通过当前编码缓冲器存储修改的当前编码数据,所述修改的当前编码数据响应于输入编码数据、输入词典以及从输入词典到输出词典的映射;
通过先前编码缓冲器存储修改的先前编码数据,所述修改的先前编码数据响应于先前输入编码数据、输入词典以及从输入词典到输出词典的映射;以及
通过规则评估器响应于当前编码缓冲器中的修改的当前编码数据、先前编码缓冲器中的修改的先前编码数据以及转码规则来生成输出流。
10.根据权利要求9所述的方法,其中,规则评估器包括处理器、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、图形处理单元(GPU)和通用GPU(GPGPU)中的至少一个。
11.根据权利要求9所述的方法,还包括:通过规则评估器来使用转码规则从输入编码数据生成修改的当前编码数据。
12.根据权利要求11所述的方法,还包括:通过规则评估器来使用转码规则将修改的先前编码数据修改为包括修改的当前编码数据。
13.根据权利要求12所述的方法,还包括:通过规则评估器来将输入编码数据和修改的先前编码数据中的至少一个的第一编码方案改变为第二编码方案。
14.根据权利要求9所述的方法,还包括:通过流分离器识别输入编码数据中使用第一编码方案的第一块以及输入编码数据中使用第二编码方案的第二块。
15.根据权利要求9所述的方法,还包括:通过索引映射器将输入词典中的至少一个条目映射为输出词典中的“无关”值。
16.根据权利要求9所述的方法,还包括:通过转码器来从输入编码数据产生输出流,而不对输入编码数据进行解码。
Applications Claiming Priority (8)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962834900P | 2019-04-16 | 2019-04-16 | |
US62/834,900 | 2019-04-16 | ||
US201962945883P | 2019-12-09 | 2019-12-09 | |
US201962945877P | 2019-12-09 | 2019-12-09 | |
US62/945,883 | 2019-12-09 | ||
US62/945,877 | 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 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111832257A CN111832257A (zh) | 2020-10-27 |
CN111832257B true CN111832257B (zh) | 2023-02-28 |
Family
ID=72913839
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010298627.5A Active CN111832257B (zh) | 2019-04-16 | 2020-04-16 | 编码数据的条件转码 |
Country Status (4)
Country | Link |
---|---|
JP (1) | JP7381393B2 (zh) |
KR (3) | KR20200121761A (zh) |
CN (1) | CN111832257B (zh) |
TW (1) | TWI825305B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115719059B (zh) * | 2022-11-29 | 2023-08-08 | 北京中科智加科技有限公司 | 一种莫尔斯分组纠错方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106354699A (zh) * | 2015-07-13 | 2017-01-25 | 富士通株式会社 | 编码方法、编码装置、解码方法以及解码装置 |
CN108197087A (zh) * | 2018-01-18 | 2018-06-22 | 北京奇安信科技有限公司 | 字符编码识别方法及装置 |
Family Cites Families (12)
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 |
JP4328358B2 (ja) * | 2004-12-07 | 2009-09-09 | 日本電信電話株式会社 | 情報圧縮符号化装置、その復号化装置、これらの方法、およびこれらのプログラムとその記録媒体 |
US7102552B1 (en) * | 2005-06-07 | 2006-09-05 | Windspring, Inc. | Data compression with edit-in-place capability for compressed data |
JP4266218B2 (ja) * | 2005-09-29 | 2009-05-20 | 株式会社東芝 | 動画像データの再圧縮符号化方法、装置及びプログラム |
US20080266144A1 (en) * | 2007-04-30 | 2008-10-30 | Jen-Te Chen | Encoding Method which Encodes Codes in Consideration of Shape |
US8090027B2 (en) * | 2007-08-29 | 2012-01-03 | Red Hat, Inc. | Data compression using an arbitrary-sized dictionary |
US7889102B2 (en) * | 2009-02-26 | 2011-02-15 | Red Hat, Inc. | LZSS with multiple dictionaries and windows |
US8159374B2 (en) * | 2009-11-30 | 2012-04-17 | Red Hat, Inc. | Unicode-compatible dictionary compression |
US9385751B2 (en) * | 2014-10-07 | 2016-07-05 | Protein Metrics Inc. | Enhanced data compression for sparse multidimensional ordered series data |
JP2017028372A (ja) * | 2015-07-16 | 2017-02-02 | 沖電気工業株式会社 | 符号化方式変換装置、方法及びプログラム |
-
2020
- 2020-04-15 TW TW109112659A patent/TWI825305B/zh active
- 2020-04-16 JP JP2020073662A patent/JP7381393B2/ja active Active
- 2020-04-16 KR KR1020200046258A patent/KR20200121761A/ko unknown
- 2020-04-16 KR KR1020200046249A patent/KR20200121760A/ko not_active Application Discontinuation
- 2020-04-16 CN CN202010298627.5A patent/CN111832257B/zh active Active
-
2024
- 2024-05-20 KR KR1020240065311A patent/KR20240078422A/ko active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106354699A (zh) * | 2015-07-13 | 2017-01-25 | 富士通株式会社 | 编码方法、编码装置、解码方法以及解码装置 |
CN108197087A (zh) * | 2018-01-18 | 2018-06-22 | 北京奇安信科技有限公司 | 字符编码识别方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
TW202107856A (zh) | 2021-02-16 |
JP2020178347A (ja) | 2020-10-29 |
CN111832257A (zh) | 2020-10-27 |
KR20200121761A (ko) | 2020-10-26 |
TWI825305B (zh) | 2023-12-11 |
KR20240078422A (ko) | 2024-06-03 |
JP7381393B2 (ja) | 2023-11-15 |
KR20200121760A (ko) | 2020-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11184021B2 (en) | Using predicates in conditional transcoder for column store | |
US9503123B1 (en) | Random access to compressed data using bitwise indices | |
US6829695B1 (en) | Enhanced boolean processor with parallel input | |
US6885319B2 (en) | System and method for generating optimally compressed data from a plurality of data compression/decompression engines implementing different data compression algorithms | |
US10187081B1 (en) | Dictionary preload for data compression | |
US6334123B1 (en) | Index relational processor | |
CN112953550B (zh) | 数据压缩的方法、电子设备及存储介质 | |
US9479194B2 (en) | Data compression apparatus and data decompression apparatus | |
KR20240078422A (ko) | 인코딩된 데이터에 대한 조건부 트랜스코딩 | |
CN101783788A (zh) | 文件压缩、解压缩方法、装置及压缩文件搜索方法、装置 | |
JP2003218703A (ja) | データ符号化装置及びデータ復号装置 | |
CN107565971A (zh) | 一种数据压缩方法及装置 | |
JPH07261977A (ja) | データ圧縮方法および装置ならびにデータ復元方法および装置 | |
KR20220054651A (ko) | 다중 심볼 디코더 | |
CN104682966B (zh) | 列表数据的无损压缩方法 | |
GB2608030A (en) | Power-aware transmission of quantum control signals | |
CN116318171B (zh) | Lz4解压缩硬件加速实现/压缩方法、装置、介质及芯片 | |
US11914443B2 (en) | Power-aware transmission of quantum control signals | |
JP7305609B2 (ja) | 受信したデータを処理する装置 | |
Akil et al. | FPGA-based architecture for hardware compression/decompression of wide format images | |
KR100686354B1 (ko) | 가변 트리를 이용한 허프만 복호화 방법 및 장치 | |
WO2022263790A1 (en) | Power-aware transmission of quantum control signals | |
WO2002029643A1 (en) | Enhanced boolean processor with parallel input | |
EP1323122A2 (en) | Index relational processor | |
JP2005175926A (ja) | 復号装置及び方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |