CN106021267A - 对数据结构的并发读取和插入而无需读取器的锁存或等待 - Google Patents
对数据结构的并发读取和插入而无需读取器的锁存或等待 Download PDFInfo
- Publication number
- CN106021267A CN106021267A CN201610177904.0A CN201610177904A CN106021267A CN 106021267 A CN106021267 A CN 106021267A CN 201610177904 A CN201610177904 A CN 201610177904A CN 106021267 A CN106021267 A CN 106021267A
- Authority
- CN
- China
- Prior art keywords
- data structure
- hierarchical data
- child node
- node
- state value
- 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.)
- Granted
Links
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/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
-
- 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/18—File system types
- G06F16/182—Distributed file systems
-
- 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/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开涉及对数据结构的并发读取和插入而无需读取器的锁存或等待。一种方法包括通过数据结构处理器执行对分层数据结构的并发的读取操作和写入操作。写入器获取对写入器修改的分层数据结构元素的锁存。读取器直接访问分层数据结构元素而无需获取锁存。写入器执行针对分层数据结构的一层或多层的修改操作。当分层数据结构的去除部分不再被引用时,通过使用全局状态值和复制的全局状态值的组合进行跟踪。全局状态值变换通过非重复的值序列。分层数据结构中不再被引用的部分利用当前全局状态值进行标记。
Description
技术领域
本发明的实施例涉及数据结构处理,尤其是允许读取器访问数据而无需必须等待并发机制的获取的分层数据结构处理。
背景技术
对数据库或表格数据中的实时数据进行商业智能(BI)查询有增加的趋势。传统上,在BI系统和联机事务处理(OLTP)系统之间存在着严格的分离。对于操作型BI以及对于要在同一数据库上执行事务和分析两者存在日益增长的市场压力。
字典(支持查找和插入以及可能支持删除/更新的数据结构)经常被分层地组织。这些字典在多核机器上表现不佳,这是因为读取器必须获得锁存(latch)来防止并发的写入器可能损坏或释放它们正在读取的数据结构的部分。
发明内容
本发明的实施例涉及使用不需要读取器获取锁存而是由写入器获取写入锁存的分层数据结构。一种实施例包括一种方法,该方法包括通过数据结构处理器执行对分层数据结构的并发的读取操作和写入操作。写入器获取对写入器修改的分层数据结构元素的锁存。读取器直接访问分层数据结构元素而无需获取锁存。写入器执行针对分层数据结构的一层或多层的修改操作。当分层数据结构的去除部分不再被引用时,通过使用全局状态值和复制的全局状态值的组合进行跟踪。全局状态值变换通过非重复的值序列。分层数据结构中不再被引用的部分利用当前全局状态值进行标记。
参考下面的描述、所附权利要求和附图,本发明的这些和其它特征、方面和优点将会被理解。
附图说明
图1绘出了根据一实施例的云计算节点;
图2绘出了根据一实施例的云计算环境;
图3绘出了根据一实施例的一组抽象模型层;
图4是示出根据一实施例的、用于对分层数据结构元素进行并发的读取操作和写入操作的系统的框图;
图5示出了可以被一实施例实现的简要散列表(concise hashtable,CHT);
图6示出了根据一实施例的示例数据结构;
图7示出了根据一实施例的、用于变换子节点的对该子节点的修改操作的过程;
图8A-8C示出了根据一实施例的、用于回收节点空间的历元处理(epoch processing);及
图9是根据一实施例的、用于对分层数据结构进行并发的读取操作和写入操作的过程的框图。
具体实施方式
已为说明的目的给出了本发明的各种实施例的描述,但是这并不是要穷举或限制到所公开的实施例。在不背离所描述实施例的范围和主旨的情况下,许多修改和变化将对本领域普通技术人员显而易见。本文所使用的术语被选择为最好地解释实施例的原理、实践应用或者优于市场上见到的技术的技术改进,或者使本领域其他普通技术人员能够理解本文所公开的实施例。
首先应当理解,尽管本公开包括关于云计算的详细描述,但其中记载的技术方案的实现却不限于云计算环境,而是能够结合现在已知或以后开发的任何其它类型的计算环境而实现。
云计算是一种服务交付模式,用于对共享的可配置计算资源池进行方便、按需的网络访问。可配置计算资源是能够以最小的管理成本或与服务提供者进行最少的交互就能快速部署和释放的资源,例如可以是网络、网络带宽、服务器、处理、内存、存储、应用、虚拟机(VM)和服务。这种云模式可以包括至少五个特征、至少三个服务模型和至少四个部署模型。
特征包括:
按需自助式服务:云的消费者在无需与服务提供者进行人为交互的情况下能够单方面自动地按需部署诸如服务器时间和网络存储等的计算能力。
广泛的网络接入:计算能力可以通过标准机制在网络上获取,这种标准机制促进了通过不同种类的瘦客户机平台或厚客户机平台(例如移动电话、膝上型电脑、个人数字助理PDA)对云的使用。
资源池:提供者的计算资源被归入资源池并通过多租户(multi-tenant)模式服务于多重消费者,其中按需将不同的实体资源和虚拟资源动态地分配和再分配。一般情况下,消费者不能控制或甚至并不知晓所提供的资源的确切位置,但可以在较高抽象程度上指定位置(例如国家、州或数据中心),因此具有位置无关性。
迅速弹性:能够迅速、有弹性地(有时是自动地)部署计算能力,以实现快速扩展,并且能迅速释放来快速缩小。在消费者看来,用于部署的可用计算能力往往显得是无限的,并能在任意时候都能获取任意数量的计算能力。
可测量的服务:云系统通过利用适于服务类型(例如存储、处理、带宽和活跃用户帐号)的某种抽象程度的计量能力,自动地控制和优化资源效用。可以监测、控制和报告资源使用情况,从而为服务提供者和消费者双方提供透明度。
服务模型如下:
软件即服务(SaaS):向消费者提供的能力是使用提供者在云基础架构上运行的应用的能力。可以通过诸如网络浏览器的瘦客户机接口(例如基于网络的电子邮件)从各种客户机设备访问应用。除了有限的特定于用户的应用配置设置外,消费者既不管理也不控制包括网络、服务器、操作系统、存储、乃至单个应用能力等的底层云基础架构。
平台即服务(PaaS):向消费者提供的能力是在云基础架构上部署消费者创建或获得的应用的能力,这些应用利用提供者支持的程序设计语言和工具创建。消费者既不管理也不控制包括网络、服务器、操作系统或存储的底层云基础架构,但对其部署的应用具有控制权,对应用托管环境配置可能也具有控制权。
基础架构即服务(IaaS):向消费者提供的能力是消费者能够在其中部署并运行包括操作系统和应用的任意软件的处理、存储、网络和其他基础计算资源的能力。消费者既不管理也不控制底层的云基础架构,但是对操作系统、存储和其部署的应用具有控制权,对选择的网络组件(例如主机防火墙)可能具有有限的控制权。
部署模型如下:
私有云:云基础架构单独为某个组织运行。云基础架构可以由该组织或第三方管理并且可以存在于该组织内部或外部。
共同体云:云基础架构被若干组织共享并支持有共同利害关系(例如任务使命、安全要求、政策和合规考虑)的特定共同体。共同体云可以由共同体内的多个组织或第三方管理并且可以存在于该共同体内部或外部。
公共云:云基础架构向公众或大型产业群提供并由出售云服务的组织拥有。
混合云:云基础架构由两个或更多部署模型的云(私有云、共同体云或公共云)组成,这些云依然是独特的实体,但是通过使数据和应用能够移植的标准化技术或私有技术(例如用于云之间的负载平衡的云突发流量分担技术)绑定在一起。
云计算环境是面向服务的,特点集中在无状态性、低耦合性、模块性和语意的互操作性。云计算的核心是包含互连节点网络的基础架构。
现在参考图1,其中显示了云计算节点的一个例子。图1显示的云计算节点10仅仅是适合的云计算节点的一个示例,不应对本发明实施例的功能和使用范围带来任何限制。总之,云计算节点10能够被用来实现和/或执行以上所述的任何功能。
云计算节点10具有计算机系统/服务器12,其可与众多其它通用或专用计算系统环境或配置一起操作。众所周知,适于与计算机系统/服务器12一起操作的计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任意系统的分布式云计算技术环境,等等。
计算机系统/服务器12可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括执行特定的任务或者实现特定的抽象数据类型的例程、程序、目标程序、组件、逻辑、数据结构等。计算机系统/服务器12可以在通过通信网络链接的远程处理设备执行任务的分布式云计算环境中实施。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
如图1所示,云计算节点10中的计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是能够被计算机系统/服务器12访问的任意可获得的介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图1未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机系统/服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,其它硬件和/或软件模块可以与计算机系统/服务器12一起操作,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
现在参考图2,其中显示了示例性的云计算环境50。如图所示,云计算环境50包括云计算消费者使用的本地计算设备可以与其相通信的一个或者多个云计算节点10,本地计算设备例如可以是个人数字助理(PDA)或移动电话54A,台式电脑54B、笔记本电脑54C和/或汽车计算机系统54N。云计算节点10之间可以相互通信。可以在包括但不限于如上所述的私有云、共同体云、公共云或混合云或者它们的组合的一个或者多个网络中将云计算节点10进行物理或虚拟分组(图中未显示)。这样,云的消费者无需在本地计算设备上维护资源就能请求云计算环境50提供的基础架构即服务(IaaS)、平台即服务(PaaS)和/或软件即服务(SaaS)。应当理解,图2显示的各类计算设备54A-N仅仅是示意性的,云计算节点10以及云计算环境50可以与任意类型网络上和/或网络可寻址连接的任意类型的计算设备(例如使用网络浏览器)通信。
现在参考图3,其中显示了云计算环境50(图2)提供的一组功能抽象层。首先应当理解,图3所示的组件、层以及功能都仅仅是示意性的,本发明的实施例不限于此。如图3所示,提供下列层和对应功能:
硬件和软件层60包括硬件和软件组件。硬件组件的例子包括:大型主机61;基于RISC(精简指令集计算机)架构的服务器62;服务器63;刀片服务器64;存储设备65;以及网络和联网组件66。在一些实施例中,软件组件包括网络应用服务器软件67和数据库软件68。
虚拟层70提供一个抽象层,该层可以提供下列虚拟实体的例子:虚拟服务器71、虚拟存储72、虚拟网络(包括虚拟私有网络)73、虚拟应用和操作系统74,以及虚拟客户端75。
在一个示例中,管理层80可以提供下述功能:资源供应功能81:提供用于在云计算环境中执行任务的计算资源和其它资源的动态获取;计量和定价82功能:在云计算环境内对资源的使用进行成本跟踪,并为此提供帐单和发票。在一个例子中,该资源可以包括应用软件许可。安全功能:为云的消费者和任务提供身份认证,为数据和其它资源提供保护。用户门户功能83:为消费者和系统管理员提供对云计算环境的访问。服务水平管理功能84:提供云计算资源的分配和管理,以满足必需的服务水平。服务水平协议(SLA)计划和履行功能85:为根据SLA预测的对云计算资源未来需求提供预先安排和供应。
工作负载层90提供云计算环境可以供其使用的功能的示例。从这个层可以提供的工作负载或功能的例子包括:地图绘制与导航91;软件开发及生命周期管理92;虚拟教室教学提供93;数据分析处理94;以及事务处理95。如以上所提到的,关于图3描述的所有前面的例子都仅仅是说明性的,并且本发明不限于这些例子。
应当理解,如本文所描述的一个或多种实施例的所有功能通常可以由服务器12(图4)来执行,服务器12可以被有形地体现为程序/实用程序40(图1)的程序代码42的模块。但是,情况不必如此。更确切地说,本文所描述的功能可以由图3中所示的层60、70、80和90当中任何一个执行/实现和/或启用。
重申一遍,虽然本公开内容包括关于云计算的详细描述,但是本文所描述的示教的实现不限于云计算环境。更确切地说,本发明的实施例可以利用现在已知或以后开发的任何类型的集群计算环境执行。
本发明的实施例涉及使用不需要读取器获取锁存而是由写入器获取写入锁存的分层数据结构的数据结构处理。一种实施例包括一种方法,该方法包括通过数据结构处理器执行对分层数据结构的并发的读取操作和写入操作。写入器获取对写入器修改的分层数据结构元素的锁存。读取器直接访问分层数据结构元素而无需获取锁存。写入器执行针对分层数据结构的一层或多层的修改操作。当分层数据结构的去除部分不再被引用时,通过使用全局状态值和复制的全局状态值的组合进行跟踪。全局状态值变换通过非重复的值序列。分层数据结构中不再被引用的部分利用当前全局状态值进行标记。
在一种实施例中,写入器获取写锁存,但是读取器不获取锁存—甚至对诸如比较和交换(CSWP)或原子递增的原子操作也不获取锁存。在一个例子中,实现分层数据结构,并且分层数据结构的每个步骤允许读取器访问数据,而无需必须等待典型的并发机制,诸如锁存、信号灯或锁,的获取。
散列表(HT)由两部分组成:数组(其中存储要被搜索的数据的实际的表)和被称为散列函数的映射函数。利用散列表,任何值都可以被用作索引,诸如浮点值、串、另一个数组、或者甚至结构作为索引。这种索引被称为键(key),并且在该索引处的数组元素的内容被称为值。因此,HT是存储键/值对并且能够通过键进行快速搜索的数据结构。散列函数是从输入空间到定义数组的索引的整数空间的映射。散列函数提供了用于将数字分配给输入数据以使得数据然后可以在对应于所分配数字的数组索引处被存储的方式。
在一种实施例中,索引将散列值映射到一组元组序列号(TSNS,也被称为元组或行标识符)。键(仅其散列值)和任何其它属性都不存储在索引本身中。这种方法也反映了主存储器和OLTP优化设计,其中具有集群的索引几乎没什么益处。在索引中不存储任何键或属性允许索引页在存储器中具有相同的布局,而与它们的类型无关。一种实施例支持使用多版本并发控制以及既行向存储又列向存储的系统。在一个例子中,索引具有以下接口:
uint64 lookup(uint64 hash,uint64* resultBuffer,uint64resultBufferSize)
insert(uint64 hash,uint64 tsn)
delete(uint64 hash,uint64 tsn)
在一种实施例中,查找功能采用散列值、结果缓冲区和其最大尺寸作为输入参数。返回值是为期望的散列键找到的TSN的数量。如果结果缓冲区太小,则调用者必须分配更大的缓冲区并且重试查找。查找和删除功能两者都采用散列值和TSN。这种接口允许索引用于唯一的和非唯一的索引。
图4是示出根据一实施例的、用于对分层数据结构元素进行并发的读取操作和写入操作的系统400的框图。在一种实施例中,系统400包括服务器12、数据结构处理器410、线程处理器415和历元处理器420,其中服务器12包括存储单元1 405至存储单元N 406(其中N是大于1的整数)。在一种实施例中,存储单元1-N 405-406对于服务器12可以是外部的。在一种实施例中,存储单元1-N 405-406可以存储对象,诸如行/列/各个值、表等。在关系数据库中,表(或文件)将关于单个主题的信息组织到行和列中。在一种实施例中,存储单元1-N 405-406可以包括不同类型的存储器储存装置,诸如缓冲池、基于云的储存装置、不同类型的对象池等。
在一种实施例中,数据结构处理器410对包括父节点及其各自的子节点的分层数据结构执行处理。线程处理器415提供包括管理操作/线程、执行操作/线程、终止操作/线程等的线程处理。在一种实施例中,历元处理器维护存储当前全局历元值的全局原子计数器(例如,64位的计数器)。当页面需要被释放时(例如,在分割之后),写入器不能排除并发的读访问的事实会导致问题。即使在去除索引中对页面的指针之后,写入器也永远无法确定何时释放这一页是安全的,这是因为在那一页上仍然可能存在读取器。历元的主要思想是,如果每个索引操作具有操作的开始(beginning-of-operation)时间戳,则存储器回收可以释放比系统中最旧的操作更旧的所有存储器页。当然,获取用于每个索引操作的精确时间将会过于昂贵,这也是为什么历元方法使用被称为“历元(epoch)”的更粗的时间粒度。
在一种实施例中,历元处理器420利用周期性定时器(例如,每1ms、10ms等)递增全局历元计数器。在一种实施例中,历元处理器420与线程处理器415通信,使得每个操作/线程维护本地历元计数器。本地历元计数器存储全局历元值的副本,这防止回收这个或更新的历元中的任何页。可以使用指示无穷大的唯一的本地历元值来表示操作/线程此刻没有访问任何页。在一个例子中,操作/线程通过将本地历元值存储到仅由该操作/线程来写入,但是可以被所有操作/线程来读取的存储器位置来发布访问页面的意图。
在一种实施例中,数据结构处理器410执行对子节点是本地的修改操作。在一个例子中,如果修改对子节点是本地的,则修改操作直接利用读取器无需等待(reader-wait-free)协议来执行。在一个例子中,可以实现在子节点内的链接列表,其中修改器通过原子地修改链接列表接下来的指针而将新条目插入到该列表中。在一种实施例中,删除操作由数据结构处理器逻辑地执行。应当指出,在一种实施例中,修改器确实获取锁存来防止对同一子节点的并发修改。
在一种实施例中,数据结构处理器410对子节点执行需要分割该子节点的修改操作。有时,对子节点的修改操作会导致其增长超出其物理封装,并且该子节点需要被分成两个子节点。在一个例子中,数据结构处理器410执行分割,从而形成两个单独的子节点(使旧的节点仍然存在,因为读取器可能仍然在使用它),并且然后通过可扩展散列利用父节点中这两个分割的子节点替换那个子节点。应当指出,修改器确实获取子节点和父节点两者上的修改器锁存。
在一种实施例中,数据结构处理器410对父节点执行修改操作。当可扩展散列过程需要重新调整父节点自身的大小时,这通常是需要的。在一个例子中,父节点被锁存以便修改并且数据结构处理器410执行重新调整大小。
在一种实施例中,数据结构处理器410对子节点执行需要变换那个子节点的修改操作。在一个例子中,子节点被合并到不具有相同物理尺寸限制的更大的数据结构中。在一种实施例中,数据结构处理器410首先形成新的空子节点并且将该新的子节点放置在链接列表中的满子节点之前。在一个例子中,插入是通过原子置换来自父节点的指针来执行的。空的子节点允许读取器继续整个修改操作。
在一种实施例中,只要空的子节点已被添加,并发插入器就可以继续。在一个例子中,当线程处理器415具有对子节点执行需要变换该子节点的修改操作的一个操作/线程时,并发修改器将等待修改锁存。需要将并发修改器重定向以逆着空子节点进行。在一个例子中,如果并发修改器检测到它们正在等待的子节点数据结构已经被合并,则使得并发修改器从头开始。
在一种实施例,对于回收空间,不等待读取器(no-wait-for-reader)数据结构产生新的副本,以允许写入器和读取器并发地进行。如果服务器12通过维护引用计数来等待所有的读取器结束,则所有的读取器必须对维护引用计数有所付出,这不能很好的伸缩。在一种实施例中,历元处理器420提供了历元方案。在一个例子中,每个操作/线程可能具有历元计数器的可能过时的本地副本。每个操作/线程在每个操作的开始(或每批操作一次)和当到受保护结构的指针没有被本地高速缓存时更新其本地历元计数器副本。在一种实施例中,当子节点的版本被修改和变旧时,即,未被数据结构使用时,全局历元计数器的值被记录。在所有其它操作/线程已进行经过这一历元值之后(即它们的本地陈旧的副本大于这一历元),该版本可以被释放。在一个例子中,历元值检查由历元处理器420偶尔地执行,或者在存储器有压力时或者以周期性的时间间隔执行。
图5示出了可以被实施例修改的简要散列表(CHT)500。CHT500是紧凑的数据结构。CHT 500通过将条目存储在密集的并且大多数排序的数组中实现空间效率。在一个例子中,CHT 500包括位图数组510、用于实际值的条目数组520和溢出数据结构530(例如,不同种类的散列表)。位图数组510被调整大小,使得大约8位中的1位被设置,并且位图数组510被分成存储32位的桶(例如,由于图形原因在这个例子中使用每桶8位)。通过观察条目的散列位的适当数量,可以确定它在数组中的位的位置。概念上,它在条目数组中的位置然后可以通过累加其位置左侧的位集合的数量(填充计数)来计算。因为每次查找对许多桶实际计算填充计数是不实际的,因此前缀填充计数与位图数组交错。在这个例子中,用于桶2的前缀填充是4,这是因为桶0和桶1两者在条目数组520中都具有2个条目。这允许快速找到条目的可能位置。在散列冲突的情况下(例如,该例子中的h4),使用了相邻位(以及因此还使用位置)。但是,如果多于两个条目散列到相同的位的位置,则这些条目必须被存储在单独的数据结构中,如在该例子中为h4所示出的。
原始CHT 500数据结构是为空间高效的存储器中散列联接设计的。因此,位图数组510结构和条目数组520两者都只是大数组。因为索引被布置在固定大小的页面上,因此,在一种实施例中,CHT500被修改。在一种实施例中,叶子页面指针以与前缀计数相同的方式在位图数组510内交错。为了腾出空间给该附加信息,在一种实施例中,每个位图的大小从32位增加到64位。因此每桶存在64位,其中48位用于叶子指针并且16位用于前缀计数。散列到位图桶的所有条目都存储在同一叶子上。此外,前缀计数现在与叶子的开始有关,这就是为什么给它16位是足够的。当构建数据结构时,尽可能多的连续位图桶被分配给叶子。因此,通常除了最后的叶子之外的所有叶子几乎都是满的。
在一种实施例中,对CHT 500的另一个修改涉及由于重复键或散列冲突而发生的溢出如何被处理。在一种实施例中,原始CHT500方案对唯一的键进行优化:一旦用于一项的两个可能位置都被采用,则这个条目就被存储在完全不同的数据结构中。在一个例子中,使用了使溢出条目保持接近常规条目的方法。因此,在一种实施例中,散列索引不仅对唯一的键工作良好,而且当每个键有多个TSN时也能工作良好。
在一个例子中,散列的39个位和48位的TSN被存储。这些值对于32KB的页面和8B的指针进行优化:可扩展散列预先确定12个散列位(由于4096的扇出),并且修改后的CHT 500位图页面预先确定附加的11个位(由于2048个桶)。因此,散列的23个位可以被“压缩”,使得每个叶子页面条目只需存储剩余的16位。如果添加了48位的TSN位,则每个叶子条目总共只有8个字节。
图6示出了根据一实施例的示例数据结构600。在一种实施例中,数据结构600包括可变层610和不可变层620,其中可变层610包括可扩展散列611和散列表612,并且不可变层620包括CHT位图621(例如,修改后的位图数组510)和CHT叶子页面622。在一种实施例中,叶子页面指针以与前缀计数相同的方式在位图数组510内交错。为了腾出空间给该附加的信息,在一种实施例中,每个位图的大小从32位增加到64位。因此,每桶存在64位,其中48位用于叶子指针并且16位用于前缀计数。散列到位图桶的所有条目都存储在同一叶子上。此外,前缀计数现在与叶子的开始有关,这就是为什么给它16位是足够的。当构建数据结构时,尽可能多的连续位图桶被分配给叶子。因此,通常除了最后的叶子之外的所有叶子几乎都是满的。
在一种实施例中,对CHT 500的另一个修改涉及由于重复键或散列冲突而发生的溢出如何被处理。在一种实施例中,数据结构600方案对唯一的键进行优化:一旦用于一项的两个可能位置都被采用,则这个条目被存储在完全不同的数据结构中。在一个例子中,使用了使溢出条目保持接近常规条目的方法。因此,在一种实施例中,散列索引不仅对唯一的键工作良好,而且当每个键有多个TSN时也能工作良好。
在一个例子中,散列的39个位和48位的TSN被存储。这些值对于32KB的页面和8B的指针进行优化:可扩展散列预先确定12个散列位(由于4096的扇出),并且修改后的CHT 500位图页面预先确定数据结构600中附加的11个位(由于2048个桶)。因此,散列的23个位可以被“压缩”,使得每个叶子页面条目只需存储剩余的16位。如果添加了48位的TSN位,则每个叶子条目总共只有8个字节。
为了有效地利用现代的硬件,索引结构的低开销同步是至关重要的。传统的在B-树中的方法是使用细粒度锁存:每个索引页存储读/写锁存,其允许多个并发读取器,但只允许单个写入器。不幸的是,这个简单的方法不能很好地在现代的CPU上工作,因此一些现代的系统使用复杂的非阻塞(或无锁存)数据结构。
在一种实施例中,读取器在不获取任何锁存的情况下进行,即,以非阻塞的方式进行;并且写入器获取细粒度锁存,但是只用于那些可能要修改的页。在一种实施例中,有大量读取的工作负载能完美地伸缩,并且写入器只获取那些可能有物理竞争的页上的锁存。具有写锁存的优点是,与无锁的方法相比,它们允许在设计数据结构时大得多的灵活性。对于一个或多个实施例可能实现、但是对于无锁结构将难以实现的操作的例子包括:
通过锁定其它写入器并且利用紧凑化的新版本替换页面来完全地重组(例如紧凑化)页面;及
通过首先锁存页面并且然后创建临时副本来创建页面的有意义的快照。这时,锁存可以被释放并且副本可以被写出到持久性储存装置。
在一个例子中,写入器必须确保读取可以始终安全进行。在一个例子中,在插入过程中的同步协议可以按照以下所示的伪代码例子来实现:
在一种实施例中,在利用全局深度和字典发现链接散列表之后,用于散列表的锁存被获取。以下四种使用情形可以通过一种或多种实施例来实现:
情形1:对索引页面的插入成功;
情形2:本地深度必须被增加;
情形3:全局深度必须被增加;及
情形4:需要CHT合并。
在一种实施例中,情形1是最常见的,并且在索引页上存在空间,因此,在保持其锁存的同时条目被添加到页面。但是由于读取器不获取这个锁存,因此写入器必须确保并发的读取是正确。在一个例子中,这是通过使所有页内指针(“链”数组和在所有条目中的“下一个”指针)原子化来实现的。此外,删除只能以符合逻辑的方式通过从它的列表中去除条目,但是不重用它的条目位置用于以后插入来执行。如果在页面中存在大量的删除,则创建页面的简缩版本而不是执行分割是有利的。在剩下的情形2、3和4中,索引页是满的。
在一个例子中,在情形2中,本地深度可以被增加,这是因为它小于全局深度。首先,(满的)索引页通过创建两个新的页面被分割。然后increaseLocalDepth函数改变字典指针,以指向新的页面。注意,对于读取器,它们到达新的还是旧的(非分割)页面是不重要的。此外,其它对该散列组的插入操作通过仍然被保持的锁存来排除。但是,有可能存在对另一个散列组的插入,其在这个时间点触发字典的增长(情形3)。为了防止这种情况,increaseLocalDepth函数(未在伪码中示出)获取字典锁存。注意到这种粗粒度锁存只在本地或全局深度增加时被获取,而不是在情形1期间被获取是很重要的。
在一个例子中,在情形3中,在分割(情形2)可以被执行之前,全局深度必须被增加。函数increaseGlobalDepth(未在上面的伪码中示出)获取字典锁存,然后通过适当地复制指针创建新的字典。如果在同一字典页面上有足够的空间,则新的字典被附加到前一个的后面(不覆盖)。一旦这完成,全局字典指针就被设置到这个新的字典,这个指针编码字典和全局深度两者。因为这防止了并发的分割操作,因此它是相对侵入式的操作。但是,可扩展散列的一个特性是查找和大多数的插入(情形1)不受字典增长的影响。此外,情形3总共只出现12次,对于最大深度12只花费大约10,000个周期,并且对大的索引没有再次出现。
在一个例子中,当本地深度(并且因此还有全局深度)在最大时,这意味着CHT结构(图6)必须通过合并较旧的CHT结构和满的索引页进行重建,情形4发生。为了允许在这一合并期间的并发插入,首先,安装新的空白页面,其指向需要被合并的满页面。这时,锁存可以被释放并且合并过程可以开始。CHT结构的不变性对于并发性是非常有益的:在其用单个操作/线程执行的构建期间,较旧的CHT结构不被修改,并且可以仍然被查询。一旦新的CHT的构造完成,就对相应的索引页执行单个原子存储,以使新的CHT可见。不需要锁存或其它原子操作。
在一种实施例中,存在特殊的情形0。虽然页面已经被分割或被合并,但是其它的插入或删除操作可能已在等待它的锁存。一旦这些操作最终得到该锁存,它们已经“太晚了”,并且这个索引页已经过时。情形0通过重新启动操作处理这种情况。应当指出,因为分割和合并两者在期望的位置处创建新的空间,情形0对于同一操作重复发生是极不可能的。
在一种或多种实施例中,在同步协议中,查找操作可以在不获取任何锁存的情况下进行,从而导致速度接近非同步的数据结构。插入和删除操作通常只获取单个锁存。这个单个锁存位于将被改变的页面上,即,其中可能存在一些物理竞争的地方。因此,一种或多种实施例在现代的多核CPU上能非常好地伸缩。
图7示出了根据一实施例的、对子节点的用于变换该子节点的修改操作(情形4)的过程700。在一种实施例中,过程700在开始方框705处开始并且前进到方框710。在方框710中,执行查找操作,以确定要修改的分区。在方框720中,如果有足够的空间,则通过对现有子节点执行请求来修改节点,并且然后过程700前进到方框770。在方框725中,如果当试图修改子节点时,在该子节点中不存在足够的空间,则开始新的子节点的创建并且过程700前进到方框730。在方框730中,如果链自从查找操作的开始以来没有被改变过(例如,被并发的修改操作改变),则附加的子节点被创建并且第一次被原子地添加到链,并且修改请求针对新的子节点执行。
在一种实施例中,在方框740中,如果在另一个操作/线程上存在对分区正在进行的合并,或者如果合并是不必要的(例如,没有足够的内容要合并,并且索引探针链长度并未过多),则过程700退到方框770,否则过程700继续到方框750。在方框750中,新的子节点被创建并且被调整大小,以包含来自一组子节点的数据,并且该组子节点被合并到新的子节点中。在方框760中,通过利用新的子节点替换(原子地或利用锁存)合并的节点来更新节点链。过程700然后前进到方框770,用于结束当前过程并且等待再次开始。
图8A-8C示出了根据一实施例的、用于回收节点空间的历元处理。如果页面从索引中被去除,则它没有被立即释放。相反,页面利用当前的全局历元进行标注并且存储在要在以后被释放的页面的列表上。每当全局历元向前推进时,全局原子标志就被设置,其指示存储器回收可能是有益的。存储器回收通过首先计算所有本地历元的最小值来执行。然后想要被释放的所有页面的历元最终被扫描。具有小于先前确定的最小值的历元的页面可以被立即释放。
全局历元不应该被太频繁地更新(例如,每1毫秒就足够),使得其高速缓存线通常是在所有处理内核中驻留的高速缓存。此外,当全局历元计数器已改变时,操作/线程应该只更新它们的本地历元计数器。如果全局计数器在每个操作递增,则这个方案将是正确的—但是慢。最后,如果所有的索引操作都相对较快,则这个方案工作良好。例如,在处于某个历元时处理磁盘I/O将在这一时间期间禁止任何存储器回收。因此,如果索引页不在RAM中,则索引操作必须被中止并且本地历元应该被设置为无穷大。
在一个例子中,在图8A中,执行用于捕获和清除用于数据结构操作的开始的历元的过程。在方框801中,分层数据结构操作开始。在方框810中,当前历元序列被捕获并且被发布用于操作或线程。在方框815中,在分层数据结构(例如,CHT 600,图6)上执行操作(例如,插入、修改等),从而完成所有到对象的指针的使用。在方框820中,为操作或线程发布的历元被清除(指示没有对象使用)。在方框825中,过程返回或者结束。
在一个例子中,在图8B中,执行用于释放对象的过程。在方框802中,用于释放对象的过程开始。在方框830中,当前的历元序列被捕获并且被记录用于操作或线程。在方框840中,被“释放”的对象被链接。在方框845中,过程返回或者结束。
在一个例子中,在图8C中,执行用于回收检查的过程。在方框803中,回收过程开始。在方框850中,或者周期性地或者基于存储器的压力,根据对用于操作或线程的所有所发布历元的扫描确定最小历元。在方框860中,对释放对象链进行搜索,执行具有小于最小引用历元的历元的对象的释放。在方框865中,过程返回或者结束。
图9是根据一实施例的、用于对分层数据结构进行并发的读取操作和写入操作的过程900的框图。在一种实施例中,在方框910中,过程900执行对分层数据结构的并发的读取操作和写入操作。在方框920中,过程900通过写入器获取写入器修改的分层数据结构元素上的锁存。在一种实施例中,在方框930中,读取器直接访问分层数据结构元素而无需获取锁存。在方框940中,通过写入器执行对分层数据结构的一层或多层的修改操作。在一种实施例中,在方框950中,过程900包括,当分层数据结构的去除部分不再被引用时,通过使用全局状态值和全局状态值的本地副本的组合进行跟踪。
在一个例子中,分层数据结构元素包括父节点和多个子节点。在一个例子中,节点表示页面。在一种实施例中,修改操作包括用于执行对父节点的查找以便确定要修改的分区、如果不存在用于修改满子节点的足够的空间则形成第一新子节点以及在节点链中的满子节点之前插入第一新子节点的指令。在一个例子中,插入第一新子节点包括,当节点链自从开始查找以来没有被改变过时,原子地将第一新子节点首先添加到节点链,并且利用读取器无需等待(reader-wait-free)协议直接对第一新子节点执行修改。
在一种实施例中,过程900可以包括对于在另一个修改操作上正在进行合并的分区上的修改操作,或者如果合并分区是不必要的时,退出执行。在一个例子中,创建第二新子节点,其被调整大小以便保持来自一组子节点的数据。该组子节点被合并到第二新子节点,并且节点链通过利用第二新子节点替换合并的节点被更新。
在一种实施例中,过程900还可以包括周期性地递增全局历元计数器,其中每个修改操作在每个操作的开始或每批操作一次地更新全局历元计数器的本地副本。在一个例子中,过程900还可以包括记录用于子节点的旧版本的全局历元计数器的值,并且通过在所有其它修改操作都具有超过所记录的全局历元计数器的值的本地纪元计数器值之后释放子节点的旧版本,来回收节点空间。在一种实施例中,过程900还可以包括通过利用定时器信号进行的或在读取和修改动作期间驱动的周期性更新来维护全局状态值,其中所述周期性更新包括递增计数器或捕获系统时间值。在一个例子中,诸如基于定时器(例如,每一秒等),或者基于由读取和修改操作所使用的调用(例如,对getLocalState的调用),采用“触发器”用于对全局序列的更改。在一个例子中,可以使用两种类型的全局状态,例如时间戳和简单的计数器。
在一个例子中,过程900可以提供,直接执行限制到单个分层数据结构元素的写入器操作。在另一个例子中,将原始分层数据结构元素分割成两个或更多个分层数据结构元素的写入器操作通过形成单独的分割的分层数据结构元素和保留原始层次数据结构元素不变以供任何并发读取器访问来执行。
所属技术领域的技术人员知道,本发明的各个方面可以实现为系统、方法或计算机程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明的各个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
下面将参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些计算机程序指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其他设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article of manufacture)。
计算机程序指令也可以加载到计算机、其它可编程数据处理装置或者其它设备上,使得一系列操作步骤在计算机、其它可编程装置或者其它设备上执行,产生一种计算机实现的过程,使得在所述计算机或者其它可编程装置上执行的指令提供用于实现流程图和/或框图中的一个或多个方框中所指定的功能/动作的过程。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
除非明确地如此陈述,否则权利要求中对单数形式的元素的引用并非意在表示“唯一的”,而是指“一个或多个”。目前本领域普通技术人员已知或以后知道的、与上述示例性实施例的元素等同的所有结构和功能要被本权利要求涵盖。本文没有权利要求元素要援引35U.S.C第112部分第6段来解释,除非该元素明确地利用短语“用于…的装置”或“用于…的步骤”来阐述。
本文所使用的术语仅仅是为了描述特定的实施例而不是要作为本发明的限制。如本文所使用的,除非上下文明确地另外指出,否则单数形式“一个”和“这个”是要也包括复数形式。还应当理解,当在本说明书使用时,术语“包括”规定所述特征、整数、步骤、操作、元素和/或部件的存在,但是并不排除一个或多个其它特征、整数、步骤、操作、元素、部件和/或其组的存在或添加。
以下权利要求中所有方式或步骤加功能元素的对应结构、材料、动作及等同物都是要包括用于结合具体所要求的其它所要求元素执行所述功能的任何结构、材料或动作。已经为了说明和描述给出了本发明的描述,但这不是详尽的或者要把本发明限定到所公开的形式。在不背离本发明范围与精神的情况下,许多修改和变化对本领域普通技术人员都将是显而易见的。实施例的选择和描述是为了最好地解释本发明的原理和实践应用,并使本领域普通技术人员能够理解本发明具有适于预期特定使用的各种修改的各种实施例。
Claims (20)
1.一种方法,包括:
通过数据结构处理器执行对分层数据结构的并发的读取操作和写入操作;
通过写入器获取对写入器修改的分层数据结构元素的锁存;
通过读取器直接访问分层数据结构元素而无需获取锁存;
通过写入器执行针对分层数据结构的一层或多层的修改操作;及
当分层数据结构的去除部分不再被引用时,通过使用全局状态值和全局状态值的本地副本的组合进行跟踪;
其中:
全局状态值变换通过非重复的值序列;及
分层数据结构中不再被引用的部分利用在最后一个引用被去除之后捕获的全局状态值进行标记。
2.如权利要求1所述的方法,其中所述修改操作包括用于以下的指令:
执行对父节点的查找,以便确定要利用读取器无需等待协议修改的子节点;
如果没有足够的空间用于修改满的子节点,则形成父节点的新子节点;及
将新子节点插入用于子节点的节点链中。
3.如权利要求2所述的方法,其中插入第一新子节点包括:
当节点链自从开始查找以来没有变化过时,原子地将新子节点添加到节点链,并且利用读取器无需等待协议直接对第一新子节点执行修改。
4.如权利要求3所述的方法,还包括:
对于对在另一个修改操作上正在进行合并的分区的修改操作或者如果合并该分区是不必要的时,退出执行;
创建大小被调整用于保持来自一组子节点的数据的第二新子节点;
将该组子节点合并到第二新子节点中;及
通过利用第二新子节点替换合并的节点来更新节点链。
5.如权利要求1所述的方法,还包括:
通过利用定时器信号进行的或在读取和修改动作期间驱动的周期性更新来维护全局状态值,其中包括递增计数器或捕获系统时间值。
6.如权利要求1所述的方法,还包括:
维护本地状态值,该本地状态值是通过将在任一次形成任何引用之前的全局状态值复制到分层数据结构内的条目中并且当没有操作在本地进行时清除本地状态值来周期性地更新的。
7.如权利要求6所述的方法,还包括:
通过在所有操作都具有在该值序列中比用于要被回收的部分的标记值出现得晚的本地状态值之后释放分层数据结构中不再被引用的部分来回收空间。
8.如权利要求1所述的方法,其中:
被限制到单个分层数据结构元素的修改操作被直接执行;及
通过形成单独的分割的分层数据结构元素并且保留原始分层数据结构元素不变以供任何并发读取器访问,执行将原始分层数据结构元素分割为两个或更多个分层数据结构元素的修改操作。
9.一种用于对分层数据结构元素进行并发的读取操作和写入操作的计算机系统,包括:
处理器;
耦合到处理器的存储器;
程序代码,该程序代码被存储在存储器中并且被处理器执行以便:
通过处理器执行对分层数据结构的并发的读取操作和写入操作;
通过写入器获取对写入器修改的分层数据结构元素的锁存;
通过处理器直接访问分层数据结构元素而无需获取锁存;
通过处理器执行针对分层数据结构的一层或多层的修改操作;及
当分层数据结构的去除部分不再被引用时,通过处理器通过使用全局状态值和复制的本地状态值的组合进行跟踪;
其中:
全局状态值变换通过非重复的值序列;及
分层数据结构中不再被引用的部分利用当前全局状态值进行标记。
10.如权利要求9所述的计算机系统,其中所述修改操作包括程序代码,该程序代码被存储在存储器中并且被处理器执行以便:
执行对父节点的查找,以便确定要修改的分区;
如果没有足够的空间用于修改满的子节点,则形成父节点的第一新子节点;及
将第一新子节点插入在节点链的满的子节点之前。
11.如权利要求10所述的计算机系统,其中插入第一新子节点包括:
当节点链自从开始查找以来没有变化过时,原子地将第一新子节点添加到节点链,并且利用读取器无需等待协议直接对第一新子节点执行修改。
12.如权利要求11所述的计算机系统,还包括程序代码,该程序代码被存储在存储器中并且被处理器执行以便:
对于对在另一个修改操作上正在进行合并的分区的修改操作或者如果合并该分区是不必要的时,退出执行;
创建大小被调整用于保持来自一组子节点的数据的第二新子节点;
将该组子节点合并到第二新子节点中;及
通过利用第二新子节点替换合并的节点来更新节点链。
13.如权利要求9所述的计算机系统,还包括程序代码,该程序代码被存储在存储器中并且被处理器执行以便:
通过利用定时器信号进行周期性更新来维护全局状态值,其中包括递增计数器或捕获系统时间值。
14.如权利要求9所述的计算机系统,还包括程序代码,该程序代码被存储在存储器中并且被处理器执行以便:
维护本地状态值,该本地状态值是通过将在任一次高速缓存指针之前的全局状态值复制到分层数据结构内的条目并且当没有操作在本地进行时清除本地状态值来周期性地更新的。
15.如权利要求14所述的计算机系统,还包括程序代码,该程序代码被存储在存储器中并且被处理器执行以便:
通过在所有操作都具有超过为要被回收的部分所记录的全局状态值的值的本地状态值之后释放分层数据结构中不再被引用的部分来回收空间。
16.如权利要求9所述的计算机系统,其中:
被限制到单个分层数据结构元素的写入器操作被直接执行;及
通过形成单独的分割的分层数据结构元素并且保留原始分层数据结构元素不变以供任何并发读取器访问,执行将原始分层数据结构元素分割为两个或更多个分层数据结构元素的写入器操作。
17.一种系统,包括:
数据结构处理器,配置为执行对分层数据结构的并发的读取操作和写入操作,并且当分层数据结构的去除部分不再被引用时,通过使用全局状态值和复制的本地状态值的组合进行跟踪,其中写入器获取对写入器修改的分层数据结构元素的锁存,及读取器直接访问分层数据结构元素而无需获取锁存;及
线程处理器,配置为通过写入器执行针对分层数据结构的一层或多层的修改操作,
其中:
全局状态值变换通过非重复的值序列;及
分层数据结构中不再被引用的部分利用当前全局状态值进行标记。
18.如权利要求17所述的系统,其中所述修改操作包括由线程处理器执行的指令,用于:
执行对父节点的查找,以便确定要修改的分区;
如果没有足够的空间用于修改满的子节点,则形成父节点的第一新子节点;及
通过在节点链自从开始查找以来没有被改变过时原子地将第一新子节点首先添加到节点链,将第一新子节点插入在节点链中的满的子节点之前,并且利用读取器无需等待协议直接对第一新子节点执行修改。
19.如权利要求18所述的系统,其中:
线程处理器还配置为对于对在另一个修改操作上正在进行合并的分区的修改操作或者如果合并该分区是不必要的时,退出执行;及
数据结构处理器还配置为创建大小被调整用于保持来自一组子节点的数据的第二新子节点,将该组子节点合并到第二新子节点中,及通过利用第二新子节点替换合并的节点来更新节点链。
20.如权利要求19所述的系统,还包括:
历元处理器,配置为通过利用定时器信号进行周期性更新来维护全局状态值,其中包括递增计数器或捕获系统时间值,并且配置为维护本地状态值,该本地状态值是通过将在任一次高速缓存指针之前的全局状态值复制到分层数据结构内的条目并且当没有操作在本地进行时清除本地状态值来周期性地更新的,
其中线程处理器还配置为通过在所有操作都具有超过为要被回收的部分所记录的全局状态值的值的本地状态值之后释放分层数据结构中不再被引用的部分来回收空间。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/671,664 US10108653B2 (en) | 2015-03-27 | 2015-03-27 | Concurrent reads and inserts into a data structure without latching or waiting by readers |
US14/671,664 | 2015-03-27 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106021267A true CN106021267A (zh) | 2016-10-12 |
CN106021267B CN106021267B (zh) | 2019-07-23 |
Family
ID=56975378
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610177904.0A Active CN106021267B (zh) | 2015-03-27 | 2016-03-25 | 对数据结构的并发读取和插入的方法和系统 |
Country Status (2)
Country | Link |
---|---|
US (2) | US10108653B2 (zh) |
CN (1) | CN106021267B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9311359B2 (en) | 2013-01-30 | 2016-04-12 | International Business Machines Corporation | Join operation partitioning |
US9672248B2 (en) | 2014-10-08 | 2017-06-06 | International Business Machines Corporation | Embracing and exploiting data skew during a join or groupby |
US10108653B2 (en) * | 2015-03-27 | 2018-10-23 | International Business Machines Corporation | Concurrent reads and inserts into a data structure without latching or waiting by readers |
US20180285419A1 (en) * | 2015-04-07 | 2018-10-04 | Victor Chernov | Method of sparse array implementation for large arrays |
CN105955804B (zh) * | 2016-04-22 | 2018-06-05 | 星环信息科技(上海)有限公司 | 一种处理分布式事务的方法与设备 |
US10489424B2 (en) | 2016-09-26 | 2019-11-26 | Amazon Technologies, Inc. | Different hierarchies of resource data objects for managing system resources |
US10545950B2 (en) | 2016-09-26 | 2020-01-28 | Amazon Technologies, Inc. | Atomic application of multiple updates to a hierarchical data structure |
US11675774B2 (en) | 2016-09-23 | 2023-06-13 | Amazon Technologies, Inc. | Remote policy validation for managing distributed system resources |
US10148499B2 (en) * | 2016-11-09 | 2018-12-04 | Seagate Technology Llc | Verifying distributed computing results via nodes configured according to a tree structure |
US11392570B2 (en) * | 2018-03-09 | 2022-07-19 | Microsoft Technology Licensing, Llc | Key-value store system |
CN110611688B (zh) * | 2018-06-15 | 2022-04-12 | 伊姆西Ip控股有限责任公司 | 用于查找节点的方法、电子设备和计算机程序产品 |
WO2020005597A1 (en) * | 2018-06-28 | 2020-01-02 | Microsoft Technology Licensing, Llc | Managing global and local execution phases |
US11405381B2 (en) * | 2019-07-02 | 2022-08-02 | Hewlett Packard Enterprise Development Lp | Tag-based access permissions for cloud computing resources |
CN113407573A (zh) * | 2021-06-11 | 2021-09-17 | 广发证券股份有限公司 | 一种实现多索引内存数据并发读写的方法 |
CN113420012B (zh) * | 2021-07-14 | 2024-04-09 | 上海达梦数据库有限公司 | 数据库节点管理方法、装置、数据库节点及存储介质 |
CN117609227A (zh) * | 2023-11-09 | 2024-02-27 | 北京火山引擎科技有限公司 | 数据处理方法、装置及电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5740440A (en) * | 1995-01-06 | 1998-04-14 | Objective Software Technology | Dynamic object visualization and browsing system |
US7287131B1 (en) * | 2003-03-21 | 2007-10-23 | Sun Microsystems, Inc. | Method and apparatus for implementing a fully dynamic lock-free hash table |
CN100367239C (zh) * | 2001-06-09 | 2008-02-06 | Sap股份公司 | 用于数据库系统的考虑了高速缓存的并行控制方案 |
CN101231657A (zh) * | 2007-01-26 | 2008-07-30 | 国际商业机器公司 | 用于访问数据的方法以及数据处理系统 |
US20090003238A1 (en) * | 2007-06-26 | 2009-01-01 | Lorraine Denby | Node Merging Process for Network Topology Representation |
CN103635902A (zh) * | 2011-05-13 | 2014-03-12 | 森普利维蒂公司 | 引用计数传播 |
Family Cites Families (126)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04251346A (ja) | 1990-05-16 | 1992-09-07 | Internatl Business Mach Corp <Ibm> | データ処理システムにおいて文書を階層的にグループ化する方法 |
JP3266351B2 (ja) | 1993-01-20 | 2002-03-18 | 株式会社日立製作所 | データベース管理システムおよび問合せの処理方法 |
US5794229A (en) | 1993-04-16 | 1998-08-11 | Sybase, Inc. | Database system with methodology for storing a database table by vertically partitioning all columns of the table |
US5455826A (en) * | 1994-06-28 | 1995-10-03 | Oezveren; Cueneyt M. | Method and apparatus for rate based flow control |
DE19515020A1 (de) | 1994-07-01 | 1996-01-04 | Hewlett Packard Co | Verfahren und Vorrichtung zum Optimieren von Abfragen mit Gruppieren-nach-Operatoren |
CA2168287C (en) | 1995-03-31 | 2000-05-23 | Guy M. Lohman | Method for detecting and optimizing relational queries with encoding/decoding tables |
US5706495A (en) | 1996-05-07 | 1998-01-06 | International Business Machines Corporation | Encoded-vector indices for decision support and warehousing |
US6134601A (en) | 1996-06-17 | 2000-10-17 | Networks Associates, Inc. | Computer resource management system |
US6052697A (en) | 1996-12-23 | 2000-04-18 | Microsoft Corporation | Reorganization of collisions in a hash bucket of a hash table to improve system performance |
US5893086A (en) | 1997-07-11 | 1999-04-06 | International Business Machines Corporation | Parallel file system and method with extensible hashing |
US6557091B2 (en) | 1997-08-22 | 2003-04-29 | Koninklijke Philips Electronics N.V. | Data processor with localized memory reclamation |
GB9811574D0 (en) | 1998-05-30 | 1998-07-29 | Ibm | Indexed file system and a method and a mechanism for accessing data records from such a system |
US6247014B1 (en) | 1998-07-01 | 2001-06-12 | Nortel Networks Limited | Method and apparatus for performing hash lookups using valid bit tables with pointers |
US6609131B1 (en) | 1999-09-27 | 2003-08-19 | Oracle International Corporation | Parallel partition-wise joins |
DE19961499A1 (de) | 1999-12-20 | 2001-07-05 | Ericsson Telefon Ab L M | Caching von Objekten in Platten-gestützten Datenbanken |
US20020016820A1 (en) | 2000-05-30 | 2002-02-07 | Jordan Du Val | Distributing datacast signals embedded in broadcast transmissions over a computer network |
US6505189B1 (en) | 2000-06-15 | 2003-01-07 | Ncr Corporation | Aggregate join index for relational databases |
US8692695B2 (en) | 2000-10-03 | 2014-04-08 | Realtime Data, Llc | Methods for encoding and decoding data |
US6954776B1 (en) | 2001-05-07 | 2005-10-11 | Oracle International Corporation | Enabling intra-partition parallelism for partition-based operations |
US7293028B2 (en) | 2001-06-08 | 2007-11-06 | Sap Ag | Cache-conscious concurrency control scheme for database systems |
US7136883B2 (en) | 2001-09-08 | 2006-11-14 | Siemens Medial Solutions Health Services Corporation | System for managing object storage and retrieval in partitioned storage media |
US7062481B2 (en) | 2001-09-28 | 2006-06-13 | Ncr Corp. | Eliminating group-by operations in a join plan |
US6757677B2 (en) | 2001-09-28 | 2004-06-29 | Ncr Corporation | Providing a join plan using group-by operator |
US7499960B2 (en) | 2001-10-01 | 2009-03-03 | Oracle International Corporation | Adaptive memory allocation |
US6775681B1 (en) | 2002-02-26 | 2004-08-10 | Oracle International Corporation | Evaluation of grouping sets by reduction to group-by clause, with or without a rollup operator, using temporary tables |
US6937652B2 (en) | 2002-04-19 | 2005-08-30 | Seiko Epson Corporation | Frame compression using radix approximation |
US8612421B2 (en) | 2003-05-07 | 2013-12-17 | Oracle International Corporation | Efficient processing of relational joins of multidimensional data |
US7472107B2 (en) | 2003-06-23 | 2008-12-30 | Microsoft Corporation | Integrating horizontal partitioning into physical database design |
US20050018683A1 (en) | 2003-07-21 | 2005-01-27 | Zhao Yigiang Q. | IP address storage technique for longest prefix match |
US7412439B2 (en) | 2004-01-07 | 2008-08-12 | International Business Machines Corporation | Method for statistics management |
US8886614B2 (en) | 2004-02-03 | 2014-11-11 | Teradata Us, Inc. | Executing a join plan using data compression |
US8768889B1 (en) | 2004-04-07 | 2014-07-01 | Oracle America, Inc. | Method and apparatus for performing lock-free updates in a linked list |
US7827182B1 (en) | 2004-06-02 | 2010-11-02 | Cisco Technology, Inc | Searching for a path to identify where to move entries among hash tables with storage for multiple entries per bucket during insert operations |
US7177883B2 (en) | 2004-07-15 | 2007-02-13 | Hitachi, Ltd. | Method and apparatus for hierarchical storage management based on data value and user interest |
US7343363B1 (en) | 2004-09-29 | 2008-03-11 | Unisys Corporation | Methods and apparatus for grouping elements of element pairs into element sets |
US8145642B2 (en) | 2004-11-30 | 2012-03-27 | Oracle International Corporation | Method and apparatus to support bitmap filtering in a parallel system |
US7308539B2 (en) | 2004-12-17 | 2007-12-11 | International Business Machines Corporation | Concurrent read access and exclusive write access to data in shared memory architecture |
US20060218176A1 (en) | 2005-03-24 | 2006-09-28 | International Business Machines Corporation | System, method, and service for organizing data for fast retrieval |
US7653670B2 (en) | 2005-11-28 | 2010-01-26 | Nec Laboratories America, Inc. | Storage-efficient and collision-free hash-based packet processing architecture and method |
US7685098B2 (en) | 2005-12-08 | 2010-03-23 | International Business Machines Corporation | Estimating the size of a join by generating and combining partial join estimates |
US7716180B2 (en) | 2005-12-29 | 2010-05-11 | Amazon Technologies, Inc. | Distributed storage system with web services client interface |
US8838620B2 (en) | 2006-02-03 | 2014-09-16 | International Business Machines Corporation | Predictive data object retrieval |
US7831793B2 (en) | 2006-03-01 | 2010-11-09 | Quantum Corporation | Data storage system including unique block pool manager and applications in tiered storage |
US20090187586A1 (en) | 2006-03-31 | 2009-07-23 | Qd Technology Llc | Selecting various algorithms to compress columns of analytic data in a read-only relational database in a manner that allows decompression of the compressed data using minimal system resources |
US7619623B2 (en) | 2006-04-17 | 2009-11-17 | Microsoft Corporation | Perfect multidimensional spatial hashing |
US7965297B2 (en) | 2006-04-17 | 2011-06-21 | Microsoft Corporation | Perfect hashing of variably-sized data |
US7574435B2 (en) | 2006-05-03 | 2009-08-11 | International Business Machines Corporation | Hierarchical storage management of metadata |
US7805460B2 (en) | 2006-10-26 | 2010-09-28 | Polytechnic Institute Of New York University | Generating a hierarchical data structure associated with a plurality of known arbitrary-length bit strings used for detecting whether an arbitrary-length bit string input matches one of a plurality of known arbitrary-length bit string |
US7827218B1 (en) | 2006-11-18 | 2010-11-02 | X-Engines, Inc. | Deterministic lookup using hashed key in a multi-stride compressed trie structure |
CN100488174C (zh) | 2006-11-24 | 2009-05-13 | 中兴通讯股份有限公司 | 流分类中基于硬件的差异化组织方法 |
US7676635B2 (en) | 2006-11-29 | 2010-03-09 | International Business Machines Corporation | Recoverable cache preload in clustered computer system based upon monitored preload state of cache |
US8027993B2 (en) | 2006-12-28 | 2011-09-27 | Teradota Us, Inc. | Techniques for establishing and enforcing row level database security |
US7564722B2 (en) | 2007-01-22 | 2009-07-21 | Micron Technology, Inc. | Memory system and method having volatile and non-volatile memory devices at same hierarchical level |
US20090006399A1 (en) | 2007-06-29 | 2009-01-01 | International Business Machines Corporation | Compression method for relational tables based on combined column and row coding |
US8799272B2 (en) | 2007-07-20 | 2014-08-05 | Hewlett-Packard Development Company, L.P. | Data skew insensitive parallel join scheme |
US9626421B2 (en) | 2007-09-21 | 2017-04-18 | Hasso-Plattner-Institut Fur Softwaresystemtechnik Gmbh | ETL-less zero-redundancy system and method for reporting OLTP data |
JP2009093571A (ja) | 2007-10-11 | 2009-04-30 | Hitachi Ltd | 記憶制御装置、記憶制御装置のデータアーカイブ方法及びストレージシステム |
US9805077B2 (en) | 2008-02-19 | 2017-10-31 | International Business Machines Corporation | Method and system for optimizing data access in a database using multi-class objects |
JP4613969B2 (ja) | 2008-03-03 | 2011-01-19 | ソニー株式会社 | 通信装置、及び通信方法 |
US8271564B2 (en) | 2008-07-14 | 2012-09-18 | Symbol Technologies, Inc. | Lookup table arrangement and related management method for accommodating concurrent processors |
US8078593B1 (en) | 2008-08-28 | 2011-12-13 | Infineta Systems, Inc. | Dictionary architecture and methodology for revision-tolerant data de-duplication |
CN101388042B (zh) | 2008-09-17 | 2011-01-19 | 北京六维世纪网络技术有限公司 | 一种建立文件特征库索引的方法及装置 |
US20100088309A1 (en) | 2008-10-05 | 2010-04-08 | Microsoft Corporation | Efficient large-scale joining for querying of column based data encoded structures |
US8195644B2 (en) | 2008-10-06 | 2012-06-05 | Teradata Us, Inc. | System, method, and computer-readable medium for optimization of multiple parallel join operations on skewed data |
US8060495B2 (en) | 2008-10-21 | 2011-11-15 | International Business Machines Corporation | Query execution plan efficiency in a database management system |
US8234268B2 (en) | 2008-11-25 | 2012-07-31 | Teradata Us, Inc. | System, method, and computer-readable medium for optimizing processing of distinct and aggregation queries on skewed data in a database system |
US8212695B2 (en) | 2009-02-05 | 2012-07-03 | Polytechnic Institute Of New York University | Generating a log-log hash-based hierarchical data structure associated with a plurality of known arbitrary-length bit strings used for detecting whether an arbitrary-length bit string input matches one of a plurality of known arbitrary-length bit strings |
US8805852B2 (en) | 2009-03-02 | 2014-08-12 | International Business Machines Corporation | Automatic query execution plan management and performance stabilization for workloads |
RU2517238C2 (ru) | 2009-04-08 | 2014-05-27 | Интел Корпорейшн | Выполнение параллельного повторного хэширования хеш-таблицы для многопоточных приложений |
US8515965B2 (en) | 2010-05-18 | 2013-08-20 | Lsi Corporation | Concurrent linked-list traversal for real-time hash processing in multi-core, multi-thread network processors |
US8321385B2 (en) | 2010-03-12 | 2012-11-27 | Lsi Corporation | Hash processing in a network communications processor architecture |
US7868789B1 (en) | 2009-06-28 | 2011-01-11 | Sap Ag | Dictionary-based order-preserving string compression for main memory column stores |
US8438574B1 (en) | 2009-08-14 | 2013-05-07 | Translattice, Inc. | Generating monotone hash preferences |
US9280609B2 (en) | 2009-09-08 | 2016-03-08 | Brocade Communications Systems, Inc. | Exact match lookup scheme |
US8543539B2 (en) | 2009-09-16 | 2013-09-24 | Business Objects Software Limited | Method and system for capturing change of data |
US8244765B2 (en) | 2009-09-30 | 2012-08-14 | International Business Machines Corporation | Avoiding three-valued logic in predicates on dictionary-encoded data |
US9262330B2 (en) | 2009-11-04 | 2016-02-16 | Microsoft Technology Licensing, Llc | Column oriented in-memory page caching |
US8443155B2 (en) | 2009-12-31 | 2013-05-14 | Facebook, Inc. | Lock-free concurrent object dictionary |
GB201004449D0 (en) | 2010-02-22 | 2010-05-05 | Corbett Sean | Data accelerator |
KR101725172B1 (ko) | 2010-03-10 | 2017-04-10 | 아브 이니티오 테크놀로지 엘엘시 | 개별적으로 액세스 가능한 데이터 유닛의 스토리지 관리 방법 |
US8788543B2 (en) | 2010-05-13 | 2014-07-22 | International Business Machines Corporation | Scalable, concurrent resizing of hash tables |
EP2579157B1 (en) | 2010-05-27 | 2016-12-07 | Hitachi, Ltd. | Local file server operative to transfer file to remote file server via communication network, and storage system including those file servers |
US20110307471A1 (en) | 2010-06-09 | 2011-12-15 | International Business Machines Corporation | Accelerating Database Management System Operations |
US9355109B2 (en) | 2010-06-11 | 2016-05-31 | The Research Foundation For The State University Of New York | Multi-tier caching |
US20120011144A1 (en) | 2010-07-12 | 2012-01-12 | Frederik Transier | Aggregation in parallel computation environments with shared memory |
US8312066B2 (en) | 2010-11-30 | 2012-11-13 | Telefonaktiebolaget L M Ericsson (Publ) | Hash collision resolution with key compression in a MAC forwarding data structure |
US20120136846A1 (en) | 2010-11-30 | 2012-05-31 | Haoyu Song | Methods of hashing for networks and systems thereof |
US8880554B2 (en) | 2010-12-03 | 2014-11-04 | Futurewei Technologies, Inc. | Method and apparatus for high performance, updatable, and deterministic hash table for network equipment |
US9436558B1 (en) | 2010-12-21 | 2016-09-06 | Acronis International Gmbh | System and method for fast backup and restoring using sorted hashes |
US20120166400A1 (en) | 2010-12-28 | 2012-06-28 | Teradata Us, Inc. | Techniques for processing operations on column partitions in a database |
US8423522B2 (en) | 2011-01-04 | 2013-04-16 | International Business Machines Corporation | Query-aware compression of join results |
JP5624510B2 (ja) | 2011-04-08 | 2014-11-12 | 株式会社東芝 | 記憶装置、記憶システム及び認証方法 |
US10044548B2 (en) | 2012-10-15 | 2018-08-07 | Jetflow Technologies | Flowlet-based processing |
US20120303633A1 (en) | 2011-05-26 | 2012-11-29 | International Business Machines Corporation | Systems and methods for querying column oriented databases |
US20120310917A1 (en) | 2011-05-31 | 2012-12-06 | International Business Machines Corporation | Accelerated Join Process in Relational Database Management System |
EP2724226A1 (en) | 2011-06-23 | 2014-04-30 | CohortFS, LLC | Dynamic data placement for distributed storage |
US8806160B2 (en) | 2011-08-16 | 2014-08-12 | Pure Storage, Inc. | Mapping in a storage system |
US8661005B2 (en) | 2011-12-08 | 2014-02-25 | International Business Machines Corporation | Optimized deletion and insertion for high-performance resizable RCU-protected hash tables |
US8768927B2 (en) | 2011-12-22 | 2014-07-01 | Sap Ag | Hybrid database table stored as both row and column store |
US20130218934A1 (en) | 2012-02-17 | 2013-08-22 | Hitachi, Ltd. | Method for directory entries split and merge in distributed file system |
EP2829976A4 (en) | 2012-03-22 | 2015-11-11 | Nec Corp | DISTRIBUTED STORAGE SYSTEM, STORAGE CONTROL METHOD, AND PROGRAM |
US9092141B2 (en) | 2012-04-18 | 2015-07-28 | Hitachi, Ltd. | Method and apparatus to manage data location |
US9535939B2 (en) | 2012-05-31 | 2017-01-03 | International Business Machines Corporation | Intra-block partitioning for database management |
US9355146B2 (en) | 2012-06-29 | 2016-05-31 | International Business Machines Corporation | Efficient partitioned joins in a database with column-major layout |
US8862571B2 (en) | 2012-06-29 | 2014-10-14 | International Business Machines Corporation | Predicate pushdown with late materialization in database query processing |
WO2014010038A1 (ja) | 2012-07-11 | 2014-01-16 | 株式会社日立製作所 | 情報処理システム |
US9665572B2 (en) | 2012-09-12 | 2017-05-30 | Oracle International Corporation | Optimal data representation and auxiliary structures for in-memory database query processing |
US9298723B1 (en) | 2012-09-19 | 2016-03-29 | Amazon Technologies, Inc. | Deduplication architecture |
US20150301743A1 (en) | 2012-09-24 | 2015-10-22 | Hitachi, Ltd. | Computer and method for controlling allocation of data in storage apparatus hierarchical pool |
US9646105B2 (en) | 2012-11-08 | 2017-05-09 | Texas Instruments Incorporated | Reduced complexity hashing |
US9355060B1 (en) | 2012-12-14 | 2016-05-31 | Amazon Technologies, Inc. | Storage service lifecycle policy transition management |
US9098537B2 (en) | 2012-12-20 | 2015-08-04 | Oracle International Corporation | Techniques for aligned run-length encoding |
US9596312B2 (en) | 2013-01-28 | 2017-03-14 | Facebook, Inc. | Static resource caching |
US9171043B2 (en) | 2013-01-31 | 2015-10-27 | International Business Machines Corporation | Dynamically determining join order |
US20140337375A1 (en) | 2013-05-07 | 2014-11-13 | Exeray Inc. | Data search and storage with hash table-based data structures |
US9367556B2 (en) | 2013-06-14 | 2016-06-14 | International Business Machines Corporation | Hashing scheme using compact array tables |
US9684682B2 (en) | 2013-09-21 | 2017-06-20 | Oracle International Corporation | Sharding of in-memory objects across NUMA nodes |
US10311154B2 (en) | 2013-09-21 | 2019-06-04 | Oracle International Corporation | Combined row and columnar storage for in-memory databases for OLTP and analytics workloads |
US9378232B2 (en) | 2013-09-21 | 2016-06-28 | Oracle International Corporation | Framework for numa affinitized parallel query on in-memory objects within the RDBMS |
CN104679746A (zh) | 2013-11-26 | 2015-06-03 | 南京中兴新软件有限责任公司 | 去重复数据的恢复方法及装置 |
CN103672239A (zh) | 2013-11-29 | 2014-03-26 | 张家港华日法兰有限公司 | 一种法兰盘 |
CN104021205B (zh) | 2014-06-18 | 2017-04-19 | 中国人民解放军国防科学技术大学 | 一种建立微博索引的方法及装置 |
CN104317966B (zh) | 2014-11-18 | 2017-08-08 | 国家电网公司 | 一种用于电力大数据快速组合查询的动态索引方法 |
US9891831B2 (en) | 2014-11-25 | 2018-02-13 | Sap Se | Dual data storage using an in-memory array and an on-disk page structure |
US9792318B2 (en) | 2014-11-25 | 2017-10-17 | Sap Se | Supporting cursor snapshot semantics |
US10108653B2 (en) * | 2015-03-27 | 2018-10-23 | International Business Machines Corporation | Concurrent reads and inserts into a data structure without latching or waiting by readers |
-
2015
- 2015-03-27 US US14/671,664 patent/US10108653B2/en active Active
-
2016
- 2016-03-25 CN CN201610177904.0A patent/CN106021267B/zh active Active
-
2018
- 2018-07-27 US US16/048,060 patent/US11080260B2/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5740440A (en) * | 1995-01-06 | 1998-04-14 | Objective Software Technology | Dynamic object visualization and browsing system |
CN100367239C (zh) * | 2001-06-09 | 2008-02-06 | Sap股份公司 | 用于数据库系统的考虑了高速缓存的并行控制方案 |
US7287131B1 (en) * | 2003-03-21 | 2007-10-23 | Sun Microsystems, Inc. | Method and apparatus for implementing a fully dynamic lock-free hash table |
CN101231657A (zh) * | 2007-01-26 | 2008-07-30 | 国际商业机器公司 | 用于访问数据的方法以及数据处理系统 |
US20090003238A1 (en) * | 2007-06-26 | 2009-01-01 | Lorraine Denby | Node Merging Process for Network Topology Representation |
CN103635902A (zh) * | 2011-05-13 | 2014-03-12 | 森普利维蒂公司 | 引用计数传播 |
Also Published As
Publication number | Publication date |
---|---|
US20180336236A1 (en) | 2018-11-22 |
US10108653B2 (en) | 2018-10-23 |
US20160283540A1 (en) | 2016-09-29 |
US11080260B2 (en) | 2021-08-03 |
CN106021267B (zh) | 2019-07-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106021267A (zh) | 对数据结构的并发读取和插入而无需读取器的锁存或等待 | |
JP7410181B2 (ja) | ハイブリッド・インデックス作成方法、システム、プログラム | |
US11048691B2 (en) | In-memory database system | |
EP3170106B1 (en) | High throughput data modifications using blind update operations | |
CN107077495B (zh) | 数据库管理系统中的高性能事务 | |
US9858303B2 (en) | In-memory latch-free index structure | |
JP6408568B2 (ja) | 複数のアクセスメソッドのためのラッチフリーのログ構造化ストレージ | |
US9003162B2 (en) | Structuring storage based on latch-free B-trees | |
CN106021266A (zh) | 支持动态更新的快速多层索引 | |
US20100306236A1 (en) | Data Policy Management System and Method for Managing Data | |
Lovelace et al. | VSAM demystified | |
CN105095261A (zh) | 数据插入方法和装置 | |
Riegger et al. | Efficient data and indexing structure for blockchains in enterprise systems | |
CN110832473B (zh) | 日志结构管理系统及方法 | |
Tang et al. | Tuning object-centric data management systems for large scale scientific applications | |
JP2015162042A (ja) | インデックス管理装置 | |
JP2009157805A (ja) | オブジェクトキャッシュ構築方法、オブジェクトキャッシュ構築プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |