CN114817142A - 基于散列的键值到块转换方法和系统 - Google Patents
基于散列的键值到块转换方法和系统 Download PDFInfo
- Publication number
- CN114817142A CN114817142A CN202210030606.4A CN202210030606A CN114817142A CN 114817142 A CN114817142 A CN 114817142A CN 202210030606 A CN202210030606 A CN 202210030606A CN 114817142 A CN114817142 A CN 114817142A
- Authority
- CN
- China
- Prior art keywords
- segment
- metadata
- hash
- key
- index
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 75
- 238000006243 chemical reaction Methods 0.000 title description 7
- 230000004044 response Effects 0.000 claims abstract description 49
- 238000004422 calculation algorithm Methods 0.000 claims description 5
- 238000004364 calculation method Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 14
- 230000006870 function Effects 0.000 description 5
- 238000013519 translation Methods 0.000 description 4
- 230000014616 translation Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 238000012217 deletion Methods 0.000 description 3
- 230000037430 deletion Effects 0.000 description 3
- 230000011218 segmentation Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000000523 sample Substances 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000012005 ligant binding assay Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000013403 standard screening design Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
Images
Classifications
-
- 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
- G06F16/2255—Hash tables
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0643—Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
-
- 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/13—File access structures, e.g. distributed indices
- G06F16/137—Hash-based
-
- 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/14—Details of searching files based on file metadata
- G06F16/148—File search processing
- G06F16/152—File search processing using file content signatures, e.g. hash values
-
- 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/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
- G06F16/162—Delete operations
-
- 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/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0891—Revocation or update of secret information, e.g. encryption key update or rekeying
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0894—Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Power Engineering (AREA)
- Computer Hardware Design (AREA)
- General Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (AREA)
- Library & Information Science (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Mobile Radio Communication Systems (AREA)
- Machine Translation (AREA)
Abstract
所描述的是一种方法,包括:基于用于要存储在存储器设备中的第一对象的第一键的散列,计算第一索引;确定存储器设备上与第一索引相对应的第一分段的可用性;响应于确定与第一索引相对应的第一分段不可用于存储,基于用于第一对象的第一键的散列,计算第二索引;确定存储器设备上与第二索引相对应的第二分段的可用性;以及,将第二分段的位置的指示符添加到第一分段的第一元数据中的冲突表。
Description
相关申请的交叉引用
本申请要求于2021年1月20日提交的美国临时专利申请第63/139,655号以及于2021年5月14日提交的美国临时专利申请第17/321,326号的优先权,其通过引用整体并入本文。
技术领域
本申请涉及键值系统,更具体地,涉及基于散列(hash)的有效键值到块转换方法和系统。
背景技术
一些存储设备在没有依赖转换器将键值转换为块和将块转换为键值的情况下,无法与应用(例如,软件应用)通信。常规技术资源繁重,并且具有高开销。此外,一些技术在尺寸缩放时不能很好地工作。因此,需要更有效的转换技术。
发明内容
根据实施例,描述了一种方法。该方法可以包括:基于用于要存储在存储器设备中的第一对象的第一键的散列,计算第一索引;确定存储器设备上与第一索引相对应的第一分段(segment)的可用性;响应于确定与第一索引相对应的第一分段不可用于存储,基于用于第一对象的第一键的散列,计算第二索引;确定存储器设备上与第二索引相对应的第二分段的可用性;以及,将第二分段的位置的指示符添加到第一分段的第一元数据中的冲突表。
该方法还可以包括:响应于确定第二分段可用,将第一对象写入第二分段。
计算第二索引可以包括:从散列的每个字节中提取比特,以形成第二索引。
确定第一分段的可用性包括:从第一元数据读取状态标识符,其中,该状态标识符指示与第一分段不可用于存储相对应的状态。
该方法还可以包括:响应于冲突表为空,将第一键的散列和第二分段的位置的指示符之间的关联写入冲突表。
计算第一索引包括:使用安全散列算法256(SHA-256)来进行计算。
该方法还可以包括:接收指示第一键的获取(get)请求;基于第一键的散列,计算第一索引;读取与第一索引相对应的第一分段的第一元数据;响应于读取第一元数据,确定第一键的散列与存储在第一元数据中的已存储散列不一致;读取第一元数据中的冲突表,以确定第一对象被存储在第二分段中;以及,响应于读取冲突表,从第二分段中检索第一对象。
该方法还可以包括:接收标识第一键的删除(delete)请求;基于第一键的散列,计算第一索引;读取与第一索引相对应的第一分段的第一元数据;响应于读取第一元数据,确定第一键的散列与存储在第一元数据中的已存储散列不一致;读取第一元数据中的冲突表,以确定第一对象被存储在第二分段中;以及,响应于读取冲突表,从第二分段中删除第一对象。
该方法还可以包括:接收标识第一键的删除请求;基于第一键的散列,计算第一索引;读取与第一索引相对应的第一分段的第一元数据;响应于读取第一元数据,确定第一键的散列与存储在第一元数据中的已存储散列一致;确定第一元数据中的冲突表包括第二分段的位置的指示符;将冲突表的值大小设置为零;以及,从第二分段中删除第一对象。
该方法还可以包括:接收标识第一键的删除请求;基于第一键的散列,计算第一索引;读取与第一索引相对应的第一分段的第一元数据;响应于读取第一元数据,确定第一键的散列与存储在第一元数据中的已存储散列一致;响应于确定第一键的散列与存储在第一元数据中的已存储散列一致,确定第一元数据中的冲突表为空;以及,响应于读取冲突表,从第二分段中删除第一对象。
根据另一实施例,描述了一种配置为存储对象的对象存储系统。该对象存储系统可以包括划分为分段的存储器设备,该存储器设备被配置为:基于用于要存储在存储器设备中的第一对象的第一键的散列,计算第一索引;确定存储器设备上与第一索引相对应的第一分段的可用性;响应于确定与第一索引相对应的第一分段不可用于存储,基于用于第一对象的第一键的散列,计算第二索引;确定存储器设备上与第二索引相对应的第二分段的可用性;以及,将第二分段的位置的指示符添加到第一分段的第一元数据中的冲突表。
存储器设备可以被配置为:响应于确定第二分段可用,将第一对象写入第二分段。
计算第二索引包括:从散列的每个字节中提取比特,以形成第二索引。
确定第一分段的可用性包括:从第一元数据读取状态标识符,其中,该状态标识符指示与第一分段不可用于存储相对应的状态。
存储器设备还可以被配置为:响应于冲突表为空,将第一键的散列和第二分段的位置的指示符之间的关联写入冲突表。
计算第一索引包括:使用安全散列算法256(SHA-256)来进行计算。
存储器设备还可以被配置为:接收指示第一键的获取请求;基于第一键的散列,计算第一索引;读取与第一索引相对应的第一分段的第一元数据;响应于读取第一元数据,确定第一键的散列与存储在第一元数据中的已存储散列不一致;读取第一元数据中的冲突表,以确定第一对象被存储在第二分段中;以及,响应于读取冲突表,从第二分段中检索第一对象。
存储器设备还可以被配置为:接收标识第一键的删除请求;基于第一键的散列,计算第一索引;读取与第一索引相对应的第一分段的第一元数据;响应于读取第一元数据,确定第一键的散列与存储在第一元数据中的已存储散列不一致;读取第一元数据中的冲突表,以确定第一对象被存储在第二分段中;以及,响应于读取冲突表,从第二分段中删除第一对象。
存储器设备还可以被配置为:接收标识第一键的删除请求;基于第一键的散列,计算第一索引;读取与第一索引相对应的第一分段的第一元数据;响应于读取第一元数据,确定第一键的散列与存储在第一元数据中的已存储散列一致;确定第一元数据中的冲突表包括第二分段的位置的指示符;将冲突表的值大小设置为零;以及,从第二分段中删除第一对象。
存储器设备还被配置为:接收标识第一键的删除请求;基于第一键的散列,计算第一索引;读取与第一索引相对应的第一分段的第一元数据;响应于读取第一元数据,确定第一键的散列与存储在第一元数据中的已存储散列一致;响应于确定第一键的散列与存储在第一元数据中的已存储散列一致,确定第一元数据中的冲突表为空;以及,响应于读取冲突表,从第二分段中删除第一对象。
根据另一实施例,描述了一种方法,包括:接收指示第一键的获取请求;基于用于要从存储器设备中检索的对象的第一键的散列,计算第一索引;读取与第一索引相对应的第一分段的第一元数据;响应于读取元数据,确定第一键的散列与存储在第一元数据中的已存储散列不一致;读取第一元数据中的冲突表,以确定对象被存储在第二分段中;以及,响应于读取冲突表,从第二分段中检索对象。
冲突表可以包括基于第一键的散列的第二索引和存储在第一分段中的对象的偏移,其中该偏移为第一键的散列和第二分段的位置的指示符之间的关联。
本发明的范围由权利要求限定,这些权利要求通过引用并入本节。通过考虑下面对一个或多个实施例的详细描述,本领域技术人员将能够更完整地理解本发明的实施例,以及实现其附加优点。将参考附图,这些附图将首先进行简要描述。
附图说明
图1是示出根据实施例的与应用通信的使用用于键值存储的基于散列的块转换的存储器设备的框图。
图2是根据实施例的用于寻找存储器设备上的可用槽位(slot)的方法的流程图。
图3是根据实施例的用于将对象放到存储器设备上的可用槽位上的方法的流程图。
图4是根据实施例的用于从存储器设备中获取对象的方法的流程图。
图5是根据实施例的用于删除存储器设备上的对象的方法的流程图。
图6是用于从系统崩溃或重启中恢复的方法的流程图。
图7示出根据实施例的示例元数据。
通过参考下面的详细描述,将会更好地理解本公开的实施例及其优点。除非另有说明,否则在整个附图和书面描述中,相同的附图标记表示相同的元素,因此,其描述将不进行重复。在附图中,为清晰起见,元素、层和区域的相对大小可能会进行夸大。
具体实施方式
在下文中,将参考附图更详细地描述示例实施例。然而,本发明可以以各种不同的形式进行体现,并且不应被解释为仅限于本文所示的实施例。相反,提供这些实施例作为示例是为了使本公开变得彻底和完整,并且将本发明的各方面和特征充分传达给本领域技术人员。因此,本领域普通技术人员完全理解本发明的各方面和特征所非必需的过程、元素和技术可能不进行描述。
图1是示出包括存储器设备的系统的框图,其中,该存储器设备被配置为存储由(例如,计算机上的)应用提供的信息。存储器设备的一个示例是固态驱动器(solid statedrive,SSD),其中,SSD使用块存储技术将数据存储在SSD中。在块存储设备中,原始数据被存储在存储器设备中的特定设备地址处,并且应用提供设备块偏移(通常称为逻辑块寻址(Logical Block Addressing,LBA))和要存储在设备上的数据的长度。另一方面,使用对象存储的应用理解键值语义。因此,需要转换器来将对象存储中的键映射到块存储设备中的值位置(例如,LBA),以便执行操作(诸如写入、读取和删除数据)。因此,当期望检索存储的对象时,应用(例如,软件应用)可以将键提供给存储器设备,并且转换器可以将键映射到值位置,以基于键从存储器设备中检索对象。类似地,当期望删除存储的对象时,应用可以提供与对象相对应的键,并且转换器可以将键映射到值位置并删除对象。因此,通过使用转换器,由对象存储应用使用的键可以被映射到块存储设备上的值位置,以执行设备操作。然而,执行这种转换通常会消耗资源,从而降低整个系统的速度,并且随着存储器设备的尺寸缩放,性能可能受到负面影响。因此,期望在尺寸缩放时不降低性能的更有效的技术。
本公开的各种实施例描述了应用和存储器设备之间的放入(put)操作(例如,存储)、获取(get)操作(例如,检索)和删除(delete)操作期间的键值到块存储转换技术。在一些实施例中,键值到块存储转换可以在崩溃恢复或系统重启操作期间使用。图1是系统100(诸如至少包括耦合到存储器设备114(诸如例如用于存储数据的SSD)的处理器106的计算机)的示例框图。在一些实施例中,处理器106包括应用102,其中,应用102通过处理器106的I/O接口104和存储器设备114的I/O接口108与使用块存储的存储器112通信。控制器110可以被耦合到存储器112,并且可以被配置为调节在存储器112和应用102之间流动的数据流量(data traffic)。存储器设备114的示例是SSD,并且SSD可以被划分为多个大小相等的分段。例如,16TB SSD可以被划分为大约40亿个大小相等的4KB分段。然而,SSD可以基于应用或终端用户的偏好,被划分为大小更大或更小的分段。
根据实施例,要由应用102存储的对象具有键,并且散列函数被应用于键,以生成散列。然后,散列可以用于生成索引,并且对象可以被存储为与生成的索引相对应的存储器设备的分段中的值。分段在存储器设备内的位置可以通过从散列生成的索引进行确定。例如,散列函数可以被应用于键,以生成散列(例如,256比特数),并且索引可以基于该散列来生成。然后,索引可以用于(在40亿个分段中)查找与索引匹配的分段指示符。例如,分段指示符可以是分段在设备内的地址或位置,并且如果找到与索引匹配的分段指示符,则对象可以被存储在该分段中。类似地,如果期望望检索存储在分段中的对象,则可以对与要进行检索的对象相对应的键进行散列以生成索引,并且可以基于索引,从分段中检索对象。因此,根据本公开的各种实施例的基于散列的键值转换技术提供了在大小缩放时减少资源消耗并进一步提高性能的方法。然而,在实践中,这并不像听起来那么简单。例如,从散列生成的索引可能不对应于分段,因为索引可能超出可用的分段范围。也就是说,如果存在40亿个分段,则大于40亿的任何索引数字都会落在该范围之外。此外,在一些情况下,与生成的索引相对应的分段可能已经被与另一键相对应的对象占用,从而导致对象的冲突。因此,本公开的实施例可以实现本文描述的各种索引生成和冲突处理技术。
图2是根据实施例的用于寻找存储器设备上的可用槽位的方法的流程图。在一些实施例中,当应用期望将对象写入到存储器设备(例如,SSD)上时,执行各种步骤,以将对象放入到SSD上。为了本公开的目的,并且为了便于描述本公开的各种实施例,将使用划分为大小相等的4KB分段的16TB SSD作为示例存储器设备,以说明实施例。因此,16TB SSD被划分为大约40亿个分段,并且每个分段具有关联指示符(例如,地址或定位符)。在一些实施例中,每个分段包括与该分段相对应的元数据,其中,该元数据可以指示例如是分段包含数据还是分段为空。元数据的示例在图7中示出。在一些实施例中,存储器设备的一个分段可以被保留作为分段向量,并且在分段向量内可以存在可用于存储元数据的元向量。元向量类似于存储在每个分段中的元数据,但是旨在快速提供元数据信息,而不必读取各个分段中的元数据信息。
根据一个实施例,对与对象相对应的键进行散列,以生成数值(202)。各种散列技术在本领域中是公知的,并且一些散列技术可能比其他散列技术更为优选。本公开中描述的示例使用安全散列算法256(SHA-256);然而,本领域技术人员可以发现可以使用其他适当的散列技术来代替。在一些实施例中,本领域技术人员已知的其他技术可以用于从经散列的键生成索引。在此,SHA-256散列生成作为实际散列值的用于生成索引(例如,第一索引)的256比特数。在一些实施例中,基于散列生成的索引用于标识在SSD上具有相对应的指示符(例如,地址)的分段,并且对象被存储在该分段中。然而,在一些情况下,例如,因为潜在索引值多于分段,所以通过散列函数生成的索引可能不与分段相对应。因此,一些索引可能落在SSD上可用的分段的范围之外。根据使用的散列技术的类型,可以生成的索引的数量可能有所不同。为了说明,索引可以是通过散列技术生成的256比特数,而分段可以具有32比特的指示符。因此,分段指示符的值可以在0到232-1的范围内,而从散列值生成的第一索引可以在0到2256-1之间。在其他情况下,例如,因为分段可能已经被基于另一键的另一对象占用,所以索引可能与不可用的该分段相对应。因此,本公开的实施例提供了更有效地寻找可用于存储对象的相对应的分段的技术。
因此,在对第一键进行散列之后,基于第一键的散列来生成256比特的索引(例如,第一索引)(202),并且做出关于第一索引是否在相对应的分段指示符的范围(例如,[0…232-1])内的确定(204)。如果第一索引不在相对应的分段指示符的范围内,则基于第一键的相同散列值来生成另一索引(例如,第二索引),以确定第二索引是否落入分段指示符的范围内。如上所述,第一索引是由散列函数产生的实际散列值,而第二索引是基于散列值生成的新值。因此,根据一个实施例,第二索引可以通过下面的方式来生成:从256比特散列的每个字节中提取第一比特,以生成新索引(例如,第二索引)(214)。也就是说,256比特散列具有32个字节,并且提取并组合32个字节中的每一个的第一比特,以生成新的32比特索引(例如,第二索引)。如果第二索引落入分段指示符的范围内,则读取与第二索引相对应的分段的元向量(206),以确定分段是空的还是被另一对象占用(208)。如果分段为空,则分段可用于要写入的对象。另一方面,如果分段被另一对象占用,则这是冲突的指示,其中,多个对象(每个对象与不同的键相对应)具有共同索引。在这种情况下,可以将关于冲突的信息存储在元数据中,以便于对冲突进行整理。
根据实施例,在其中存储有第一对象的分段的元数据包括冲突表,其中,该冲突表可以包含与已经与第一对象冲突的第二对象(例如,已经为第一对象和第二对象两者生成与分段相对应的共同索引)相关的信息。例如,冲突表(或其他数据结构)可以是可包括与第一对象在分段处冲突的第二对象的偏移(例如,指示存储与第二对象相关的信息的另一分段与该分段的距离)和与第二对象相对应的键的散列的信息阵列。因此,如果没有发生冲突,则冲突表可以为空,但是每当发生冲突时,冲突表可以进行更新,以包括与在该分段中与第一对象冲突的第二对象相关的信息阵列。例如,与第一键相对应的第一对象被存储在分段中。此时,冲突表仍然为空,因为分段曾经可用,所以不存在冲突。然后,与用于第二对象的第二键相对应的索引指向在其中存储有第一对象的相同的分段。这会引起冲突,因为分段已经被第一对象占用。在这种情况下,第二对象将被存储在不同的分段中,并且冲突表可以用关于第二对象的实际位置的信息进行更新。因此,当稍后期望检索第二对象并且用于第二键的第二索引指向包含第一对象的分段时,冲突表可以指向第二对象的实际位置。稍后,将更详细地描述检索对象的进一步细节。
回到步骤(208),当做出关于所选择的分段已经包含对象的确定时,存在冲突。在这种情况下,如果这是第一次发生冲突,则冲突表尚不存在,因此冲突表为空。如果这不是第一次冲突(例如,之前已经发生过冲突),则冲突表很可能已经存在。如果冲突表已经存在,则做出关于是否已经读取了冲突表的确定(210)。如果冲突表尚未被读取或者冲突表仍然为空,则进一步读取元数据,以确定哪个键与存储在分段中的对象相关联,并且如果该信息不在冲突表中,则冲突表可以用该信息进行更新(226)。接下来,将从元数据或冲突表(如果冲突表已经存在)读取的散列和当前键的散列进行比较,并且如果它们匹配,则这是覆写(overwrite)条件(232)。稍后,将描述对覆写条件的处理。
在执行步骤(226)和步骤(232)的同时,做出关于在步骤(204)中确定的索引(例如,第一索引)是否在分段指示符的范围内的确定(212)。如果索引在范围内,则从256比特散列的每个字节中提取第一比特,以生成新索引(例如,第二索引)(214)。如果索引不在范围内,则第二索引先前已经在步骤(214)中生成,因此通过提取256比特散列的每个字节的第二比特(即,基于散列值)来生成第三索引,以生成另一索引(216)。
在一些实施例中,如果从每个字节提取比特的索引生成已经执行了八次迭代,则256比特散列的每个字节的所有8比特耗尽,并且没有更多的比特可用于生成新索引。因此,如果所有比特耗尽(218),则一次一个分段地探测存储器设备上的分段(220、222)。更具体地,可以通过再次从每个字节中提取第一比特来生成第一索引,以建立起始点(这与在步骤(202)中生成的第一索引相同),来执行探测过程。然后,探测每个分段的元向量,直到找到空闲分段(222)。一旦找到空闲分段(224),则读取与空闲分段相对应的元数据(226),并且通过将通过探测而找到的分段的索引和元数据或冲突表进行比较,做出关于分段是否应该如上所述进行覆写的确定(232、234)。如果它们匹配,则这是覆写条件,但是如果它们不匹配,则这不是覆写条件。如果这不是覆写条件并且没有可用空槽位(因为探测已耗尽),则写入失败,因为没有空间(228)。另一方面,如果这是覆写条件,则做出关于分段是否足够大以将对象写入该分段的确定(250)。如果分段不足够大,则分段没有充足的空间并且写入失败(228)。如果分段足够大,则可以进行覆写,因为对象可以容纳在该分段中,并且处理事务,并且可以将元数据和对象写入分段(246)。
回到步骤(216),一旦通过从每个字节提取第二比特来生成新索引,则读取相对应的分段中的元向量(206),以确定该分段为空还是被占用(208)。在一些实施例中,重复该过程,直到找到空分段。
在一些实施例中,一旦标识可用分段,则确定基于对象的大小的存储对象所需的分段的总数量。例如,如果对象大小为8KB并且每个分段为4KB,则需要两个分段来存储对象。在一些实施例中,查询(consult)空闲列表来确定哪个分段和与该分段相对应的空闲槽位位于哪个位置。例如,如果需要两个分段来写入8KB对象并且这两个分段相邻,则可以在一次磁盘写入中写入整个对象。
在一些实施例中,空闲列表可以在存储器设备的部分上可用。空闲列表可以是示出分段偏移的位置和空闲分段的数量的列表,并且空闲列表是用可用分段的状态不断更新的。因此,一旦在步骤(230)中计算出所需的空闲分段的总数量,就可以查询空闲列表,以确定基于要写入的对象的大小的精确匹配的分段(例如,用于4KB对象的4KB分段,或用于8KB对象的两个4KB分段)(236)以及获取这些空闲分段使得修改后的数量的分段可以在最大阈值的磁盘写入(例如,一次磁盘写入的大小限制)内的最佳可能解决方案(238)。换句话说,空闲列表通过确定最佳可能解决方案,优化在更少数量的磁盘写入(例如,一次磁盘写入)中使用可用分段的最佳方式,这是多个分段按顺序的情况。接下来,做出关于是否已经找到所需的空闲分段的确定(240)。如果找到分段,则做出关于冲突或修改后的分段是否不在最大一次磁盘写入的大小限制内的确定(242)。换句话说,如果多个分段是顺序的或者在一次磁盘写入的粒度的范围内,则可以在一次写入中执行数据写入,并且不需要事务,但是如果多个分段不是顺序的或者不在一次磁盘写入的粒度内,则需要事务(即,多于一次磁盘写入)来写入多个分段,因此不在最大一次磁盘写入的限制内。如果冲突或修改后的分段不在分段的大小内,则需要用于元数据的事务(248)。如果冲突或修改后的分段在分段的大小内,则不需要事务(244)。
回到步骤(240),如果确定没有找到分段,则做出关于这是否为覆写的确定(234)。如果这不是覆写,则写入过程失败(228)。如果这是覆写,则基于对象的大小,做出关于分段是否足够大的确定(250)。如果分段不足够大,则分段失败(228)。如果分段足够大,则处理事务,并且可以将元数据和对象写入分段,因为没有空闲分段可用(246)。因此,图2的流程图可以用于确定是否需要用于元数据写入的事务(248),是否需要用于元数据写入和对象写入两者的事务(246),或者是否不需要事务(244)。
图3是用于一旦标识出可用槽位就将对象放到存储器设备的一个或多个槽位上的方法的流程图。根据实施例,基于来自图2的结果选择两条路径之一,即,是否需要事务(302)。例如,如果确定不需要事务,则例如基于在图2的步骤(238)中找到的空闲槽位是否为顺序的,做出关于是否可以将元数据和对象写入多个顺序的分段的确定(304)。如果可以将元数据和对象写入顺序的分段,则同时将元数据和对象两者写入(312),以及更新分段向量(310),并且结束写入过程(314)。在一些实施例中,分段向量可以是存储器设备上的部分(例如,在SSD的开始处),并且可以包括每个分段的状态的基于比特的指示符。例如,指示符可以是将每个分段的状态表示为可用、元数据、数据组块(data chunk)(或对象)或冲突条目的两比特的指示符。因此,可以参考元向量来快速确定存储器设备上的任何分段的状态。因为每个分段仅由两个比特表示,所以具有40亿个分段的示例16TB SSD消耗大约950MB的存储器空间。在一些实施例中,还相应地参考并更新空闲列表。
回到步骤(304),如果确定不能将元数据和对象写入多个顺序的分段,则以单独写入的方式写入对象(306),然后写入元数据(308)。在一些实施例中,如果不能将对象写入多个顺序的分段,则可以用几次写入的方式写入对象,例如,可以写入对象的前半部分,然后可以写入对象的后半部分,随后写入元数据。接下来,更新分段向量(310),并且结束写入过程(314)。
回到步骤(302),如果确定需要事务,则做出关于是需要仅用于元数据写入的事务(如在图2的步骤(248)中确定的)还是需要用于元数据写入和对象写入两者的事务(如在图2的步骤(246)中确定的)的确定(316)。如果确定不需要对象部分(即,仅需要元数据写入),则做出关于是否可以将元数据和对象写入顺序的分段的确定(318)。如果确定不可以将元数据和对象写入顺序的分段,则写入对象(320),然后写入元数据(322)。如果确定可以将元数据和对象写入顺序的分段,则同时写入元数据和对象两者(324)。接下来,基于是否曾经存在冲突(例如,如在图2的步骤(208)中当确定分段是否不为空时所确定的)来选择两条路径之一(326)。如果存在冲突,则将来自第一冲突条目的旧元数据(例如,与当在图2的步骤(208)中确定冲突时已经存储在分段中的对象相对应的元数据)添加到元事务对象(328),然后将将要发生修改的旧分段向量区域添加到元事务对象(330)。另一方面,如果不存在冲突,则跳过步骤(328),并且将将要发生修改的旧分段向量区域添加到元事务对象中(330)。接下来,可以将元事务对象写入存储器设备的预定义区域中(332)。接下来,基于是否曾经存在冲突(例如,如在图2的步骤(208)中当确定分段是否不为空时所确定的)来选择两条路径之一(334)。如果不存在冲突(334),则更新分段向量(338),然后删除元事务对象(340)。另一方面,如果存在冲突,则用存储刚写入的对象的元数据的分段的偏移或其他位置指示符来更新冲突表(336),通过用与刚修改的分段相对应的条目进行更新来写入分段向量条目(338),然后一旦写入成功,就删除元事务对象(340)。相应地,写入操作完成(314)。
回到步骤(316),如果做出关于需要事务的对象写入部分的确定,则读取与键相对应的旧对象(342)。然后,添加旧对象,与旧盘上(ondisk)元信息一起,作为数据事务对象的部分(344)。然后,可以将数据事务对象写入存储器设备的预定义区域(346)。接下来,更新键的元数据和对象(348),并且删除数据事务对象(350)。相应地,写入操作完成(314)。
图4是用于从存储器设备获取对象的方法的流程图。根据实施例,当应用期望从存储器设备检索对象时,应用可以提供与该对象相对应的键,并且可以从存储器设备中检索对象。与放入(put)操作类似,在获取(get)操作中,在请求检索对象的应用和存储对象的存储器设备之间执行键值到对象存储的转换。在一些实施例中,将与对象相对应的键进行散列,以基于键的散列来生成第一索引(402)。在一些实施例中,在获取操作期间,使用与在写入对象时使用的散列技术相同的散列技术。相应地,可以使用SHA-256散列技术。然而,其他散列技术也可以适用,只要相同的散列技术用于写入对象。在一些实施例中,本领域技术人员已知的其他技术可以用于从经散列的键生成索引。一旦生成第一索引,就做出关于第一索引是否在存储器设备的相对应的分段指示符的范围内的确定(404)。如果第一索引不在相对应的分段指示符的范围内,则从散列的32个字节中的每个字节中提取第一比特,然后将该第一比特组合以生成新的32比特索引(例如,第二索引)(412)。在一些实施例中,如果生成的第一索引在相对应的分段指示符的范围内,则应用检查用于与第一索引相对应的分段的元向量的存在(406)。在一些实施例中,该确定可以通过检查指示元数据的存在的基于比特的状态指示符来做出(408)。如果不存在元数据,则获取操作失败,因为没有找到与经散列的键相对应的对象(414)。如果元数据存在,则读取元数据(410),并且做出关于第一键的散列与存储在元数据中的已存储散列匹配或不一致的确定(416)。如果散列匹配并且对象与元数据在相同的分段中(420),则可以检索对象,并且获取成功(424)。如果对象与元数据不在相同的分段中,则做出关于对象的数据组块是否按顺序存储的确定(426)。如果对象是按顺序存储的,则在一次读取中读取并检索整个对象(428)。如果对象不是按顺序存储的,则在多次读取中读取对象,因为对象分散在多个偏移(例如,非连续分段)之上(430)。
回到步骤(416),如果第一键的散列与存储在元数据中的已存储散列不匹配,则查询冲突表条目,以检查是否存在任何匹配的散列键(418)。如果冲突表没有提供分段,则获取过程失败,因为没有找到对象(414)。如果冲突表包含指示对象位于哪个分段中的指示符,则读取该相对应的分段处的元数据,然后如先前所述,做出关于对象是否与元数据在相同的分段中的确定(420)。因此,即使在存在冲突时,也可以有效地执行获取操作,因为在put操作期间更新了元数据中的冲突表。因此,当在获取期间存在冲突时,冲突表可以用于确定对象实际位于哪个分段中。
图5是用于从存储器设备中删除对象的方法的流程图。根据实施例,用于删除对象的过程类似于获取操作。因此,将与要删除的对象相对应的键进行散列,以基于键的散列来生成第一索引(502)。在一些实施例中,在删除过程期间,使用与在写入对象时使用的散列技术相同的散列技术。因此,可以使用SHA-256散列技术。然而,其他散列技术也可以适用,只要相同的散列技术用于写入对象。一旦生成第一索引,就做出关于第一索引是否在存储器设备的相对应的分段指示符的范围内的确定(504)。如果第一索引不在相对应的分段指示符的范围内,则从索引的32个字节中的每个字节中提取第一比特,然后将该第一比特组合以生成新的32比特索引(例如,第二索引)(512)。在一些实施例中,如果生成的第一索引在相对应的分段指示符的范围内,则系统检查用于与索引相对应的分段的元向量的存在(506)。在一些实施例中,该确定可以通过检查指示元数据的存在的基于比特的状态指示符来做出(508)。如果不存在元数据,则删除过程失败,因为没有找到与经散列的键相对应的对象(514)。如果元数据存在,则读取元数据(510),并且做出关于第一键的散列与存储在元数据中的已存储散列匹配或不一致的确定(516)。如果散列匹配并且冲突表为空,则不存在冲突,并且相对应的分段中的对象可以继续删除对象(520)。接下来,做出关于是否可以在一次写入中写入分段向量的确定(528)。如果分段向量不能在一次写入中写入,则启动事务(530)。如果分段向量可以在一次写入中写入,则跳过事务启动,并且根据需要,更新盘上元值大小或冲突表(532)。接下来,更新分段向量中的元数据和对象分段,以指示它们现在可用(534)。接下来,做出关于写入是否为事务的部分的确定(536)。如果写入不是事务的部分,则删除过程结束(540)。如果写入是事务的部分,则事务首先结束(538),然后删除过程结束(540)。
回到步骤(524),如果冲突表不为空,则可以将元数据中的值大小指示符设置为零(524)。在此,值大小为零指示存储在分段中的对象已经被删除,因此在未来的删除操作或获取操作期间,不应读取该对象。一旦将值大小设置为零,则可以删除(由元数据指示的)相对应的(多个)分段中的对象。
在一些实施例中,当在步骤(510)中读取元数据并且第一键的散列与存储在元数据中的已存储散列不匹配并因此不一致(516)时,则读取冲突表,以确定哪个分段包含与对象相对应的实际元数据(518),并且读取该元数据(522)。如果存储在元数据中的散列与键的散列匹配,则将冲突表条目的数量减一(526),并且可以删除对象。如果存储在元数据中的散列不与键的散列相对应,则删除过程失败(514)。
图6是用于从系统崩溃或重启中恢复的方法的流程图。当系统或应用在磁盘操作(诸如写入操作)期间崩溃时,数据可能会损坏。因此,根据实施例,描述了用于恢复数据的方法。在一些实施例中,当系统在崩溃之后进行重启时,读取用于事务对象的预定义磁盘空间,以确定是否存在任何未决或未完成的事务(604)。如果存在任何未决事务,则执行事务,并且回复元数据和对象(620)。一旦完成,就可以删除事务对象(622)。如果不存在未决事务,则跳过步骤(620)和步骤(622),并且读取分段向量(606),以及在存储器中形成空闲列表(608)和元向量(610)。如果启用高速缓存来存储冲突表(612),则从高速缓存读取相对应的元数据(614),并且还从高速缓存读取与该元数据相对应的冲突表(616),以及将该信息添加到存储在高速缓存中的冲突表和元数据中(618)。因此,即使当系统或应用崩溃时,在重启时,也可以恢复和还原任何未决事务。因此,根据本公开的各种实施例的基于散列的键值转换技术提供减少资源消耗并在大小缩放时进一步提高性能的方法。
应当理解,尽管术语“第一”、“第二”、“第三”等在本文中可以用来描述各种元素、组件、区域、层和/或部分,但是这些元素、组件、区域、层和/或部分不应受这些术语的限制。这些术语用于将一个元素、组件、区域、层或部分与另一元素、组件、区域、层或部分进行区分。因此,在不背离本发明的精神和范围的情况下,下面描述的第一元素、第一组件、第一区域、第一层或第一部分可以称为第二元素、第二组件、第二区域、第二层或第二部分。
应当理解,当元素或层称为“位于”另一元素或层上、“连接到”或“耦合到”另一元素或层时,该元素或层可以直接位于、连接到或耦合到另一元素或层,或者可以存在一个或多个中间的元素或层。此外,还应当理解,当元素或层称为在两个元素或层“之间”时,该元素或层可以是这两个元素或层之间的唯一的元素或层,或者也可以存在一个或多个中间的元素或层。
本文使用的术语用于描述特定实施例,并不旨在限制本发明。如本文所使用的,单数形式的“一(a)”和“一(an)”旨在同样地包括复数形式,除非上下文另有明确指示。还应当理解,当在本说明书中使用时,术语“包括(comprise)”、“包括(comprising)”、“包括(include)”和“包括(including)”指定存在所陈述的特征、整数、步骤、操作、元素和/或组件,但是不排除存在或添加一个或多个其他特征、整数、步骤、操作、元素、组件和/或其组合。如本文使用的,术语“和/或”包括一个或多个相关联的列出项的任何一个和所有组合。诸如“…中的至少一个”的描述在元素的列表之前时,修饰整个元素的列表,而不是修饰列表中的单独元素。
如本文使用的,术语“基本上”、“大约”和类似术语用作近似术语,而不是用作程度术语,并且旨在说明本领域普通技术人员将认识到的测量或计算的值中的固有偏差。此外,当描述本发明的实施例时,使用“可以”指的是“本发明的一个或多个实施例”。如本文使用的,术语“使用(use)”、“使用(using)”和“使用的(used)”可以分别被认为是术语“利用(utilize)”、“利用(utilizing)”和“利用(utilized)”的同义词。
根据本文描述的本发明实施例的电子设备或电气设备和/或任何其他相关的设备或组件可以利用任何合适的硬件、固件(例如,专用集成电路)、软件或者软件、固件和/或硬件的组合来实现。例如,这些设备的各种组件可以形成在一个集成电路(IC)芯片上或在单独的IC芯片上。此外,这些设备的各种组件可以在柔性印刷电路膜、带载封装(TCP,tapecarrier package)、印刷电路板(PCB)上实现,或者形成在一个衬底上。此外,这些设备的各种组件可以是运行在一个或多个计算设备中的一个或多个处理器上、执行计算机程序指令、并且与其他系统组件交互以执行本文描述的各种功能的进程或线程。计算机程序指令被存储在存储器中,其中,该存储器可以使用标准存储器设备(诸如例如随机存取存储器(RAM))实现在计算设备中。计算机程序指令也可以被存储在其他非暂时性计算机可读介质中,诸如例如CD-ROM、快闪驱动器等。此外,本领域技术人员应认识到,在不背离本发明的示例实施例的精神和范围的情况下,各种计算设备的功能可以被组合或集成到单个计算设备中,或者特定计算设备的功能可以被跨一个或多个其他计算设备分布。
应当理解,可以使用贯穿本公开描述的任何组件或组件的任何组合来执行流程图所描述的一个或多个操作。此外,所描述的操作仅是示例操作,并且可能涉及本文未明确描述的各种附加步骤。此外,操作的时间顺序可以变化。
除非另有定义,本文使用的所有术语(包括技术术语和科学术语)的含义与本发明所属领域的普通技术人员通常理解的含义相同。还应当理解,术语(诸如在常用词典中定义的那些术语)应被解释为具有与其在相关领域和/或本说明书的上下文中的含义一致的含义,并且除非本文明确定义,否则不应以理想化或过于正式的意义来解释。
本文描述的实施例仅是示例。本领域技术人员可以从具体公开的实施例中认识到各种替代实施例。这些替代实施例也旨在落入本公开的范围内。因此,实施例仅由随附的权利要求及其等同物限定。
Claims (22)
1.一种方法,包括:
基于用于要存储在存储器设备中的第一对象的第一键的散列,计算第一索引;
确定所述存储器设备上与所述第一索引相对应的第一分段的可用性;
响应于确定与所述第一索引相对应的所述第一分段不可用于存储,基于用于所述第一对象的第一键的散列,计算第二索引;
确定所述存储器设备上与所述第二索引相对应的第二分段的可用性;以及
将所述第二分段的位置的指示符添加到所述第一分段的第一元数据中的冲突表。
2.根据权利要求1所述的方法,还包括:响应于确定所述第二分段可用,将所述第一对象写入所述第二分段。
3.根据权利要求2所述的方法,其中,所述计算第二索引包括:从所述散列的每个字节中提取比特,以形成所述第二索引。
4.根据权利要求2所述的方法,其中,所述确定所述第一分段的可用性包括:从所述第一元数据读取状态标识符,其中,所述状态标识符指示与所述第一分段不可用于存储相对应的状态。
5.根据权利要求4所述的方法,还包括:响应于所述冲突表为空,将所述第一键的所述散列和所述第二分段的位置的指示符之间的关联写入所述冲突表。
6.根据权利要求1所述的方法,其中,所述计算所述第一索引包括:使用安全散列算法256来进行计算。
7.根据权利要求4所述的方法,还包括:
接收指示所述第一键的获取请求;
基于所述第一键的所述散列,计算所述第一索引;
读取与所述第一索引相对应的所述第一分段的所述第一元数据;
响应于读取所述第一元数据,确定所述第一键的所述散列与存储在所述第一元数据中的已存储散列不一致;
读取所述第一元数据中的所述冲突表,以确定所述第一对象被存储在所述第二分段中;以及
响应于读取所述冲突表,从所述第二分段中检索所述第一对象。
8.根据权利要求4所述的方法,还包括:
接收标识所述第一键的删除请求;
基于所述第一键的所述散列,计算所述第一索引;
读取与所述第一索引相对应的所述第一分段的所述第一元数据;
响应于读取所述第一元数据,确定所述第一键的所述散列与存储在所述第一元数据中的已存储散列不一致;
读取所述第一元数据中的所述冲突表,以确定所述第一对象被存储在所述第二分段中;以及
响应于读取所述冲突表,从所述第二分段中删除所述第一对象。
9.根据权利要求4所述的方法,还包括:
接收标识所述第一键的删除请求;
基于所述第一键的所述散列,计算所述第一索引;
读取与所述第一索引相对应的所述第一分段的所述第一元数据;
响应于读取所述第一元数据,确定所述第一键的所述散列与存储在所述第一元数据中的已存储散列一致;
确定所述第一元数据中的所述冲突表包括所述第二分段的位置的指示符;
将所述冲突表的值大小设置为零;以及
从所述第二分段中删除所述第一对象。
10.根据权利要求4所述的方法,还包括:
接收标识所述第一键的删除请求;
基于所述第一键的所述散列,计算第一索引;
读取与所述第一索引相对应的所述第一分段的所述第一元数据;
响应于读取所述第一元数据,确定所述第一键的所述散列与存储在所述第一元数据中的已存储散列一致;
响应于确定所述第一键的所述散列与存储在所述第一元数据中的已存储散列一致,确定所述第一元数据中的所述冲突表为空;以及
响应于读取所述冲突表,从所述第二分段中删除所述第一对象。
11.一种配置为存储对象的对象存储系统,所述对象存储系统包括划分为分段的存储器设备,所述存储器设备被配置为:
基于用于要存储在存储器设备中的第一对象的第一键的散列,计算第一索引;
确定所述存储器设备上与所述第一索引相对应的第一分段的可用性;
响应于确定与所述第一索引相对应的所述第一分段不可用于存储,基于用于所述第一对象的第一键的散列,计算第二索引;
确定所述存储器设备上与所述第二索引相对应的第二分段的可用性;以及
将所述第二分段的位置的指示符添加到所述第一分段的第一元数据中的冲突表。
12.根据权利要求11所述的系统,其中,所述存储器设备还被配置为:响应于确定所述第二分段可用,将所述第一对象写入所述第二分段。
13.根据权利要求12所述的系统,其中,计算所述第二索引包括:从所述散列的每个字节中提取比特,以形成所述第二索引。
14.根据权利要求12所述的系统,其中,所述确定所述第一分段的可用性包括:从所述第一元数据读取状态标识符,其中,所述状态标识符指示与所述第一分段不可用于存储相对应的状态。
15.根据权利要求14所述的系统,其中,所述存储器设备还被配置为:响应于所述冲突表为空,将所述第一键的所述散列和所述第二分段的位置的指示符之间的关联写入所述冲突表。
16.根据权利要求11所述的系统,其中,计算所述第一索引包括:使用安全散列算法256来进行计算。
17.根据权利要求14所述的系统,其中,所述存储器设备还被配置为:
接收指示所述第一键的获取请求;
基于所述第一键的所述散列,计算所述第一索引;
读取与所述第一索引相对应的所述第一分段的所述第一元数据;
响应于读取所述第一元数据,确定所述第一键的所述散列与存储在所述第一元数据中的已存储散列不一致;
读取所述第一元数据中的所述冲突表,以确定所述第一对象被存储在所述第二分段中;以及
响应于读取所述冲突表,从所述第二分段中检索所述第一对象。
18.根据权利要求14所述的系统,其中,所述存储器设备还被配置为:
接收标识所述第一键的删除请求;
基于所述第一键的所述散列,计算第一索引;
读取与所述第一索引相对应的所述第一分段的所述第一元数据;
响应于读取所述第一元数据,确定所述第一键的所述散列与存储在所述第一元数据中的已存储散列不一致;
读取所述第一元数据中的所述冲突表,以确定所述第一对象被存储在所述第二分段中;以及
响应于读取所述冲突表,从所述第二分段中删除所述第一对象。
19.根据权利要求14所述的系统,其中,所述存储器设备还被配置为:
接收标识所述第一键的删除请求;
基于所述第一键的所述散列,计算第一索引;
读取与所述第一索引相对应的所述第一分段的所述第一元数据;
响应于读取所述第一元数据,确定所述第一键的所述散列与存储在所述第一元数据中的已存储散列一致;
确定所述第一元数据中的所述冲突表包括所述第二分段的位置的指示符;
将所述冲突表的值大小设置为零;以及
从所述第二分段中删除所述第一对象。
20.根据权利要求14所述的系统,其中,所述存储器设备还被配置为:
接收标识所述第一键的删除请求;
基于所述第一键的所述散列,计算第一索引;
读取与所述第一索引相对应的所述第一分段的所述第一元数据;
响应于读取所述第一元数据,确定所述第一键的所述散列与存储在所述第一元数据中的已存储散列一致;
响应于确定所述第一键的所述散列与存储在所述第一元数据中的已存储散列一致,确定所述第一元数据中的所述冲突表为空;以及
响应于读取所述冲突表,从所述第二分段中删除所述第一对象。
21.一种方法,包括:
接收指示第一键的获取请求;
基于用于要从存储器设备中检索的对象的第一键的散列,计算第一索引;
读取与所述第一索引相对应的第一分段的第一元数据;
响应于读取元数据,确定所述第一键的所述散列与存储在所述第一元数据中的已存储散列不一致;
读取所述第一元数据中的冲突表,以确定所述对象被存储在第二分段中;以及
响应于读取所述冲突表,从所述第二分段中检索所述对象。
22.根据权利要求21所述的方法,其中,所述冲突表包括基于所述第一键的所述散列的第二索引和存储在所述第一分段中的所述对象的偏移,其中所述偏移为所述第一键的所述散列和所述第二分段的位置的指示符之间的关联。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202163139655P | 2021-01-20 | 2021-01-20 | |
US63/139,655 | 2021-01-20 | ||
US17/321,326 | 2021-05-14 | ||
US17/321,326 US12010214B2 (en) | 2021-01-20 | 2021-05-14 | Hash based key value to block translation methods and systems |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114817142A true CN114817142A (zh) | 2022-07-29 |
Family
ID=78414318
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210030606.4A Pending CN114817142A (zh) | 2021-01-20 | 2022-01-12 | 基于散列的键值到块转换方法和系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US12010214B2 (zh) |
EP (1) | EP4033371A1 (zh) |
KR (1) | KR20220105612A (zh) |
CN (1) | CN114817142A (zh) |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8397051B2 (en) * | 2009-02-23 | 2013-03-12 | Autonomy, Inc. | Hybrid hash tables |
US9256549B2 (en) | 2014-01-17 | 2016-02-09 | Netapp, Inc. | Set-associative hash table organization for efficient storage and retrieval of data in a storage system |
US20180089074A1 (en) | 2016-09-28 | 2018-03-29 | Intel Corporation | Techniques to Manage Key-Value Storage at a Memory or Storage Device |
US10860249B2 (en) * | 2017-12-25 | 2020-12-08 | Pliops Ltd. | Solid state disk (SSD) controller and database |
US11392570B2 (en) | 2018-03-09 | 2022-07-19 | Microsoft Technology Licensing, Llc | Key-value store system |
US10831734B2 (en) | 2018-05-07 | 2020-11-10 | Intel Corporation | Update-insert for key-value storage interface |
US11258796B2 (en) | 2018-07-05 | 2022-02-22 | Fungible, Inc. | Data processing unit with key value store |
US11232075B2 (en) | 2018-10-25 | 2022-01-25 | EMC IP Holding Company LLC | Selection of hash key sizes for data deduplication |
US10929203B2 (en) | 2019-01-16 | 2021-02-23 | EMC IP Holding Company LLC | Compare and swap functionality for key-value and object stores |
US20200136971A1 (en) * | 2019-06-07 | 2020-04-30 | Intel Corporation | Hash-table lookup with controlled latency |
-
2021
- 2021-05-14 US US17/321,326 patent/US12010214B2/en active Active
- 2021-10-28 EP EP21205208.8A patent/EP4033371A1/en active Pending
-
2022
- 2022-01-12 CN CN202210030606.4A patent/CN114817142A/zh active Pending
- 2022-01-20 KR KR1020220008242A patent/KR20220105612A/ko not_active Application Discontinuation
Also Published As
Publication number | Publication date |
---|---|
US20220231836A1 (en) | 2022-07-21 |
KR20220105612A (ko) | 2022-07-27 |
US12010214B2 (en) | 2024-06-11 |
EP4033371A1 (en) | 2022-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102597640B1 (ko) | 중복제거 어플리케이션을 즉시 처리하는 효율적인 메모리를 위한 최적화된 합스카치 복수의 해시 테이블들 | |
CN105843551B (zh) | 高性能和大容量储存重复删除中的数据完整性和损耗电阻 | |
US9767140B2 (en) | Deduplicating storage with enhanced frequent-block detection | |
TW201903612A (zh) | 記憶體模組及操作記憶體模組的方法 | |
US20100205363A1 (en) | Memory device and wear leveling method thereof | |
WO2017113213A1 (zh) | 访问请求处理方法、装置及计算机系统 | |
JP2017188096A (ja) | 重複除去メモリモジュール及びそのメモリ重複除去方法 | |
US11030092B2 (en) | Access request processing method and apparatus, and computer system | |
CN106886370B (zh) | 一种基于ssd去重技术的数据安全删除方法及系统 | |
CN109976669B (zh) | 一种边缘存储方法、装置和存储介质 | |
CN105917303B (zh) | 一种控制器、识别数据块稳定性的方法和存储系统 | |
US20210318987A1 (en) | Metadata table resizing mechanism for increasing system performance | |
US10528284B2 (en) | Method and apparatus for enabling larger memory capacity than physical memory size | |
US11836092B2 (en) | Non-volatile storage controller with partial logical-to-physical (L2P) address translation table | |
US11163693B2 (en) | Hash-based one-level mapping for storage clusters | |
CN114817142A (zh) | 基于散列的键值到块转换方法和系统 | |
US20200272424A1 (en) | Methods and apparatuses for cacheline conscious extendible hashing | |
US11409665B1 (en) | Partial logical-to-physical (L2P) address translation table for multiple namespaces | |
Weng et al. | HF-Dedupe: Hierarchical Fingerprint Scheme for High Efficiency Data Deduplication on Flash-based Storage Systems | |
CN116185949A (zh) | 缓存存储方法以及相关设备 | |
KR20240083513A (ko) | 스토리지 장치 및 이의 동작 방법 | |
CN117389798A (zh) | 固态硬盘的数据恢复方法、装置及电子设备 | |
CN117971728A (zh) | 缓存器及缓存控制方法、集成电路系统、电子组件及设备 | |
CN117813591A (zh) | 使用缓存驱逐对强哈希和弱哈希进行去重 | |
CN116821075A (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 |