CN111133424B - 开放寻址的探测屏障 - Google Patents
开放寻址的探测屏障 Download PDFInfo
- Publication number
- CN111133424B CN111133424B CN201880062835.6A CN201880062835A CN111133424B CN 111133424 B CN111133424 B CN 111133424B CN 201880062835 A CN201880062835 A CN 201880062835A CN 111133424 B CN111133424 B CN 111133424B
- Authority
- CN
- China
- Prior art keywords
- memory
- item
- slot
- response
- starting
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
- G06F12/1018—Address translation using page tables, e.g. page table structures involving hashing techniques, e.g. inverted page tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
-
- 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/28—Databases characterised by their database models, e.g. relational or object models
-
- 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/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/62—Details of cache specific to multiprocessor cache arrangements
- G06F2212/621—Coherency control relating to peripheral accessing, e.g. from DMA or I/O device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- For Increasing The Reliability Of Semiconductor Memories (AREA)
Abstract
开放地址探测屏障与存储器容器相关联地被利用。起始存储器槽针对要在存储器容器中被找到的项目而被计算。响应于该项目未能占用起始存储器槽,紧跟在起始存储器槽之后的第一预定数量的存储器槽被探测。响应于该项目占用那些存储器槽中的一个存储器槽,该项目被返回给应用。响应于该项目未能占用那些存储器槽中的一个存储器槽,关于屏障位是否已经与第一预定数量的存储器槽中的起始存储器槽相关联地被设置进行确定。如果是,则存储器容器的至少一部分针对该项目而被探测,并且如果被找到,则该项目被返回给应用。如果屏障位未被设置,则通知被返回给应用。
Description
背景技术
本申请总体上涉及改进的数据处理装置和方法,并且更具体地涉及用于开放寻址探测屏障(probing)的机制。
键值存储库或键值数据库是被设计用于存储、取回和管理关联数组的数据存储范例,该数据结构更通常地被称为字典或哈希表。字典、哈希表等包括对象、记录等的集合,这些对象、记录等转而在它们内具有许多不同的字段,每个字段包含数据。这些记录使用唯一地标识记录并且被用于快速地找到数据结构内的数据的、基于哈希的键而被存储和取回。
键值存储库以与更好的已知关系数据库(RDB)非常不同的方式工作。RDB将数据库中的数据结构预定义为一系列表格,这些表格包含具有明确定义的数据类型的字段。向数据库程序展示数据类型允许它应用多种优化。相反,键值存储库将数据作为单个不透明集合来对待,该集合可以针对每个记录具有不同字段。这提供了相当大的灵活性,并且更紧密地遵循现代概念,如面向对象的编程。因为可选值在大多数RDB中不是由占位符表示,所以键值存储库通常使用少得多的存储器来存储相同的数据库,这可能在某些工作负荷中导致大的性能增益。
发明内容
提供本发明内容以便以简化形式介绍将在此在具体实施方式中被进一步描述的一些概念。本发明内容并不旨在标识所要求保护的主题内容的关键因素或必要特征,也并不旨在被用于限制所要求保护的主题内容的范围。
在一个说明性实施例中,提供了一种在数据处理***中用于与存储器容器相关联地利用开放地址探测屏障的方法。说明性实施例响应于从应用接收到在存储器容器中查找项目的请求,针对该项目计算起始存储器槽。说明性实施例响应于项目未能占用起始存储器槽,针对该项目探测紧跟在起始存储器槽之后的第一预定数量的存储器槽。说明性实施例响应于该项目占用紧跟在起始存储器槽之后的第一预定数量的存储器槽中的一个存储器槽,将该项目返回给应用。说明性实施例响应于该项目未能占用紧跟在起始存储器槽之后的第一预定数量的存储器槽中的一个存储器槽,确定屏障位是否已经与第一预定数量的存储器槽中的最后存储器槽相关联地被设置。说明性实施例响应于屏障位被设置而针对该项目探测存储器容器的至少一部分,并且响应于该项目在存储器容器的该一部分中被找到而将该项目返回给应用。说明性实施例响应于屏障位未能被设置,将该项目不存在于存储器容器中的通知返回给应用。
在其他说明性实施例中,提供了一种计算机程序产品,其包括具有计算机可读程序的计算机可用或可读介质。该计算机可读程序当在计算设备上被执行时,使得该计算设备执行上面关于方法说明性实施例而被概述的操作中的各种操作和操作的组合。
在又一说明性实施例中,提供了一种***/装置。该***/装置可以包括一个或多个处理器和被耦合到该一个或多个处理器的存储器。该存储器可以包括指令,这些指令当由该一个或多个处理器执行时,使得该一个或多个处理器执行上面关于方法说明性实施例而被概述的操作中的各种操作和操作的组合。
根据一个方面,提供了一种在数据处理***中用于与存储器容器相关联地利用开放地址探测屏障的方法,该方法包括:响应于从应用接收到在存储器容器中查找项目的请求,针对该项目计算起始存储器槽;响应于该项目未能占用该起始存储器槽,针对该项目探测紧跟在起始存储器槽之后的第一预定数量的存储器槽;响应于该项目占用紧跟在起始存储器槽之后的第一预定数量的存储器槽中的一个存储器槽,将该项目返回给应用;响应于该项目未能占用紧跟在起始存储器槽之后的第一预定数量的存储器槽中的一个存储器槽,确定屏障位是否已经与第一预定数量的存储器槽中的最后存储器槽相关联地被设置;响应于屏障位被设置,针对该项目探测存储器容器的至少一部分,以及响应于该项目在存储器容器的该一部分中被找到,将该项目返回给应用;以及响应于屏障位未能被设置,将该项目不存在于存储器容器中的通知返回给应用。
根据另一方面,提供了一种计算机程序产品,包括其中存储有计算机可读程序的计算机可读存储介质,其中该计算机可读程序当在计算设备上被执行时,使得该计算设备:响应于从应用接收到在存储器容器中查找项目的请求,针对该项目计算起始存储器槽;响应于该项目未能占用起始存储器槽,针对该项目探测紧跟在起始存储器槽之后的第一预定数量的存储器槽;响应于该项目占用紧跟在起始存储器槽之后的第一预定数量的存储器槽中的一个存储器槽,将该项目返回给应用;响应于该项目未能占用紧跟在起始存储器槽之后的第一预定数量的存储器槽中的一个存储器槽,确定屏障位是否已经与第一预定数量的存储器槽中的最后存储器槽相关联地被设置;响应于屏障位被设置,针对该项目探测存储器容器的至少一部分,并且响应于该项目在存储器容器的该一部分中被找到,将该项目返回给应用;以及响应于屏障位未能被设置,将该项目不存在于存储器容器中的通知返回给应用。
根据另一方面,提供了一种装置,包括:处理器;以及被耦合到处理器的存储器,其中存储器包括指令,这些指令当由处理器执行时,使得处理器:响应于从应用接收到在存储器容器中查找项目的请求,针对项目计算起始存储器槽;响应于该项目未能占用起始存储器槽,针对该项目探测紧跟在起始存储器槽之后的第一预定数量的存储器槽;响应于该项目占用紧跟在起始存储器槽之后的第一预定数量的存储器槽中的一个存储器槽,将该项目返回给应用;响应于该项目未能占用紧跟在起始存储器槽之后的第一预定数量的存储器槽中的一个存储器槽,确定屏障位是否已经与第一预定数量的存储器槽中的最后存储器槽相关联地被设置;响应于屏障位被设置,针对该项目探测存储器容器的至少一部分,并且响应于该项目在存储器容器的该一部分中被找到,将该项目返回给应用;以及响应于屏障位未能被设置,将该项目不存在于存储器容器中的通知返回给应用。
本发明的这些和其他特征和优点将在本发明的示例实施例的具体实施方式中被描述,或者将鉴于本发明的示例实施例的具体实施方式而对于本领域普通技术人员而言变得显而易见。
附图说明
本发明的优选实施例现在将仅通过示例的方式并参考以下附图而被描述:
图1是其中可以实现说明性实施例的各方面的计算设备的示例框图;
图2描绘了根据说明性实施例的实现开放寻址探测屏障模式的机制的功能框图;
图3描绘了根据说明性实施例的存储器容器中的项目的物理存储的逻辑表示;
图4描绘了根据说明性实施例的针对没有扫描屏障的探测和具有扫描屏障的探测的搜索时间(以纳秒)比对利用百分比的图表;
图5描绘了根据说明性实施例的由开放寻址探测屏障机制执行的***操作的示例性流程图;
图6描绘了根据说明性实施例的由开放寻址探测屏障机制执行的查找操作的示例性流程图;以及
图7描绘了根据说明性实施例的由开放寻址探测屏障机制执行的删除操作的示例性流程图。
具体实施方式
说明性实施例提供了用于开放寻址探测屏障的机制。如上所述,键值存储库或键值数据库是被设计用于存储、取回和管理关联数组的数据存储范例,该数据结构更通常地被称为字典或哈希表。字典、哈希表等包括项目、对象、记录等的集合,项目、对象、记录等转而在它们内具有许多不同的字段,每个字段包含数据。项目使用唯一地标识记录并且被用于在数据结构内快速地查找项目的基于哈希的键而被存储和取回。
然而,在基于哈希的键值存储库中,需要解决冲突的机制。冲突当哈希算法将多个项目映射到键值存储库中的相同位置时发生发生。一种当前类型的冲突解决是链接(chaining)。链接允许数据结构中的具***置、桶、槽等包含多个项目。虽然链接是非常常见的解决方案,但是链接具有缺点,尤其是对于小项目的情况。由于数据结构中的槽的深度可以变化,因此动态存储器分配通常被使用。然而,存储器分配伴随着性能损失,并且并不总是可能的,诸如在实时***中。另外,链接伴随着存储器开销。例如,指向下一项目的单个指针是8字节开销,如果项目大小为小,则开销可能是可观的。
另一当前类型的冲突解决是开放寻址。如果在***时槽已经被取得,则新的或现有的项目将被放置在备选槽中。需要一组规则来定义使用哪个备选槽以及针对项目的搜索如何进行。开放寻址不具有与链接相同的缺点,并且还具有良好的高速缓存行化(cachelining)。然而,开放寻址存在缺点,诸如:
·注意,所有槽可以被利用。即,为了高效地运行,当数据结构达到70%-80%利用率时需要调整大小;以及
·取决于实现,***或搜索可能需要许多步骤。
对具有开放地址的哈希表的使用是具有大量现有工作的成熟领域。这里列出的是开放寻址哈希算法的一些最相关的示例:
·线性探测-如果该槽被采用,则移动到下一槽(间隔可以大于1),直到空槽被找到。线性探测实现起来非常简单,并且具有良好的高速缓存命中率,但是当利用率高时,***和查找都可能是昂贵的。
·cuckoo哈希使用两个哈希函数来将每个条目映射到两个可能的槽。如果两个槽都被采用,则现有条目被移动到它的备选槽。这一算法对于搜索非常高效,但是当利用率高时,***是昂贵的。cuckoo哈希的另一缺点是在每一***上迭代器被无效。
在开放寻址中使用了附加的哈希算法,一些算法混合了来自线性探测和cuckoo哈希的概念。
说明性实施例提供了开放寻址探测屏障,其与基于哈希的键值存储机制中的不同类型的哈希算法相关联地有益于性能和容量利用两者。虽然提出的开放寻址探测屏障可以利用任何类型的基于哈希的键值存储机制而被实现,但是以下将与线性探测算法相关联的开放寻址探测屏障描述为一个示例,并且并不旨在是穷举的或被限于本发明所公开的形式。在说明性实施例中,探测屏障N是用户可配置的常数,其限制了针对特定项目的探测过程。N基于容器的容量和性能而被选择。例如,如果探测过程,即查找操作在槽Si处开始。然后,如果例如探测屏障N是3,则探测过程将扫描槽Si和三个随后的槽,直到期望的项目被标识或未被找到。一旦第四槽被到达并且期望的项目未被找到,则探测过程结束。
然而,在一个说明性实施例中,如果扫描屏障位被设置,则探测屏障可以被突破。扫描屏障是被添加到开放寻址哈希表中的条目的单个位,该开放寻址哈希表充当探测免除屏障。即,如果在项目的原始***中,探测屏障N被突破,即项目被***到从经哈希的起始槽经过探测屏障N的槽中,则扫描屏障被设置为Si+(N-1)。因此,如果在针对项目的探测中,第四个槽被到达而没有找到期望的项目,并且扫描屏障位未被设置,则探测过程结束,即先前***的项目从不越过探测屏障,并且因此探测停止。然而,如果在针对项目探测时,第四个槽被到达而没有找到期望的项目并且扫描屏障位被设置,则探测持续到空槽被到达或者持续到所有槽已经被探测。
在另一说明性实施例中,扩展探测可以使用扩展探测屏障而被取消,扩展探测屏障例如是N的倍数,例如2N、3N、4N等,大于N的任何数,例如探测屏障等于N并且扩展探测屏障等于N+M,或者具有大于探测屏障N的扩展探测屏障的任何其他方法,即当项目未被找到并且扫描屏障位被设置时的探测。以下示例利用2N的扩展探测屏障。在前一实施例中,如果Si+N被到达并且扫描屏障位被设置,则探测持续直到空槽被到达或者直到所有槽已经被探测。在这一实施例中,如果Si+N被到达并且探测屏障被设置,则探测仅持续直到空槽被到达或者当Si+2N被到达时,以便进一步提高性能和容量。在两个实施例中,如果空槽被到达,如果所有槽已经被探测(第一实施例),或者如果Si+2N个槽已经被探测(第二实施例),则未命中被返回。如果期望的项目被找到,则该项目被返回。虽然说明性实施例仅说明了两个探测屏障,但是说明性实施例并不仅限于这些实施例。也就是说,可以存在多于两个探测屏障,并且探测屏障之间的间隔并不要求是线性的。
在开始讨论示例性实施例的各个方面之前,首先应当领会到,贯穿本说明书,术语“机制”将被用于指代执行各种操作、功能等的本发明的元素。如在此被使用的术语“机制”可以是以装置、过程或计算机程序产品的形式对说明性实施例的功能或方面的实现。在过程的情况中,该过程由一个或多个设备、装置、计算机、数据处理***等实现。在计算机程序产品的情况中,由被体现在计算机程序产品中或计算机程序产品上的计算机代码或指令表示的逻辑由一个或多个硬件设备执行,以便实现与具体“机制”相关联的功能或执行与具体“机制”相关联的操作。因此,本文所描述的机制可以被实现为专用硬件、在通用硬件上执行的软件、被存储在介质上一使得指令由专用或通用硬件容易地可执行的软件指令、用于执行功能的过程或方法或以上中的任何的组合。
本说明书和权利要求书可以关于说明性实施例的特定特征和元素使用术语“一”、“至少一个”和“一个或多个”。应当领会到,这些术语和短语旨在表明在特定的说明性实施例中存在至少一个特定特征或元素,但是也可以存在多于一个。也就是说,这些术语/短语并不旨在将说明书或权利要求限制为单个特征/元素存在或要求多个这样的特征/元素存在。相反,这些术语/短语仅要求至少单个特征/元素存在,其中多个这样的特征/元素的可能性落入说明书和权利要求的范围内。
此外,应当领会到,如果在此关于描述本发明的实施例和特征而被使用,则对术语“引擎”的使用并不旨在限制用于实现和/或执行可归因于引擎和/或由引擎执行的动作、步骤、过程等的任何特定实现。引擎可以是但不限于执行指定功能的软件、硬件和/或固件或它们的任何组合,包括但不限于对通用和/或专用处理器与被加载或存储在机器可读存储器中并由处理器执行的适当软件的任何使用。此外,除非另有说明,否则与特定引擎相关联的任何名称是为了便于参考的目的,而并不是旨在被限制于具体的实现。另外,被归因于引擎的任何功能性可由多个引擎同等地执行,被并入相同或不同类型的另一引擎的功能性中和/或与其组合,或被跨各种配置的一个或多个引擎分布。
此外,应当领会到,以下描述使用针对说明性实施例的各种元素的多个各种示例来进一步说明说明性实施例的示例实现,并且帮助对说明性实施例的机制的理解。这些示例旨在是非限制性的,并且并不是用于实现说明性实施例的机制的各种可能性的穷举。鉴于本说明书,对于本领域普通技术人员而言明显的是,在不脱离本发明的精神和范围的情况下,除了本文提供的示例之外,或者作为其替代,针对这些各种元件的许多其他备选实现可以被利用。
因此,说明性实施例可以在许多不同类型的数据处理环境中被利用。为了提供针对说明性实施例的具体元件和功能的描述的上下文,图1以下被提供为其中可以实现说明性实施例的各方面的示例环境。应当领会到,图1仅是示例,并且并不是要断言或暗示关于其中可以实现本发明的各方面或实施例的环境的任何限制。在不脱离本发明的精神和范围的情况下,对所描述的环境的许多修改可以被做出。
如图1中所示,计算设备中的一个或多个计算设备可以被具体地配置为实现开放寻址探测屏障。计算设备的配置可以包括提供专用硬件、固件等,以促进这里关于说明性实施例而被描述的操作的执行和输出的生成。计算设备的配置还可以或备选地包括提供被存储在一个或多个存储设备中并且被加载到计算设备的存储器中以用于使得计算设备的一个或多个硬件处理器执行软件应用的的软件应用,这些软件应用配置处理器以执行操作并且生成本文关于说明性实施例而被描述的输出。此外,可以使用专用硬件、固件、在硬件上杯执行的软件应用等的任何组合,而不脱离说明性实施例的精神和范围。
应当领会到,一旦以这些方式之一配置了计算设备,计算设备就变成了被专门配置成实现说明性实施例的机制的专用计算设备,而不是通用计算设备。此外,如下文所述,说明性实施例的机制的实现提高了计算设备的功能,并且提供了促进开放寻址探测屏障的有用和具体的结果。
说明性实施例的机制利用特别配置的计算设备或数据处理***来执行针对开放寻址探测屏障的操作。这些计算设备或数据处理***可以包括各种硬件元件,这些硬件元件通过硬件配置、软件配置或硬件和软件配置的组合被具体配置以实现本文描述的***/子***中的一个或多个。图1是其中可以实现说明性实施例的各方面的仅一个示例数据处理***的框图。数据处理***100是计算机的示例,其中可以定位和/或执行实现本发明的说明性实施例的过程和方面的计算机可用代码或指令,以便实现如这里描述的说明性实施例的操作、输出和外部效果。
在所描绘的示例中,数据处理***100采用集线器架构,包括北桥和存储器控制器集线器(NB/MCH)102以及南桥和输入/输出(I/O)控制器集线器(SB/ICH)104。处理单元106、主存储器108和图形处理器110被连接到NB/MCH 102。图形处理器110可以通过加速图形端口(AGP)被连接到NB/MCH 102。
在所描绘的示例中,局域网(LAN)适配器112连接到SB/ICH104。音频适配器116、键盘和鼠标适配器120、调制解调器122、只读存储器(ROM)124、硬盘驱动器(HDD)126、CD-ROM驱动器130、通用串行总线(USB)端口和其他通信端口132以及PCI/PCIe设备134通过总线138和总线140连接到SB/ICH 104。PCI/PCIe设备可以包括例如以太网适配器、附加卡(add-in card)和用于笔记本计算机的PC卡。PCI使用卡总线控制器,而PCIe不使用。ROM 124可以是例如闪速基本输入/输出***(BIOS)。
HDD 126和CD-ROM驱动器130通过总线140连接到SB/ICH104。HDD 126和CD-ROM驱动器130可以使用例如集成驱动电子设备(IDE)或串行高级技术附件(SATA)接口。超级I/O(SIO)设备136可以被连接到SB/ICH 104。
操作***在处理单元106上运行。操作***协调并且提供对图1中的数据处理***100内的各种组件的控制。作为客户端,操作***可以是商业上可获得的操作***,诸如面向对象的编程***,例如JavaTM编程***,可以与操作***一起运行并且提供从在数据处理***100上执行的JavaTM程序或应用到操作***的调用。
作为服务器,数据处理***100可以是例如运行高级交互执行操作***或/>操作***的IBM eServerTM System p计算机***、基于/>处理器的计算机***等。数据处理***100可以是在处理单元106中包括多个处理器的对称多处理器(SMP)***。备选地,单个处理器***可以被采用。
Linux是Linus Torvalds在美国、其他国家或二者的注册商标。Microsoft、Windows NT和Windows标志是Microsoft公司在美国、其他国家或二者的商标。Java和所有基于Java的商标和标志是Oracle和/或其分支机构的商标或注册商标。IBM、eServer、Power和AIX是国际商业机器公司在美国和/或其他国家的商标。
用于操作***、面向对象的编程***以及应用或程序的指令位于诸如HDD 126的存储设备上,并且可以被加载到主存储器108中以用于由处理单元106执行。针对本发明的说明性实施例的过程可以由处理单元106使用计算机可用程序代码执行,该计算机可用程序代码可以位于诸如例如主存储器108、ROM 124的存储器中,或者位于例如一个或多个***设备126和130中。
诸如图1中所示的总线138或总线140的总线***可以包括一个或多个总线。当然,总线***可以使用任何类型的通信结构或架构而被实现,这些通信结构或架构提供在被附接到该结构或架构的不同组件或设备之间的数据传输。诸如图1的调制解调器122或网络适配器112的通信单元可以包括被用于传输和接收数据的一个或多个设备。存储器可以是例如主存储器108、ROM 124或诸如在图1中的NB/MCH 102中被找到的高速缓存。
如上所述,在一些说明性实施例中,说明性实施例的机制可以被实现为专用硬件、固件等、被存储在诸如HDD 126的存储设备中并且被加载到诸如主存储器108的存储器中以用于由诸如处理单元106的一个或多个硬件处理器执行的应用软件等。这样,图1中所示的计算设备变得被具体配置为实现说明性实施例的机制,并且被具体配置为执行操作并且生成此后关于开放寻址探测屏障而被描述的输出。
本领域普通技术人员将领会到,图1中的硬件可以取决于实现而变化。除了图1中描述的硬件之外,或者代替该硬件,可以使用其他内部硬件或***设备,诸如闪存、等效的非易失性存储器或光盘驱动器等。同样,在不脱离本发明的精神和范围的情况下,除了前面提到的SMP***之外,说明性实施例的处理可以被应用于多处理器数据处理***。
此外,数据处理***100可以采取多种不同数据处理***中的任何数据处理***的形式,包括客户端计算设备、服务器计算设备、平板计算机、膝上型计算机、电话或其他通信设备、个人数字助理(PDA)等。在一些说明性示例中,数据处理***100可以是便携式计算设备,其被配置有闪存以提供用于存储例如操作***文件和/或用户生成的数据的非易失性存储器。本质上,数据处理***100可以是任何已知的或以后开发的数据处理***,而没有架构限制。
图2描绘了根据说明性实施例的实现开放寻址探测屏障模式的机制的功能框图。数据处理***200可以是诸如图1中的数据处理***100的数据处理***,其包括控制存储器204内的多个存储器容器206的存储器控制器202,存储器诸如是随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)等。每个存储器容器206包括多个存储器槽208,其中每个存储器槽208具有三种状态之一:
·已使用/已占用-项目当前占用存储器槽208,
·空-没有项目曾被放置在存储器槽208中,或者
·被删除-过去在存储器槽208中存在项目,但是该项目已经从存储器槽208被删除,并且存储器槽208现在可以被用于新的项目。
当存储器容器206被首次初始化时,存储器容器206中的所有存储器槽208都是空的。因此,针对每个存储器槽208,要考虑三个基本操作:***(写入)、查找(读取)和删除。与开放寻址探测屏障模式相关联的操作中的每个操作被描述如下。关于***操作,并且还参考图3,其是根据说明性实施例的存储器容器206中的项目的物理存储的逻辑表示,在***操作中,存储器控制器202执行哈希机制210,其计算起始存储器槽以***项目。例如,对于项目A,哈希机制210计算起始槽1,并且存储器控制器202探测存储器槽1以确定项目是否已经在存储器槽1中占用。如果没有项目已经占用存储器槽1,则存储器控制器202将项目A***存储器槽1中。继续该示例,对于项目B,哈希机制210计算起始槽6,并且存储器控制器202探测存储器槽6以确定项目是否已经在存储器槽6中占用。如果没有项目已经占用存储器槽6,则存储器控制器202将项目B***存储器槽6中。对于项目C,哈希机制210计算起始槽3,并且存储器控制器202探测存储器槽3以确定项目是否已经在存储器槽3中占用。如果没有项目已经占用存储器槽3,则存储器控制器202将项目C***存储器槽3中。对于项目D,哈希机制210计算起始槽5,并且存储器控制器202探测存储器槽5以确定项目是否已经在存储器槽5中占用。如果没有项目已经占用存储器槽5,则存储器控制器202将项目D***存储器槽5中。
迄今为止,所有的***操作都是常规的,因为没有项目已经占用哈希存储器槽。然而,下面说明对探测屏障N和扫描屏障位的使用。以下利用探测屏障N,其中N等于2。继续该示例,对于项目E,哈希机制210计算起始槽1,并且存储器控制器202探测存储器槽1以确定项目是否已经在存储器槽1中占用,在这一示例中,存储器槽1存储项目A。由于存储器槽1存储项目A,所以存储器控制器202保持探测直到第一空存储器槽被到达或直到Si+N个存储器槽被探测。因此,在这一示例中,存储器控制器202探测存储器槽2,并且由于存储器槽2为空,存储器控制器202将项目E***存储器槽2中。对于项目F,哈希机制210计算起始槽6,并且存储器控制器202探测存储器槽6以确定项目是否已经在存储器槽6中占用,在这一示例中,存储器槽6存储项目B。由于存储器槽6存储项目B,所以存储器控制器202保持探测直到第一空存储器槽被到达或直到Si+N个存储器槽被探测。因此,在这一示例中,存储器控制器202探测存储器槽7,并且由于存储器槽7为空,存储器控制器202将项目F***存储器槽7中。对于项目G,哈希机制210计算起始槽7,并且存储器控制器202探测存储器槽7以确定项目是否已经在存储器槽7中占用,在这一示例中,存储器槽7存储项目F。由于存储器槽7存储项目F,存储器控制器202保持探测直到第一空存储器槽被到达或直到Si+N个存储器槽被探测。因此,在这一示例中,存储器控制器202探测存储器槽8,并且由于存储器槽8为空,存储器控制器202将项目G***存储器槽8中。
以下示例说明了存储器控制器202启用说明性实施例的扫描屏障的情况,即,设置扫描屏障,因为在经哈希存储器槽之后的经哈希的存储器槽Si或Si+N个存储器槽中没有出现开放存储器槽。对于项目H,哈希机制210计算起始槽1,并且存储器控制器202探测存储器槽1以确定项目是否已经在存储器槽1中占用,在这一示例中,存储器槽1存储项目A。由于存储器槽1存储项目A,存储器控制器202保持探测直到第一空存储器槽被到达或直到Si+N个存储器槽被探测。然而,由于存储器槽2存储项目E并且存储器槽3存储项目C,Si+N(1+2)的探测屏障将导致探测在存储器槽3处停止。因此,为了继续***项目H,存储器控制器202启用存储器槽3处的扫描屏障,这允许探测继续通过N的探测屏障,其中N等于2。存储器控制器202然后探测存储器槽4,并且由于存储器槽4为空,存储器控制器202将项目H***存储器槽4中。
作为其中存储器控制器202启用扫描屏障的另一示例,对于项目I,哈希机制210计算起始槽5,并且存储器控制器202探测存储器槽5以确定项目是否已经在存储器槽5中占用,在这一示例中,起始槽5存储项目D。由于存储器槽5存储项目D,所以存储器控制器202保持探测,直到第一空存储器槽被到达或直到Si+N个存储器槽被探测。然而,由于存储器槽6存储项目B并且存储器槽7存储项目F,Si+N(1+2)的探测屏障将导致探测停止。为了继续***项目I,存储器控制器202启用存储器槽7处的扫描屏障,这允许探测继续通过N的探测屏障,其中N等于2。存储器控制器202然后探测存储项目G的存储器槽8。由于在这一示例中,存储器槽8是最后的存储器槽,所以存储器控制器202返回存储器容器206的开始,即存储器槽0。存储器控制器202然后探测存储器槽0,并且由于存储器槽0为空,存储器控制器202将项目I***存储器槽0中。
关于查找操作,如果要从存储器容器206读项目A,则存储器控制器202针对项目A执行哈希机制210,其计算起始存储器槽以查找项目A。例如,对于项目A,哈希机制210计算起始槽1。从起始槽1,存储器控制器202进行探测,直到下列情况中的第一个发生:
i.所请求的项目被找到,如果被找到,则存储器控制器202返回所找到的项目;
ii.空的存储器槽被到达,如果该存储器槽被标识,则存储器控制器202返回该项目不存在;
iii.第Si+N个存储器槽被到达,并且“屏障”位未被设置,如果被到达,则存储器控制器202返回该项目不存在;或者
iv.第Si+N存储器槽被到达,并且“屏障”位被设置,如果被到达,则存储控制器202继续探测,直到所有存储器槽已经被检查,或者响应于扩展探测屏障被利用,Si+2N被到达。如果在扩展探测期间空槽被到达,或者如果已经探测了所有槽(第一实施例)并且没有找到该项目,或者如果已经探测了Si+2N个槽(第二实施例)并且没有找到该项目,则存储器控制器202返回该项目不存在。如果期望的项目被找到,则存储器控制器202返回该项目。
因此,在本示例中,由于项目A存在于存储器槽1中,因而存储器控制器202将仅到达以上列表中的探测步骤的第一个并返回项目A。对于项目B、C和D,相同的过程将发生。
对于项目E,哈希机制210计算起始槽1。从起始槽1,存储器控制器202探测存储项目A的存储器槽1。因此,存储器控制器202移动到其他探测步骤,在这些探测步骤中没有空存储器槽被到达,并且Si+N个存储器槽被探测。在这一示例中,存储器控制器202探测存储器槽2,并且由于存储器槽2存储项目E,存储器控制器202返回项目E。对于项目F,哈希机制210计算起始槽6。从起始槽6,存储器控制器202探测存储项目B的存储器槽6。因此,存储器控制器202移动到其他探测步骤,在这些探测步骤中没有空存储器槽被到达,并且Si+N个存储器槽被探测。在这一示例中,存储器控制器202探测存储器槽7,并且由于存储器槽7存储项目F,存储器控制器202返回项目F。对于项目G,哈希机制210计算起始槽7。从起始槽7,存储器控制器202探测存储项目F的存储器槽7。因此,存储器控制器202移动到其他探测步骤,在这些探测步骤中没有空存储器槽被到达并且Si+N个存储器槽被探测。在这一示例中,存储器控制器202探测存储器槽8,并且由于存储器槽8存储项目G,存储器控制器202返回项目G,应当注意,如果在Si+N个存储器槽的探测期间空存储器槽被到达,则存储器控制器202将返回该项目不存在的响应。此外,如果第Si+N存储器槽被到达并且在Si+N存储器槽处没有设置探测屏障,则存储器控制器202将返回该项目不存在的响应。
对于项目H,哈希机制210计算起始槽1。从起始槽1,存储器控制器202探测存储项目A的存储器槽1。因此,存储器控制器202移动到其他探测步骤,在这些探测步骤中没有空存储器槽被到达并且Si+N存储器槽被探测。在这一示例中,存储器控制器202探测存储项目E的存储器槽2和存储项目C的存储器槽3。由于存储器槽3等同于针对项目H而被计算的起始槽的Si+N,所以存储器控制器202移动到最终探测步骤,在这一步骤中存储器控制器202确定屏障位是否被设置。在这一示例中,如果屏障位没有与存储器槽3相关联地被设置,则存储器控制器202将返回该项目不存在的响应。然而,由于在这一示例中,在存储器槽3处设置了屏障位,因此存储器控制器202继续在存储器槽4处进行探测。在这一示例中,存储器控制器202探测存储器槽4,并且由于存储器槽4存储项目H,因此存储器控制器202返回项目H。
类似地,对于项目I,哈希机制210计算起始槽5。从起始槽5,存储器控制器202探测存储项目D的存储器槽5。因此,存储器控制器202移动到其他探测步骤,在这些探测步骤中没有空存储器槽被到达并且Si+N个存储器槽被探测。在这一示例中,存储器控制器202探测存储项目B的存储器槽6和存储项目F的存储器槽7。由于存储器槽7等同于针对项目I而被计算的起始槽的Si+N,所以存储器控制器202移动到最终探测步骤,在这一步骤中存储器控制器202确定屏障位是否被设置。在这一示例中,在存储器槽7处设置屏障位,因此存储器控制器202继续在存储项目G的存储器槽8处进行探测,由于在这一示例中存储器槽8是最后的存储器槽,因此存储器控制器202返回存储器容器206的开始,即存储器槽0。存储器控制器202探测存储器槽0,并且由于存储器槽0存储项目I,存储器控制器202返回项目I。因此,在查找操作中,仅当在***期间被设置的屏障位被设置时,仅在第Si+N个探测屏障被到达之后探测才继续,这提高了性能和利用率。
在删除操作中,执行与查找操作类似的操作。即,在删除操作中,并且一旦哈希机制确定了起始槽,存储器控制器202就进行探测,直到下列情况中的第一个发生:
i.所请求的项目被找到,如果被找到,则存储器控制器202将该存储器槽标记为被删除;
ii.空存储器槽被到达,如果空存储器槽被标识,则存储器控制器202返回该项目不存在;
iii.第Si+N个存储器槽被到达,“屏障”位未被设置,如果该存储器槽被到达,则存储器控制器202返回该项目不存在;或者
iv.第Si+N个存储器槽被到达,并且“屏障”位被设置,如果该存储器槽被到达,则存储控制器202继续探测,直到所有存储器槽已经被检查,或者响应于扩展探测屏障被利用,Si+2N被到达。如果在扩展探测期间空槽被到达,或者如果已经探测了所有槽(第一实施例)并且没有找到该项目,或者如果已经探测了Si+2N个槽(第二实施例)并且没有找到该项目,则存储器控制器202返回该项目不存在。如果期望的项目被找到,则存储器控制器202将该存储器槽标记为被删除。
为了提供这些步骤的示例,如果要从存储器容器206删除项目A,则存储器控制器202针对项目A执行哈希机制210,其计算起始存储器槽以查找项目A。例如,对于项目A,哈希机制210计算起始槽1。存储器控制器202探测存储器槽1,并且由于项目A存在于存储器槽1中,存储器控制器202将仅到达以上列表中的探测步骤中的第一个探测步骤并删除项目A。对于项目B、C和D,将发生相同的过程。
对于项目E,哈希机制210计算起始槽1。从起始槽1,存储器控制器202探测存储项目A的存储器槽1。因此,存储器控制器202移动到其他探测步骤,在这些探测步骤中没有空存储器槽被到达,并且Si+N个存储器槽被探测。在这一示例中,存储器控制器202探测存储器槽2,并且由于存储器槽2存储项目E,存储器控制器202将删除项目E。对于项目F,哈希机制210计算起始槽6。从起始槽6,存储器控制器探测存储项目B的存储器槽6。因此,存储器控制器202移动到其他探测步骤,在这些探测步骤中没有空存储器槽被到达,并且Si+N个存储器槽被探测。在这一示例中,存储器控制器202探测存储器槽7,并且由于存储器槽7存储项目F,存储器控制器202将删除项目F。对于项目G,哈希机制210计算起始槽7。从起始槽7,存储器控制器202探测存储项目F的存储器槽7。因此,存储器控制器202移动到其他探测步骤,在这些探测步骤中没有空存储器槽被到达并且Si+N个存储器槽被探测。在这一示例中,存储器控制器202探测存储器槽8,并且由于存储器槽8存储项目G,存储器控制器202将删除项目G,应当注意,如果在探测Si+N个存储器槽期间空存储器槽被到达,则存储器控制器202将返回该项目不存在的响应。此外,如果第Si+N个存储器槽被到达并且在第Si+N个存储器槽处探测屏障没有被设置,则存储器控制器202将返回该项目不存在的响应。
对于项目H,哈希机制210计算起始槽1。从起始槽1,存储器控制器202探测存储项目A的存储器槽1。因此,存储器控制器202移动到其他探测步骤,在这些探测步骤中没有空存储器槽被到达并且Si+N个存储器槽被探测。在这一示例中,存储器控制器202探测存储项目E的存储器槽2和存储项目C的存储器槽3。由于存储器槽3等同于针对项目H而被计算的起始槽的Si+N,所以存储器控制器202移动到最终探测步骤,在这一探测步骤中存储器控制器202确定屏障位是否被设置。在这一示例中,如果屏障位没有与存储器槽3相关联地被设置,则存储器控制器202将返回该项目不存在的响应。然而,由于在这一示例中,在存储器槽3处设置了屏障位,因此存储器控制器202继续在存储器槽4处进行探测。在这一示例中,存储器控制器202探测存储器槽4,并且由于存储器槽4存储项目H,存储器控制器202将删除项目H。应当注意,当针对其已经设置了屏障位的项目被删除时,屏障位被重置。
类似地,对于项目I,哈希机制210计算起始槽5。从起始槽5,存储器控制器202探测存储项目D的存储器槽5。因此,存储器控制器202移动到其他探测步骤,在这些探测步骤中没有空存储器槽被到达并且Si+N个存储器槽被探测。在这一示例中,存储器控制器202探测存储项目B的存储器槽6和存储项目F的存储器槽7。由于存储器槽7等同于用于针对项目I而被计算的起始槽的Si+N,所以存储器控制器202移动到最终探测步骤,在这一步骤中存储器控制器202确定屏障位是否被设置。在这一示例中,屏障位在存储器槽7处被设置,因此存储器控制器202继续在存储项目G的存储器槽8处进行探测。由于在这一示例中存储器槽8是最后的存储器槽,因此存储器控制器202返回存储器容器206的开始,即存储器槽0。存储器控制器202探测存储器槽0,并且由于存储器槽0存储项目I,存储器控制器202将删除项目I。因此,在查找操作中,探测仅当屏障位在***期间设置的被设置时,仅在Si+N探测屏障被到达之后才继续,这提高了性能和利用率。应当注意到,当针对其屏障位已经被设置的项目被删除时,屏障位被重置。
注意,被删除的槽的数量和空槽的数量对探测的深度具有直接影响。为了高效地工作,占有率不能超过70%-80%。即使存在删除的槽,空槽的存在也是确定深度的关键因素。随着时间的推移,空槽的数量被减少,并且因此最终的重哈希是不可避免的。重哈希重装所有项目并且将删除的槽返回到空状态。
在如先前存储器实现中那样对(多个)探测屏障和屏障位的实现之前,删除的槽的数量和空槽的数量对探测的深度具有直接影响。因此,在先前的实现中,当存在多个非空的连续槽时,探测必须潜在地继续存储器容器的整个长度。然而,在说明性实施例中,探测仅针对Si+N个存储器槽而被继续,并且在那之后仅当屏障位被设置时。图4描绘了根据说明性实施例的针对没有扫描屏障的探测和具有扫描屏障的探测的搜索时间(纳秒)比对利用百分比的图表。如在图4中所示,结果在由虚线所示的先前实现中被示出,随着增加利用率百分比,平均搜索时间显著地增加。然而,对于说明性实施例,平均搜索时间的增加没有利用率增加那么多。
本发明可以是***、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的示例(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Java、Smalltalk、C++等,以及传统的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。
这里参照根据本发明实施例的方法、装置(***)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其他可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程数据处理装置或其他设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其他可编程数据处理装置、或其他设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
图5描绘了根据说明性实施例的由开放寻址探测屏障机制执行的***操作的示例性流程图。当操作开始时,该机制从应用接收将项目***、写入等到存储器容器中的存储器槽中的请求(步骤502)。该机制通过针对项目计算哈希值来计算起始存储器槽(Si)(步骤504)。利用起始存储器槽(Si),该机制确定起始存储器槽(Si)在存储器容器中是否为空(步骤506)。如果在步骤506该机制确定起始存储器槽(Si)为空,则该机制将该项目存储在起始存储器槽(Si)中(步骤508),操作在此之后终止。
如果在步骤506该机制确定起始存储器槽(Si)被占用,则该机制探测紧跟的N个槽以标识存储器容器中紧跟在起始存储器槽之后的N个存储器槽(Si+N)中的第一空存储器槽(步骤510)。在说明性实施例中,N是探测屏障,其是用户可配置的常数,并且限制针对特定项目的探测过程。如果在步骤510该机制标识存储器容器中紧跟在起始存储器槽之后的N个存储器槽(Si+N)中的第一空存储器槽,则该机制将该项目存储在第一空存储器槽中(步骤512),操作在此之后终止。
如果在步骤510该机制未能标识存储器容器中紧跟在起始存储器槽之后的N个存储器槽(Si+N)中的第一空存储器槽,则该机制继续探测存储器容器中紧跟在Si+N个存储器槽之后的剩余的存储器槽,以标识第一空存储器槽(步骤514)。如果在步骤514该机制在存储器容器中Si+N个存储器槽之后的剩余的存储器槽中标识了第一空存储器槽,则该机制将该项目存储在第一空存储器槽中(步骤516)。该机制还与第(Si+N)个存储器槽相关联地设置屏障位,从而使得在稍后的查找操作和删除操作中,探测可以继续通过探测屏障N(步骤518),操作在此之后终止。如果在步骤514该机制未能在存储器容器中的Si+N个存储器槽之后的剩余的存储器槽中标识第一空存储器槽,则该机制将指示该项目可能未被存储在存储器容器中的通知返回给应用(步骤520),操作在此之后终止。
图6描绘了根据说明性实施例的由开放寻址探测屏障机制执行的查找操作的示例性流程图。当操作开始时,该机制从应用接收在存储器容器中查找、读取或搜索项目的请求(步骤602)。该机制通过针对该项目计算哈希值来计算起始存储器槽(Si)(步骤604)。利用起始存储器槽(Si),该机制探测起始存储器槽(Si)以确定该项目是否在存储器槽中(步骤606)。如果在步骤606该机制确定该项目占用起始存储器槽(Si),则该机制将该项目从起始存储器槽(Si)返回给应用(步骤608),操作在此之后终止。
如果在步骤606该机制确定该项目未能占用起始存储器槽(Si),则该机制探测紧跟的N个槽,以标识该项目是否占用存储器容器中紧跟在起始存储器槽之后的N个存储器槽(Si+N)中的一个存储器槽(步骤610)。在说明性实施例中,N是探测屏障,其是用户可配置的常数,并且限制针对特定项目的探测过程。如果在步骤610该机制在存储器容器中紧跟在起始存储器槽之后的N个存储器槽(Si+N)中的一个存储器槽中标识了该项目,则该机制将该项目从存储器槽返回给应用(步骤612),操作在此之后终止。
如果在步骤610该机制未能在存储器容器中紧跟在起始存储器槽之后的N个存储器槽(Si+N)中的一个存储器槽中标识该项目,则该机制确定屏障位是否与第(Si+N)个存储器槽相关联地被设置(步骤614)。如果在步骤614该机制确定屏障位未能与第(Si+N)个存储器槽相关联地被设置,则该机制将指示该项目不存在的通知返回给应用(步骤616),操作在此之后终止。如果在步骤614该机制确定屏障位与第(Si+N)个存储器槽相关联地被设置,则该机制确定是否存在与存储器容器相关联的第二探测屏障(2N)(步骤618)。如果在步骤618该机制确定不存在第二探测屏障(2N),则该机制针对该项目探测所有剩余的存储器槽(步骤620)。如果在步骤620该机制找到了该项目,则该机制将该项目从存储器槽返回给应用(步骤622),操作在此之后终止。如果在步骤620该机制未能找到该项目,则该机制将指示该项目不存在的通知返回给应用(步骤624),操作在此之后终止。
如果在步骤618该机制确定存在第二探测屏障(2N),则该机制探测紧跟的2N个槽,以标识该项目是否占用存储器容器中紧跟起始存储器槽之后的的N个存储器槽(Si+2N)中的一个存储器槽(步骤626)。如果在步骤626该机制在存储器容器中紧跟在起始存储器槽之后的2N个存储器槽(Si+2N)中的一个存储器槽中标识了该项目,则该机制将该项目从存储器槽返回给应用(步骤628),操作在此之后终止。如果在步骤626该机制未能在存储器容器中紧跟在起始存储器槽之后的2N个存储器槽(Si+2N)中的一个存储器槽中标识该项目,则该机制将指示该项目不存在的通知返回给应用(步骤630),操作在此之后终止。
图7描绘了根据说明性实施例的由开放寻址探测屏障机制执行的删除操作的示例性流程图。当操作开始时,该机制从应用接收删除存储器容器中的项目的请求(步骤702)。该机制通过针对该项目计算哈希值来计算起始存储器槽(Si)(步骤704)。利用起始存储器槽(Si),该机制探测起始存储器槽(Si)以确定该项目是否在存储器槽中(步骤706)。如果在步骤706该机制确定该项目占用起始存储器槽(Si),则该机制从起始存储器槽(Si)删除该项目(步骤708),操作在此之后终止。
如果在步骤706该机制确定该项目未能占用起始存储器槽(Si),则该机制探测紧跟的N个槽,以标识该项目是否占用存储器容器中紧跟在起始存储器槽之后的N个存储器槽(Si+N)中的一个存储器槽(步骤710)。在说明性实施例中,N是探测屏障,其是用户可配置的常数,并且限制针对特定项目的探测过程。如果在步骤710该机制在存储器容器中紧跟在起始存储器槽之后的N个存储器槽(Si+N)中的一个存储器槽中标识了项目,则该机制从存储器槽删除该项目(步骤712),操作在此之后终止。
如果在步骤710该机制未能在存储器容器中紧跟在起始存储器槽之后的N个存储器槽(Si+N)中的一个存储器槽中标识该项目,则该机制确定屏障位是否与第(Si+N)个存储器槽相关联地被设置(步骤714)。如果在步骤714该机制确定屏障位未能与第(Si+N)个存储器槽相关联地被设置,则该机制将指示该项目不存在的通知返回给应用(步骤716),操作在此之后终止。如果在步骤714该机制确定屏障位与第(Si+N)个存储器槽相关联地被设置,则该机制确定是否存在与存储器容器相关联的第二探测屏障(2N)(步骤718)。如果在步骤718该机制确定不存在第二探测屏障(2N),则该机制针对该项目探测所有剩余的存储器槽(步骤720)。如果在步骤720该机制找到该项目,则该机制从存储器槽删除该项目(步骤722),并且重置与第(Si+N)个存储器槽相关联地被设置的屏障位(步骤724),操作在此之后终止。如果在步骤720该机制未能找到该项目,则该机制将指示该项目不存在的通知返回给应用(步骤726),操作在此之后终止。
如果在步骤718该机制确定存在第二探测屏障(2N),则该机制探测紧跟的2N个槽,以标识该项目是否占用存储器容器中紧跟在起始存储器槽之后的N个存储器槽(Si+2N)中的一个存储器槽(步骤728)。如果在步骤728该机制在存储器容器中紧跟在起始存储器槽之后的2N个存储器槽(Si+2N)中的一个存储器槽中标识了该项目,则该机制从存储器槽删除该项目(步骤730),并且重置与第(Si+N)个存储器槽相关联地被设置的屏障位(步骤732),操作在此之后终止。如果在步骤728该机制未能在存储器容器中紧跟在起始存储器槽之后的2N个存储器槽(Si+2N)中的一个存储器槽中标识该项目,则该机制将指示该项目不存在的通知返回给应用(步骤734),操作在此之后终止。
附图中的流程图和框图显示了根据本发明的多个实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
因此,说明性实施例提供了用于开放寻址探测屏障的机制,其与基于哈希的键值存储机制中的不同类型的哈希算法相关联地有益于性能和容量利用两者。在说明性实施例中被利用的开放寻址探测屏障方案提供了所有操作的更好性能、更高的占用利用率、所需的重哈希的数目的减少、完全高速缓存局部性、较小的存储器开销、屏障的数量的可配置性、屏障之间的间隔等,并且不重哈希的***不使迭代器无效。
如上所述,应当领会到,说明性实施例可以采取完全硬件实施例、完全软件实施例或包含硬件和软件元素两者的实施例的形式。在一个示例实施例中,说明性实施例的机制以软件或程序代码而被实现,该软件或程序代码包括但不限于固件、驻留软件、微代码等。
适于存储和/或执行程序代码的数据处理***将包括至少一个处理器,该处理器通过诸如***总线的通信总线而被直接地或间接地耦合到存储器元件。存储器元件可以包括在程序代码的实际执行期间被采用的本地存储器、大容量存储装置和高速缓冲存储器,高速缓冲存储器提供对至少一些程序代码的临时存储以便减少在执行期间必须从大容量存储装置取回代码的次数。存储器可以是各种类型,包括但不限于ROM、PROM、EPROM、EEPROM、DRAM、SRAM、闪存、固态存储器等。
输入/输出或I/O设备(包括但不限于键盘、显示器、指点设备等)可以直接地或通过居间的有线或无线I/O接口和/或控制器等被耦合到***。I/O设备可以采取除了常规键盘、显示器、指点设备等之外的许多不同形式,诸如通过有线或无线连接而被耦合的通信设备,包括但不限于智能电话、平板计算机、触摸屏设备、语音识别设备等。任何已知的或以后开发的I/O设备都旨在落入说明性实施例的范围内。
网络适配器也可以被耦合到***,以使数据处理***能够通过居间专用或公共网络被耦合到其他数据处理***或远程打印机或存储设备。调制解调器、电缆调制解调器和以太网卡只是用于有线通信的网络适配器的当前可用类型中的几种。还可以利用基于无线通信的网络适配器,包括但不限于802.11a/b/g/n无线通信适配器、蓝牙无线适配器等。任何已知的或以后开发的网络适配器都旨在落入本发明的精神和范围内。
本发明的描述是已经出于说明和描述的目的而被呈现,并且并不旨在是穷尽的或被限于本发明所公开的形式。在不背离所描述的实施例的范围和精神的情况下,许多修改和变化对于本领域普通技术人员而言将是显而易见的。实施例被选择和描述以便最好地说明本发明的原理、实际应用,以及使本领域的其他普通技术人员能够理解本发明的具有各种修改的各种实施例,这些修改适合于所设想的特定用途。本文所使用的术语被选择以最好地说明实施例的原理、实际应用或对市场上存在的技术的技术改进,或使本领域其他普通技术人员能够理解本文所公开的实施例。
Claims (20)
1.一种在数据处理***中用于与存储器容器相关联地利用开放地址探测屏障的方法,所述方法包括:
响应于从应用接收到在所述存储器容器中查找项目的请求,针对所述项目计算起始存储器槽;
响应于所述项目未能占用所述起始存储器槽,针对所述项目探测紧跟在所述起始存储器槽之后的第一预定数量的存储器槽;
响应于所述项目占用紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽中的一个存储器槽,将所述项目返回给所述应用;
响应于所述项目未能占用紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽中的一个存储器槽,确定屏障位是否已经与所述第一预定数量的存储器槽中的最后存储器槽相关联地被设置;
响应于所述屏障位被设置,针对所述项目探测所述存储器容器的至少一部分,并且响应于在所述存储器容器的所述一部分中找到所述项目,将所述项目返回给所述应用;以及
响应于所述屏障位未能被设置,将所述项目不存在于所述存储器容器中的通知返回给所述应用返回。
2.根据权利要求1所述的方法,其中所述存储器容器的所述一部分是所述存储器容器的所有未探测的存储器槽。
3.根据权利要求1所述的方法,其中所述存储器容器的所述一部分是紧跟在所述起始存储器槽之后的第二预定数量的存储器槽,并且其中所述方法还包括:
响应于所述项目占用紧跟在所述起始存储器槽之后的所述第二预定数量的存储器槽中的一个存储器槽,将所述项目返回给所述应用;以及
响应于所述项目未能占用紧跟在所述起始存储器槽之后的所述第二预定数量的存储器槽中的一个存储器槽,将所述项目不存在于所述存储器容器中的通知返回给所述应用。
4.根据权利要求1所述的方法,还包括:
响应于所述项目占用所述起始存储器槽,将所述项目从所述起始存储器槽返回给所述应用。
5.根据权利要求1所述的方法,其中所述起始存储器槽使用哈希算法而被计算。
6.根据权利要求1所述的方法,其中所述项目通过所述方法被***到所述存储器容器中的多个存储器槽中的一个存储器槽中,所述方法包括:
响应于接收到将所述项目***到所述存储器容器中的所述多个存储器槽中的一个存储器槽中的请求,针对所述项目计算所述起始存储器槽;
响应于所述起始存储器槽为空,将所述项目存储在所述起始存储器槽中;
响应于所述起始存储器槽被占用,针对所述项目探测紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽;
响应于紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽中的一个存储器槽为空,将所述项目存储在空的所述存储器槽中;
响应于紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽中的所有存储器槽被占用,针对空的存储器槽探测所述存储器容器的至少所述一部分;
响应于空的所述存储器槽被标识,将所述项目存储在空的所述存储器槽中并且设置已经与所述第一预定数量的存储器槽中的最后存储器槽相关联地被设置的所述屏障位;
响应于空的所述存储器槽未被标识,将所述项目无法被存储在所述存储器容器中的通知返回给所述应用。
7.根据权利要求6所述的方法,其中所述存储器容器的所述一部分是所述存储器容器的所有未探测的存储器槽。
8.根据权利要求6所述的方法,其中所述存储器容器的所述一部分是紧跟在所述起始存储器槽之后的第二预定数量的存储器槽,并且其中所述方法还包括:
响应于标识紧跟在所述起始存储器槽之后的所述第二预定数量的存储器槽中的一个存储器槽中的空槽,将所述项目存储在空的所述存储器槽中;以及
响应于未能标识紧跟在所述起始存储器槽之后的所述第二预定数量的存储器槽中的一个存储器槽中的空槽,将所述项目无法被存储在所述存储器容器中的通知返回给所述应用。
9.根据权利要求1所述的方法,其中所述项目通过所述方法从所述存储器容器中的多个存储器槽中的一个存储器槽被删除,所述方法包括:
响应于接收到删除所述存储器容器中的项目的请求,针对所述项目计算所述起始存储器槽;
响应于所述项目未能占用所述起始存储器槽,针对所述项目探测紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽;
响应于所述项目占用紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽中的一个存储器槽,从所述存储器槽删除所述项目;
响应于所述项目未能占用紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽中的一个存储器槽,确定所述屏障位是否已经与所述第一预定数量的存储器槽中的最后存储器槽相关联地被设置;
响应于所述屏障位被设置,针对所述项目探测所述存储器容器的至少所述一部分,并且响应于所述项目在所述存储器容器的所述一部分中被找到,从所述存储器槽删除所述项目;以及
响应于所述屏障位未能被设置,将所述项目不存在于所述存储器容器中的通知返回给所述应用。
10.根据权利要求9所述的方法,其中所述存储器容器的所述一部分是紧跟在所述起始存储器槽之后的第二预定数量的存储器槽,并且其中所述方法还包括:
响应于所述项目占用紧跟在所述起始存储器槽之后的所述第二预定数量的存储器槽中的一个存储器槽,从所述存储器槽删除所述项目;以及
响应于所述项目未能占用紧跟在所述起始存储器槽之后的所述第二预定数量的存储器槽中的一个存储器槽,将所述项目不存在于所述存储器容器中的通知返回给所述应用。
11.一种计算机可读存储介质,其中存储有计算机可读程序,所述计算机可读程序当在计算设备上被执行时,使得所述计算设备:
响应于从应用接收到在所述存储器容器中查找项目的请求,针对所述项目计算起始存储器槽;
响应于所述项目未能占用所述起始存储器槽,针对所述项目探测紧跟在所述起始存储器槽之后的第一预定数量的存储器槽;
响应于所述项目占用紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽中的一个存储器槽,将所述项目返回给所述应用;
响应于所述项目未能占用紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽中的一个存储器槽,确定屏障位是否已经与所述第一预定数量的存储器槽中的最后存储器槽相关联地被设置;
响应于所述屏障位被设置,针对所述项目探测所述存储器容器的至少一部分,并且响应于在所述存储器容器的所述一部分中找到所述项目,将所述项目返回给所述应用;以及
响应于所述屏障位未能被设置,将所述项目不存在于所述存储器容器中的通知返回给所述应用返回。
12.根据权利要求11所述的计算机可读存储介质,其中所述存储器容器的所述一部分是所述存储器容器的所有未探测的存储器槽。
13.根据权利要求11所述的计算机可读存储介质,其中所述存储器容器的所述一部分是紧跟在所述起始存储器槽之后的第二预定数量的存储器槽,并且其中所述计算机可读程序还使得所述计算设备:
响应于所述项目占用紧跟在所述起始存储器槽之后的所述第二预定数量的存储器槽中的一个存储器槽,将所述项目返回给所述应用;以及
响应于所述项目未能占用紧跟在所述起始存储器槽之后的所述第二预定数量的存储器槽中的一个存储器槽,将所述项目不存在于所述存储器容器中的通知返回给所述应用。
14.根据权利要求11所述的计算机可读存储介质,其中所述计算机可读程序还使得所述计算设备:
响应于所述项目占用所述起始存储器槽,将所述项目从所述起始存储器槽返回给所述应用。
15.根据权利要求11所述的计算机可读存储介质,其中通过所述计算机可读程序将所述项目***到所述存储器容器中的多个存储器槽中的一个存储器槽中,进一步使得所述计算设备:
响应于接收到将所述项目***到所述存储器容器中的所述多个存储器槽中的一个存储器槽中的请求,针对所述项目计算所述起始存储器槽;
响应于所述起始存储器槽为空,将所述项目存储在所述起始存储器槽中;
响应于所述起始存储器槽被占用,针对所述项目探测紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽;
响应于紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽中的一个存储器槽为空,将所述项目存储在空的所述存储器槽中;
响应于紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽中的所有存储器槽被占用,针对空的存储器槽探测所述存储器容器的至少所述一部分;
响应于空的所述存储器槽被标识,将所述项目存储在空的所述存储器槽中并且设置已经与所述第一预定数量的存储器槽中的最后存储器槽相关联地被设置的所述屏障位;
响应于空的所述存储器槽未被标识,将所述项目无法被存储在所述存储器容器中的通知返回给所述应用。
16.根据权利要求15所述的计算机可读存储介质,其中所述存储器容器的所述一部分是所述存储器容器的所有未探测的存储器槽。
17.根据权利要求15所述的计算机可读存储介质,其中所述存储器容器的所述一部分是紧跟在所述起始存储器槽之后的第二预定数量的存储器槽,并且其中所述计算机可读程序还使得所述计算设备:
响应于标识紧跟在所述起始存储器槽之后的所述第二预定数量的存储器槽中的一个存储器槽中的空槽,将所述项目存储在空的所述存储器槽中;以及
响应于未能标识紧跟在所述起始存储器槽之后的所述第二预定数量的存储器槽中的一个存储器槽中的空槽,将所述项目无法被存储在所述存储器容器中的通知返回给所述应用。
18.根据权利要求11所述的计算机可读存储介质,其中所述项目通过所述计算机可读程序从所述存储器容器中的多个存储器槽中的一个存储器槽被删除,所述计算机可读程序还使得所述计算设备:
响应于接收到删除所述存储器容器中的项目的请求,针对所述项目计算所述起始存储器槽;
响应于所述项目未能占用所述起始存储器槽,针对所述项目探测紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽;
响应于所述项目占用紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽中的一个存储器槽,从所述存储器槽删除所述项目;
响应于所述项目未能占用紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽中的一个存储器槽,确定所述屏障位是否已经与所述第一预定数量的存储器槽中的最后存储器槽相关联地被设置;
响应于所述屏障位被设置,针对所述项目探测所述存储器容器的至少所述一部分,并且响应于所述项目在所述存储器容器的所述一部分中被找到,从所述存储器槽删除所述项目;以及
响应于所述屏障位未能被设置,将所述项目不存在于所述存储器容器中的通知返回给所述应用。
19.根据权利要求18所述的计算机可读存储介质,其中所述存储器容器的所述一部分是紧跟在所述起始存储器槽之后的第二预定数量的存储器槽,并且其中所述计算机可读程序还使得所述计算设备:
响应于所述项目占用紧跟在所述起始存储器槽之后的所述第二预定数量的存储器槽中的一个存储器槽,从所述存储器槽删除所述项目;以及
响应于所述项目未能占用紧跟在所述起始存储器槽之后的所述第二预定数量的存储器槽中的一个存储器槽,将所述项目不存在于所述存储器容器中的通知返回给所述应用。
20.一种装置,包括:
处理器;以及
被耦合到所述处理器的存储器,其中所述存储器包括指令,所述指令当由所述处理器执行时使得所述处理器:
响应于从应用接收到在所述存储器容器中查找项目的请求,针对所述项目计算起始存储器槽;
响应于所述项目未能占用所述起始存储器槽,针对所述项目探测紧跟在所述起始存储器槽之后的第一预定数量的存储器槽;
响应于所述项目占用紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽中的一个存储器槽,将所述项目返回给所述应用;
响应于所述项目未能占用紧跟在所述起始存储器槽之后的所述第一预定数量的存储器槽中的一个存储器槽,确定屏障位是否已经与所述第一预定数量的存储器槽中的最后存储器槽相关联地被设置;
响应于所述屏障位被设置,针对所述项目探测所述存储器容器的至少一部分,并且响应于所述项目在所述存储器容器的所述一部分中被找到,将所述项目返回给所述应用;以及
响应于所述屏障位未能被设置,将所述项目不存在于所述存储器容器中的通知返回给所述应用。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/715,459 US10339066B2 (en) | 2017-09-26 | 2017-09-26 | Open-addressing probing barrier |
US15/715,459 | 2017-09-26 | ||
PCT/IB2018/057276 WO2019064135A1 (en) | 2017-09-26 | 2018-09-21 | OPEN ADDRESSING SURVEY BARRIER |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111133424A CN111133424A (zh) | 2020-05-08 |
CN111133424B true CN111133424B (zh) | 2023-08-08 |
Family
ID=65807647
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880062835.6A Active CN111133424B (zh) | 2017-09-26 | 2018-09-21 | 开放寻址的探测屏障 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10339066B2 (zh) |
JP (1) | JP7116382B2 (zh) |
CN (1) | CN111133424B (zh) |
DE (1) | DE112018003587T5 (zh) |
GB (1) | GB2579335A (zh) |
WO (1) | WO2019064135A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11720522B2 (en) * | 2020-06-12 | 2023-08-08 | Oracle International Corporation | Efficient usage of one-sided RDMA for linear probing |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106055646A (zh) * | 2016-05-31 | 2016-10-26 | 国家计算机网络与信息安全管理中心 | 一种并发哈希表的无锁操作方法 |
CN106202548A (zh) * | 2016-07-25 | 2016-12-07 | 网易(杭州)网络有限公司 | 数据存储方法、查找方法及装置 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6476320A (en) * | 1987-09-18 | 1989-03-22 | Fujitsu Ltd | Registration/retrieval control system for memory table |
US5287499A (en) * | 1989-03-22 | 1994-02-15 | Bell Communications Research, Inc. | Methods and apparatus for information storage and retrieval utilizing a method of hashing and different collision avoidance schemes depending upon clustering in the hash table |
JPH08278894A (ja) * | 1995-04-06 | 1996-10-22 | Hitachi Ltd | ハッシュ法による情報処理方法および情報処理装置 |
US7031985B1 (en) * | 1999-03-08 | 2006-04-18 | Oracle International Corporation | Lexical cache |
GB0922131D0 (en) * | 2009-12-18 | 2010-02-03 | Lunter Gerton | A system for gaining the dna sequence of a biological sample or transformation thereof |
US9104678B1 (en) * | 2011-12-31 | 2015-08-11 | Richard Michael Nemes | Methods and apparatus for information storage and retrieval using a caching technique with probe-limited open-address hashing |
US9069810B2 (en) | 2012-07-25 | 2015-06-30 | International Business Machines Corporation | Systems, methods and computer program products for reducing hash table working-set size for improved latency and scalability in a processing system |
US9317548B2 (en) | 2013-01-30 | 2016-04-19 | International Business Machines Corporation | Reducing collisions within a hash table |
US9141667B2 (en) | 2013-01-31 | 2015-09-22 | International Business Machines Corporation | Efficient join with one or more large dimension tables |
US10380183B2 (en) * | 2014-04-03 | 2019-08-13 | International Business Machines Corporation | Building and querying hash tables on processors |
US20170242880A1 (en) | 2016-02-19 | 2017-08-24 | Michael A. Barzilli | B-tree index structure with grouped index leaf pages and computer-implemented method for modifying the same |
EP3249553B1 (en) * | 2016-05-27 | 2020-10-28 | Salesforce.com, Inc. | Worm hashing |
-
2017
- 2017-09-26 US US15/715,459 patent/US10339066B2/en not_active Expired - Fee Related
-
2018
- 2018-09-21 GB GB2005312.0A patent/GB2579335A/en not_active Withdrawn
- 2018-09-21 JP JP2020516459A patent/JP7116382B2/ja active Active
- 2018-09-21 WO PCT/IB2018/057276 patent/WO2019064135A1/en active Application Filing
- 2018-09-21 DE DE112018003587.5T patent/DE112018003587T5/de active Pending
- 2018-09-21 CN CN201880062835.6A patent/CN111133424B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106055646A (zh) * | 2016-05-31 | 2016-10-26 | 国家计算机网络与信息安全管理中心 | 一种并发哈希表的无锁操作方法 |
CN106202548A (zh) * | 2016-07-25 | 2016-12-07 | 网易(杭州)网络有限公司 | 数据存储方法、查找方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
JP7116382B2 (ja) | 2022-08-10 |
JP2020535510A (ja) | 2020-12-03 |
US10339066B2 (en) | 2019-07-02 |
CN111133424A (zh) | 2020-05-08 |
WO2019064135A1 (en) | 2019-04-04 |
GB2579335A (en) | 2020-06-17 |
GB202005312D0 (en) | 2020-05-27 |
US20190095342A1 (en) | 2019-03-28 |
DE112018003587T5 (de) | 2020-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11163828B2 (en) | Building and querying hash tables on processors | |
CN107273522B (zh) | 面向多应用的数据存储***和数据调用方法 | |
CN111949605B (zh) | 用于实现文件***的方法、设备和计算机程序产品 | |
US8423594B2 (en) | Real-time hash map | |
US9875183B2 (en) | Method and apparatus for content derived data placement in memory | |
US20210157746A1 (en) | Key-value storage device and system including the same | |
CN111247518A (zh) | 数据库分片 | |
US10740248B2 (en) | Methods and systems for predicting virtual address | |
JP7062695B2 (ja) | 論理ディレクトリを使用したキャッシュ構造 | |
CN111324556B (zh) | 用于将预定数目的数据项预取到高速缓存的方法和*** | |
CN111506604B (zh) | 访问数据的方法、装置和计算机程序产品 | |
US7451272B2 (en) | Queue or stack based cache entry reclaim method | |
US9086986B2 (en) | Detection of conflicts between transactions and page shootdowns | |
CN110352410B (zh) | 跟踪索引节点的访问模式以及预提取索引节点 | |
US20140082252A1 (en) | Combined Two-Level Cache Directory | |
CN111133424B (zh) | 开放寻址的探测屏障 | |
US9990301B1 (en) | Value cache in a computing system | |
US11403273B1 (en) | Optimizing hash table searching using bitmasks and linear probing | |
US11163693B2 (en) | Hash-based one-level mapping for storage clusters | |
US20140013054A1 (en) | Storing data structures in cache | |
US10324847B2 (en) | Bits register for synonyms in a memory system | |
CN112328630B (zh) | 数据查询方法、装置、设备及存储介质 | |
CN111213130B (zh) | 基于分散位置的去重的性能改进 | |
US10678699B2 (en) | Cascading pre-filter to improve caching efficiency | |
CN113407462A (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 |