CN105512325A - 多版本数据索引的更新、删除与建立方法及装置 - Google Patents
多版本数据索引的更新、删除与建立方法及装置 Download PDFInfo
- Publication number
- CN105512325A CN105512325A CN201510966748.1A CN201510966748A CN105512325A CN 105512325 A CN105512325 A CN 105512325A CN 201510966748 A CN201510966748 A CN 201510966748A CN 105512325 A CN105512325 A CN 105512325A
- Authority
- CN
- China
- Prior art keywords
- index
- layer
- data
- version
- entry
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
-
- 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
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)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种多版本数据索引的更新、删除与建立方法及装置。本发明实施例提供的技术方案,分层组织数据的索引项构成多层索引,每层索引中不同的索引项对应的数据具有相同的版本次序,并且,每层索引中,对每个索引项都设置表征数据版本的特征结构或特征信息,因而可以从索引项中获取数据的版本信息。在进行索引更新和删除时,变更索引项中表征数据版本的特征结构和信息,然后将索引项移动至与表征数据版本的特征结构和信息对应的索引层,不涉及事务处理。本发明实施例提供的技术方案,索引结构简单,开销小,且检索效率高,更新和删除等处理过程简便,适用于处理基本读写并发的情况。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及多版本数据索引的更新、删除与建立方法及装置。
背景技术
在数据存储***中,为了提高数据的并发性、可靠性和可追溯性,会对同一个数据保存多个版本,也就是当数据存储***对某个数据做一个更新操作时,并不是将该数据的历史版本(oldversion)删除,再将该数据的新版本覆盖上去,而是将历史版本做一个标记以便与新版本进行隔离,然后再新增新版本完成更新,因此该数据的历史版本和新版本都存在于数据存储***中,其中新版本亦称为当前版本。数据的历史版本和当前版本都存储于数据存储***中,发生的操作便可以根据需要读取合适的版本,这样虽在然有利于数据的追溯,提高数据的可靠性,但当发生并发操作时,数据的一致性便成为大问题,为防止出现脏读(DirtyRead)和幻读(PhantomRead)等错误,数据存储***通常采用MVCC(Multi-VersionConcurrencyControl,多版本并发控制)机制来进行并发操作的处理。
MVCC的实现主要有以下方式:
1、使用堆加索引的存储结构,堆存储于内存之中。以PostgreSQL为例,采用堆加B+树索引的存储结构,堆中数据包含版本信息,PostgreSQL将数据的最新版本或历史版本都存储在堆中。堆中每条数据头上记录t_xmin和t_xmax两个属性,分别表示创建与删除这一版本的事务ID,另外记录t_ctid属性,表示该数据下一个更新的版本的RID(RowIdentification,行标识),由此数据的多个版本构成从最老到最新的单向链表。删除一条数据时,设置t_xmax,并不将数据真正删除;更新一条数据时,是***一个新版本,将被更新的版本的t_xmax设为当前事务的ID,并设置被更新的版本的t_ctid指向***的新版本。数据的所有版本都在索引中存在对应的索引项,但索引中则不包含版本信息。
2、采用索引组织表的存储结构,没有堆,数据存储在主键索引中,主键索引的每个索引项都包含所对应数据的主键,其它索引称为二级索引。主键索引拥有版本信息,但只存储数据的最新版本,历史版本的信息则集中存储在回滚段中。主键索引数据的头上包含有事务ID与指向回滚段中历史版本的指针,回滚段中的历史版本信息中也包含指向更前的历史版本的指针,即版本链表是从新到旧的,删除数据时只是对数据进行删除标记而不真正地删除,更新数据时对数据进行本地更新,并将数据的前像(更新前的版本)写到回滚段中。二级索引存储每条数据的多个版本对应的索引项,每个索引项并不包含版本信息。
上述MVCC实现的第一种方式中,数据存在多个版本,而索引只有一个,删除数据时,不能删除索引,因此随着更新的增加,索引会存储许多无用的节点,导致检索效率越来越低。另外,数据查询都是只扫描索引,直接从索引中返回所需的属性,由于索引中完全没有版本信息,第一种方式不能实现覆盖索引扫描(CoverageIndexScan)。上述MVCC实现的第二种方式,主键索引数据通过头上指向回滚段中历史版本的指针来与各个版本串联,需要读取最新版本才能得到次新版本,而且进行事务回滚时需要清理事务所作的所有修改,可能会导致回滚很慢,因而数据的访问效率低,再者二级索引也不包含版本信息,不能实现覆盖索引扫描。另外,上述两种方式都专门应用于数据存储***的事务并发,数据的各个版本中需要包含事务编号等信息,而数据存储***中需要的版本信息往往要简单很多,两种方式的数据结构都很复杂,开销大,索引检索效率低,更新和删除等处理效率低,不适用于只处理基本读写并发的情况。
发明内容
本发明实施例提供了一种多版本数据索引的更新、删除与建立方法及装置,以解决数据存储***基本读写并发处理中索引检索效率低的问题。
第一方面,本发明实施例提供一种多版本数据索引的更新方法,包括:
根据被更新数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息;
将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中;
将被更新数据对应的新索引项写入对应于最新版本数据的索引层中,
其中,所述多层索引的每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
结合第一方面,在第一方面第一种可能的实现方式中,若一个索引层对应于一个版本次序,所述将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,包括:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层不存在下一层索引层,则删除ai,
其中,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
结合第一方面第一种可能的实现方式,在第一方面第二种可能的实现方式中,所述的多版本数据索引的更新方法,以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,所述多层索引,包括n层索引,其中,第n层索引中索引项对应的数据的版本次序为n,
所述若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中,包括:
将ai写入tai+1层索引层中,其中,tai为所述原始索引层对应的版本次序,tai小于n。
结合第一方面,在第一方面第三种可能的实现方式中,,若多层索引中存在对应于多个版本次序的索引层,所述将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,包括:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层中是否存在除ai以外的其他同数索引项,所述同数索引项属于所述多个索引项;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,判断ai是否为其所在的原始索引层中最旧的同数索引项;
判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项写入所述原始索引层的下一层索引层中;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层不存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项ak,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项删除,
其中,所述最旧的同数索引项为对应的数据版本相比于所述原始索引层中其他同数索引项对应的数据版本最旧的同数索引项,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
第二方面,本发明实施例提供一种多版本数据索引的索引项删除方法,包括:
根据被删除数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息;
将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,
其中,所述多层索引的每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
结合第二方面,在第二方面第一种可能的实现方式中,若一个索引层对应于一个版本次序,所述将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,包括:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层不存在下一层索引层,则删除ai,
其中,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
结合第二方面,在第二方面第二种可能的实现方式中,若多层索引中存在对应于多个版本次序的索引层,所述将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,包括:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层中是否存在除ai以外的其他同数索引项,所述同数索引项属于所述多个索引项;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,判断ai是否为其所在的原始索引层中最旧的同数索引项;
判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项写入所述原始索引层的下一层索引层中;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层不存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项ak,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项删除,
其中,所述最旧的同数索引项为对应的数据版本相比于所述原始索引层中其他同数索引项对应的数据版本最旧的同数索引项,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
第三方面,本发明实施例提供一种多版本数据索引的建立方法,包括:
组织多层索引,并在索引项中设置表征数据版本的特征结构或特征信息,其中,每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定。
结合第三方面,在第三方面第一种可能的实现方式中,所述的多版本数据索引建立方法,以索引项中数据存储在存储介质中的位置作为表征数据版本的特征信息。
结合第三方面,在第三方面第二种可能的实现方式中,以数据的版本信息作为表征数据版本的特征信息。
结合第三方面,在第三方面第三种可能的实现方式中,所述的多版本数据索引建立方法,还包括:
为每层索引设置内存存储优先级;
定期根据内存的存储情况设置存储阈值;
判断内存中是否存在内存存储优先级小于所述存储阈值的索引层;
若内存中存在内存存储优先级小于所述存储阈值的索引层,将内存存储优先级小于所述存储阈值的索引层存储于其他指定的固态存储介质,并从内存中删除;
判断是否存在内存存储优先级大于或等于所述存储阈值的索引层;
若存在内存存储优先级大于或等于所述存储阈值的索引层,判断内存存储优先级大于或等于所述存储阈值的索引层是否存储于内存中;
若内存存储优先级大于或等于所述存储阈值的索引层存储于内存之外,将内存存储优先级大于或等于所述存储阈值的索引层存储于内存中。
结合第三方面,在第三方面第四种可能的实现方式中,所述数据版本的新旧次序预先根据数据的版本设定,包括:以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n;
所述组织多层索引,包括:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
组织其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。
结合第三方面第四种可能的实现方式,在第三方面第五种可能的实现方式中,所述组织多层索引,包括:组织n层索引,其中,第n层索引中索引项对应的数据的版本次序为n。
结合第三方面第四种可能的实现方式,在第三方面第六种可能的实现方式中,所述组织多层索引,包括:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
组织第二层索引,所述第二层索引中索引项对应的数据的版本次序为2;
组织第三层索引,所述第三层索引中索引项对应的数据的版本次序为3至n,
其中,n大于3。
结合第三方面第四种至第六种可能的实现方式其中任意一种,在第三方面第七种可能的实现方式中,所述的多版本数据索引的建立方法,还包括:将所述第一层索引固定存储于内存中。
结合第三方面,在第三方面第八种可能的实现方式中,所述数据版本的新旧次序预先根据数据的版本设定,包括:以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,其中,n大于2;
所述组织多层索引,包括:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1和2;
组织其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。
第四方面,本发明实施例提供一种多版本数据索引的更新装置,包括:
第一版本更新单元,用于根据被更新数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息;
第一索引项移动单元,用于将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中;
新索引项写入单元,用于将被更新数据对应的新索引项写入对应于最新版本数据的索引层中,
其中,所述多层索引的每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
结合第四方面第一种可能的实现方式,在第四方面第二种可能的实现方式中,若一个索引层对应于一个版本次序,所述索引项移动单元,具体用于:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层不存在下一层索引层,删除ai,
其中,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
结合第四方面,在第四方面第二种可能的实现方式中,以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,所述多层索引,包括n层索引,其中,第n层索引中索引项对应的数据的版本次序为n,所述索引项移动单元,在若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中时,具体用于:
将ai写入tai+1层索引层中,其中,tai为所述原始索引层对应的版本次序,tai小于n。
结合第四方面,在第四方面第三种可能的实现方式中,若多层索引中存在对应于多个版本次序的索引层,所述索引项移动单元,具体用于:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层中是否存在除ai以外的其他同数索引项,所述同数索引项属于所述多个索引项;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,判断ai是否为其所在的原始索引层中最旧的同数索引项;
判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项写入所述原始索引层的下一层索引层中;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层不存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项ak,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项删除,
其中,所述最旧的同数索引项为对应的数据版本相比于所述原始索引层中其他同数索引项对应的数据版本最旧的同数索引项,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
第五方面,本发明实施例提供一种多版本数据索引的索引项删除装置,包括:
第二版本更新单元,用于根据被删除数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息;
第二索引项移动单元,用于将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,
其中,所述多层索引的每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
结合第五方面,在第五方面第一种可能的实现方式中,若一个索引层对应于一个版本次序,所述第二索引项移动单元,具体用于:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层不存在下一层索引层,删除ai,
其中,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
结合第五方面,在第五方面第二种可能的实现方式中,若多层索引中存在对应于多个版本次序的索引层,所述第二索引项移动单元,具体用于:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层中是否存在除ai以外的其他同数索引项,所述同数索引项属于所述多个索引项;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,判断ai是否为其所在的原始索引层中最旧的同数索引项;
判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项写入所述原始索引层的下一层索引层中;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层不存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项ak,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项删除,
其中,所述最旧的同数索引项为对应的数据版本相比于所述原始索引层中其他同数索引项对应的数据版本最旧的同数索引项,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
第六方面,本发明实施例提供一种多版本数据索引的建立装置,包括:
索引组织单元,所述索引组织单元用于组织多层索引,其中,每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定;
特征设置单元,用于在索引项中设置表征数据版本的特征结构或特征信息。
结合第六方面,在第六方面第一种可能的实现方式中,以索引项中数据存储在存储介质中的位置作为表征数据版本的特征结构。
结合第六方面,在第六方面第二种可能的实现方式中,,以数据的版本信息作为表征数据版本的特征信息。
结合第六方面,在第六方面第三种可能的实现方式中,所述的多版本数据索引的建立装置,还包括:
内存存储优先级设置单元,用于为每层索引设置内存存储优先级;
存储阈值设置单元,用于定期根据内存的存储情况设置存储阈值;
第一判断单元,用于判断内存中是否存在内存存储优先级小于所述存储阈值的索引层;
第一执行单元,用于若内存中存在内存存储优先级小于所述存储阈值的索引层,将内存存储优先级小于所述存储阈值的索引层存储于其他指定的固态存储介质,并从内存中删除;
第二判断单元,用于判断是否存在内存存储优先级大于或等于所述存储阈值的索引层;
第三判断单元,用于若存在内存存储优先级大于或等于所述存储阈值的索引层,判断内存存储优先级大于或等于所述存储阈值的索引层是否存储于内存中;
第二执行单元,用于若内存存储优先级大于或等于所述存储阈值的索引层存储于内存之外,将内存存储优先级大于或等于所述存储阈值的索引层存储于内存中。
结合第六方面,在第六方面第四种可能的实现方式中,所述数据版本的新旧次序预先根据数据的版本设定,包括:以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n;
所述索引组织单元,具体用于:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
组织其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。
结合第六方面第四种可能的实现方式,在第六方面第五种可能的实现方式中,所述索引组织单元,具体用于:组织n层索引,其中,第n层索引中索引项对应的数据的版本次序为n。
结合第六方面第四种可能的实现方式,在第六方面第六种可能的实现方式中,所述索引组织单元,具体用于:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
组织第二层索引,所述第二层索引中索引项对应的数据的版本次序为2;
组织第三层索引,所述第三层索引中索引项对应的数据的版本次序为3至n,
其中,n大于3。
结合第六方面第四种至第六种可能的实现方式其中任意一种,在第六方面第七种可能的实现方式中,所述的多版本数据索引的建立装置,还包括:
固定存储单元,用于将所述第一层索引固定存储于内存中。
结合第六方面,在第六方面第八种可能的实现方式中,所述数据版本的新旧次序预先根据数据的版本设定,包括:以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,其中,n大于2;
所述索引组织单元,具体用于:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1和2;
组织其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。
本发明实施例提供的技术方案,分层组织数据的索引项构成多层索引,每层索引中不同的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定,例如将数据版本按新旧次序分为当前版本、次新版本、第三新版本……以此类推,则可以将各个数据当前版本的索引项组织为第一层,将各个数据次新版本的索引项组织为第二层,将各个数据第三新版本的索引项组织为第三层……以此类推。并且,每层索引中,对每个索引项都设置表征数据版本的特征结构或特征信息,因而可以从索引项中获取数据的版本信息。由于将索引按数据的版本分层组织,而非只有一个索引,且索引项中包含版本信息,因而可以实现覆盖索引扫描。而且在检索时可以先根据数据的版本找到对应的索引层,然后在对应的索引层中找到对应的具体的索引项,不需对所有索引进行扫描,另外各个版本的数据都有对应的索引项,检索得到的索引项直接对应于数据,不需先检索到其他的数据然后通过串联关系得到欲检索的数据,从而能够提高检索效率。本发明提供的多版本数据索引的更新方法基于索引项中保护版本表征的多层索引,根据被更新数据对应的多个版本数据的版本变化,分别更新所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息,将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中后,再将被更新数据对应的新索引项写入对应于最新版本数据的索引层中;本发明提供的多版本数据索引的删除方法,同样基于索引项中保护版本表征的多层索引,再根据被删除数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息,将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中后,即完成索引项的删除。上述多版本数据索引的更新和删除方法,过程不涉及事务处理,不产生无用数据,更新效率高且简洁。
本发明实施例提供的技术方案,索引结构简单,开销小,且检索效率高,更新、删除处理方便,适用于处理基本读写并发的情况。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种多版本数据索引的更新方法的流程示意图。
图2为本发明实施例提供的一种多层索引的示例。
图3为本发明实施例提供的另一种多层索引的示例。
图4为本发明实施例提供的又一种多层索引的示例。
图5为本发明实施例提供的又一种多层索引的示例。
图6为本发明实施例提供的另一种多版本数据索引的索引项删除方法的流程示意图。
图7为本发明实施例提供的一种多版本数据索引的建立方法的流程示意图。
图8为本发明实施例提供的另一种多版本数据索引的建立方法的流程示意图。
图9为本发明实施例提供的一种多版本数据索引的更新装置的框图。
图10为本发明实施例提供的一种多版本数据索引的索引项删除装置的框图。
图11为本发明实施例提供的一种多版本数据索引的建立装置的框图。
图12为本发明实施例提供的另一种多版本数据索引的建立装置的框图。
具体实施方式
下面将结合附图,对本发明实施例中的技术方案进行描述。
参见图1,为本发明实施例提供的一种多版本数据索引的更新方法的流程示意图,如图1所示,该方法包括如下步骤:
步骤S101,根据被更新数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息;
步骤S102,将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中;
步骤S103,将被更新数据对应的新索引项写入对应于最新版本数据的索引层中,
其中,所述多层索引的每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
多版本数据存储***中,数据包括多个版本,发生数据更新时,是将当前最新版本的数据作为次新数据保存,同时其他历史数据的数据版本也依次后移,例如原次新数据变为第三新数据,原第三新数据变为第四新数据,以此类推,然后以更新后的数据作为当前最新版本的数据。对索引项中设置有表征数据版本的特征结构或特征信息的多层索引而言,发生数据更新后,不仅需要增加更新后数据的新索引项,相应地被更新数据的多个版本数据对应的多个索引项也要进行更新,改变索引项中表征数据版本的特征结构或特征信息,例如,原最新数据变为次新数据,相应地,原最新数据对应的索引项中表征数据版本的特种结构或特征信息要从表征最新版本变为表征次新版本,原次新数据对应的索引项中表征数据版本的特种结构或特征信息要从表征次新版本变为表征第三新版本,以此类推。
本发明中,索引结构为多层索引,每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
具体而言,存储多版本数据的数据存储***中,每个数据的各个版本都可以按新旧次序排列,也就是数据的每个版本都拥有一个新旧次序,通常数据的当前版本为最新版本,紧接着当前版本的为次新版本,紧接着次新版本的为第三新版本……以此类推。为方便程序处理和阐述,数据的n个版本的新旧次序依次按照从新到旧的顺序可以预先设定为1、2……n,也就是当前版本的新旧次序为1,次新版本的新旧次序为2……以此类推。当然,数据的n个版本的新旧次序也可以预先设定为其他能表征次序的数字或字母。
将具有相同的版本次序的数据对应的索引项组织为一层索引,如果所有数据都只有一个版本,则最终组织而成的索引只有一层,但通常数据都有多个版本,由此可以组织成多层索引。需要说明的是,所述多层索引,指在数据有多个版本的情况下,组织的索引层数大于1,也就是不将所有索引项组织为一个索引。在一层索引中,索引项可以对应于数据的一个版本,也可以对应于数据的多个版本。
构建索引层中的索引项时,在索引项中设置表征数据版本的特征结构或特征信息。可以直接以数据的版本信息作为表征数据版本的特征信息,也就是在索引项中加入数据的版本信息。数据的版本信息中包含了版本的新旧次序,所述新旧次序可以为预先设定的表征次序的数字或字母,由于一般多版本数据之间通过指针将从新到旧的版本数据串联,所以数据的版本信息中包含的新旧次序也可以为指针序列。当将索引层中的一个索引项对应于一个数据的一个版本时,优选为索引项中直接以数据的版本信息作为数据版本的特征信息,索引项结构可以简单示例如下:
part hash | ops type | offset | version info |
其中,parthash表示用于检索的部分hash值,opstype和offset表示数据的操作类型和在存储介质中的存储地址,versioninfo为数据的版本信息。
当将索引层中的一个索引项对应于一个数据的多个版本时,可以在索引项中直接设置数据的多个版本信息作为数据版本的特征信息,以一个索引项对应于一个数据的两个版本为例,索引项结构可以简单示例如下:
part hash | ops type1 | offset1 | version1 info | ops type2 | offset2 | version2 info |
其中,parthash表示用于检索的部分hash值,opstype1和offset1表示数据的第一个版本的操作类型和在存储介质中的存储地址,例如数据的当前版本的操作类型和在存储介质中的存储地址,version1info为数据的第一个版本的版本信息,例如当前版本的版本信息,opstype2和offset2表示数据的第二个版本的操作类型和在存储介质中的存储地址,例如数据的次新版本的操作类型和在存储介质中的存储地址,version2info为数据的第二个版本的版本信息,例如次新版本的版本信息。version1info和version2info也可以合并在一起,则索引项结构可以简单示例如下:
part hash | ops type1 | offset1 | ops type2 | offset2 | version info |
其中viersioninfo为version1info和version2info合并后的信息,通过versioninfo可以同时得到两个版本的版本信息。
当将索引层中的一个索引项对应于一个数据的多个版本时,索引项中也可以以索引项中数据存储在存储介质中的位置作为表征数据版本的特征信息,而不直接以数据的版本信息作为数据版本的特征信息。以一个索引项对应于一个数据的两个版本为例,索引项结构可以简单示例如下:
part hash | ops type1 | offset1 | ops type2 | offset2 |
其中,parthash表示用于检索的部分hash值,存储介质中,offset1所指的地址在在offset2所指的地址之前,则opstype1和offset1表示数据的第一个版本的操作类型和在存储介质中的存储地址,opstype2和offset2表示数据的第二个版本的操作类型和在存储介质中的存储地址。也就是预先定义在存储介质中存储位置在前的地址对应的数据的版本,比在存储介质中存储位置在后的地址对应的数据的版本要新,由于offset1在offset2之前,且该索引项存储的是数据的第一版本和第二版本对应的索引项,因此offset1所指的存储介质中的地址为数据的第一个版本的地址,offset2所指的存储介质中的地址为数据的第二个版本的地址,由此通过索引项中地址的前后可以知道该地址所对应的是数据的哪个版本。
在索引项中也可以设置表征数据版本的特征结构,而不直接以数据的版本信息作为数据版本的特征信息,例如在索引项中设置空白位,无空白位表示数据为当前版本,也就是最新版本,索引项中设置一个空白位,表示数据为次新版本,设置两个空白位,表示数据为第三新版本,以此类推,但这种方式将产生很多空白位,比较浪费空间。
组织多少层索引,以及各层索引中索引项对应几个数据版本可以根据实际需要来确定,例如数据量少,保留的数据版本不多,则两层索引即可,如果数据量少,但数据版本多,可以将其中几个版本对应的索引项组织在一层索引中,以减少索引层数,如果数据量虽多,但数据版本不多,则可以根据数据版本的数目来确定索引层数,如果数据量多,数据版本也多,则可以将其中几个版本对应的索引项组织在一层索引中,以避免索引层数太多降低检索效率。
以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,所述多层索引,可以包括:
第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。
其中,将当前版本的数据对应的索引项组织为第一层,其他版本对应的索引项组织为一层或多层,每层索引项对应的数据具有的版本次序可以为一个或多个。由于数据存储***对当前版本的数据的操作是最多的,将当前版本的数据对应的索引项单独组织为一层,有利于提高检索效率。图2为一种多层索引的示例,数据有n个版本,则组织n层索引,其中,第n层索引中索引项对应的数据的版本次序为n,图2中以Vn表示版本次序n。以下图中也以Vn表示版本次序n。
以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,所述多层索引,可以为:
第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
第二层索引,所述第二层索引中索引项对应的数据的版本次序为2;
第三层索引,所述第三层索引中索引项对应的数据的版本次序为3至n;
其中,n大于3。图3为另一种多层索引的示例,图3中,第一层索引对应的版本次序为V1,第二层索引对应的版本次序为V2,第三层索引对应的版本次序为V3至Vn。
仍然以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n。如果n大于2,所述多层索引,可以包括:
第一层索引,所述第一层索引中索引项对应的数据的版本次序为1和2;
其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。
图4为又一种多层索引的示例,其中,数据存储***保留数据的5个版本,第一层索引中索引项对应的数据的版本次序为1和2,即图中第一层索引对应的版本次序为V1和V2,另外,第二层索引对应的版本次序为V3和V4,第三层索引对应的版本次序为V5。
图5为又一种多层索引的示例,其中,数据存储***保留数据的5个版本,第一层索引中索引项对应的数据的版本次序为1和2,即图中第一层索引对应的版本次序为V1和V2,另外,第二层索引对应的版本次序为V3,第三层索引对应的版本次序为V4和V5。
当发生数据更新,需要更新索引时,根据被更新数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息,也就是将原最新数据对应的索引项中表征数据版本的特种结构或特征信息从表征最新版本变为表征次新版本,原次新数据对应的索引项中表征数据版本的特种结构或特征信息要从表征次新版本变为表征第三新版本,以此类推。若索引项中使用特征信息表征数据版本,例如直接使用数据的版本信息作为特征信息表征数据版本,则修改所述特征信。若是以预先定义的在存储介质中存储位置作为特征信息表征数据版本,则修改索引项中的地址信息项。若索引项中使用特征结构表征数据版本,则修改所述特征结构,例如在索引项中设置空白位,无空白位表示数据为最新版本,索引项中设置一个空白位,表示数据为次新版本,设置两个空白位,表示数据为第三新版本,则更新时,在原本与最新版本数据的索引项中设置一个空位,在原本与次新版本数据的索引项中设置增加一个空位,以此类推。
更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息后,将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中。也就是索引项中表征数据版本的特征结构或特征信息变化后,应当移动至对应的索引层中,例如,将特征结构或特征信息由表征最新版本变为表征次新版本后,索引项也将由对应于最新版本的索引层移动至对应于次新版本的索引层,最新版本的索引层中将不再存在该索引项。
更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息后,若一个索引层对应于一个版本次序,则所述将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,可以包括:
(A1)对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层是否存在下一层索引层;
(A2)若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
(A3)若ai所在的原始索引层不存在下一层索引层,则删除ai。
其中,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
例如,如图2所示,以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,所述多层索引,包括n层索引,其中,第n层索引中索引项对应的数据的版本次序为n。以n等于3为具体例子,第一层索引对应于版本次序1,也就是对应于最新数据,第二层索引对应于版本次序2,也就是对应于次新数据,第三层索引对应于版本次序3,也就是对应于第三新数据,则更新索引时:
判断a1、a2和a3所在的原始索引层是否存在下一层索引层,也就是分别判断第一层索引、第二层索引和第三层索引是否存在下一层索引,通过判断可知,a1的原始索引层为第一层,存在下一层索引层,即第二层索引,a2的原始索引层为第二层,存在下一层索引层,即第三层索引,a3的原始索引层为第三层,为最后一层索引,不存在下一层索引层。然后将ai写入tai+1层索引层中,其中,tai为所述原始索引层对应的版本次序,tai小于n,也就是是将a1写入第1+1层,也就是第二层,并删除第一层中的a1;将a2写入第2+1层,也就是第三层,并删除第二层中的a2;且删除第三层中的a3。之后,将被更新数据对应的新索引项写入对应于最新版本数据的索引层中,也就是写入第一层索引中。
更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息后,若多层索引中存在对应于多个版本次序的索引层,则所述将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,可以包括:
(B1)对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层中是否存在除ai以外的其他同数索引项,所述同数索引项属于所述多个索引项;
(B2)若ai所在的原始索引层中存在除ai以外的其他同数索引项,判断ai是否为其所在的原始索引层中最旧的同数索引项;
(B3)判断多层索引中ai所在的原始索引层是否存在下一层索引层;
(B4)若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
(B5)若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项写入所述原始索引层的下一层索引层中;
(B6)若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层不存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则删除所述原始索引层中的ai;
(B7)若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项删除,
其中,所述最旧的同数索引项为对应的数据版本相比于所述原始索引层中其他同数索引项对应的数据版本最旧的同数索引项,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在索引层所对应的版本次序相邻,且旧于ai所在索引层所对应的版本次序。
以图3所示索引层为例,所述多层索引包括:
第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
第二层索引,所述第二层索引中索引项对应的数据的版本次序为2;
第三层索引,所述第三层索引中索引项对应的数据的版本次序为3至n。
具体以n等于4为例,对所述多个索引项中的每个索引项ai,也就是a1、a2、a3和a4,分别判断ai所在的原始索引层中是否存在除ai以外的其他同数索引项,也就是判断第一层索引中除a1以外是否存在a2、a3和a4,判断第二层索引中除a2以外是否存在a1、a3和a4,判断第三层索引中除a3以外是否存在a1、a2和a4,以及判断第三层索引中除a4以外是否存在a1、a2和a3。由判断可知,第一层索引中只有a1,第二层索引中只有a2,第三层索引中除a3和a4外没有其他同数索引项。
由于a3所在的第三层索引中有a4,则判断a3是否为第三层索引中最旧的同数索引项;由于a4所在的第三层索引中有a3,则也判断a4是否为第三层索引中最旧的同数索引项。由判断可知a3不是第三层索引中最旧的同数索引项,a4是第三层索引中最旧的同数索引项。
并且分别判断a1、a2、a3和a4所在的原始索引层是否存在下一层索引层,也就是分别判断第一层索引、第二层索引和第三层索引是否存在下一层索引,通过判断可知,a1的原始索引层为第一层,存在下一层索引层,即第二层索引,a2的原始索引层为第二层,存在下一层索引层,即第三层索引,a3和a4的原始索引层为第三层,为最后一层索引,不存在下一层索引层。
由于a1所在的第一层索引中没有其他同数索引项,且存在下一层索引层,因此将a1写入第二层索引,并删除第一层索引中的a1。由于a2所在的第二层索引中没有其他同数索引项,且存在下一层索引层,因此将a2写入第三层索引,并删除第二层中的a2。由于a3所在的第三层索引中有其他同数索引项a4,且a3不是第三层索引中最旧的同数索引项,且第三索引不存在下一层索引层,因此保持a3,删除第三层索引中的a4。对于该例来说,处理a3后a4已删除,因此虽然判断可知a4所在的第三层索引中有其他同数索引项a3,且a4是第三层中最旧的同数索引项,且第三索引不存在下一层索引层,但可以不必再执行对a4的删除处理。
a1、a2、a3和a4处理完毕后,将被更新数据对应的新索引项写入对应于最新版本数据的索引层中,也就是写入第一层索引中。
以图4所示的多层索引为例,多层索引中,第一层索引中索引项对应的数据的版本次序为1和2,第二层索引对应的版本次序为3和4,第三层索引对应的版本次序为5。则对所述多个索引项中的每个索引项ai,也就是a1、a2、a3、a4和a5,分别判断ai所在的原始索引层中是否存在除ai以外的其他同数索引项,也就是判断第一层索引中除a1以外是否存在a2、a3、a4和a5,以及第一层索引中除a2以外是否存在a1、a3、a4和a5,判断第二层索引中除a3以外是否存在a1、a2、a4和a5,以及判断第二层索引中除a4以外是否存在a1、a2、a3和a5,判断第三层索引中除a5以外是否存在a1、a2、a3和a4。由判断可知,第一层索引中除a1和a2外没有其他同数索引项,第一层索引中除a3和a4外没有其他同数索引项,第三层索引中除a5外没有其他同数索引项。
由于a1所在的第一层索引中有a2,故判断a1是否为第三层索引中最旧的同数索引项;由于a2所在的第一层索引中有a1,故判断a2是否为第三层索引中最旧的同数索引项,判断可知a2是第一层索引中最旧的同数索引项。由于a3所在的第二层索引中有a2,故判断a3是否为第二层索引中最旧的同数索引项;由于a4所在的第二层索引中有a3,则判断a4是否为第二层索引中最旧的同数索引项,判断可知a4是第三层索引中最旧的同数索引项。
并且分别判断a1、a2、a3、a4和a5所在的原始索引层是否存在下一层索引层,也就是分别判断第一层索引、第二层索引和第三层索引是否存在下一层索引,通过判断可知,a1和a2的原始索引层为第一层,存在下一层索引层,即第二层索引,a3和a4的原始索引层为第二层,存在下一层索引层,即第三层索引,a5的原始索引层为第三层,为最后一层索引,不存在下一层索引层。
由于a1所在的第一层索引中有其他同数索引项,但a1不是第一层索引中最旧的同数索引项,a2是第一层索引中最旧的同数索引项,且第一层索引存在下一层索引层,因此保持a1,并将a2写入第二层索引。对于该例而言,此时已将a2写入第二层索引,因此不需根据上述判断结果再将a2写入第二层索引一次,当然也可以根据上述判断结果,由于a2是第一层索引中最旧的同数索引项,且第一层索引存在下一层索引层,因此将a2写入第二层索引,a2写入第二层索引后,删除第一层索引中的a2。
由于a3所在的第二层索引中有其他同数索引项,但a3不是第二层索引中最旧的同数索引项,a4是第二层索引中最旧的同数索引项,且第二层索引存在下一层索引层,因此保持a3,并将a4写入第三层索引。与对a2的处理同理,对于该例而言,此时已将a4写入第三层索引,因此不需根据上述判断结果再将a4写入第三层索引一次,当然也可以根据上述判断结果,由于a4是第二层索引中最旧的同数索引项,且第二层索引存在下一层索引层,因此将a4写入第三层索引,a4写入第三层索引后,删除第二层中的a4。
由于a5所在的第三层索引中没有有其他同数索引项,且第三层索引不存在下一层索引层,因此删除第三层中的a5。
a1、a2、a3、a4和a5处理完毕后,将被更新数据对应的新索引项写入对应于最新版本数据的索引层中,也就是写入第一层中。
以图5所示的多层索引为例,多层索引中,第一层索引中索引项对应的数据的版本次序为1和2,第二层索引对应的版本次序为3,第三层索引对应的版本次序为4和5。则对所述多个索引项中的每个索引项ai,也就是a1、a2、a3、a4和a5,分别判断ai所在的原始索引层中是否存在除ai以外的其他同数索引项,也就是判断第一层索引中除a1以外是否存在a2、a3、a4和a5,以及第一层索引中除a2以外是否存在a1、a3、a4和a5,判断第二层索引中除a3以外是否存在a1、a2、a4和a5,以及判断第二层索引中除a4以外是否存在a1、a2、a3和a5,判断第三层索引中除a5以外是否存在a1、a2、a3和a4。由判断可知,第一层索引中除a1和a2外没有其他同数索引项,第一层索引中除a3外没有其他同数索引项,第三层索引中除a4和a5外没有其他同数索引项。
由于a1所在的第一层索引中有a2,故判断a1是否为第三层索引中最旧的同数索引项;由于a2所在的第一层索引中有a1,故判断a2是否为第三层索引中最旧的同数索引项,判断可知a2是第一层索引中最旧的同数索引项。由于a4所在的第三层索引中有a5,故判断a4是否为第三层索引中最旧的同数索引项;由于a5所在的第三层索引中有a4,则判断a5是否为第三层索引中最旧的同数索引项,判断可知a5是第三层索引中最旧的同数索引项。
并且分别判断a1、a2、a3、a4和a5所在的原始索引层是否存在下一层索引层,也就是分别判断第一层索引、第二层索引和第三层索引是否存在下一层索引,通过判断可知,a1和a2的原始索引层为第一层,存在下一层索引层,即第二层索引,a3的原始索引层为第二层,存在下一层索引层,即第三层索引,a4和a5的原始索引层为第三层,为最后一层索引,不存在下一层索引层。
由于a1所在的第一层索引中有其他同数索引项,但a1不是第一层索引中最旧的同数索引项,a2是第一层索引中最旧的同数索引项,且第一层索引存在下一层索引层,因此保持a1,并将a2写入第二层索引。对于该例而言,此时已将a2写入第二层索引,因此不需根据上述判断结果再将a2写入第二层索引一次,当然也可以根据上述判断结果,由于a2是第一层索引中最旧的同数索引项,且第一层索引存在下一层索引层,因此将a2写入第二层索引,a2写入第二层索引后,删除第一层索引中的a2。
由于a3所在的第二层索引中有其他同数索引项,且第二层索引存在下一层索引层,因此将a3写入第三层索引,并删除第二层索引中的a3。
由于a4所在的第三层索引中有其他同数索引项a5,但a4不是第三层索引中最旧的同数索引项,a5不是第三层索引中最旧的同数索引项,且第三索引不存在下一层索引层,因此保持a4,删除第三层索引中的a5。对于该例来说,处理a4后a5已删除,因此虽然判断可知a5所在的第三层索引中有其他同数索引项a4,且a5是第三层中最旧的同数索引项,且第三索引不存在下一层索引层,但可以不必再执行对a4的删除处理。
a1、a2、a3、a4和a5处理完毕后,将被更新数据对应的新索引项写入对应于最新版本数据的索引层中,也就是写入第一层中。
本发明提供的多版本数据索引的更新方法基于索引项包含数据版本表征的多层索引,相比其他多版本数据索引结构的更新处理而言,不涉及事务相关等的处理,更为简便。
参见图6,为本发明实施例提供的一种多版本数据索引的索引项删除方法的流程示意图,如图6所示,该方法包括如下步骤:
步骤S601,根据被更新数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息;
步骤S602,将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,
其中,所述多层索引的每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
多版本数据存储***中,删除数据通常指删除数据的最新版本,但该删除非物理删除,而是将数据的最新版本保存为次新版本,然后删除原来的最新版本,删除数据后需要相应地变化对应的索引项。删除数据与更新数据的差别主要在于,更新数据是在变化和移动数据对应的多个索引项后,将新索引项写入对应于数据最新版本的索引层,删除数据时变化和移动数据对应的多个索引项的过程与更新数据时变化和移动数据对应的多个索引项的过程相同,但之后没有写入新索引项的步骤,也不需执行其他步骤。因此本发明实施例所提供的多版本数据索引的删除方法,其步骤S601与多版本数据索引的更新方法的步骤S601相同,其步骤S602与多版本数据索引的更新方法的步骤S602相同,具体可以参考步骤S601和步骤S602的说明。
本发明提供的多版本数据索引的删除方法基于索引项包含数据版本表征的多层索引,相比其他多版本数据索引结构的删除处理而言,不涉及事务相关等的处理,更为简单快速。
参见图7,为本发明实施例提供的一种多版本数据索引的建立方法的流程示意图,如图7所示,该方法包括如下步骤:
步骤S701,组织多层索引,并在索引项中设置表征数据版本的特征结构或特征信息,其中,每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定。
具体而言,存储多版本数据的数据存储***中,每个数据的各个版本都可以按新旧次序排列,也就是数据的每个版本都拥有一个新旧次序,通常数据的当前版本为最新版本,紧接着当前版本的为次新版本,紧接着次新版本的为第三新版本……以此类推。为方便程序处理和阐述,数据的n个版本的新旧次序依次按照从新到旧的顺序可以预先设定为1、2……n,也就是当前版本的新旧次序为1,次新版本的新旧次序为2……以此类推。当然,数据的n个版本的新旧次序也可以预先设定为其他能表征次序的数字或字母。
将具有相同的版本次序的数据对应的索引项组织为一层索引,如果所有数据都只有一个版本,则最终组织而成的索引只有一层,但通常数据都有多个版本,由此可以组织成多层索引。需要说明的是,所述多层索引,指在数据有多个版本的情况下,组织的索引层数大于1,也就是不将所有索引项组织为一个索引。每层索引可以使用Hashtable(哈希表)、LSMtree(Log-StructuredMergeTree,日志结构合并树)或B+树等方式来组织,所有索引层可以使用相同的方式来组织,例如都使用Hashtable来组织,也可以使用不同的方式来组织,例如第一层索引使用Hashtable来组织,其他层使用LSMtree来组织,又或者,第一层索引使用Hashtable来组织,第二层索引使用B+树组织,其他层使用LSMtree来组织,等等。在一层索引中,索引项可以对应于数据的一个版本,也可以对应于数据的多个版本。
构建索引层中的索引项时,在索引项中设置表征数据版本的特征结构或特征信息。在一种实施方式中,直接以数据的版本信息作为表征数据版本的特征信息,也就是在索引项中加入数据的版本信息。数据的版本信息中包含了版本的新旧次序,所述新旧次序可以为预先设定的表征次序的数字或字母,由于一般多版本数据之间通过指针将从新到旧的版本数据串联,所以数据的版本信息中包含的新旧次序也可以为指针序列,但使用指针序列这种方式相比使用表征次序的数字或字母要复杂,故非优选方案。当将索引层中的一个索引项对应于一个数据的一个版本时,优选为索引项中直接以数据的版本信息作为数据版本的特征信息,索引项结构可以简单示例如下:
Part hash | ops type | offset | version info |
其中,parthash表示用于检索的部分hash值,opstype和offset表示数据的操作类型和在存储介质中的存储地址,versioninfo为数据的版本信息。
当将索引层中的一个索引项对应于一个数据的多个版本时,可以在索引项中直接设置数据的多个版本信息作为数据版本的特征信息,以一个索引项对应于一个数据的两个版本为例,索引项结构可以简单示例如下:
part hash | ops type1 | offset1 | version1info | ops type2 | offset2 | version2 info |
其中,parthash表示用于检索的部分hash值,opstype1和offset1表示数据的第一个版本的操作类型和在存储介质中的存储地址,例如数据的当前版本的操作类型和在存储介质中的存储地址,version1info为数据的第一个版本的版本信息,例如当前版本的版本信息,opstype2和offset2表示数据的第二个版本的操作类型和在存储介质中的存储地址,例如数据的次新版本的操作类型和在存储介质中的存储地址,version2info为数据的第二个版本的版本信息,例如次新版本的版本信息。version1info和version2info也可以合并在一起,则索引项结构可以简单示例如下:
part hash | ops type1 | offset1 | ops type2 | offset2 | version info |
其中viersioninfo为version1info和version2info合并后的信息,通过versioninfo可以同时得到两个版本的版本信息,这种方式可以减短索引项的长度,节省索引项占用的空间。
当将索引层中的一个索引项对应于一个数据的多个版本时,索引项中也可以以索引项中数据存储在存储介质中的位置作为表征数据版本的特征信息,,而不直接以数据的版本信息作为数据版本的特征信息。以一个索引项对应于一个数据的两个版本为例,索引项结构可以简单示例如下:
part hash | ops type1 | offset1 | ops type2 | offset2 |
其中,parthash表示用于检索的部分hash值,存储介质中,offset1所指的地址在在offset2所指的地址之前,则opstype1和offset1表示数据的第一个版本的操作类型和在存储介质中的存储地址,opstype2和offset2表示数据的第二个版本的操作类型和在存储介质中的存储地址。也就是预先定义在存储介质中存储位置在前的地址对应的数据的版本,较在存储介质中存储位置在后的地址对应的数据的版本新,由于offset1在offset2之前,且该索引项存储的是数据的第一版本和第二版本对应的索引项,因此offset1所指的存储介质中的地址为数据的第一个版本的地址,offset2所指的存储介质中的地址为数据的第二个版本的地址,由此通过索引项中地址的前后可以知道该地址所对应的是数据的哪个版本。这种方式下索引项结构更简洁。
在另一种实施方式中,在索引项中设置表征数据版本的特征结构,而不直接以数据的版本信息作为数据版本的特征信息,例如在索引项中设置空白位,无空白位表示数据为当前版本,也就是最新版本,索引项中设置一个空白位,表示数据为次新版本,设置两个空白位,表示数据为第三新版本,以此类推,但这种方式将产生很多空白位,浪费资源空间,故非优选方式。
组织多少层索引,以及各层索引中索引项对应几个数据版本可以根据实际需要来确定,例如数据量少,保留的数据版本不多,则两层索引即可,如果数据量少,但数据版本多,可以将其中几个版本对应的索引项组织在一层索引中,以减少索引层数,如果数据量虽多,但数据版本不多,则可以根据数据版本的数目来确定索引层数,如果数据量多,数据版本也多,则可以将其中几个版本对应的索引项组织在一层索引中,以避免索引层数太多降低检索效率。
在一种实施方式中,以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,所述组织多层索引,可以包括:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
组织其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。
其中,将当前版本的数据对应的索引项组织为第一层,其他版本对应的索引项组织为一层或多层,每层索引项对应的数据具有的版本次序可以为一个或多个。这是因为数据存储***对当前版本的数据的操作是最多的,将当前版本的数据对应的索引项单独组织为一层,有利于提高检索效率。图2为一种多层索引的示例,由本发明实施例提供的多版本数据索引建立方法建立,数据有n个版本,则组织n层索引,其中,第n层索引中索引项对应的数据的版本次序为n,图2中以Vn表示版本次序n。以下图中也以Vn表示版本次序n。
在另一种实施方式中,以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,所述组织多层索引,可以包括:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
组织第二层索引,所述第二层索引中索引项对应的数据的版本次序为2;
组织第三层索引,所述第三层索引中索引项对应的数据的版本次序为3至n;
其中,n大于3。图3为另一种多层索引的示例,由本发明实施例提供的多版本数据索引建立方法建立,图3中,第一层索引对应的版本次序为V1,第二层索引对应的版本次序为V2,第三层索引对应的版本次序为V3-Vn。相比于图2中每个版本次序对应一个索引层的示例,图3中索引层数少,适用于数据版本不多的情况。
图2和图3的示例中,所述第一层索引优选的是固定存储于内存中,这是因为数据存储***对当前版本的数据操作最多,将当前版本的数据对应的索引层常驻于内存中,可以提高检索的效率和操作的速度。
仍然以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n。如果n大于2,所述组织多层索引,可以包括:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1和2;
组织其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。
图4为又一种多层索引的示例,由本发明实施例提供的多版本数据索引建立方法建立,,其中,数据存储***保留数据的5个版本,第一层索引中索引项对应的数据的版本次序为1和2,即图中第一层索引对应的版本次序为V1和V2,另外,第二层索引对应的版本次序为V3和V4,第三层索引对应的版本次序为V5。
图5为又一种多层索引的示例,由本发明实施例提供的多版本数据索引建立方法建立,其中,数据存储***保留数据的5个版本,第一层索引中索引项对应的数据的版本次序为1和2,即图中第一层索引对应的版本次序为V1和V2,另外,第二层索引对应的版本次序为V3,第三层索引对应的版本次序为V4和V5。
由于数据存储***对当前版本的数据操作最多,因此当前版本的数据对应的索引层中应当尽量少地同时对应于其他版本的数据,以提高检索的效率和操作的速度,故图4和图5相比于图2和图3是较差的示例。
本发明实施例提供的多版本数据索引的建立方法,区别于常规的单一索引层的情况,分层组织数据的索引项,每层索引中不同的索引项对应具有相同的版本次序的数据,并且每层索引中,对每个索引项都设置表征数据版本的特征结构或特征信息,使索引项包含数据的版本信息。由于将索引按数据的版本分层组织,且索引项中包含版本信息,因而可以实现覆盖索引扫描。另外在检索时可以先根据数据的版本找到对应的索引层,然后在对应的索引层中找到对应的具体的索引项,不需对所有索引进行扫描,而且各个版本的数据都有对应的索引项,检索得到的索引项直接对应于数据,不需先检索到其他的数据然后通过串联关系得到欲检索的数据,从而能够提高检索效率。再者,索引结构简单,索引建立开销小,且索引检索效率高,适用于处理基本读写并发的情况。
组织而成的索引层,可以都存储于内存中,但如果索引层占据空间很大,则占据内存空间过多会降低***运行速度,故可以将一部分索引层存储于内存中,将其他部分索引层存储于其他指定的固态存储介质中。由于对当前版本的数据操作最多,因此优选的是将当前版本的数据对应的索引层存储于内存中,且固定存储于内存中,也就是常驻于内存中,有利于提高数据处理速度,其他层则可以存储于其他指定的固态存储介质中。多层索引也可以视内存空间的动态变化,使用动态存储的方案,也就是根据当前内存空间的大小,来动态的调整哪些存储于内存中,哪些存储于内存之外。
参见图8,为本发明实施例提供的另一种多版本数据索引的建立方法的流程示意图,如图8所示,该方法包括如下步骤:
步骤S801,组织多层索引,并在索引项中设置表征数据版本的特征结构或特征信息,其中,每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定;
步骤S802,为每层索引设置内存存储优先级;
步骤S803,定期根据内存的存储情况设置存储阈值;
步骤S804,判断内存中是否存在内存存储优先级小于所述存储阈值的索引层;
步骤S805,若内存中存在内存存储优先级小于所述存储阈值的索引层,将内存存储优先级小于所述存储阈值的索引层存储于其他指定的固态存储介质,并从内存中删除;
步骤S806,判断是否存在内存存储优先级大于或等于所述存储阈值的索引层;
步骤S807,若存在内存存储优先级大于或等于所述存储阈值的索引层,判断内存存储优先级大于或等于所述存储阈值的索引层是否存储于内存中;
步骤S808,若内存存储优先级大于或等于所述存储阈值的索引层存储于内存之外,将内存存储优先级大于或等于所述存储阈值的索引层存储于内存中。
其中,在组织索引层时,为每层索引设置内存存储优先级,每层索引的内存存储优先级可以根据该层索引对应的数据的***操作频率来确定,例如,将当前版本的数据对应的索引项组织为第一层索引,则该层索引的内存存储优先级设置为最高,将次新版本的数据对应的索引项组织为第二层索引,将该层索引的内存存储优先级设置为次高。
在***运行中,定期根据内存的存储情况设置存储阈值,所述定期可以根据内存的历史存储变化情况设置,例如***周期性会出现大吞吐量的数据操作,内存周期性出现空闲空间大幅减小以及在大吞吐量的数据操作完毕后空闲空间大幅增加的情况,则所述定期可以设置为与该周期同步,在出现大吞吐量的数据操作时期,将存储阈值设置得较大,在该大吞吐量的数据操作完毕时,将存储阈值设置得较小。所述定期也可以由技术人员根据经验设置。所述存储阈值为索引层是否可以存入内存的内存存储优先级分界值,内存存储优先级大于或等于所述存储阈值的索引层可以存入内存,内存存储优先级小于所述存储阈值的索引层则不存入内存。所述存储阈值可以根据内存的空闲情况和各个索引层的空间占用大小来确定,因此每次设置的存储阈值可能是不同的。例如,索引有3层,当前内存空闲空间为350M,第一层索引(内存存储优先级为Top)占用的空间为200M,第二层索引(内存存储优先级为Second)占用的空间为100M,第三层索引(内存存储优先级为Third)占用的空间为100M,则设置存储阈值为Second,上述内存存储优先级Top>Second>Third。
存储阈值发生变化后,原先存储在内存中索引层可能不再适于存储于内存中,例如内存空闲空间变小,相应地存储阈值变大,则原本存储于内存的索引层的内存存储优先级变得小于存储阈值。故在***运行中,动态地判断内存中是否存在内存存储优先级小于所述存储阈值的索引层,若内存中存在内存存储优先级小于所述存储阈值的索引层,将内存存储优先级小于所述存储阈值的索引层存储于其他指定的固态存储介质,并从内存中删除,从而释放更多的内存空间,提高***的运行速度。
另一方面,存储阈值发生变化后,原先存储于内存之外的索引层可能适于存储于内存中,例如,内存空闲空间变大,相应地存储阈值变小,则原本存储于内存外的索引层的内存存储优先级变得大于或等于存储阈值。故在***运行中,动态地判断是否存在内存存储优先级大于或等于所述存储阈值的索引层,若存在内存存储优先级大于或等于所述存储阈值的索引层,则进一步判断内存存储优先级大于或等于所述存储阈值的索引层是否存储于内存中,若已经存储于内存中,则不必进行任何操作,若内存存储优先级大于或等于所述存储阈值的索引层存储于内存之外,将内存存储优先级大于或等于所述存储阈值的索引层存储于内存中,从而提高对索引层对应的数据的检索效率和操作效率。
在一些数据存储***中,数据的存储介质分为高速存储介质和低速存储介质,高速存储介质可以为内存,用于实时高速地处理数据,低速存储介质的所谓“低速”是相对于高速存储介质而言,处理速度低于高速存储介质,因此上述内存还可以替换为高速存储介质,相应的“其他指定的固态存储介质”可以替换为低速存储介质。
参见图9,为本发明实施例提供的一种多版本数据索引的更新装置的框图,如图9所示,该装置包括:
第一版本更新单元U901,用于根据被更新数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息;
第一索引项移动单元U902,用于将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中;
新索引项写入单元U903,用于将被更新数据对应的新索引项写入对应于最新版本数据的索引层中,
其中,所述多层索引的每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
可选的,若一个索引层对应于一个版本次序,也就是多层索引中每个索引项只对应于一个版本次序,所述索引项移动单元,可以具体用于:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层不存在下一层索引层,删除ai,
其中,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
其中,若以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,所述多层索引,包括n层索引,其中,第n层索引中索引项对应的数据的版本次序为n,这种情况下,所述索引项移动单元,在若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中时,具体用于:
将ai写入tai+1层索引层中,其中,tai为所述原始索引层对应的版本次序,tai小于n。
可选的,若多层索引中存在对应于多个版本次序的索引层,则所述索引项移动单元,可以具体用于:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层中是否存在除ai以外的其他同数索引项,所述同数索引项属于所述多个索引项;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,判断ai是否为其所在的原始索引层中最旧的同数索引项;
判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项写入所述原始索引层的下一层索引层中;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层不存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项ak,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项删除,
其中,所述最旧的同数索引项为对应的数据版本相比于所述原始索引层中其他同数索引项对应的数据版本最旧的同数索引项,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
参见图10,为本发明实施例提供的一种多版本数据索引的索引项删除装置的框图,如图10所示,该装置包括:
第二版本更新单元U1001,用于根据被删除数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息;
第二索引项移动单元U1002,用于将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,
其中,所述多层索引的每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
其中,所述第二版本更新单元与图9所示多版本数据索引的更新装置的第一版本更新单元相同。所述第二索引项移动单元与图9所示多版本数据索引的更新装置的第一索引项移动单元相同。
可选的,若一个索引层对应于一个版本次序,所述第二索引项移动单元,可以具体用于:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层不存在下一层索引层,删除ai,
其中,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
可选的,若多层索引中存在对应于多个版本次序的索引层,所述第二索引项移动单元,可以具体用于:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层中是否存在除ai以外的其他同数索引项,所述同数索引项属于所述多个索引项;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,判断ai是否为其所在的原始索引层中最旧的同数索引项;
判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项写入所述原始索引层的下一层索引层中;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层不存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项ak,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项删除,
其中,所述最旧的同数索引项为对应的数据版本相比于所述原始索引层中其他同数索引项对应的数据版本最旧的同数索引项,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
参见图11,为本发明实施例提供的一种多版本数据索引的建立装置的框图,如图11所示,该装置包括:
索引组织单元U1101,所述索引组织单元用于组织多层索引,其中,每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定;
特征设置单元U1102,用于在索引项中设置表征数据版本的特征结构或特征信息。
其中,所述特征设置单元在设置表征数据版本的特征结构或特征信息时,可以以索引项中数据存储在存储介质中的位置作为表征数据版本的特征结构,或者直接以数据的版本信息作为表征数据版本的特征信息。
其中,可以以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,在一种实施方式中,所述索引组织单元,可以具体用于:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
组织其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。
更具体地,所述索引组织单元,可以用于:组织n层索引,其中,第n层索引中索引项对应的数据的版本次序为n。
当n大于3时,更具体地,所述索引组织单元,可以用于:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
组织第二层索引,所述第二层索引中索引项对应的数据的版本次序为2;
组织第三层索引,所述第三层索引中索引项对应的数据的版本次序为3至n,
当第一层索引对应的是当前版本的数据时,在优选的实施方式汇总,所述的多版本数据索引建立装置,还可以包括固定存储单元,所述固定存储单元用于将所述第一层索引固定存储于内存中,有利于提高数据处理速度,其他层则可以存储于其他指定的固态存储介质中。
以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,其中,n大于2,在另一种实施方式中,所述索引组织单元,可以具体用于:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1和2;
组织其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。
当n大于3时,更具体地,所述索引组织单元,可以用于:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1和2;
组织第二层索引,所述第三层索引中索引项对应的数据的版本次序为3至n。
当n大于4时,更具体地,所述索引组织单元,可以用于:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1和2;
组织第二层索引,所述第三层索引中索引项对应的数据的版本次序为3;
组织第三层索引,所述第三层索引中索引项对应的数据的版本次序为4至n。
本发明实施例提供的多版本数据索引建立装置,分层组织数据的索引项构成多层索引,每层索引中不同的索引项对应的数据具有相同的版本次序,并且,每层索引中,对每个索引项都设置表征数据版本的特征结构或特征信息,因而可以从索引项中获取数据的版本信息,实现覆盖索引扫描。本发明实施例提供的多版本数据索引建立装置,索引建立开销小,索引结构简单,且检索效率高,适用于处理基本读写并发的情况。
参见图12,为本发明实施例提供的另一种多版本数据索引的建立装置的框图,如图2所示,该装置包括:
索引组织单元U201,所述索引组织单元用于组织多层索引,其中,每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定;
特征设置单元U1202,用于在索引项中设置表征数据版本的特征结构或特征信息。
内存存储优先级设置单元U1203,用于为每层索引设置内存存储优先级;
存储阈值设置单元U1204,用于定期根据内存的存储情况设置存储阈值;
第一判断单元U1205,用于判断内存中是否存在内存存储优先级小于所述存储阈值的索引层;
第一执行单元U1206,用于若内存中存在内存存储优先级小于所述存储阈值的索引层,将内存存储优先级小于所述存储阈值的索引层存储于其他指定的固态存储介质,并从内存中删除;
第二判断单元U1207,用于判断是否存在内存存储优先级大于或等于所述存储阈值的索引层;
第三判断单元U1208,用于若存在内存存储优先级大于或等于所述存储阈值的索引层,判断内存存储优先级大于或等于所述存储阈值的索引层是否存储于内存中;
第二执行单元U1209,用于若内存存储优先级大于或等于所述存储阈值的索引层存储于内存之外,将内存存储优先级大于或等于所述存储阈值的索引层存储于内存中。
在组织索引层时,内存存储优先级设置单元U1203为每层索引设置内存存储优先级,每层索引的内存存储优先级可以根据该层索引对应的数据的***操作频率来确定。在***运行中,存储阈值设置单元U1204定期根据内存的存储情况设置存储阈值,所述定期可以根据内存的历史存储变化情况设置,例如***周期性会出现大吞吐量的数据操作,内存周期性出现空闲空间大幅减小以及在大吞吐量的数据操作完毕后空闲空间大幅增加的情况,则所述定期可以设置为与该周期同步,在出现大吞吐量的数据操作时期,将存储阈值设置得较大,在该大吞吐量的数据操作完毕时,将存储阈值设置得较小。所述定期也可以由技术人员根据经验设置。所述存储阈值为索引层是否可以存入内存的内存存储优先级分界值,内存存储优先级大于或等于所述存储阈值的索引层可以存入内存,内存存储优先级小于所述存储阈值的索引层则不存入内存。所述存储阈值可以根据内存的空闲情况和各个索引层的空间占用大小来确定,因此每次设置的存储阈值可能不同。
在***运行中,第一判断单元U1205动态地判断内存中是否存在内存存储优先级小于所述存储阈值的索引层,若内存中存在内存存储优先级小于所述存储阈值的索引层,则第一执行单元U1206将内存存储优先级小于所述存储阈值的索引层存储于其他指定的固态存储介质,并从内存中删除,从而释放更多的内存空间,提高***的运行速度。
在***运行中,第二判断单元U1207动态地判断是否存在内存存储优先级大于或等于所述存储阈值的索引层,若存在内存存储优先级大于或等于所述存储阈值的索引层,则第三判断单元U1208进一步判断内存存储优先级大于或等于所述存储阈值的索引层是否存储于内存中,若已经存储于内存中,则不必进行任何操作,若内存存储优先级大于或等于所述存储阈值的索引层存储于内存之外,则第二执行单元U1209将内存存储优先级大于或等于所述存储阈值的索引层存储于内存中,从而提高对索引层对应的数据的检索效率和操作效率。
在一些数据存储***中,数据的存储介质分为高速存储介质和低速存储介质,高速存储介质可以为内存,用于实时高速地处理数据,低速存储介质的所谓“低速”是相对于高速存储介质而言,处理速度低于高速存储介质,因此上述内存还可以替换为高速存储介质,相应的“其他指定的固态存储介质”可以替换为低速存储介质。
本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本说明书中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个单元或者操作与另一个单元或操作区分开来,而不一定要求或者暗示这些单元或操作之间存在任何这种实际的关系或者逆序。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (32)
1.一种多版本数据索引的更新方法,其特征在于,包括:
根据被更新数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息;
将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中;
将被更新数据对应的新索引项写入对应于最新版本数据的索引层中,
其中,所述多层索引的每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
2.如权利要求1所述的多版本数据索引的更新方法,其特征在于,若一个索引层对应于一个版本次序,所述将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,包括:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层不存在下一层索引层,则删除ai,
其中,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
3.如权利要求2所述的多版本数据索引的更新方法,其特征在于,以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,所述多层索引,包括n层索引,其中,第n层索引中索引项对应的数据的版本次序为n,
所述若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中,包括:
将ai写入tai+1层索引层中,其中,tai为所述原始索引层对应的版本次序,tai小于n。
4.如权利要求1所述的多版本数据索引的更新方法,其特征在于,若多层索引中存在对应于多个版本次序的索引层,所述将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,包括:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层中是否存在除ai以外的其他同数索引项,所述同数索引项属于所述多个索引项;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,判断ai是否为其所在的原始索引层中最旧的同数索引项;
判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项写入所述原始索引层的下一层索引层中;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层不存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项ak,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项删除,
其中,所述最旧的同数索引项为对应的数据版本相比于所述原始索引层中其他同数索引项对应的数据版本最旧的同数索引项,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
5.一种多版本数据索引的索引项删除方法,其特征在于,包括:
根据被删除数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息;
将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,
其中,所述多层索引的每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
6.如权利要求5所述的多版本数据索引的索引项删除方法,其特征在于,若一个索引层对应于一个版本次序,所述将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,包括:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层不存在下一层索引层,则删除ai,
其中,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
7.如权利要求5所述的多版本数据的索引项删除方法,其特征在于,若多层索引中存在对应于多个版本次序的索引层,所述将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,包括:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层中是否存在除ai以外的其他同数索引项,所述同数索引项属于所述多个索引项;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,判断ai是否为其所在的原始索引层中最旧的同数索引项;
判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项写入所述原始索引层的下一层索引层中;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层不存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项ak,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项删除,
其中,所述最旧的同数索引项为对应的数据版本相比于所述原始索引层中其他同数索引项对应的数据版本最旧的同数索引项,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
8.一种多版本数据索引的建立方法,其特征在于,包括:
组织多层索引,并在索引项中设置表征数据版本的特征结构或特征信息,其中,每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定。
9.如权利要求8所述的多版本数据索引的建立方法,其特征在于,以索引项中数据存储在存储介质中的位置作为表征数据版本的特征信息。
10.如权利要求8所述的多版本数据索引的建立方法,其特征在于,以数据的版本信息作为表征数据版本的特征信息。
11.如权利要求8所述的多版本数据索引的建立方法,其特征在于,还包括:
为每层索引设置内存存储优先级;
定期根据内存的存储情况设置存储阈值;
判断内存中是否存在内存存储优先级小于所述存储阈值的索引层;
若内存中存在内存存储优先级小于所述存储阈值的索引层,将内存存储优先级小于所述存储阈值的索引层存储于其他指定的固态存储介质,并从内存中删除;
判断是否存在内存存储优先级大于或等于所述存储阈值的索引层;
若存在内存存储优先级大于或等于所述存储阈值的索引层,判断内存存储优先级大于或等于所述存储阈值的索引层是否存储于内存中;
若内存存储优先级大于或等于所述存储阈值的索引层存储于内存之外,将内存存储优先级大于或等于所述存储阈值的索引层存储于内存中。
12.如权利要求8所述的多版本数据索引的建立方法,其特征在于,所述数据版本的新旧次序预先根据数据的版本设定,包括:以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n;
所述组织多层索引,包括:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
组织其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。
13.如权利要求12所述的多版本数据索引的建立方法,其特征在于,所述组织多层索引,包括:组织n层索引,其中,第n层索引中索引项对应的数据的版本次序为n。
14.如权利要求12所述的多版本数据索引的建立方法,其特征在于,所述组织多层索引,包括:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
组织第二层索引,所述第二层索引中索引项对应的数据的版本次序为2;
组织第三层索引,所述第三层索引中索引项对应的数据的版本次序为3至n,
其中,n大于3。
15.如权利要求12至14任一项所述的多版本数据索引的建立方法,其特征在于,还包括:将所述第一层索引固定存储于内存中。
16.如权利要求8所述的多版本数据索引的建立方法,其特征在于,所述数据版本的新旧次序预先根据数据的版本设定,包括:以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,其中,n大于2;
所述组织多层索引,包括:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1和2;
组织其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。
17.一种多版本数据索引的更新装置,其特征在于,包括:
第一版本更新单元,用于根据被更新数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息;
第一索引项移动单元,用于将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中;
新索引项写入单元,用于将被更新数据对应的新索引项写入对应于最新版本数据的索引层中,
其中,所述多层索引的每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
18.如权利要求17所述的多版本数据索引的更新装置,其特征在于,若一个索引层对应于一个版本次序,所述索引项移动单元,具体用于:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层不存在下一层索引层,删除ai,
其中,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
19.如权利要求18所述的多版本数据索引的更新装置,其特征在于,以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,所述多层索引,包括n层索引,其中,第n层索引中索引项对应的数据的版本次序为n,所述索引项移动单元,在若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中时,具体用于:
将ai写入tai+1层索引层中,其中,tai为所述原始索引层对应的版本次序,tai小于n。
20.如权利要求17所述的多版本数据索引的更新装置,其特征在于,若多层索引中存在对应于多个版本次序的索引层,所述索引项移动单元,具体用于:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层中是否存在除ai以外的其他同数索引项,所述同数索引项属于所述多个索引项;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,判断ai是否为其所在的原始索引层中最旧的同数索引项;
判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项写入所述原始索引层的下一层索引层中;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层不存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项ak,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项删除,
其中,所述最旧的同数索引项为对应的数据版本相比于所述原始索引层中其他同数索引项对应的数据版本最旧的同数索引项,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
21.一种多版本数据索引的索引项删除装置,其特征在于,包括:
第二版本更新单元,用于根据被删除数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征信息;
第二索引项移动单元,用于将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的索引层中,
其中,所述多层索引的每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
22.如权利要求21所述的多版本数据索引的索引项删除装置,其特征在于,若一个索引层对应于一个版本次序,所述第二索引项移动单元,具体用于:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层不存在下一层索引层,删除ai,
其中,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
23.如权利要求21所述的多版本数据索引的索引项删除装置,其特征在于,若多层索引中存在对应于多个版本次序的索引层,所述第二索引项移动单元,具体用于:
对所述多个索引项中的每个索引项ai,判断多层索引中ai所在的原始索引层中是否存在除ai以外的其他同数索引项,所述同数索引项属于所述多个索引项;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,判断ai是否为其所在的原始索引层中最旧的同数索引项;
判断多层索引中ai所在的原始索引层是否存在下一层索引层;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则将ai写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项写入所述原始索引层的下一层索引层中;
若ai所在的原始索引层中不存在除ai以外的其他同数索引项,且ai所在的原始索引层不存在下一层索引层,或者,ai所在的原始索引层中存在除ai以外的其他同数索引项ak,且ai为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则删除所述原始索引层中的ai;
若ai所在的原始索引层中存在除ai以外的其他同数索引项,且ai不为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层索引层,则保持ai,将ai所在的原始索引层中最旧的同数索引项删除,
其中,所述最旧的同数索引项为对应的数据版本相比于所述原始索引层中其他同数索引项对应的数据版本最旧的同数索引项,i=1……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次序与ai所在原始索引层所对应的版本次序相邻,且旧于ai所在原始索引层所对应的版本次序。
24.一种多版本数据索引的建立装置,其特征在于,包括
索引组织单元,所述索引组织单元用于组织多层索引,其中,每层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本设定;
特征设置单元,用于在索引项中设置表征数据版本的特征结构或特征信息。
25.如权利要求24所述的多版本数据索引的建立装置,其特征在于,以索引项中数据存储在存储介质中的位置作为表征数据版本的特征结构。
26.如权利要求24所述的多版本数据索引的建立装置,其特征在于,以数据的版本信息作为表征数据版本的特征信息。
27.如权利要求24所述的多版本数据索引的建立装置,其特征在于,还包括:
内存存储优先级设置单元,用于为每层索引设置内存存储优先级;
存储阈值设置单元,用于定期根据内存的存储情况设置存储阈值;
第一判断单元,用于判断内存中是否存在内存存储优先级小于所述存储阈值的索引层;
第一执行单元,用于若内存中存在内存存储优先级小于所述存储阈值的索引层,将内存存储优先级小于所述存储阈值的索引层存储于其他指定的固态存储介质,并从内存中删除;
第二判断单元,用于判断是否存在内存存储优先级大于或等于所述存储阈值的索引层;
第三判断单元,用于若存在内存存储优先级大于或等于所述存储阈值的索引层,判断内存存储优先级大于或等于所述存储阈值的索引层是否存储于内存中;
第二执行单元,用于若内存存储优先级大于或等于所述存储阈值的索引层存储于内存之外,将内存存储优先级大于或等于所述存储阈值的索引层存储于内存中。
28.如权利要求24所述的多版本数据索引的建立装置,其特征在于,所述数据版本的新旧次序预先根据数据的版本设定,包括:以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n;
所述索引组织单元,具体用于:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
组织其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。
29.如权利要求28所述的多版本数据索引的建立装置,其特征在于,所述索引组织单元,具体用于:组织n层索引,其中,第n层索引中索引项对应的数据的版本次序为n。
30.如权利要求28所述的多版本数据索引的建立装置,其特征在于,所述索引组织单元,具体用于:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
组织第二层索引,所述第二层索引中索引项对应的数据的版本次序为2;
组织第三层索引,所述第三层索引中索引项对应的数据的版本次序为3至n,
其中,n大于3。
31.如权利要求28至30任一项所述的多版本数据索引的建立装置,其特征在于,还包括:
固定存储单元,用于将所述第一层索引固定存储于内存中。
32.如权利要求24所述的多版本数据索引的建立装置,其特征在于,所述数据版本的新旧次序预先根据数据的版本设定,包括:以数据的当前版本为最新的版本,数据的n个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……n,其中,n大于2;
所述索引组织单元,具体用于:
组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1和2;
组织其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510966748.1A CN105512325B (zh) | 2015-12-21 | 2015-12-21 | 多版本数据索引的更新、删除与建立方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510966748.1A CN105512325B (zh) | 2015-12-21 | 2015-12-21 | 多版本数据索引的更新、删除与建立方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105512325A true CN105512325A (zh) | 2016-04-20 |
CN105512325B CN105512325B (zh) | 2018-12-25 |
Family
ID=55720305
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510966748.1A Active CN105512325B (zh) | 2015-12-21 | 2015-12-21 | 多版本数据索引的更新、删除与建立方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105512325B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106503260A (zh) * | 2016-11-18 | 2017-03-15 | 北京奇虎科技有限公司 | 一种提高数据库的有效存储空间的方法和装置 |
CN109582666A (zh) * | 2018-09-29 | 2019-04-05 | 阿里巴巴集团控股有限公司 | 数据主键生成方法、装置、电子设备及存储介质 |
KR20200094074A (ko) * | 2019-01-29 | 2020-08-06 | 베이징 바이두 넷컴 사이언스 앤 테크놀로지 코., 엘티디. | 인덱스 관리 방법, 장치, 기기 및 저장 매체 |
CN112579117A (zh) * | 2019-09-30 | 2021-03-30 | 北京国双科技有限公司 | 数据升级方法及装置 |
CN113064886A (zh) * | 2021-03-04 | 2021-07-02 | 广州中国科学院计算机网络信息中心 | 一种标识资源存储和标记管理的方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101162469A (zh) * | 2007-11-09 | 2008-04-16 | 清华大学 | 基于快照的细粒度文件与目录版本管理方法 |
CN101295323A (zh) * | 2008-06-30 | 2008-10-29 | 腾讯科技(深圳)有限公司 | 一种用于索引更新的处理方法和*** |
US7702640B1 (en) * | 2005-12-29 | 2010-04-20 | Amazon Technologies, Inc. | Stratified unbalanced trees for indexing of data items within a computer system |
US20140081917A1 (en) * | 2010-12-21 | 2014-03-20 | Microsoft Corporation | Searching files |
CN103714090A (zh) * | 2012-10-09 | 2014-04-09 | 阿里巴巴集团控股有限公司 | 多索引数据库事务处理方法及数据库 |
CN103714121A (zh) * | 2013-12-03 | 2014-04-09 | 华为技术有限公司 | 一种索引记录的管理方法及装置 |
CN104809237A (zh) * | 2015-05-12 | 2015-07-29 | 百度在线网络技术(北京)有限公司 | LSM-tree索引的优化方法和装置 |
-
2015
- 2015-12-21 CN CN201510966748.1A patent/CN105512325B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7702640B1 (en) * | 2005-12-29 | 2010-04-20 | Amazon Technologies, Inc. | Stratified unbalanced trees for indexing of data items within a computer system |
CN101162469A (zh) * | 2007-11-09 | 2008-04-16 | 清华大学 | 基于快照的细粒度文件与目录版本管理方法 |
CN101295323A (zh) * | 2008-06-30 | 2008-10-29 | 腾讯科技(深圳)有限公司 | 一种用于索引更新的处理方法和*** |
US20140081917A1 (en) * | 2010-12-21 | 2014-03-20 | Microsoft Corporation | Searching files |
CN103714090A (zh) * | 2012-10-09 | 2014-04-09 | 阿里巴巴集团控股有限公司 | 多索引数据库事务处理方法及数据库 |
CN103714121A (zh) * | 2013-12-03 | 2014-04-09 | 华为技术有限公司 | 一种索引记录的管理方法及装置 |
CN104809237A (zh) * | 2015-05-12 | 2015-07-29 | 百度在线网络技术(北京)有限公司 | LSM-tree索引的优化方法和装置 |
Non-Patent Citations (2)
Title |
---|
CRISTIAN CADAR: "Multi-version Software Updates", 《2012 4TH INTERNATIONAL WORKSHOP ON HOT TOPICS IN SOFTWARE UPGRADES (HOTSWUP)》 * |
刘贤焯: "NGB智能终端数据访问关键技术研究", 《中国博士学位论文全文数据库 信息科技辑》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106503260A (zh) * | 2016-11-18 | 2017-03-15 | 北京奇虎科技有限公司 | 一种提高数据库的有效存储空间的方法和装置 |
CN106503260B (zh) * | 2016-11-18 | 2020-04-28 | 北京奇虎科技有限公司 | 一种提高数据库的有效存储空间的方法和装置 |
CN109582666A (zh) * | 2018-09-29 | 2019-04-05 | 阿里巴巴集团控股有限公司 | 数据主键生成方法、装置、电子设备及存储介质 |
KR20200094074A (ko) * | 2019-01-29 | 2020-08-06 | 베이징 바이두 넷컴 사이언스 앤 테크놀로지 코., 엘티디. | 인덱스 관리 방법, 장치, 기기 및 저장 매체 |
US11308060B2 (en) | 2019-01-29 | 2022-04-19 | Beijing Baidu Netcom Science And Technology Co., Ltd. | Method, apparatus, device and storage medium for managing index |
CN112579117A (zh) * | 2019-09-30 | 2021-03-30 | 北京国双科技有限公司 | 数据升级方法及装置 |
CN113064886A (zh) * | 2021-03-04 | 2021-07-02 | 广州中国科学院计算机网络信息中心 | 一种标识资源存储和标记管理的方法 |
CN113064886B (zh) * | 2021-03-04 | 2023-08-29 | 广州中国科学院计算机网络信息中心 | 一种标识资源存储和标记管理的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105512325B (zh) | 2018-12-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111399777A (zh) | 一种基于数据值分类的差异化键值数据存储方法 | |
US7418544B2 (en) | Method and system for log structured relational database objects | |
CN105512325A (zh) | 多版本数据索引的更新、删除与建立方法及装置 | |
US7028022B1 (en) | Heuristic-based conditional data indexing | |
CN108369587B (zh) | 创建用于交换的表 | |
US7765211B2 (en) | System and method for space management of multidimensionally clustered tables | |
CN105630409A (zh) | 使用存储器内阵列和盘上页结构的双重数据存储 | |
US20050182785A1 (en) | Smart database | |
US20170255709A1 (en) | Atomic updating of graph database index structures | |
CN103186622B (zh) | 一种全文检索***中索引信息的更新方法以及装置 | |
CN104484471B (zh) | 一种高性能数据存储引擎的实现方法 | |
CN106716409A (zh) | 基于查询需求从行存储数据库自适应地构建和更新列存储数据库的方法和*** | |
CN110109910A (zh) | 数据处理方法及***、电子设备和计算机可读存储介质 | |
US8682872B2 (en) | Index page split avoidance with mass insert processing | |
CN104424219A (zh) | 一种数据文件的管理方法及装置 | |
CN110096509A (zh) | 大数据环境下实现历史数据拉链表存储建模处理的***及方法 | |
CN102609492B (zh) | 一种支持表模式可变的元数据管理方法 | |
KR101575639B1 (ko) | 지도 서비스를 위한 타일 이미지 갱신 시스템 및 그 방법 | |
CN103530067B (zh) | 一种数据操作的方法和设备 | |
US20180011897A1 (en) | Data processing method having structure of cache index specified to transaction in mobile environment dbms | |
US20160125021A1 (en) | Efficient updates in non-clustered column stores | |
CN110019130A (zh) | 一种数据库更新的方法及装置 | |
US8818953B2 (en) | Method and apparatus for loading data into multi-table tablespace | |
KR20200098971A (ko) | 싱글-레벨 기반의 데이터 저장 장치 및 방법 | |
KR20110077934A (ko) | 해싱 기반의 데이터 관리 방법 및 장치 |
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 |