CN113728601B - 优化压缩数据的存储和获取 - Google Patents
优化压缩数据的存储和获取 Download PDFInfo
- Publication number
- CN113728601B CN113728601B CN201980095790.7A CN201980095790A CN113728601B CN 113728601 B CN113728601 B CN 113728601B CN 201980095790 A CN201980095790 A CN 201980095790A CN 113728601 B CN113728601 B CN 113728601B
- Authority
- CN
- China
- Prior art keywords
- compressed
- data
- size
- blocks
- data structure
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/04—Protocols for data compression, e.g. ROHC
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1744—Redundancy elimination performed by the file system using compression, e.g. sparse files
-
- 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
-
- 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
- H03M7/46—Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind
- H03M7/48—Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind alternating with other codes during the code conversion process, e.g. run-length coding being performed only as long as sufficientlylong runs of digits of the same kind are present
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/565—Conversion or adaptation of application format or content
- H04L67/5651—Reducing the amount or size of exchanged application data
-
- 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
- H03M7/3066—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction by means of a mask or a bit-map
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
在一些示例中,计算机系统可以接收数据对象的多个数据块。该系统可以压缩多个数据块以获得多个压缩块,并且可以确定多个压缩块一起是否小于阈值大小。基于确定多个压缩块一起小于阈值大小,该系统可以向映射数据结构中的各个条目加入多个压缩块的相应大小。另外,该系统可以通过组合各个条目中的至少两个条目的值来压缩映射数据结构,并且可以存储多个压缩块和压缩的映射数据结构。
Description
技术领域
本公开涉及压缩数据存储和获取的技术领域。
背景技术
存储在存储系统中的数据有时可能会被压缩以增加能够在存储系统中存储的数据的量。作为一个例子,压缩数据对象可以通过网络存储在一个或多个网络存储位置。如果用户希望通过范围读取来访问存储的数据对象的一部分,则通常可以从网络存储器中获取所请求的部分前面的所有对象数据并对其解压缩。例如,传统技术可能不能在不确定前面数据的压缩的情况下只在特定的请求位置开始解压缩。因此,通常可能会对前面所有数据解压缩以实现对期望部分的解压缩和访问。该过程在计算上可能低效且耗时。
发明内容
一些实现方式包括可以接收数据对象的多个数据块的计算机系统。系统可以压缩多个数据块以获得多个压缩块,并且可以确定多个压缩块一起是否小于阈值大小。基于确定多个压缩块一起小于阈值大小,系统可以向映射数据结构中的各个条目加入多个压缩块的相应大小。另外,系统可以通过组合各个条目中的至少两个条目的值来精简映射数据结构,并且可以存储多个压缩块和精简后的映射数据结构。
附图说明
参照附图阐述详细描述。在附图中,附图标记的最左边的一个或多个数字表示该附图标记首次出现的图。在不同图中使用相同的附图标记表示相似或相同的项目或特征。
图1示出了根据一些实现方式的能够存储和访问压缩数据的系统的示例架构。
图2示出了根据一些实现方式的包括每个块大小和数据大小的映射大小的示例数据结构。
图3示出了根据一些实现方式的表示特殊值溢出(overflow)的分配(distribution)和映射精简(compaction)的示例数据结构。
图4示出了根据一些实现方式的分配算法的操作的示例。
图5示出了根据一些实现方式的映射标头(header)的示例数据结构和布局。
图6示出了根据一些实现方式的映射的示例数据结构配置。
图7示出了根据一些实现方式的映射的示例数据结构配置。
图8示出了根据一些实现方式的在一次精简后的映射的示例数据结构配置。
图9是示出根据一些实现方式的用于压缩和映射生成的示例过程的流程图。
图10是示出根据一些实现方式的作为图9的过程的延续的示例过程的流程图。
图11是示出根据一些实现方式的用于基于映射的解压缩的示例过程的流程图。
图12是示出根据一些实现方式的作为图11的过程的延续的示例过程的流程图。
具体实施方式
本文的一些实现方式涉及用于实现压缩数据和/或与未压缩数据混合的压缩数据的高性能范围读取的技术和布置。在一些情况下,数据可以存储在云中的存储位置或以其他方式通过网络存储在网络存储位置。在一些示例中,可以生成和维护映射数据结构(在下文中称为“映射”)以关联数据中的压缩位置和未压缩位置。例如,正在压缩数据时,可以创建映射以将原始未压缩对象中的位置与压缩数据中的偏移量关联起来。此外,当例如基于用户请求等请求访问压缩对象的一定范围的对象数据时,映射可以用于使解压缩能够在刚好在所请求的范围之前的偏移量处启动,而不是必须对整个压缩对象解压缩。
在一些示例中,可以将数据划分并压缩成块(例如具有指定的默认大小,例如32K、64K、128K、256K等)。例如,块可以具有可以与用于每个压缩请求的原始对象中的字节数相对应的指定的块大小。对象中的最后一个块的块大小可以小于对象中的其他块的块大小。在每个块被压缩后,可以向用于每个块的映射添加表示该块的大小的条目。此外,可以生成映射标头以描述包括诸如块大小之类的信息的映射。可以在映射之前访问映射标头,并且在某些情况下,映射标头可用于定位映射。映射本身可以被附加到映射标头上或可以以其他方式跟在映射标头后,或者,映射可以被附加到压缩对象上。
在某些情况下,映射可以被精简为较小大小,例如以使映射能够更好地完全适应内存。为了精简映射,被精简区域不能不包含压缩数据和未压缩数据的混合。为了实现这一点,流式传输(streaming)对象数据可以被压缩为具有较大的流式传输集合大小(例如,512K)的块(例如,64K)。如果作为某个区域的整个块集合(在某些示例中被称为“操作”)是不可压缩的,则该集合中的所有块大小可以在映射中被记录为压缩后大小为“0”并且压缩未用于任何对应的块。精简映射中未压缩块的集合是通过添加所有0大小的块来完成的,这导致0大小的精简后的块仍不被压缩。
本文的实现方式提供了压缩文件和其他数据对象的优化范围读取性能。示例可以包括关联压缩位置和未压缩位置的关系压缩映射以及用于最小化映射大小的技术—例如将映射大小限制为每64K压缩数据2个字节。此外,本文的示例提供了在数据的初始大小和可压缩性未知的情况下压缩流式传输文件和其他流式传输数据并且仅在压缩有益的区域上使用压缩的能力。
此外,通过本文的映射精简技术,整个映射在压缩期间可以被保持在内存中,这在传统映射技术中是不可能的,因为映射可能会变得太大。另外,一些示例允许初始最佳块大小(如64K),并能够随着映射变大而精简映射,从而可以将映射保持在内存中。另外,可压缩区域和不可压缩区域可以在精简期间组合,而无需在映射中使用额外的字节。在一些示例中,不可能的大小零或其他合适的指示符可用于指示在某个数据区域上未使用压缩。
另外,本文的示例克服了块的集合可压缩但一个或多个单独的块不可压缩时所提出的挑战。例如,当使用像64K或16M这样的块大小时,分别为2或3个字节的优化大小字段完全适合潜在大小,而没有用于包括大小增加的任何空间。在指定每个集合(操作)每64K至少节省2个字节以使用压缩后,可以在映射中使用64K-1的特殊压缩后大小(或者对于更大的块为其倍数)来表示使用压缩没有好处。可以使用允许简单添加邻块的精简的算法将附加字节添加到集合中的邻块。如果集合具有特殊大小,则无法确定压缩对象中的各个块位置,并且解压缩可能在可以确定位置的集合边界上开始。
另外,一些示例包括优化以允许不可压缩块避免压缩。例如,每个块可以用压缩后大小0来表示,以指示未使用压缩。如果块的压缩不足以使其值得使用压缩,那么可在压缩对象中包含未压缩数据而不是压缩数据,并且可以将0与映射中的未压缩数据相关联以指示未使用压缩。
此外,一些示例包括映射精简以使映射大小最小化。例如,映射中的每个条目可以是与压缩块大小相关联的块大小表示。这意味着映射中的每个条目可能只需大到足以包含对应块的块大小,从而假设压缩节省了一些空间。因此,64K或更小的块大小可能对于每个块在映射中仅使用两个字节。对于大于64K但小于16MB的块大小,可能在映射中针对每个块使用三个字节。此外,在块的块大小大于16MB的情况下,可能在映射中针对每个数据块使用四个字节。
另外,一些示例包括优化以允许通过定期映射精简来流式传输数据。最初,在压缩流式传输对象的情况下,流式传输对象的完整大小通常是未知的。流式传输数据可能被压缩并存储在网络存储位置(在一些示例中也称为云存储)。为了有效地处理映射创建,可以将映射保持在内存中,直到映射与压缩对象一起写入云,并且在某些情况下,可以定期精简映射以将映射大小保持低于指定的阈值大小。通过将整个映射保持在内存中,不必在创建映射期间将映射写入本地存储器(例如硬盘驱动器或固态驱动器),然后在压缩完成后再次读取映射以将完成的映射发送到网络存储位置,以与压缩数据相关联地存储。在一些示例中,在对象的压缩完成后,可以将映射附加到压缩对象上,从而可以将映射包括在数据对象的压缩后大小中(例如参见图2)。
作为一个非限制性示例,当使用每个块64KB的块大小时,2TB对象的映射可以使用接近62MB。为了在将映射保持在内存中的同时处理这样的大对象的压缩,本文的映射可以是可精简的。精简映射可以通过组合相邻条目并使块大小加倍来完成。例如,假设2TB对象的62MB映射被精简,直到映射条目表示的块大小为1MB而不是每个块64KB。在这种情况下,映射可以使用不到6MB,而不是62MB。
在这里的示例中,不希望精简导致压缩块和未压缩块的混合。因此,最大精简时的块大小可以用作操作大小。例如,操作可以包括全都使用压缩或全都跳过压缩的块的集合。因此,系统可以在从操作中包括的所有块收集结果后确定是否应该使用压缩。例如,每个操作可以是2的幂个块的集合。在确定是否应该压缩操作之前,对该操作中的所有块进行压缩。如果操作是不可压缩的(例如,压缩导致小于阈值量的整体大小减小),则针对操作中的每个块用0更新映射,以指示未使用压缩。如果对操作中的任何块都使用压缩,则对该操作中的所有块都使用压缩。
出于讨论的目的,在与一个或多个网络存储位置和一个或多个能够优化数据压缩的用户设备通信的一个或多个服务计算设备的环境中描述了一些示例实现方式。然而,此处的实现方式不限于所提供的特定示例,并且可以扩展到其他类型的计算系统架构、其他类型的存储环境、其他类型的客户端配置、其他类型的数据等等,根据本文的公开内容,这对于本领域技术人员来说是清楚的。
图1示出了根据一些实现方式的能够存储和访问压缩数据的系统100的示例架构。系统100包括一个或多个服务计算设备102,该一个或多个服务计算设备102能够与至少一个存储系统104通信或以其他方式耦合,例如通过一个或多个网络106。此外,一个或多个服务计算设备102能够通过一个或多个网络106与一个或多个用户计算设备108(例如用户设备108(1)、108(2)、……)通信,用户计算设备108可以是各种类型的计算设备中的任何一种,如下面另外讨论的那样。
在一些示例中,一个或多个服务计算设备102可以包括可以以任何数量的方式实施的一个或多个服务器。例如,一个或多个服务计算设备102的程序、其他功能组件以及至少一部分数据存储可以在至少一个服务器上实现,例如以服务器集群、服务器农场(serverfarm)、数据中心、云托管计算服务等等实现,但是可以附加地或替代地使用其他计算机架构。在所示的示例中,一个或多个服务计算设备102包括一个或多个处理器110、一个或多个计算机可读介质112和一个或多个通信接口114,或者可以与一个或多个处理器110、一个或多个计算机可读介质112和一个或多个通信接口114相关联。
每个处理器110可以是单个处理单元或多个处理单元,并且可以包括单个或多个计算单元或者多个处理核心。一个或多个处理器110可以被实现为一个或多个中央处理单元、微处理器、微型计算机、微控制器、数字信号处理器、状态机、逻辑电路和/或基于操作指令操纵信号的任何设备。作为一个例子,一个或多个处理器110可以包括一个或多个硬件处理器和/或被专门编程或配置为执行本文描述的算法和过程的任何合适类型的逻辑电路。一个或多个处理器110可以被配置为获取并执行存储在计算机可读介质112中的计算机可读指令,该计算机可读指令可以对一个或多个处理器110进行编程以执行本文描述的功能。
计算机可读介质112可以包括内存113和本地存储器115。例如,内存113可以包括以用于诸如计算机可读指令、数据结构、程序模块或其他数据之类的任何类型的信息存储技术实现的易失性和非易失性内存和/或可移除和不可移除介质。例如,内存113可以包括但不限于RAM、ROM、EEPROM、闪存或其他内存技术。此外,本地存储器115和其他计算机可读介质112可以包括光存储器、固态存储器、磁带、磁盘存储器、RAID存储系统、存储器阵列、网络附加存储器、存储区域网络、云存储器或可用于存储所需信息并可由计算设备访问的任何其他介质。根据服务计算设备102的配置,计算机可读介质112可以包括有形的非瞬态介质,从而在提及时,该非瞬态计算机可读介质不包括诸如能量、载波信号、电磁波和/或信号本身的介质。在一些情况下,计算机可读介质112可以与服务计算设备102位于相同的位置,而在其他示例中,计算机可读介质112的一部分可以部分远离服务计算设备102。例如,在一些情况下,计算机可读介质112可以包括一个或多个存储系统104中的一部分存储器。
计算机可读介质112可用于存储可由一个或多个处理器110执行的任意数量的功能组件。在许多实现方式中,这些功能组件包括可由一个或多个处理器110执行的指令或程序,当被执行时,这些指令或程序特别地对一个或多个处理器110进行编程以执行本文归于服务计算设备102的动作。存储在计算机可读介质112中的功能组件可以包括服务器程序116和存储程序118,其中每一个都可以包括一个或多个计算机程序、应用程序、可执行代码或其一部分。例如,服务器程序116可以提供与用户设备108和一个或多个存储系统104的通信功能。
存储程序118可以被配置为执行本文描述的数据压缩/解压缩和映射生成和管理功能。另外,存储程序118可以包括用于创建和管理元数据数据库(DB)120的数据库管理功能,该元数据数据库(DB)120包含与由一个或多个服务计算设备102存储并管理的数据相关的元数据。例如,存储程序118可以包括可执行指令,该可执行指令被配置为使存储程序118维护文件系统、对象信息、数据管理信息和作为元数据数据库120的一部分的其他信息。存储程序118还可以执行管理功能,以管理元数据数据库120中包括的其他类型的信息,例如用户信息。存储程序118还可以管理存储在一个或多个网络存储系统104处的数据的存储,例如用于管理保留期、存储保护级别、将存储的数据复制到其他站点以进行灾难恢复等。
另外,计算机可读介质112可以存储用于执行本文描述的功能和服务的数据、数据结构和其他信息。例如,在对象压缩期间,计算机可读介质112可以将压缩对象124的映射122存储在内存113中,而如果压缩对象太大而无法存储在内存113中,则可以将压缩对象存储在本地存储器115中。另外,计算机可读介质112可以存储元数据DB 120,该元数据DB 120由存储程序118在执行本文描述的一些功能时使用,如下面另外讨论的那样。另外,内存113可以包括摄取缓冲器(ingest buffer)126和输出缓冲器128,它们可以用于临时存储至少部分数据,例如在数据的压缩和/或解压缩期间。
服务计算设备102还可包括或保持其他功能组件和数据(可以包括程序、驱动器等)以及由功能组件使用或生成的数据。此外,服务计算设备102可以包括许多其他逻辑、程序和物理组件,其中上述那些仅仅是与本文讨论相关的示例。
一个或多个通信接口114可以包括用于例如通过一个或多个网络106实现与各种其他设备的通信的一个或多个软件和硬件组件。因此,通信接口114可以包括一个或多个端口或可以耦合到一个或多个端口,该端口提供与一个或多个网络106的连接以与一个或多个存储系统104、一个或多个其他服务计算设备102和用户设备108。例如,一个或多个通信接口114可以通过LAN、互联网、电缆网络、蜂窝网络、无线网络(例如,Wi-Fi)和有线网络(例如,光纤通道、光纤、以太网)、直接连接以及本文其他地方另外列举的诸如BLUETOOTH等近距离通信中的一个或多个来实现通信。
一个或多个网络106可以包括任何合适的网络,包括:广域网,例如因特网;局域网(LAN),例如内联网;无线网络,例如,蜂窝网络、本地无线网络(例如,Wi-Fi)和/或短距离无线通信(例如,);有线网络,包括光纤通道、光纤、以太网或任何其他这样的网络、直接有线连接或其任意组合。因此,一个或多个网络106可以包括有线和/或无线通信技术。用于这种通信的组件可以至少部分取决于网络的类型、所选的环境或两者。用于通过这样的网络进行通信的协议是众所周知的,因此这里将不详细讨论。因此,一个或多个服务计算设备102、一个或多个网络存储系统104和用户设备108能够通过使用有线或无线连接及其组合的一个或多个网络106进行通信。
每个用户设备108可以是任何合适类型的计算设备,例如台式机、膝上型电脑、平板计算设备、移动设备、智能电话、可穿戴设备和/或能够通过网络发送数据的任何其他类型的计算设备。用户130(1)、130(2)、……可以例如通过相应的用户账户、用户登录凭证等分别与用户设备108(1)、108(2)、……相关联。此外,用户设备108可能能够通过一个或多个网络106、通过单独的网络或通过任何其他合适类型的通信连接与一个或多个服务计算设备102通信。许多其他变化对于受益于本文的公开内容的本领域技术人员来说将是清楚的。
此外,每个用户设备108(1)、108(2)、……可以包括用户应用程序136(1)、136(2)、……的相应实例,这些用户应用程序可以在相应的用户设备108(1)、108(2)、……上执行,例如用于与服务器程序116通信,例如用于发送用户数据以存储在一个或多个网络存储系统104上和/或从一个或多个网络存储系统104接收存储的数据。在一些情况下,应用程序136可以包括浏览器,或者可以通过浏览器进行操作,并且服务器程序116可以包括用于使用户能够通过一个或多个服务计算设备102访问存储的数据的网络应用程序。替代地,在其他情况下,应用程序136可以包括具有能够通过一个或多个网络106与服务器程序116通信的通信功能的任何其他类型的应用程序。
一个或多个存储系统104可以包括一个或多个存储计算设备140,存储计算设备140可以包括一个或多个服务器或任何其他合适的计算设备,例如上面关于服务计算设备102讨论的任何示例。一个或多个存储计算设备140可以各自包括一个或多个处理器142、一个或多个计算机可读介质144以及一个或多个通信接口146。例如,处理器142可以对应于上面关于处理器110讨论的任何示例,计算机可读介质144可以对应于上面关于计算机可读介质112讨论的任何示例,并且通信接口146可以对应于上面关于通信接口114讨论的任何示例。
另外,计算机可读介质144可以包括作为由一个或多个处理器142执行的功能组件的存储程序148,用于管理包括在一个或多个存储系统104中的存储器150上的数据的存储。存储器150可以包括与存储器150相关联的一个或多个控制器152,用于将数据存储在存储设备156的一个或多个阵列154上等。例如,控制器152可以控制阵列154,例如用于以RAID配置、JBOD配置等配置阵列154,和/或用于将基于存储设备156的逻辑单元呈现给存储程序148,并且用于管理在底层物理存储设备156上存储为云数据158的数据,例如数据对象或其他数据。存储设备156可以是任何类型的存储设备,例如硬盘驱动器、固态驱动器、光驱、磁带、它们的组合等等。在一些示例中,一个或多个网络存储系统104可以包括本领域已知的可商购的云存储器,而在其他示例中,一个或多个网络存储系统104可以包括只能由与一个或多个服务计算设备102相关联的实体访问的私人或企业存储系统或其组合。
在系统100中,用户130可以将数据存储到它们各自的用户设备108与之通信的一个或多个服务计算设备102并从该一个或多个服务计算设备102接收数据。因此,一个或多个服务计算设备102可以为用户130和相应的用户设备108提供本地存储。在稳定状态操作期间,可能存在与一个或多个服务计算设备102定期通信的用户108。
在一些情况下,一个或多个服务计算设备102可以被布置成一个或多个组、集群(clusters)、系统等。例如,在一些示例(未在图1中示出)中,一个或多个服务计算设备102可以成对布置,其中第一服务计算设备102可以耦合到第二服务计算设备102,使得它们一起形成用于向多个用户设备108提供存储和数据管理服务的计算节点。例如,至少在维护元数据数据库120方面,第一服务计算设备102可以充当主要计算设备,而第二服务计算设备102可以充当辅助计算设备。附加地或替代地,在一些示例中,一个或多个服务计算设备102可以被布置在处于地理上分离且远程位置处的多个集群中以实现复制和灾难恢复。许多其他配置对于受益于本文的公开内容的本领域技术人员而言将是清楚的。
在图1的示例中,假设第一用户130(1)将160处所指示的数据对象流式传输到服务计算设备102以存储在网络存储系统104处。可以在服务计算设备102上执行存储程序118以压缩流式传输的数据对象160。当对象被流式传输到服务计算设备102时,可以在内存113中创建和维护映射122,而无需将映射122存储到本地存储器115中的磁盘上。作为一个示例,存储程序118最初可以在生成映射122时使用默认块大小,例如512K操作中的64K块。例如这与通常预期总是适应内存的256K块的单个设置映射相比在数据获取期间提供了更好的性能。因此,默认布置可以将大对象所需的映射内存减少一半,同时在使大多数对象的内存或映射大小要求仅加倍的情况下提供四倍的范围性能。下面例如关于图2讨论与各种对象大小和块大小相关的映射大小的附加示例。此外,这些参数可以由用户基于用户的要求进行优化。
当对象完成流式传输到服务计算设备102并被其压缩时,在一些示例中,可以将映射122附加到压缩对象124上并且可以通过一个或多个网络106将压缩对象124和映射122发送到网络存储系统104。网络存储器104可以将压缩对象124和映射122存储在存储器150中。另外,可以为映射122创建映射标头(未在图1中示出)并且可以将其与对象124的其他元数据相关联地存储在元数据数据库120中。此外,虽然在该示例中可以将映射122附加到压缩对象124上,但是在其他示例中,可以将映射122与相关联的压缩对象124分开地存储在网络存储器104中。在其他情况下,可以将映射122附加到映射标头上并存储在元数据数据库120中。
此外,在一些情况下,可以将压缩对象124的一个或多个部分与压缩对象124的一个或多个其他部分和/或映射122分开发送到网络存储系统104。例如,当流式传输的数据对象160的一部分被压缩时,可以将压缩的部分独立地发送到网络存储系统104,例如在对象非常大的情况下,或者在期望直接从内存113发送数据而不是将压缩对象存储到本地存储器115,然后从本地存储器115读取压缩对象的情况下。许多其他变化对于受益于本文的公开内容的本领域技术人员来说将是清楚的。
此外,作为一个例子,假设用户130(2)随后发送请求将压缩对象124的一部分配送到用户设备108(2)的数据请求170。存储程序118可以访问映射标头,确定映射存储在网络存储系统104处,并且可以获得映射122。基于确定未压缩对象中从其开始读取数据以获得所请求的数据部分的位置,并且基于映射122中的偏移量和下面另外讨论的其他信息,存储程序118可以将对数据对象的一部分的读取请求174发送到网络存储系统104。作为响应,网络存储系统104可以将所请求的数据部分配送到服务计算设备102。存储程序118可以将所请求的数据部分的一个或多个部分解压缩并且可以用未压缩的数据部分178回复数据请求170。
图2示出了根据一些实现方式的包括每个块大小和数据大小的映射大小的示例数据结构200。本示例中的数据结构200显示了每个块大小和数据大小(例如,对象大小)的映射大小,并以1024条目偏移频率进行序列化。例如,偏移频率可以指示在映射中的绝对偏移量之间出现的映射条目的数量(压缩后大小)。绝对偏移量可以包括到压缩对象中的偏移量,在该压缩对象中存在相关联的映射条目所应用的块。另外,压缩后大小条目可以包括映射中所表示的单个块的压缩后大小。在一些情况下,压缩后大小条目可以为0以指示未使用压缩,或者可以为特殊值以指示操作的所有压缩后大小条目是未知的。
在所示的示例中,数据结构200包括数据大小列502,其列出了从10KB到2,000,000,000KB的数据大小范围。该数据结构还包括分别列出了块大小32KB、64KB、128KB、256KB、512KB、1024KB和2048KB的映射大小的七个映射大小列504、506、508、512、514和516,以及在列502中列出的对应的数据大小。例如,当数据大小为100,000KB,块大小为64KB时,映射大小为3134字节。
在本文的一些示例中,可以压缩或不压缩整个操作(例如,一组连续块)。操作的可压缩性可以通过操作中所有块的总空间节省来确定。例如,如果压缩没有达到至少一个阈值,那么整个操作可能不会被压缩。
另一方面,即使操作中的一个或多个单独的块可能是不可压缩的或者可能是最小可压缩的,如果操作中的其他块可充分压缩以达到整个操作的压缩阈值级别,则整个操作仍可被压缩。在这种情况下,可能存在最佳映射条目大小不适合未压缩块的问题。例如,64K-1是能够适应两个字节的最大数字,这是用于映射中64KB大小的块的最佳条目大小。为了解决这个问题,可以使用64K-1的特殊大小来指示实际压缩后大小至少为64K-1。
可以使用下面另外讨论的确保精简将条目正确组合的分配算法来将额外的字节分配到操作中的其他压缩后大小的条目。当操作中的至少一个块发生这种情况时,操作中其他块的大小条目可能不正确。但是,总压缩操作大小仍然是操作中压缩块大小条目的总和。在这种情况下,当用于操作的任何映射条目是特殊大小时,解压缩可能仅在操作中的第一块上对齐。当是这种情况时,可能需要在到达所需范围开始之前丢弃整个解压缩数据块。
由于特殊大小是通过映射的精简来保持的,因此对于每次精简,该值可能加倍。仅当条目大小最佳时才需要特殊大小,例如用于64K块的两个字节和用于16MB块的三个字节,但在这种情况下,特殊大小是通过精简来保持的。作为另一个示例,当特殊大小用于具有16MB块大小的映射时,对于16MB块的特殊大小最终为16MB-256。作为一个非限制性示例,被视为可压缩的操作节省空间所需的平均最小阈值可以是2字节/64K,而与块或操作大小无关。可以配置更高的压缩率,但不能配置更低的压缩率。此外,操作大小在读取期间可以是已知的,因此操作大小值可以包括在映射标头中,如下面另外讨论的那样。
图3示出了表示根据一些实现方式的特殊值溢出的分配和映射精简的示例数据结构300。数据结构300包括块大小302、压缩后大小(实际大小)304、映射中的压缩后大小(具有2字节条目)306、一次精简后的映射中的压缩后大小(3字节条目)308以及两次精简后的映射中的压缩后大小(3字节条目)。在图3中,如302所示,块大小为64K。此外,压缩后的实际大小在304处示出,其表明前四个条目没有被压缩(如在列306处的映射中的压缩后大小的“0”所示)。
在此示例中,假设前四个条目是未被压缩的第一操作;第二操作开始于行312,并包括多个特殊值;第三操作开始于320,并也包括多个特殊值。特别地,在行312、316、318、322和326处,列304中所示的压缩后的实际大小超过64K。因此,减去并重新分配额外的字节,使得列306中对于行312、316、318、322和326的每个值等于64K-1,即65535。例如,将6个额外字节(来自312、316和318的各2个)添加到行314的值,将列304处的值500增加到列306处的506。类似地,将两个字节(来自322)添加到行320的值1000,并将3个字节(来自326)添加到行324的值。因此,在其他压缩块值中分配额外字节以在列306中创建特殊值。
如上所述,特定块在可压缩操作的中间可能是不可压缩的。映射中的压缩后大小条目可以利用最小字节数通过使映射大小最小化来优化压缩。如果用于条目的字节数几乎不适合块大小(例如64K块的情况),则压缩后大小将不适合条目,除非该块是可压缩的。两个字节(64K块的映射条目大小)能够用于表示从0到65535(64K-1)的数字。64K以上不能用2个字节表示。因此,在这里的实现方式中,为了对这样的操作使用压缩,可以在映射条目中使用特殊大小以表示实际压缩后大小是未知的。
当整个操作(即,块的组)是可压缩的,但一个或多个块是不可压缩的时,来自一个或多个不可压缩块的特殊大小的溢出可以分配到该操作的其他映射条目中。这使压缩后操作大小保持正确,并允许在操作级别进行导航。例如,如果无法精简映射,则将额外的字节分配到具有较小压缩后大小的任何其他块就够了。但是,由于映射可以稍后进行精简,因此可以将溢出与稍后在精简期间溢出的组合方式完全相反地进行分配。在具有特殊大小的操作的精简期间,无法确定操作中块的实际压缩后大小。这意味着精简可以像组合相邻对一样简单。当相邻的组合条目都不是特殊大小时,结果将不会是特殊大小,并且组合条目可以代表对应的组合块的压缩后大小。在所有压缩后大小仍然已知的情况下,原始分配可以说明可以如何组合映射条目。通过使用(64K-1)*2^n的特殊大小(其中n是超过64K块大小的精简数),可以将来自与特殊大小相邻的64K块大小组合的精简块大小与特殊大小组合以在精简映射的正确条目中生成特殊大小。
如列308所示,在第一精简期间,可组合前四个条目以具有值为“0”的两个产生条目。此外,当306中行312和行314的值组合时,列308中的结果是66041,即65535+506(其中4个字节仍然来自行316和318,它们仍然无法成对压缩)。另外,在行316和318处,两个特殊大小组合产生新的特殊大小131070。行320和322以类似于312和314的方式组合,对于行324和326同样如此。在第二精简期间,如列310所示,可以通过组合相邻对来类似地组合列308中的值以进一步精简映射以得到列310中的值。
为了保证来自特殊大小的溢出被分配,从而使所有未来的精简保持压缩后大小的完整性,诸如下面所述的分配算法可用于分配溢出。分配算法可以处理操作的实际压缩后大小阵列、超大条目的位置、特殊大小值(例如64K-1)、操作幂(operation power,每个操作的块为2的幂)和块数,该块数不能大于在最终操作上的每个操作的块。可以通过调查以1开始并达到操作幂的2的幂个块来确定溢出的候选。要调查的阵列中的起始条目可以通过将过大的条目位置表示为二进制值并将2的当前幂个低阶位归零来确定。按照顺序,这使调查在2的当前幂个条目的开头开始,这些条目可以与未来潜在的精简数(幂)相结合。这些条目被调整为包括溢出,而不超过特殊大小,直到溢出被完全分配。
在图3的示例中,第二操作(行312-318)和第三操作(行320-326)表示使用这里的分配算法分配到两字节压缩后大小条目的示例结果。分配算法的伪代码的示例包括以下内容:
图4示出了根据一些实现方式的分配算法的操作的示例。在上述分配算法中,可以执行分配算法以进行一次或多次遍历(pass)以将溢出从特殊大小分配到其他块表示(操作条目)。例如,第一示例401包括操作条目402、第一遍历404、第二遍历406和第三遍历408。例如,如410所示,操作条目402包括不可压缩条目。可以执行分配算法进行第一遍历404以检查相同操作412中的紧邻条目。接下来,如果第一遍历没有导致溢出的分配,则可以执行分配算法进行第二遍历406以检查相同操作412中的其他条目。接下来,如果第二遍历没有导致溢出的分配,则可以执行分配算法以检查相邻操作414中的其他条目。分配算法可以继续直到溢出被分配。
类似地,在示例420中,如422所示,操作条目402包括不可压缩条目。分配算法进行第一遍历404以检查相同操作422中的紧邻条目。接下来,如果第一遍历没有导致溢出的分配,则可以执行分配算法进行第二遍历406以检查相同操作422中的其他条目。接下来,如果第二遍历没有导致溢出的分配,则分配算法可以检查相邻操作424中的其他条目。分配算法可以继续直到溢出被分配。
图5示出了根据一些实现方式的映射标头500的示例数据结构和布局。映射的细节可以适合两个字节,即第一字节502和第二字节504。例如,除了块大小、操作大小(被表示为每个操作的块)和偏移频率之外,在摄取期间记录的额外细节也可以包括在映射标头中以提高读取性能。因此,第一字节502可以包括保留位506、特殊值指示符508(1位)、映射状态510(2位)以及作为2的幂减去10的块大小512(4位)。第二字节504可以包括作为2的幂的每个操作的块514(2位),以及作为2的幂的偏移频率516(4位)。
特殊值指示符508可以指示在映射中是否使用了任何特殊值。如果没有使用,像64K-1这样的条目意味着实际压缩后大小,并且解压缩可以在计算的块上而不是在操作开始处开始。举个例子,“0”可以指示没有特殊值,64K-1可以被视为真实大小,而“1”可以指示使用了至少一个特殊值(反之亦然)
映射510的状态可以指示是否实际存在映射、映射是否跟随标头或压缩对象以及映射是否包括任何未压缩块。如果没有块被压缩,可能没有映射标头,因为对象未被压缩,因此不需要映射。另外,如果所有块都被压缩并且不期望针对此大小对象的范围请求,则不能指定映射。替代地,如果映射被指定为内联(inline)并且映射跟随标头,则可以消除用于获取映射的额外云读取。另外,如果映射中的所有块都被压缩,则从位置0的读取不需要映射。例如,“0”可以指示没有映射;“1”可以指示映射是内联的(映射内容跟随标头而不是压缩对象);“2”可以指示映射是外部的,所有的块都被压缩了;并且“3”可以指示映射是外部的并且一些块没有被压缩。
被表示为((2的幂)-10)的块大小(4位)(1KB-32MB块大小)512可以指示由映射表示的块的块大小。在此示例中,标头中的值为“6”,其等于16-10。因此,当16是2的幂时,块大小为64K。
被表示为2的幂的每个操作的块514可以是默认值,或者可以由用户指定。此外,被表示为2的幂的每个块的偏移频率(4位)516也可以是指示在映射中的绝对偏移量之间出现的映射条目的数量(压缩后大小)的默认值。
基于从上面讨论的数据结构300扩展的示例设置,块大小=64K,操作大小=256K(4个块),并且绝对偏移频率=8。此外,映射包括特殊值并且一些块没有被压缩。
另外,标头500可以包括优化以使部分映射读取能够满足范围请求。例如,由于用于大对象的映射可能是几兆字节大小,因此针对小范围而读取整个映射可能太昂贵了。为了解决这个问题,可以基于预定的偏移频率在映射中放置到压缩对象的绝对偏移量。这个频率基于最终的块数,并且可能不受块大小或映射是否被精简的影响。偏移频率在映射中创建独立的固定大小段,可以访问这些段来确定在压缩对象中的范围位置。映射段可以包括针对第一块的到压缩对象的8字节绝对偏移量,随后是针对后续(偏移频率)块的压缩后大小条目。因此,偏移频率516可以包括在映射标头500中,因此可以解析映射。
图6示出了根据一些实现方式的映射600的示例数据结构配置。映射600包括指示每个操作的压缩块大小表示的数量的操作大小指示602,并且还包括压缩块大小表示的列表604和到压缩对象的周期性绝对偏移量606。例如,用于压缩块大小表示的字节数基于块大小最小化,例如除非块大小大于64K,否则为2个字节,在这种情况下,3个字节608可用于压缩块大小表示604。如上所述,压缩后大小表示可以是对应块的实际压缩后大小,可以是“0”以表示未使用压缩,或者可以是特殊值以表示单独块压缩后大小是未知的而操作中的条目总和是压缩后操作大小。
绝对偏移量606是自上次绝对偏移量606以来所有压缩块大小和未压缩块大小的总和。绝对偏移量606可以是8个字节608,并且不只是前面的块的条目的总和。例如,当计算绝对偏移量时,任何0都被对应块的未压缩块大小替换,因此绝对偏移量606可用于定位与压缩对象中的后续条目相关联的块。如果最大对象大小小于256TB,则可以对用于绝对偏移量606的八个字节中的两个进行硬编码以表示绝对偏移量。
因此,在映射中,如果未压缩块大小<=64k,则压缩块大小以2字节表示,或者如果块大小>64k且<=16M,则压缩块大小以3字节表示,如果块大小>16M,则压缩块大小以4字节表示。此外,对于每个操作(块组),如果每个块都被压缩到小于一个块的大小,则向映射加入压缩块的大小。如果所有块都未被压缩,则可以使用零作为表示。否则,操作大小的总和可以等于操作的压缩后大小,但是包括在操作中所表示的每个单独的块不一定指示对应块的压缩后大小。
这里的映射可以由用户等配置以最适合用户需求。如果用户需要快速访问非常小的范围,映射可以以诸如1KB的小块大小开始。如果具有2字节条目的优化映射是不确定的工作负载的目标,则可以使用64KB的初始块大小。如果内存可用性较小或非常大对象的访问速度不太重要,则可以使用较大的操作大小,例如4MB。如果压缩比率比读取映射的时间更重要,可以使用高偏移频率,例如32768。还可以配置精简指南。可以为在摄取期间尝试映射精简的时间指定映射内存占用。当产生的较小映射可以提高效率时,还可以指定在完成后是否应该尝试映射精简以及应该尝试多少次映射精简。配置选项包括块大小、操作大小、偏移频率、最大映射内存和值得精简的映射大小目标。操作大小可以是块大小的2的幂倍。偏移频率可以是每个操作的块的倍数。此外,虽然映射的示例数据结构配置在图6中示出,但是对于受益于本文的公开内容的本领域技术人员而言,用于执行相同功能的许多其他可能的数据结构配置将是清楚的。
图7示出了根据一些实现方式的映射700的示例数据结构配置。在该示例中,映射700分别包括每个块的块大小表示702以及出于说明目的的描述704。例如,行706-712的块大小表示未被压缩,因此,对于行706-712,分配给块大小表示的值为“0”。此外,行714、718、720、726和730具有特殊大小的条目,而行716、724和728包括相应块的大小加上来自特殊大小的一些溢出。另外,行732-738和行742-746具有常规压缩数据,而行722和740用作绝对偏移量。
在本示例中,假设块大小=64K,操作大小=256K(4个块),绝对偏移频率=8。因此,映射700包括五个操作:包括块大小表示706-712的第一操作750;包括块大小表示714-716的第二操作752;包括块大小表示724-730的第三操作754;包括块大小表示732-738的第四操作756;以及包括块大小表示742-746的第五操作758。
图8示出了根据一些实现方式的在一次精简后的映射800的示例数据结构配置。在这个示例中,在一次精简后,块大小=128K(3字节大小条目)并且绝对偏移频率保持=8。此外,精简按每个操作产生两个块大小表示,每个代表来自图7的映射700的两个块大小的组合。例如,第一操作750已经从四个块大小表示到两个块大小表示802和804进行了精简;第二操作752已经从四个块大小表示到两个块大小表示806和808进行了精简;第三操作754已经从四个块大小表示到两个块大小表示810和812进行了精简;第四操作756已经从四个块大小表示到两个块大小表示814和816进行了精简;并且第五操作758已经从三个块大小表示到两个块大小表示820和746进行了精简。由于在第五操作758中存在奇数个块大小表示,因此该示例中的最终块大小表示746在精简期间未与另一个块大小表示组合,并因此保留与精简之前相同的值。
由于精简,基于在精简期间组合“0”,第一操作750中的802和804的块大小表示值都是“0”。第二操作752包括在806处的具有溢出值的大小和在808处的特殊大小。操作750、752、754和756在绝对偏移量818处的总值在精简映射800中为782330,这与图7的映射700中的绝对偏移量740的值相同。
图9至图12是示出根据一些实现方式的示例过程的流程图。过程在逻辑流程图中被示为表示一系列操作的框的集合,其中一些框或全部框可以用硬件、软件或其组合来实现。在软件的情况下,框可以表示存储在一个或多个计算机可读介质上的计算机可执行指令,该可执行指令在由一个或多个处理器执行时对处理器进行编程以执行所述操作。通常,计算机可执行指令包括执行特定功能或实现特定数据类型的例程、程序、对象、组件、数据结构等。描述框的顺序不应被解释为限制。任何数量的所述框可以以任何顺序和/或并行地组合以实现过程或替代过程,并且不是所有框都需要被执行。出于讨论的目的,参考本文示例中描述的环境、框架和系统来描述过程,但是过程可以在各种各样的其他环境、框架和系统中实现。
图9是示出根据一些实现方式的用于压缩和映射生成的示例过程900的流程图。在一些情况下,过程900可以至少部分地由服务计算设备或其他合适的计算设备执行。作为一个示例,由上面关于图1讨论的一个或多个服务计算设备102的多个处理器110中的一个处理器110执行的存储程序可以包括用于执行图9的过程900的至少一部分的可执行指令。
当针对每个块压缩数据时,可以确定压缩的结果并且可以基于多个块的操作来创建映射。操作中的每个块都被压缩,结果存储在内存的映射中。如果对操作的压缩没有用,则不使用压缩,并且所有的压缩后块大小在映射中都标记为“0”。替代地,如果压缩对整个操作有用(例如,通过压缩操作实现压缩阈值级别),但对操作中的一个或多个块的压缩没有用,则压缩后大小不适合压缩块大小字段,然后在用于一个或多个块的映射条目中输入特殊大小,例如,在两字节字段块表示的情况下为[64K-1],或者在三字节字段块表示的情况下为[16M-256]。此外,溢出大小(例如,当压缩后大小的量大于特殊大小时)可以被分配到相邻块表示,特殊大小块表示可以利用该相邻块表示进行精简并且具有足够的空间。
在其他情况下,如果操作压缩是有用的并且压缩块大小适合块大小表示的映射条目,则块大小表示被标记为实际压缩后大小。在某些情况下,可以在集合之间或在完成数据压缩后精简映射。在所有操作完成后,最终确定并保存映射标头。在某些情况下,映射标头可能会附加到映射上,也可能单独保留。此外,在一些示例中可以将映射附加到压缩对象上,或者在其他示例中可以单独存储映射。未压缩对象大小和压缩对象大小现在是已知的并且可以被记录。
在902处,在开始数据对象的压缩之前,计算设备可以接收和/或分配配置变量,例如:块大小、操作大小、绝对偏移频率、最大映射内存大小、数据库中的最大映射大小。在一些示例中,这些参数的默认值可能已经被用户建立,例如管理员或管理由服务计算设备执行的压缩操作的其他用户。就本示例而言,假设块大小=64K,操作大小=512K(8个块),绝对偏移频率为1024个条目,最大映射内存=1M,并且DB中的最大映射=300字节。这些值仅用于讨论目的,并且这里的实现方式不限于这些参数的任何特定值。
在904处,计算设备可以接收用于压缩的数据并将接收到的数据的至少一部分存储在摄取缓冲器中,例如,直到数据的操作大小。在一些示例中,数据可以通过网络被接收为流式传输数据,而在其他情况下,数据可以从存储位置等被读取。
在906处,计算设备可以将达到块大小的接收到的数据压缩到输出缓冲器中并且可以将块的压缩后大小存储在临时操作集合中。
在908处,计算设备可以确定摄取缓冲器中是否存在更多数据。例如,如果将操作的数据价值(worth)添加到摄取缓冲器(例如,在该示例中为八个块大小量,对应于上面902处提到的指定操作大小(512K)),则计算设备可以对摄取缓冲器中的数据的各个块进行操作,直到摄取缓冲器为空。当摄取缓冲器为空时,操作的数据价值已经被处理,并且计算设备可以确定该操作是否已经满足压缩阈值级别。如果摄取缓冲器中仍有数据,则过程返回到906。否则,过程转到910。
在910处,计算设备可以确定操作中的块集合是否压缩到小于块大小减去操作中的块数量的一倍。例如,本示例中压缩阈值的具体值为(64K-1)·8。如果操作压缩到小于阈值,则过程转到912。如果不小于阈值,则过程转到914。
在912处,当满足压缩阈值时,计算设备可以更新压缩后大小的集合;将超过64K的值减小到等于64K-1的值,并且可以将溢出(差值)添加到另一个块大小表示条目,如上面例如关于图3和图4所述。此外,计算设备可以将值移动到映射中的内存中块大小列表,并且可以将输出缓冲器中的压缩数据附加到任何已经处理的对象数据上。
另一方面,在914处,当不满足压缩阈值时,计算设备可以将全部0保存到映射中的内存中块大小列表,并且可以将摄取缓冲器数据附加到任何已经处理的对象数据上。
在916处,计算设备可以确定是否有更多数据要摄取到摄取缓冲器中。如果是,则过程转到918。如果不是,则过程转到922。
在918处,当存在更多数据要摄取到摄取缓冲器中时,计算设备可以通过确定块大小列表是否大于1MB来确定是否期望精简现有映射。例如,在上面的902处,最大映射内存被指定为1MB。因此,此时,如果映射大小超过该量,则映射可能被精简。如果不超过该量,则过程返回到904以向摄取缓冲器添加更多数据。
在920处,如果映射大小超过指定的阈值量(例如,在该示例中为1MB),则计算设备可以通过组合邻对并使块大小加倍来精简映射中的块大小列表。如果这个操作是可行的(例如,块大小仍然小于操作大小),那么预计一次精简就足以将映射大小减小到小于配置信息中指定的1MB。在精简映射后,过程返回到904以向摄取缓冲器加入更多数据。
在922处,当没有更多数据加入摄取缓冲器时,这表明数据对象的压缩完成,并且计算设备可以确定是否可以将映射精简到最大DB大小。如果是,则过程转到924。如果不是,则过程转到图10的过程。
在924处,计算设备可以通过组合邻对并使块大小加倍直到映射大小小于最大映射DB大小(例如,在该示例中小于300字节),来精简映射中的块大小列表。在精简映射后,过程转到图10的过程。
图10是示出根据一些实现方式的作为图9的过程900的延续的示例过程1000的流程图。
在1002处,计算设备可以用块大小、操作大小、偏移频率和上面关于图5讨论的其他参数来最终确定映射的映射标头,并且可以至少将映射标头存储到数据库中,例如上面关于图1讨论的元数据数据库120。在某些情况下,映射也可以被存储到数据库中和/或可以附加到对象上以存储在网络存储器中。
在1004处,计算设备可以确定映射大小列表是否小于300字节,例如最大DB大小。如果不是,则过程转到1006。如果是,则过程转到1014。
在1006处,计算设备可以将大小列表条目附加到压缩对象上,并且通过使用最终块大小代替0来将大小添加到运行总和,使得绝对偏移量中的总大小是准确的。
在1008处,计算设备可以确定映射中是否存在更多条目。如果是,则过程转到1010。如果不是,则过程转到1016。
在1010处,计算设备可以确定附加条目是否在偏移频率处。如果是,则过程转到1012。如果不是,则过程转到1006。
在1012处,计算设备可以将大小列表条目的运行总和附加到压缩对象上并返回到1006。
在1014处,当映射大小列表小于数据库最大阈值(例如,在该示例中小于300字节)时,计算设备可以将映射标头附加到具有大小列表的元数据库中作为映射。
在1016处,计算设备可以将压缩对象(以及映射,在映射附加到压缩对象上的情况下)发送到存储位置以进行存储。例如,如上面关于图1所讨论的那样,在一些示例中,压缩的对象和映射可以存储在网络存储位置。
图11是示出根据一些实现方式的用于基于映射进行解压缩的示例过程1100的流程图。在一些情况下,过程1100可以至少部分地由服务计算设备或其他合适的计算设备来执行。作为一个示例,由上面关于图1讨论的一个或多个服务计算设备102的多个处理器中的一个处理器执行的存储程序可以包括用于执行图11的过程1100的至少一部分的可执行指令。
当接收到访问至少一部分压缩数据对象的请求时,服务计算设备可以访问并读取对象的映射标头以确定包括块大小、操作大小、偏移频率、映射状态和特殊值指示符的参数,例如,如上面关于图5所讨论的那样。如果没有映射或者所有块都被压缩并且请求从位置0开始,则计算设备可以将没有映射的对象的所有数据解压缩。例如,对象可能不够大以至于无法生成映射等。
在一些示例中,如果映射与标头一起存储在元数据数据库中,则可以在标头之后找到映射,或者在其他示例中,映射被附加到压缩对象的末尾上或存储在单独的存储位置。映射大小可以计算为块数(未压缩对象大小除以块大小)乘以压缩块大小表示条目中的字节数加上绝对偏移量的数量(块数除以偏移频率)乘以操作中的块数(例如,在图9和图10的示例中为8个)。如果映射被附加到压缩对象上,可以在压缩对象末尾之前的映射大小字节处找到映射。
计算设备可以基于例如(请求开始/(偏移频率*块大小))来确定请求开始的映射段。计算设备可以针对请求大小读取从计算的第一段到最终段的映射段。计算设备可以跳到不是跟在请求开始后的最后一个操作。如果操作中的任何块都可以并且确实具有特殊大小(64K-1的倍数),则计算设备可以从操作中的第一块开始解压缩,丢弃请求的起始位置之前的数据。如果操作中没有块具有0或特殊大小,则计算设备可以跳过块直到下一个块位置更高,开始解压缩,并丢弃请求的起始位置之前的数据。如果压缩后大小条目为0,则计算设备可以从压缩对象复制数据,该数据从所请求的操作内的位置开始直到操作的其余部分。如果任何压缩后大小条目为0,则计算设备可以继续对随后需要的操作解压缩或复制数据,直到满足所请求的大小。
在1102处,计算设备可以接收访问数据的请求并且可以从对应的映射标头获得参数,例如块大小、操作大小和偏移频率。例如,用户、应用程序等可以请求访问一个或多个存储的压缩对象的一个或多个部分。例如,读取请求可以针对来自压缩对象的一系列数据。可以基于例如未压缩对象中的起始位置和大小在请求中指定起始位置和大小。
在1104处,计算设备可以基于已知的未压缩对象大小来确定映射的大小,例如,映射可以在压缩对象大小减去映射大小处开始。例如,在对象的摄取和压缩期间,压缩对象大小和未压缩对象大小可能已经存储在元数据数据库中。
在1106处,计算设备可以例如基于(请求开始/(偏移频率*块大小)来确定与请求相对应的段。此外,计算设备可以读取映射段,将压缩偏移量设置为(第一值-绝对偏移量),并将未压缩位置设置为(段数*偏移频率*块大小)。例如,映射段可以是可以在没有映射其余部分的情况下使用的映射条目的集合,因为映射段以绝对偏移量开始以在压缩对象中建立方位(bearings)。
在1108处,计算设备可以确定(位置+操作大小)是否小于请求开始。如果是,则过程转到1110。如果不是,则过程转到1112。例如,位置可以是起始位置,例如基于从未压缩对象确定的位置。
在1110处,计算设备可以获得(每个操作的块)的大小,通过使用0(如果有的话)的实际块大小来将它们添加到压缩偏移量,并且将操作大小添加到位置。过程返回1108,以判断(位置+操作大小)是否小于请求开始。重复1108和1110的操作,直到过程转到1112。
在1112处,计算设备可以获得当前操作的所有压缩后大小并且可以继续到图12的过程。
图12是示出根据一些实现方式的作为图11的过程1100的延续的示例过程1200的流程图。
在1202处,计算设备可以确定压缩后大小是否全都为零。如果是,则过程转到1218。如果不是,则过程转到1204。
在1204处,计算设备可以确定是否存在任何特殊值((64K-1)的倍数)。如果是,则过程转到1214。如果不是,则过程转到1206。
在1206处,计算设备可以确定(位置+块大小)是否<请求开始。如果是,则过程转到1208。如果不是,则过程转到1210。
在1208处,计算设备可以将压缩后大小添加到偏移量并且可以将块大小添加到位置。
在1210处,计算设备可以将操作中的剩余块解压缩并丢弃(请求开始-位置)。
在1212处,计算设备可以将剩余的压缩后大小添加到偏移量,将剩余的块大小添加到位置,并将读取的数据添加到请求开始并从请求大小中减去读取的数据。
在1214处,在1204处发现存在特殊值的情况下,计算设备可以将所有操作数据解压缩并丢弃(请求开始-位置)
在1216处,计算设备可以将所有压缩后大小添加到偏移量,将操作大小添加到位置,将读取的数据添加到请求开始并从请求大小中减去读取的数据。
在1218处,如果在1202处操作的压缩后大小全都为零,则计算设备可以在(偏移量+请求开始-位置)处开始读取没有解压缩的数据,并且可以读取一直到操作数据的其余部分。
在1220处,计算设备可以将操作大小添加到位置和偏移量,将读取的数据添加到请求开始并从请求大小中减去读取的数据
在1222处,计算设备可以确定请求大小是否比零大。如果是,则过程转到1224。如果不是,则过程转到1228。
在1224处,计算设备可以确定在段中是否存在更多块表示。如果是,则过程转到图11的过程的框1112。如果不是,则过程转到1226。
在1226处,计算设备可以读取下一个映射段并转到图11中的框1112。
在1228处,当请求大小已经达到零时,计算设备可以对尚未解压缩的任何压缩数据解压缩并且可以回复请求。
这里描述的示例过程仅仅是为了讨论目的而提供的过程的示例。根据本文的公开内容,许多其他变化对于本领域技术人员来说将是清楚的。此外,虽然本文的公开内容阐述了用于执行过程的合适框架、架构和环境的若干示例,但本文的实现方式不限于所示出和讨论的特定示例。此外,本公开提供了描述和附图中示出的各种示例实现方式。然而,本公开不限于本文描述和示出的实施方式,而是可以扩展到本领域技术人员已知的或将已知的其他实现方式。
可以在存储在计算机可读介质上并由本文的一个或多个处理器执行的计算机可执行指令(例如,计算机程序)的一般情况下考虑本文所述的各种指令、过程和技术。通常,程序包括用于执行特定任务或实现特定抽象数据类型的应用程序、指令、例程、对象、组件、数据结构、可执行代码等。这些程序等可以作为本机代码执行,或者可以例如在虚拟机或其他即时编译执行环境中下载并执行。通常,程序的功能可以在各种实现方式中根据需要进行组合或分配。这些模块和技术的实现方式可以存储在计算机存储介质上,或通过某种形式的通信介质传输。
尽管已经以结构特征和/或方法动作专用的语言描述了主题,但是应该理解,所附权利要求书中定义的主题不必限于所描述的特定特征或动作。相反,特定的特征和动作是作为实现权利要求的示例形式而被公开。
Claims (14)
1.一种存储和访问压缩数据的系统,包括:
一个或多个处理器;以及
存储可执行指令的一个或多个非瞬态计算机可读介质,所述可执行指令在由所述一个或多个处理器执行时将所述一个或多个处理器配置为执行操作,所述操作包括:
接收数据对象的多个数据块;
压缩所述多个数据块以获得多个压缩块;
确定所述多个压缩块一起是否小于第一阈值大小;
基于确定所述多个压缩块一起小于所述第一阈值大小,向映射数据结构中的各个条目加入所述多个压缩块的相应大小;
通过组合所述各个条目中的至少两个条目的值来精简所述映射数据结构;以及
存储所述多个压缩块和精简后的映射数据结构;
其中,所述操作还包括:
在所述数据对象的至少部分压缩后,接收访问所述数据对象中的数据的请求;
确定要从所述数据对象获取的数据范围;
基于所述范围,在所述数据对象的至少部分压缩后,使用所述精简后的映射数据结构来读取所述数据对象的一部分;
对所述数据对象的所述一部分中的压缩数据进行解压缩,以得到所述数据范围;以及
响应于所述请求,返回所述数据范围。
2.根据权利要求1所述的系统,其中,所述多个数据块为所述数据对象的第一多个块,并且所述多个压缩块为第一多个压缩块,所述操作还包括:
接收所述数据对象的第二多个数据块;
压缩所述第二多个数据块以获得第二多个压缩块;
确定所述第二多个压缩块一起是否小于所述第一阈值大小;
基于确定所述第二多个压缩块一起不小于所述第一阈值大小,向所述映射数据结构中的各个条目加入指示所述第二多个块未被压缩的值;以及
将非压缩形式的所述第二多个压缩块和所述第二多个块一起存储。
3.根据权利要求1所述的系统,其中,与所述多个压缩块包括在一起的所述多个数据块中的至少一个块是不可压缩的,所述多个压缩块整体是可压缩的,所述操作还包括:
将用于所述至少一个块的预定值包括到所述映射数据结构中的相应条目中,所述预定值具有指示所述至少一个块未被压缩的大小;以及
将与所述至少一个块的所述预定值和实际大小值之间的差值相对应的溢出值,分配到所述映射数据结构中与所述多个压缩块中的至少一个压缩块相对应的至少一个其他条目。
4.根据权利要求3所述的系统,所述操作还包括:
确定每个所述压缩块单独是否小于第二阈值大小;
基于在尝试压缩后确定所述多个压缩块中的所述至少一个块的所述实际大小值超过所述第二阈值大小,确定所述至少一个块是不可压缩的;
将所述预定值作为压缩后大小输入所述映射数据结构中的所述至少一个块的相应条目中;以及
通过将所述实际大小值和所述预定值之间的差值添加到所述至少一个压缩块的所述压缩后大小来分配所述溢出值,所述至少一个压缩块的压缩后大小小于所述第二阈值大小。
5.根据权利要求3所述的系统,其中,在所述映射数据结构的精简期间,将所述预定值与所述映射数据结构中的相邻条目的值组合。
6.根据权利要求1所述的系统,所述操作还包括为所述映射数据结构和所述精简后的映射数据结构中的至少一个生成标头,所述标头包括所述精简后的映射数据结构的存储位置的指示和块大小的指示。
7.根据权利要求6所述的系统,其中,存储所述精简后的映射数据结构至少包括以下之一:
将所述精简后的映射数据结构与所述标头相关联地存储到元数据数据库中;或者
在压缩所述数据对象的至少一部分后,将精简后的映射与所述数据对象相关联地存储到网络存储位置处。
8.根据权利要求1所述的系统,其中,所述映射数据结构包括作为所述映射数据结构中的所述条目的参考点的至少一个偏移量指示符,各个偏移量指示符能够与处于未压缩状态下的所述数据对象中的各个位置相关,其中使用所述精简后的映射数据结构来读取所述数据对象的一部分包括:
确定非压缩形式的所述数据对象中与所述请求相对应的位置;
在所述数据对象的至少部分压缩后,将所述位置与所述映射数据结构中的偏移量指示符关联为所述数据对象中的起始位置;以及
基于所述起始位置和所述精简后的映射数据结构中的所述条目,来读取数据。
9.根据权利要求1所述的系统,其中,使用所述精简后的映射数据结构来读取所述数据对象的一部分包括:
确定非压缩形式的所述数据对象中与所述请求相对应的位置;
基于在所述精简后的映射数据结构中的至少一个条目中指示的至少一个块的压缩后大小,将所述数据对象中的所述位置与所述精简后的映射数据结构中的位置关联,以确定所述数据对象中的起始位置;以及
至少基于所述起始位置来读取所述数据对象的数据。
10.根据权利要求1所述的系统,所述操作还包括多次精简所述映射数据结构,直到所述精简后的映射数据结构的大小小于阈值映射大小。
11.根据权利要求1所述的系统,其中,所述映射数据结构包括作为所述多个压缩块的参考点的偏移量指示符,所述偏移量指示符能够与处于未压缩状态下的所述数据对象中的位置相关,所述偏移量指示符指示与所述映射数据结构中的所述偏移量指示符前面的所述条目相对应的压缩块和非压缩块的总大小。
12.一个或多个非瞬态计算机可读介质,其存储指令,所述指令在由一个或多个处理器执行时将所述一个或多个处理器配置为执行操作,所述操作包括:
接收数据对象的多个数据块;
压缩所述多个数据块以获得多个压缩块;
确定所述多个压缩块一起是否小于阈值大小;
基于确定所述多个压缩块一起小于所述阈值大小,向映射数据结构中的各个条目加入所述多个压缩块的相应大小;
通过组合所述各个条目中的至少两个条目的值来精简所述映射数据结构;以及
存储所述多个压缩块和精简后的映射数据结构;
其中,所述操作还包括:
在所述数据对象的至少部分压缩后,接收访问所述数据对象中的数据的请求;
确定要从所述数据对象获取的数据范围;
基于所述范围,在所述数据对象的至少部分压缩后,使用所述精简后的映射数据结构来读取所述数据对象的一部分;
对所述数据对象的所述一部分中的压缩数据进行解压缩,以得到所述数据范围;以及
响应于所述请求,返回所述数据范围。
13.一种存储和访问压缩数据的方法,包括:
通过一个或多个处理器接收数据对象的多个数据块;
压缩所述多个数据块以获得多个压缩块;
确定所述多个压缩块一起是否小于阈值大小;
基于确定所述多个压缩块一起小于所述阈值大小,向映射数据结构中的各个条目加入所述多个压缩块的相应大小;
通过组合所述各个条目中的至少两个条目的值来精简所述映射数据结构;以及
存储所述多个压缩块和精简后的映射数据结构;
其中,所述方法还包括:
在所述数据对象的至少部分压缩后,接收访问所述数据对象中的数据的请求;
确定要从所述数据对象获取的数据范围;
基于所述范围,在所述数据对象的至少部分压缩后,使用所述精简后的映射数据结构来读取所述数据对象的一部分;
对所述数据对象的所述一部分中的压缩数据进行解压缩,以得到所述数据范围;以及
响应于所述请求,返回所述数据范围。
14.根据权利要求13所述的方法,所述方法还包括:
将至少一个偏移量指示符作为所述多个压缩块的参考点包括到所述映射数据结构中,所述偏移量指示符能够与处于未压缩状态下的所述数据对象中的位置相关,
其中,所述偏移量指示符指示与所述映射数据结构中的所述偏移量指示符前面的条目相对应的压缩块和非压缩块的总大小。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2019/029560 WO2020222727A1 (en) | 2019-04-29 | 2019-04-29 | Optimizing storage and retrieval of compressed data |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113728601A CN113728601A (zh) | 2021-11-30 |
CN113728601B true CN113728601B (zh) | 2023-04-25 |
Family
ID=73028768
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980095790.7A Active CN113728601B (zh) | 2019-04-29 | 2019-04-29 | 优化压缩数据的存储和获取 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20220129430A1 (zh) |
EP (1) | EP3963853B1 (zh) |
JP (1) | JP7261317B2 (zh) |
CN (1) | CN113728601B (zh) |
WO (1) | WO2020222727A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11520790B2 (en) * | 2020-09-17 | 2022-12-06 | International Business Machines Corporation | Providing character encoding |
WO2023086242A1 (en) * | 2021-11-12 | 2023-05-19 | AirMettle, Inc. | Partitioning, processing, and protecting compressed data |
US11971857B2 (en) * | 2021-12-08 | 2024-04-30 | Cohesity, Inc. | Adaptively providing uncompressed and compressed data chunks |
US20230206380A1 (en) * | 2021-12-28 | 2023-06-29 | Advanced Micro Devices, Inc. | Optimizing partial writes to compressed blocks |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5305295A (en) * | 1992-06-29 | 1994-04-19 | Apple Computer, Inc. | Efficient method and apparatus for access and storage of compressed data |
CN103914459A (zh) * | 2012-12-31 | 2014-07-09 | 北京中交兴路信息科技有限公司 | 交通信息文件压缩、解压缩方法及装置 |
CN107066393A (zh) * | 2017-01-12 | 2017-08-18 | 安徽大学 | 提高地址映射表中映射信息密度的方法 |
CN107947799A (zh) * | 2017-11-28 | 2018-04-20 | 郑州云海信息技术有限公司 | 一种数据压缩方法及装置 |
Family Cites Families (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5832490A (en) * | 1996-05-31 | 1998-11-03 | Siemens Medical Systems, Inc. | Lossless data compression technique that also facilitates signal analysis |
US20030191876A1 (en) * | 2000-02-03 | 2003-10-09 | Fallon James J. | Data storewidth accelerator |
US6944742B1 (en) * | 2000-04-28 | 2005-09-13 | Microsoft Corporation | Compressed file system for non-volatile RAM |
US8639849B2 (en) * | 2001-12-17 | 2014-01-28 | Sutech Data Solutions Co., Llc | Integrated circuits for high speed adaptive compression and methods therefor |
US20050071479A1 (en) * | 2003-09-30 | 2005-03-31 | Dimitris Achlioptas | Smart button |
JP4380533B2 (ja) | 2004-12-24 | 2009-12-09 | キヤノン株式会社 | マルチメディアデータ処理装置及びその方法 |
JP2006222626A (ja) | 2005-02-09 | 2006-08-24 | Olympus Corp | 動画像伝送装置および動画像伝送システム |
US7512862B1 (en) * | 2005-04-13 | 2009-03-31 | Network Appliance, Inc. | Compression of data for protection |
US20070005625A1 (en) * | 2005-07-01 | 2007-01-04 | Nec Laboratories America, Inc. | Storage architecture for embedded systems |
US7512610B1 (en) | 2005-09-30 | 2009-03-31 | Miosoft Corporation | Processing data records |
US20070208893A1 (en) * | 2006-02-23 | 2007-09-06 | Microsoft Corporation | File-based compression on a fat volume |
US8832043B2 (en) * | 2006-05-31 | 2014-09-09 | International Business Machines Corporation | Method and system for transformation of logical data objects for storage |
US8868930B2 (en) * | 2006-05-31 | 2014-10-21 | International Business Machines Corporation | Systems and methods for transformation of logical data objects for storage |
US8229902B2 (en) * | 2006-11-01 | 2012-07-24 | Ab Initio Technology Llc | Managing storage of individually accessible data units |
US7987161B2 (en) * | 2007-08-23 | 2011-07-26 | Thomson Reuters (Markets) Llc | System and method for data compression using compression hardware |
US7895242B2 (en) * | 2007-10-31 | 2011-02-22 | Microsoft Corporation | Compressed storage management |
US8032495B2 (en) * | 2008-06-20 | 2011-10-04 | Perfect Search Corporation | Index compression |
US8156306B1 (en) * | 2009-12-18 | 2012-04-10 | Emc Corporation | Systems and methods for using thin provisioning to reclaim space identified by data reduction processes |
US8633838B2 (en) * | 2010-01-15 | 2014-01-21 | Neverfail Group Limited | Method and apparatus for compression and network transport of data in support of continuous availability of applications |
US9330105B1 (en) * | 2010-05-07 | 2016-05-03 | Emc Corporation | Systems, methods, and computer readable media for lazy compression of data incoming to a data storage entity |
KR101649357B1 (ko) * | 2010-05-10 | 2016-08-19 | 삼성전자주식회사 | 데이터 저장 장치, 그것의 동작 방법, 그리고 그것을 포함한 스토리지 서버 |
US20120089781A1 (en) * | 2010-10-11 | 2012-04-12 | Sandeep Ranade | Mechanism for retrieving compressed data from a storage cloud |
US9798831B2 (en) * | 2011-04-01 | 2017-10-24 | Google Inc. | Processing data in a MapReduce framework |
US9020912B1 (en) * | 2012-02-20 | 2015-04-28 | F5 Networks, Inc. | Methods for accessing data in a compressed file system and devices thereof |
US9075710B2 (en) * | 2012-04-17 | 2015-07-07 | SanDisk Technologies, Inc. | Non-volatile key-value store |
WO2013168202A1 (en) * | 2012-05-11 | 2013-11-14 | Hitachi, Ltd. | Storage apparatus and data management method |
US9542462B1 (en) * | 2012-06-14 | 2017-01-10 | Google Inc. | Scaling high-level statistical languages to large, distributed datasets |
CN103701852B (zh) * | 2013-11-11 | 2017-12-12 | 魅族科技(中国)有限公司 | 发送文件的方法和终端 |
KR102187127B1 (ko) | 2013-12-03 | 2020-12-04 | 삼성전자주식회사 | 데이터 연관정보를 이용한 중복제거 방법 및 시스템 |
CN104199867B (zh) * | 2014-08-18 | 2017-05-17 | 中国科学院软件研究所 | 一种解决文件名乱码问题的zip文件解压缩方法 |
US9660666B1 (en) * | 2014-12-22 | 2017-05-23 | EMC IP Holding Company LLC | Content-aware lossless compression and decompression of floating point data |
US10803018B2 (en) * | 2015-12-16 | 2020-10-13 | International Business Machines Corporation | Compressed data rearrangement to optimize file compression |
SE540178C2 (en) * | 2016-01-29 | 2018-04-24 | Zeropoint Tech Ab | Methods, devices and systems for compressing and decompressing data |
JP6725120B2 (ja) * | 2016-06-24 | 2020-07-15 | ホアウェイ・テクノロジーズ・カンパニー・リミテッド | データ処理方法、記憶装置、ソリッドステートディスク及び記憶システム |
US10027984B2 (en) * | 2016-11-30 | 2018-07-17 | Hewlett Packard Enterprise Development Lp | Methods and systems for efficiently reading a data block from a data seglet with compressed data blocks |
US10416928B2 (en) * | 2017-06-15 | 2019-09-17 | Hitachi, Ltd. | Data storage system and process for data compression of distributed data in a scalable cluster system and computer program for such data storage system |
US11157631B1 (en) * | 2017-12-19 | 2021-10-26 | Robert J. Whelton | System and method for securely indexing, storing, and retrieving data within a computer network |
KR102685015B1 (ko) * | 2018-04-24 | 2024-07-16 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작방법 |
US11176022B2 (en) * | 2019-12-27 | 2021-11-16 | Bank Of America Corporation | Health diagnostics and analytics for object repositories |
US11489663B2 (en) * | 2020-01-31 | 2022-11-01 | International Business Machines Corporation | Correlation-based hash tree verification |
-
2019
- 2019-04-29 WO PCT/US2019/029560 patent/WO2020222727A1/en unknown
- 2019-04-29 CN CN201980095790.7A patent/CN113728601B/zh active Active
- 2019-04-29 US US17/428,653 patent/US20220129430A1/en active Pending
- 2019-04-29 EP EP19927358.2A patent/EP3963853B1/en active Active
- 2019-04-29 JP JP2021560689A patent/JP7261317B2/ja active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5305295A (en) * | 1992-06-29 | 1994-04-19 | Apple Computer, Inc. | Efficient method and apparatus for access and storage of compressed data |
CN103914459A (zh) * | 2012-12-31 | 2014-07-09 | 北京中交兴路信息科技有限公司 | 交通信息文件压缩、解压缩方法及装置 |
CN107066393A (zh) * | 2017-01-12 | 2017-08-18 | 安徽大学 | 提高地址映射表中映射信息密度的方法 |
CN107947799A (zh) * | 2017-11-28 | 2018-04-20 | 郑州云海信息技术有限公司 | 一种数据压缩方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
EP3963853A4 (en) | 2022-11-16 |
US20220129430A1 (en) | 2022-04-28 |
EP3963853B1 (en) | 2023-07-05 |
EP3963853A1 (en) | 2022-03-09 |
JP2022528284A (ja) | 2022-06-09 |
CN113728601A (zh) | 2021-11-30 |
WO2020222727A1 (en) | 2020-11-05 |
JP7261317B2 (ja) | 2023-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113728601B (zh) | 优化压缩数据的存储和获取 | |
US10394847B2 (en) | Processing data in a distributed database across a plurality of clusters | |
US10628060B2 (en) | Smart storage management based on dynamic logic capacity for the storage | |
JP2020038623A (ja) | データを記憶するための方法、装置及びシステム | |
US20160232055A1 (en) | Methods for distributing erasure-coded fragments in a geo-distributed storage system and devices thereof | |
US9252807B2 (en) | Efficient one-pass cache-aware compression | |
US20160378846A1 (en) | Object based storage cluster with multiple selectable data handling policies | |
US11829624B2 (en) | Method, device, and computer readable medium for data deduplication | |
JP2019079113A (ja) | ストレージ装置、データ管理方法、及びデータ管理プログラム | |
CN112241320B (zh) | 资源分配方法、存储设备和存储系统 | |
CN103067525A (zh) | 一种基于特征码的云存储数据备份方法 | |
EP3993273A1 (en) | Method and apparatus for data compression in storage system, device, and readable storage medium | |
CN107688437A (zh) | 固态存储器容量管理系统和方法 | |
CN113806300A (zh) | 数据存储方法、系统、装置、设备及存储介质 | |
CN116521091A (zh) | 数据读取方法、装置、设备、数据传输系统及存储介质 | |
CN115438114A (zh) | 存储格式转换方法、系统、装置、电子设备及存储介质 | |
JP2016177724A (ja) | ノード、情報処理システム、方法、および、プログラム | |
EP3635529B1 (en) | Deduplicating distributed erasure coded objects | |
CN108234552B (zh) | 一种数据存储方法及装置 | |
CN113535597A (zh) | 内存管理方法、内存管理单元和物联网设备 | |
US12073102B2 (en) | Method and apparatus for compressing data of storage system, device, and readable storage medium | |
US20230273727A1 (en) | Dynamic storage for adaptive mapping for data compression on a storage device | |
US11435956B2 (en) | Method, electronic device, and computer program product for data compression | |
US20240171530A1 (en) | Data Sending Method, Network Interface Card, and Computing Device | |
WO2022206144A1 (zh) | 数据压缩方法及装置 |
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 |