CN112434035B - 基于机器学习的并发哈希索引数据结构的索引方法及系统 - Google Patents
基于机器学习的并发哈希索引数据结构的索引方法及系统 Download PDFInfo
- Publication number
- CN112434035B CN112434035B CN202011310093.XA CN202011310093A CN112434035B CN 112434035 B CN112434035 B CN 112434035B CN 202011310093 A CN202011310093 A CN 202011310093A CN 112434035 B CN112434035 B CN 112434035B
- Authority
- CN
- China
- Prior art keywords
- node
- request
- data
- group
- new node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2465—Query processing support for facilitating data mining operations in structured databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Abstract
本发明提供了一种基于机器学习的并发哈希索引数据结构的索引方法及系统,包括:步骤M1:从根节点根据请求中的键查找目标键值对所在的组节点;步骤M2:在定位得到的组节点中,根据组节点的机器学习模型计算数据位置;步骤M3:根据数据位置查找目标数据,根据请求类型进行相应操作。本发明与现有机器学习哈希索引相比,本系统会重新训练机器学习模型,在哈希冲突概率超过阈值时进行哈希扩容操作,使机器学习模型适应新插入的数据,保持索引高性能。
Description
技术领域
本发明涉及数据存储系统数据索引领域,具体地,涉及一种基于机器学习的并发哈希索引数据结构的索引方法及系统,更为具体地,涉及一种基于机器学习的高效并发哈希索引数据结构。
背景技术
数据库是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。高效的索引结构对数据库的性能有十分重要的影响。索引是一种加速数据查询操作的数据结构。索引包括许多关键词,每个关键词指向一项数据。索引可以快速地查询某个关键词对应的数据,因此被广泛应用于数据库的高效查询。近年来,随着索引技术的不断发展,出现了机器学习与索引结合的尝试。
机器学习是人工智能的一个分支,是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法的方法。按照学习形式的不同,机器学习可以分为监督学习、无监督学习、半监督学习、增强学习等等。其具体算法又包括线性回归、支持向量机、决策树、深度神经网络等等。一个机器学习模型由属于决策核心的计算算法和组成决策的变量和特征组成。要使用机器学习技术,首先使用现有数据,按照模型的计算算法对模型进行训练,得到组成决策的变量和特征,之后便可以对新的数据进行推理。由于具有良好的泛化能力,机器学习技术被广泛应用于各个领域。
在线性表、树之类的索引结构中,记录在结构中的相对位置是随机的,即和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在“比较”的基础上,查找的效率依赖于查找过程中所进行的比较次数。而哈希索引用索引列的值计算该值的哈希码,然后在哈希码相应的位置存执该值所在行数据的物理位置,因为使用散列算法,因此在查找时不需要进行索引的比较,访问速度非常快,但是一个值只能对应一个哈希码,而且是散列的分布方式,因此哈希索引不支持范围查找和排序的功能。
近年来、利用机器学习技术优化索引结构的概念被提出。其核心思想是将索引视为一个关键词到数据位置的函数,即一个累计分布函数,而这样的线性函数能够很好的使用线性回归、深度神经网络等机器学习模型进行拟合。使用机器学习模型能够一次计算出关键词对应的大致的数据位置范围,然后在范围内进行搜索,避免了传统索引系统的多次内存或者磁盘中的数据查询操作,从而实现更好的读性能。
现有的基于机器学习的哈希索引方法提出了一种分层结构,结构中的每一层中的模型被单独训练。每一层中的机器学习模型选择下一层要使用哪个模型,而最后一层模型对关键词对应的数据位置进行预测,得到数据所在的位置,从而得到最终的数据。
然而,现有的基于机器学习的哈希索引仍然存在着许多的不足。具体有以下两方面原因:
首先,哈希索引的性能和其哈希函数的冲突概率密切相关。由于机器学习模型是不能实时更新的,每次计算模型后,其哈希函数是固定的,当存在大量的插入操作时,哈希函数的冲突概率会急剧上升,这对整体的哈希索引性能有显著负面影响。因此为保证索引的高性能,必须及时进行哈希扩容操作,减少哈希函数的冲突概率。
另外,由于存在并发的更新操作,哈希索引在进行哈希扩容操作时很难保证数据的一致性和高性能。一种基本的方法是在哈希扩容时阻塞所有的写操作,等待哈希扩容操作完成后允许写操作继续执行。但方法会极大影响索引的性能。而由于机器模型是不能实时更新的,模型训练需要比较长的时间,所以若在哈希扩容时采用阻塞所有写操作的方法,对性能的影响更加明显。
目前,还没有一种基于机器学习哈希索引的工作,能够实现高效的读写请求和哈希扩容操作的并发,并根据新插入数据重新训练机器学习模型以保持整体哈希索引的高性能。因此,先前的工作对于基于机器学习的哈希索引的研究并不全面,还有一定的空白。
专利文献CN106991102A(申请号:201610042152.7)公开了一种倒排索引中键值对的处理方法及处理系统,包括:将键值对中的值按照预设格式生成项目;将所述项目依据其权重进行排序;将所述排序后的项目存储在内存块中,并生成指向所述内存块的指针,其中所述内存块用于形成内存数组;将键值对中的键与所述指针存储为指针数组;将所述指针数组与所述内存数组构成索引列表;将多个键值对所构成的索引列表存储在哈希图中,以形成倒排索引。本发明通过将传统的倒排链存储为内存块数组,并生成对应的指针数组,不仅算法复杂度低,而且支持通过二分查找法进行动态插入和删除操作,还支持TopN查询等,对内存消耗也随之降低。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种基于机器学习的并发哈希索引数据结构的索引方法及系统。
根据本发明提供的一种基于机器学习的并发哈希索引数据结构的索引方法,包括:
步骤M1:从根节点根据请求中的键查找目标键值对所在的组节点;
步骤M2:在定位得到的组节点中,根据组节点的机器学习模型计算数据位置;
步骤M3:根据数据位置查找目标数据,根据请求类型进行相应操作。
优选地,所述步骤M1包括:将请求中的键作为根节点的机器学习模型的输入,计算得到当前键所在的组节点位置,找到目标键值对所在的组节点。
优选地,所述步骤M3中根据请求类型进行相应操作包括:当请求类型为读请求时,当根据数据位置找到相应的目标数据,则读取目标数据并将读取的目标数据进行返回;当根据数据位置未找到相应的目标数据,则返回空值;当请求类型为写请求时,当根据数据位置找到相应的目标数据,则进行更新操作;当根据数据位置未找到相应的目标数据,则进行插入操作;当请求类型为删除请求时,则删除目标键值对,将目标键值对标记为逻辑删除状态。
优选地,还包括:遍历所有组节点,根据当前组节点中原节点容量和冲突的键值对数量计算哈希冲突概率,当哈希冲突概率超过阈值时,则进行哈希扩容操作,在当前组节点中创建新节点。
优选地,所述创建新节点包括:
新节点创建步骤:在原组节点中创建容量达到预设值的新节点;
获取数据步骤:遍历组节点中原节点中的所有数据,获取所有键的值;
模型训练步骤:根据获取的所有键的值训练新节点的机器学习模型;
更新节点步骤:标记插入操作只在新节点中进行,遍历组节点中原节点将所有数据插入新节点,且插入时新节点的每个键值对中的值均为指针,指向组节点中原节点的键值对结构的值;
新节点生效步骤:将哈希表根节点指向组节点中原节点的指针更换为指向新节点,新节点生效,利用新节点中数组项的元数据中的锁和指针标记位将数据项的值从指针原子地换为该指针当前指向的实际值,而后删除组节点中原节点。
优选地,还包括在哈希扩容操作过程中,根据请求类型进行相应操作;
当请求类型为读请求时,将请求中的键作为组节点中原节点机器学习模型的输入,计算目标键值的具体位置,在原节点中进行查找,当找到目标键值对时,则执行完成请求步骤;当未找到目标键值对时,则在创建的新节点中进行查找;当创建的新节点不为空,则在新节点中执行数据查找,而后执行完成请求步骤;当新节点为空,且操作为读请求或删除请求,则立即执行完成请求;当新节点为空且操作为写请求时,则重新执行新节点数据查找步骤。
优选地,所述根据请求类型进行相应操作时均进行并发访问控制;
所述并发访问控制是通过数据项元数据中的互斥锁和版本号进行并发控制,写请求或删除请求时都需获得键值对元数据中的互斥锁并递增版本号;
读请求不需获得互斥锁,但若请求返回时互斥锁被其他请求使用或版本号与请求开始时的版本号不同,则需重试。
优选地,所述目标键值对存储于节点构成的哈希表中。
根据本发明提供的一种基于机器学习的并发哈希索引数据结构的索引系统,包括:
模块M1:从根节点根据请求中的键查找目标键值对所在的组节点;
模块M2:在定位得到的组节点中,根据组节点的机器学习模型计算数据位置;
模块M3:根据数据位置查找目标数据,根据请求类型进行相应操作。
优选地,所述模块M1包括:将请求中的键作为根节点的机器学习模型的输入,计算得到当前键所在的组节点位置,找到目标键值对所在的组节点;
所述模块M3中根据请求类型进行相应操作包括:当请求类型为读请求时,当根据数据位置找到相应的目标数据,则读取目标数据并将读取的目标数据进行返回;当根据数据位置未找到相应的目标数据,则返回空值;当请求类型为写请求时,当根据数据位置找到相应的目标数据,则进行更新操作;当根据数据位置未找到相应的目标数据,则进行插入操作;当请求类型为删除请求时,则删除目标键值对,将目标键值对标记为逻辑删除状态;
还包括:遍历所有组节点,根据当前组节点中原节点容量和冲突的键值对数量计算哈希冲突概率,当哈希冲突概率超过阈值时,则进行哈希扩容操作,在当前组节点中创建新节点;
所述创建新节点包括:
新节点创建模块:在原组节点中创建容量达到预设值的新节点;
获取数据模块:遍历组节点中原节点中的所有数据,获取所有键的值;
模型训练模块:根据获取的所有键的值训练新节点的机器学习模型;
更新节点模块:标记插入操作只在新节点中进行,遍历组节点中原节点将所有数据插入新节点,且插入时新节点的每个键值对中的值均为指针,指向组节点中原节点的键值对结构的值;
新节点生效模块:将哈希表根节点指向组节点中原节点的指针更换为指向新节点,新节点生效,利用新节点中数组项的元数据中的锁和指针标记位将数据项的值从指针原子地换为该指针当前指向的实际值,而后删除组节点中原节点;
还包括在哈希扩容操作过程中,根据请求类型进行相应操作;
当请求类型为读请求时,将请求中的键作为组节点中原节点机器学习模型的输入,计算目标键值的具体位置,在原节点中进行查找,当找到目标键值对时,则完成请求;当未找到目标键值对时,则在创建的新节点中进行查找;当创建的新节点不为空,则在新节点中执行数据查找,而后完成请求;当新节点为空,且操作为读请求或删除请求,则立即执行完成请求;当新节点为空且操作为写请求时,则重新触发新节点数据查找;
所述根据请求类型进行相应操作时均进行并发访问控制;
所述并发访问控制是通过数据项元数据中的互斥锁和版本号进行并发控制,写请求或删除请求时都需获得键值对元数据中的互斥锁并递增版本号;
读请求不需获得互斥锁,但若请求返回时互斥锁被其他请求使用或版本号与请求开始时的版本号不同,则需重试;
所述目标键值对存储于节点构成的哈希表中。
与现有技术相比,本发明具有如下的有益效果:
1.本发明与现有非机器学习哈希索引相比,引入机器学习模型,提升哈希索引性能;
2.本发明与现有机器学习哈希索引相比,本系统使用细粒度的并发控制,使得并发的哈希索引操作保持高性能;
3.本发明与现有机器学习哈希索引相比,本系统会重新训练机器学习模型,在哈希冲突概率超过阈值时进行哈希扩容操作,使机器学习模型适应新插入的数据,保持索引高性能;
4.本发明与现有机器学习哈希索引相比,本系统使用RCU(Read-Copy-Update)技术和两层缓存数据结构,支持并发的哈希扩容操作和索引操作,减少因索引操作被阻塞导致的性能波动,同时保障了索引数据的一致性;
5.本发明与现有机器学习哈希索引相比,本系统使用两层索引结构,在保持索引性能的同时避免多层索引结构的节点跳转带来的性能开销。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明的索引实施流程示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
实施例1
本发明提供了一种基于机器学习的并发哈希索引数据结构的索引方法,所述哈希索引方法分为前台线程和后台线程,数据的索引操作(读写请求)在前台线程进行,哈希扩容操作在后台线程进行;本发明使用锁和版本号对索引的读写操作进行并发控制;本发明使用RCU技术,保障了哈希扩容操作更新节点时数据的一致性;本发明通过在哈希扩容时执行两阶段拷贝操作,支持并发的哈希扩容操作和索引操作,减少因哈希扩容时索引操作被阻塞导致的性能波动,同时保障了索引数据的一致性;本发明使用双层索引结构,在保持索引性能的同时避免多层索引结构的节点跳转带来的性能开销。
根据本发明提供的一种基于机器学习的并发哈希索引数据结构的索引方法,如图1所示,包括:
步骤M1:从根节点根据请求中的键查找目标键值对所在的组节点;
步骤M2:在定位得到的组节点中,根据组节点的机器学习模型计算数据位置;
步骤M3:根据数据位置查找目标数据,根据请求类型进行相应操作。
具体地,所述步骤M1包括:将请求中的键作为根节点的机器学习模型的输入,计算得到当前键所在的组节点位置,找到目标键值对所在的组节点。
具体地,所述步骤M3中根据请求类型进行相应操作包括:当请求类型为读请求时,当根据数据位置找到相应的目标数据,则读取目标数据并将读取的目标数据进行返回;当根据数据位置未找到相应的目标数据,则返回空值;当请求类型为写请求时,当根据数据位置找到相应的目标数据,则进行更新操作;当根据数据位置未找到相应的目标数据,则进行插入操作;当请求类型为删除请求时,则删除目标键值对,将目标键值对标记为逻辑删除状态。
具体地,还包括:遍历所有组节点,根据当前组节点中原节点容量和冲突的键值对数量计算哈希冲突概率,当哈希冲突概率超过阈值时,则进行哈希扩容操作,在当前组节点中创建新节点。
具体地,所述创建新节点包括:
新节点创建步骤:在原组节点中创建容量达到预设值的新节点;
获取数据步骤:遍历组节点中原节点中的所有数据,获取所有键的值;
模型训练步骤:根据获取的所有键的值训练新节点的机器学习模型;
更新节点步骤:标记插入操作只在新节点中进行,遍历组节点中原节点将所有数据插入新节点,且插入时新节点的每个键值对中的值均为指针,指向组节点中原节点的键值对结构的值;
新节点生效步骤:将哈希表根节点指向组节点中原节点的指针更换为指向新节点,新节点生效,利用新节点中数组项的元数据中的锁和指针标记位将数据项的值从指针原子地换为该指针当前指向的实际值,而后删除组节点中原节点。
具体地,还包括在哈希扩容操作过程中,根据请求类型进行相应操作;
当请求类型为读请求时,将请求中的键作为组节点中原节点机器学习模型的输入,计算目标键值的具体位置,在原节点中进行查找,当找到目标键值对时,则执行完成请求步骤;当未找到目标键值对时,则在创建的新节点中进行查找;当创建的新节点不为空,则在新节点中执行数据查找,而后执行完成请求步骤;当新节点为空,且操作为读请求或删除请求,则立即执行完成请求;当新节点为空且操作为写请求时,则重新执行新节点数据查找步骤。
具体地,所述根据请求类型进行相应操作时均进行并发访问控制;
所述并发访问控制是通过数据项元数据中的互斥锁和版本号进行并发控制,写请求或删除请求时都需获得键值对元数据中的互斥锁并递增版本号;
读请求不需获得互斥锁,但若请求返回时互斥锁被其他请求使用或版本号与请求开始时的版本号不同,则需重试。
具体地,所述目标键值对存储于节点构成的哈希表中。
根据本发明提供的一种基于机器学习的并发哈希索引数据结构的索引系统,包括:
模块M1:从根节点根据请求中的键查找目标键值对所在的组节点;
模块M2:在定位得到的组节点中,根据组节点的机器学习模型计算数据位置;
模块M3:根据数据位置查找目标数据,根据请求类型进行相应操作。
具体地,所述模块M1包括:将请求中的键作为根节点的机器学习模型的输入,计算得到当前键所在的组节点位置,找到目标键值对所在的组节点;
所述模块M3中根据请求类型进行相应操作包括:当请求类型为读请求时,当根据数据位置找到相应的目标数据,则读取目标数据并将读取的目标数据进行返回;当根据数据位置未找到相应的目标数据,则返回空值;当请求类型为写请求时,当根据数据位置找到相应的目标数据,则进行更新操作;当根据数据位置未找到相应的目标数据,则进行插入操作;当请求类型为删除请求时,则删除目标键值对,将目标键值对标记为逻辑删除状态;
还包括:遍历所有组节点,根据当前组节点中原节点容量和冲突的键值对数量计算哈希冲突概率,当哈希冲突概率超过阈值时,则进行哈希扩容操作,在当前组节点中创建新节点;
所述创建新节点包括:
新节点创建模块:在原组节点中创建容量达到预设值的新节点;
获取数据模块:遍历组节点中原节点中的所有数据,获取所有键的值;
模型训练模块:根据获取的所有键的值训练新节点的机器学习模型;
更新节点模块:标记插入操作只在新节点中进行,遍历组节点中原节点将所有数据插入新节点,且插入时新节点的每个键值对中的值均为指针,指向组节点中原节点的键值对结构的值;
新节点生效模块:将哈希表根节点指向组节点中原节点的指针更换为指向新节点,新节点生效,利用新节点中数组项的元数据中的锁和指针标记位将数据项的值从指针原子地换为该指针当前指向的实际值,而后删除组节点中原节点;
还包括在哈希扩容操作过程中,根据请求类型进行相应操作;
当请求类型为读请求时,将请求中的键作为组节点中原节点机器学习模型的输入,计算目标键值的具体位置,在原节点中进行查找,当找到目标键值对时,则完成请求;当未找到目标键值对时,则在创建的新节点中进行查找;当创建的新节点不为空,则在新节点中执行数据查找,而后完成请求;当新节点为空,且操作为读请求或删除请求,则立即执行完成请求;当新节点为空且操作为写请求时,则重新触发新节点数据查找;
所述根据请求类型进行相应操作时均进行并发访问控制;
所述并发访问控制是通过数据项元数据中的互斥锁和版本号进行并发控制,写请求或删除请求时都需获得键值对元数据中的互斥锁并递增版本号;
读请求不需获得互斥锁,但若请求返回时互斥锁被其他请求使用或版本号与请求开始时的版本号不同,则需重试;
所述目标键值对存储于节点构成的哈希表中。
实施例2
实施例2是实施例1的变化例
根据本发明提供的一种基于机器学习的并发哈希索引数据结构的索引方法,所述索引方法包括:
1.组节点定位步骤:将请求中的键作为根节点的机器学习模型的输入,计算得出该键所在的组节点位置,找到目标键值对所在的组节点;而后执行数据查找步骤(2)。
2.数据查找步骤:在定位得到的组节点中,将请求中的键作为组节点中旧节点的机器学习模型的输入,计算目标键值的具体位置,而后在旧节点数据中进行查找,若找到目标键值对则执行完成请求步骤(4),否则在组节点中执行新节点查找步骤(3)。
3.新节点数据查找步骤:查找过程中,首先判断新节点是否为空,若新节点不为空,则在新节点中执行数据查找步骤(2),而后执行完成请求步骤(4)。若新节点为空,且操作为读请求或删除请求,则立即执行完成请求步骤(4);若新节点为空且操作为写请求,则重新执行新节点数据查找步骤(3)(后台线程会创建新节点)。
4.完成请求步骤:根据是否找到目标键值对及请求类型,执行相应的请求处理步骤并返回结果至索引的调用者,请求处理完成,流程结束;
执行数据查找步骤,新节点数据查找步骤和完成请求步骤时均有并发访问控制。
具体地,所述节点包括一个机器学习模型和其所存储的键值对,输入请求键,得到节点输出的目标键值对的位置;
整个索引结构有两层,第一层仅有一个根节点,第二层有多个组节点;每个组节点由新旧两个节点构成。
具体地,所述目标键值对存储于新旧节点构成的哈希表中;
所述的新节点和旧节点结构类似,用于在进行哈希扩容操作时存储数据,并在哈希扩容操作完成后替换旧节点;
对每个键值对,该索引数据结构连续存储其键、值、元数据,作为键值对结构;
所述元数据包括:
指针标记位,标记该键值对结构的值是实际值或指向实际值的指针;
逻辑删除位,标记该键值对是否已被逻辑删除;
版本号和锁,用于读、写、或删除键值对时的并发控制。
具体地,所述完成请求步骤中找到目标键值对后的请求处理步骤包括:
读请求处理步骤:返回找到的目标键值对。
写请求处理步骤:更新目标键值对,将目标键值对的值更新为请求的写入值;或插入新的键值对。
删除请求处理步骤:删除目标键值对,将目标键值对标记为逻辑删除状态。
所述请求类型包括:读、写及删除。
具体地,所述完成请求步骤中未找到目标键值对后的请求处理步骤包括:
读请求处理步骤:目标键值对不存在,返回空数据,表示未找到查找键对应的数据。
写请求处理步骤:若目标键值对存在,则对目标键值对进行更新操作;若目标键值对不存在,且当前允许在旧节点中进行插入操作,则在旧节点中进行插入操作,否则在新节点中进行插入操作。
删除请求处理步骤:不作额外处理。
具体地,所述并发访问控制为通过数据项元数据中的互斥锁和版本号进行并发控制,写或删除请求和更新节点时都需获得键值对元数据中的互斥锁并递增版本号;
读请求不需获得互斥锁,但若请求返回时互斥锁被其他请求使用或版本号与请求开始时的版本号不同,则需重试。
具体地,所述哈希扩容操作方法包括:
1.新节点创建步骤:在组节点中创新的节点,而后执行获取数据步骤(2)。
2.获取数据步骤:遍历旧节点中的所有数据,获取所有键的值,而后执行模型训练步骤(3)。
3.模型训练步骤:将上一步获取的所有键的值作为输入,训练新节点的机器学习模型,而后执行更新节点步骤(4);
4.更新节点步骤:标记插入操作只允许在新的节点中进行。遍历旧节点,将所有数据插入新节点,且插入时,新节点的每个键值对中的值均为指针,指向旧节点的键值对结构的值;而后执行新节点生效步骤(5)。
5.新节点生效步骤:将哈希表根节点指向组节点中旧节点的指针原子地换为指向新节点,此时新节点生效,利用新节点中数组项的元数据中的锁和指针标记位将数据项的值从指针原子地换为该指针当前指向的实际值,而后删除旧节点。至此,哈希扩容操作完成,流程结束。
具体地,所述哈希扩容方法在后台执行,遍历所有组节点,找到哈希冲突概率超过阈值的组节点,执行哈希扩容操作。
具体地,所述新节点创建步骤中,模型训练完毕后,会标记插入操作只允许在新的节点中进行,此后组节点中旧节点的插入操作变为不可用状态,新插入键值对插入组节点中的新节点。
具体地,所述哈希扩容方法基于RCU思想完成,以保障数据一致性;
具体地,所述哈希扩容方法基于两阶段拷贝方法完成,以避免在后台进行哈希扩容操作时对前台更新操作的阻塞;
所述数据项是键值对结构,其值包括实际值或指针,实现方法是数据项的元数据保存了指针标记位,根据其值为0或1判断该键值对结构的值是指针或实际值;
所述更新节点步骤中,插入的值是指针,指向旧节点的键值对结构的值;此时的前台更新操作可以直接在旧节点进行而不会被阻塞;
所述新节点生效步骤中,会利用新节点中数组项的元数据中的锁和指针标记位将数据项的值从指针原子地换为该指针当前指向的实际值。
本发明提供了一种基于机器学习的高效并发哈希索引数据结构。在键值存储哈希索引方法的基础上,引入了机器学习模型。与现有技术相比,本发明具有如下的有益效果:与现有非机器学习哈希索引相比,引入机器学习模型,提升哈希索引性能。与现有机器学习哈希索引相比,本系统使用细粒度的并发控制,使得并发的哈希索引操作保持高性能。与现有机器学习哈希索引相比,本系统会重新训练机器学习模型,在哈希冲突概率超过阈值时进行哈希扩容操作,使机器学习模型适应新插入的数据,保持索引高性能。与现有机器学习哈希索引相比,本系统使用RCU(Read-Copy-Update)技术和两层缓存数据结构,支持并发的哈希扩容操作和索引操作,减少因索引操作被阻塞导致的性能波动,同时保障了索引数据的一致性。与现有机器学习哈希索引相比,本系统使用两层索引结构,在保持索引性能的同时避免多层索引结构的节点跳转带来的性能开销。
本领域技术人员知道,除了以读程序代码方式实现本发明提供的基于机器学习的高效并发哈希索引方法及系统及其各个步骤、模块以外,完全可以通过将各个步骤、模块进行逻辑编程来使得本发明提供的并发控制方法及系统及其各个步骤、模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序逻辑。所以,本发明提供的基于机器学习的高效并发哈希索引数据结构及其各个步骤、模块可以被认为是一种硬件组件,而对其内包括的用于实现各种程序逻辑的步骤、模块也可以视为硬件组件内的结构;也可以将用于实现各种功能的步骤、模块视为既可以是实现方法的软件程序又可以是硬件组件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (6)
1.一种基于机器学习的并发哈希索引数据结构的索引方法,其特征在于,包括:
步骤M1:从根节点根据请求中的键查找目标键值对所在的组节点;
步骤M2:在定位得到的组节点中,根据组节点的机器学习模型计算数据位置;
步骤M3:根据数据位置查找目标数据,根据请求类型进行相应操作;
遍历所有组节点,根据当前组节点中原节点容量和冲突的键值对数量计算哈希冲突概率,当哈希冲突概率超过阈值时,则进行哈希扩容操作,在当前组节点中创建新节点;
所述创建新节点包括:
新节点创建步骤:在原组节点中创建容量达到预设值的新节点;
获取数据步骤:遍历组节点中原节点中的所有数据,获取所有键的值;
模型训练步骤:根据获取的所有键的值训练新节点的机器学习模型;
更新节点步骤:标记插入操作只在新节点中进行,遍历组节点中原节点将所有数据插入新节点,且插入时新节点的每个键值对中的值均为指针,指向组节点中原节点的键值对结构的值;
新节点生效步骤:将哈希表根节点指向组节点中原节点的指针更换为指向新节点,新节点生效,利用新节点中数组项的元数据中的锁和指针标记位将数据项的值从指针原子地换为该指针当前指向的实际值,而后删除组节点中原节点;
还包括在哈希扩容操作过程中,根据请求类型进行相应操作;
当请求类型为读请求时,将请求中的键作为组节点中原节点机器学习模型的输入,计算目标键值的具体位置,在原节点中进行查找,当找到目标键值对时,则执行完成请求步骤;当未找到目标键值对时,则在创建的新节点中进行查找;当创建的新节点不为空,则在新节点中执行数据查找,而后执行完成请求步骤;当新节点为空,且操作为读请求或删除请求,则立即执行完成请求;当新节点为空且操作为写请求时,则重新执行新节点数据查找步骤。
2.根据权利要求1所述的基于机器学习的并发哈希索引数据结构的索引方法,其特征在于,所述步骤M1包括:将请求中的键作为根节点的机器学习模型的输入,计算得到当前键所在的组节点位置,找到目标键值对所在的组节点。
3.根据权利要求1所述的基于机器学习的并发哈希索引数据结构的索引方法,其特征在于,所述步骤M3中根据请求类型进行相应操作包括:当请求类型为读请求时,当根据数据位置找到相应的目标数据,则读取目标数据并将读取的目标数据进行返回;当根据数据位置未找到相应的目标数据,则返回空值;当请求类型为写请求时,当根据数据位置找到相应的目标数据,则进行更新操作;当根据数据位置未找到相应的目标数据,则进行插入操作;当请求类型为删除请求时,则删除目标键值对,将目标键值对标记为逻辑删除状态。
4.根据权利要求1所述的基于机器学习的并发哈希索引数据结构的索引方法,其特征在于,所述根据请求类型进行相应操作时均进行并发访问控制;
所述并发访问控制是通过数据项元数据中的互斥锁和版本号进行并发控制,写请求或删除请求时都需获得键值对元数据中的互斥锁并递增版本号;
读请求不需获得互斥锁,但若请求返回时互斥锁被其他请求使用或版本号与请求开始时的版本号不同,则需重试。
5.根据权利要求1所述的基于机器学习的并发哈希索引数据结构的索引方法,其特征在于,所述目标键值对存储于节点构成的哈希表中。
6.一种基于机器学习的并发哈希索引数据结构的索引系统,其特征在于,包括:
模块M1:从根节点根据请求中的键查找目标键值对所在的组节点;
模块M2:在定位得到的组节点中,根据组节点的机器学习模型计算数据位置;
模块M3:根据数据位置查找目标数据,根据请求类型进行相应操作;
所述模块M1包括:将请求中的键作为根节点的机器学习模型的输入,计算得到当前键所在的组节点位置,找到目标键值对所在的组节点;
所述模块M3中根据请求类型进行相应操作包括:当请求类型为读请求时,当根据数据位置找到相应的目标数据,则读取目标数据并将读取的目标数据进行返回;当根据数据位置未找到相应的目标数据,则返回空值;当请求类型为写请求时,当根据数据位置找到相应的目标数据,则进行更新操作;当根据数据位置未找到相应的目标数据,则进行插入操作;当请求类型为删除请求时,则删除目标键值对,将目标键值对标记为逻辑删除状态;
还包括:遍历所有组节点,根据当前组节点中原节点容量和冲突的键值对数量计算哈希冲突概率,当哈希冲突概率超过阈值时,则进行哈希扩容操作,在当前组节点中创建新节点;
所述创建新节点包括:
新节点创建模块:在原组节点中创建容量达到预设值的新节点;
获取数据模块:遍历组节点中原节点中的所有数据,获取所有键的值;
模型训练模块:根据获取的所有键的值训练新节点的机器学习模型;
更新节点模块:标记插入操作只在新节点中进行,遍历组节点中原节点将所有数据插入新节点,且插入时新节点的每个键值对中的值均为指针,指向组节点中原节点的键值对结构的值;
新节点生效模块:将哈希表根节点指向组节点中原节点的指针更换为指向新节点,新节点生效,利用新节点中数组项的元数据中的锁和指针标记位将数据项的值从指针原子地换为该指针当前指向的实际值,而后删除组节点中原节点;
还包括在哈希扩容操作过程中,根据请求类型进行相应操作;
当请求类型为读请求时,将请求中的键作为组节点中原节点机器学习模型的输入,计算目标键值的具体位置,在原节点中进行查找,当找到目标键值对时,则完成请求;当未找到目标键值对时,则在创建的新节点中进行查找;当创建的新节点不为空,则在新节点中执行数据查找,而后完成请求;当新节点为空,且操作为读请求或删除请求,则立即执行完成请求;当新节点为空且操作为写请求时,则重新触发新节点数据查找;
所述根据请求类型进行相应操作时均进行并发访问控制;
所述并发访问控制是通过数据项元数据中的互斥锁和版本号进行并发控制,写请求或删除请求时都需获得键值对元数据中的互斥锁并递增版本号;
读请求不需获得互斥锁,但若请求返回时互斥锁被其他请求使用或版本号与请求开始时的版本号不同,则需重试;
所述目标键值对存储于节点构成的哈希表中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011310093.XA CN112434035B (zh) | 2020-11-20 | 2020-11-20 | 基于机器学习的并发哈希索引数据结构的索引方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011310093.XA CN112434035B (zh) | 2020-11-20 | 2020-11-20 | 基于机器学习的并发哈希索引数据结构的索引方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112434035A CN112434035A (zh) | 2021-03-02 |
CN112434035B true CN112434035B (zh) | 2022-09-23 |
Family
ID=74693122
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011310093.XA Active CN112434035B (zh) | 2020-11-20 | 2020-11-20 | 基于机器学习的并发哈希索引数据结构的索引方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112434035B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113742350A (zh) * | 2021-09-09 | 2021-12-03 | 北京中安智能信息科技有限公司 | 基于机器学习模型的时空索引构建方法和装置及查询方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110928483A (zh) * | 2018-09-19 | 2020-03-27 | 华为技术有限公司 | 数据存储、数据获取方法及设备 |
CN111309982A (zh) * | 2020-03-05 | 2020-06-19 | 上海交通大学 | 机器学习数据索引结构的自适应结构调整方法及系统 |
CN111651455A (zh) * | 2020-05-26 | 2020-09-11 | 上海交通大学 | 基于机器学习的高效并发索引数据结构 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7383276B2 (en) * | 2004-01-30 | 2008-06-03 | Microsoft Corporation | Concurrency control for B-trees with node deletion |
-
2020
- 2020-11-20 CN CN202011310093.XA patent/CN112434035B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110928483A (zh) * | 2018-09-19 | 2020-03-27 | 华为技术有限公司 | 数据存储、数据获取方法及设备 |
CN111309982A (zh) * | 2020-03-05 | 2020-06-19 | 上海交通大学 | 机器学习数据索引结构的自适应结构调整方法及系统 |
CN111651455A (zh) * | 2020-05-26 | 2020-09-11 | 上海交通大学 | 基于机器学习的高效并发索引数据结构 |
Also Published As
Publication number | Publication date |
---|---|
CN112434035A (zh) | 2021-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111651455A (zh) | 基于机器学习的高效并发索引数据结构 | |
CN110083601B (zh) | 面向键值存储系统的索引树构建方法及系统 | |
Ewen et al. | Spinning fast iterative data flows | |
Ferragina et al. | Learned data structures | |
CN111399777A (zh) | 一种基于数据值分类的差异化键值数据存储方法 | |
JP2000501861A (ja) | コンパクト0完全木における順序付けられたキーの集まりの記憶と検索のための装置及び方法 | |
Hadian et al. | Interp olation-friendly B-tr ees: Bridging the Gap Betw een AlgorithmicandLearnedInde xes | |
CN105975587A (zh) | 一种高性能的内存数据库索引组织与访问方法 | |
Groh et al. | Ggnn: Graph-based gpu nearest neighbor search | |
US6745198B1 (en) | Parallel spatial join index | |
Yuan et al. | Mining and indexing graphs for supergraph search | |
CN112434035B (zh) | 基于机器学习的并发哈希索引数据结构的索引方法及系统 | |
Tian et al. | A learned index for exact similarity search in metric spaces | |
CN115952195A (zh) | 一种区块链数据溯源查询优化方法 | |
CN113779154B (zh) | 一种分布式学习索引模型的构建方法及应用 | |
CN104077078B (zh) | 读存储区、更新存储区的方法及装置 | |
CN111309982A (zh) | 机器学习数据索引结构的自适应结构调整方法及系统 | |
CN110515897B (zh) | Lsm存储系统读性能的优化方法及系统 | |
CN112000845A (zh) | 一种基于gpu加速的超空间哈希索引方法 | |
Petrov | Algorithms behind modern storage systems | |
WO2023278614A1 (en) | Apparatus and method for maintaining a machine learning model repository | |
CN109063222B (zh) | 一种基于大数据的自适应数据搜索方法 | |
Wang et al. | The concurrent learned indexes for multicore data storage | |
Yao et al. | Nv-qalsh: An nvm-optimized implementation of query-aware locality-sensitive hashing | |
CN113641871B (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 |