专利名称:一种键值库辅助索引的构建与管理方法
技术领域:
本发明涉及一种键值库辅助索引的构建与管理方法,属于计算机数据管理技术领域。
背景技术:
互联网的飞速发展带来数据的爆发式增长,不仅数量上指数级增长,而且数据类型和结构都复杂多样,无法用关系型的二维表来表示,导致传统的关系数据库无法处理和分析这种大规模的数据。因此工业界和学术界开始考虑新的数据模型来处理海量的非结构化数据,2006年谷歌发表宽表(BigTable)论文,揭示了谷歌处理海量数据的核心技术。宽表的数据模型灵活多变,不需要预定义表格的列,宽表可在运行期动态添加列。与关系数据库的行存储对应,宽表采用列存储,可自动水平扩展到多台机器。谷歌宽表论文的公开发表引起开源界的重视,非常多的列存储系统被开发出来,其中典型代表就是HBase和 Cassandra,数据模型也都是基于谷歌的宽表。本发明所指的键值库,即是采用谷歌宽表数据模型的列存储系统,具体的实现是Cassandra。下面先解释其具体的数据模型,然后介绍相关的辅助索引技术。键值库就是以表的形式存储数据,每个表由行和列组成,每个列属于一个特定的列族。表中由行和列确定的存储单元称为一个元素,每个元素保存了同一份数据的多个版本,由时间戳来标识。行键是数据行在表中的唯一标识,在底层按照字典序有序存储并作为检索记录的主键,这对应关系数据库的主索引。元素则由行键,列(列族列名)和时间戳唯一确定,所以如果没有辅助索引要查找某个符合某个条件的元素所在的行需要做全表扫描。需要说明的是键值库能保证行键,列名和时间戳都是有序的。底层物理存储时是按照列族进行存储,这也是为什么叫列存储,这对应关系数据的行存储。存储时表中的空值是不被存储的,这样可以最优化存储空间。这种存储结构还有的一个优势是任何一个列族都能随时向表中添加新列,支持灵活而复杂的数据结构。此外,这种模型能水平分割,所以一个表可以无限大,系统会自动水平分割到多个机器上并管理好,这也是能支持海量数据的一个原因。键值库的访问方式需要确定行键,列和时间戳,但很多情况下用户想查询某列符合条件的所有记录,这时并不知道行键,所以无法快速高效做到,需要扫描全表。这种查询在传统数据库中经常见到,一般是where子句里指定相应条件,在关系数据库中可通过B-树索引高效做到。B-树索引不能简单的应用到键值库中,因为键值库需要高性能的实时读写,而且数据量庞大能很好的水平扩展,而B-树索引一是不能方便的扩展,二是数据规模大了之后读写性能急剧下降。因此一般键值库只提供主键索引,而需要用户去构建自己的辅助索引,这也是本发明要提出构建键值库的辅助索引的原因。辅助索引就是用于加快键值库中表数据的访问速度,有效避免全表扫描。目前键值库的辅助索引很普遍的做法就是以列值作为行键,行键作为列重新构造一个表,即可实现根据列值快速地定位相关数据所在的行,这种做法也叫反向索引。这种索引方式简单,但有两大缺点,一是索引的数据可能不是本地的而是其他机器上的,会导致数据的传输消耗,二是数据的更新和索引的更新不是原子性会导致数据的不一致性。
发明内容
本发明的目的是提出一种键值库辅助索引的构建与管理方法,针对已有的键值库上的辅助索引限制多且功能弱,提出新的键值库辅助索引的构建与管理方法,用于加快键值库中表数据的访问速度,有效避免全表扫描。本发明提出的键值库辅助索引的构建与管理方法,包括以下步骤(I)设键值库中没有待索引的数据,用户对键值库系统进行初始化,并建立用于数据索引的列族和列,向数据索引的列族和列中插入待索引数据;
(2)在键值库中建立辅助索引列族,并初始化,其过程如下(2-1)在键值库中创建存储索引信息表;(2-2)向上述索引信息表中添加两个列族,两个列族分别为索引信息和索引项,并设定列族列名的比较类型为复合列名类型;(2-3)设定上述索引信息列族的复合列名格式为{索引值类型编码字段,索引值字段,行键字段,全局唯一标识字段},与该索引信息列族的复合列名相对应的列值为空,行键为索引名;(2-4)设定上述索引项列族的复合列名格式为{索引列名字段,全局唯一标识字段},与该索引项的复合列名相对应的列值为复合式的{索引值字段},行键为与待索引的数据所在行相对应的行键;(3)进行键值库辅助索引,包括以下步骤(3-1)从键值库中获取构建时间戳、当前键值库的唯一标识和构建索引名;(3-2)设定一个构建键值库辅助索引过程进行批处理操作的操作列表m,设定索引信息列族的行键为索引名;(3-3)根据待索引数据,从索引项列族中获取一个与索引信息列族中与待索引数据相对应的旧索引的信息n,该信息n包括行键、索引列的值和全局唯一标识,并用信息n更新索引信息列族中的数据,并将该更新操作添加到操作列表m中,同时删除索引项列族中中的旧索引信息,并将该删除操作添加到操作列表m中;(3-4)对步骤(I)的数据索引进行判断,若数据索引的列族中待索引数据的值不为空,则在上述索引项列族和索引信息列族中添加一个新值,并将该添加操作添加到操作列表m中;(3-5)向键值库提交操作列表m,完成辅助索引的更新;(4)对键值库辅助索引进行管理,包括以下步骤(4-1)根据用户的查询请求,从索引信息列族中获取与待索引数据相对应的索引名,设定一个结果集列表r ;(4-2)根据用户的查询请求中指定的索引信息列族中复合列名的最小值和最大值,从索引信息列族中得到查询范围;(4-3)根据上述查询范围,对索引信息列族进行查询,得到查询数据;(4-4)从查询得到的数据中提取行键,将该行键添加到结果集列表!■中;
(4-5)将上述表示查询范围的最小值和最大值之间的差值X与步骤(4-4)的结果集列表r中的结果个数y进行比较,若X大于或等于y,则进行步骤(4_6),若x小于y,则查询结束;(4-6)根据用户查询请求中的翻页信息,若存在翻页信息,则返回步骤(4-3),若不存在翻页信息,则查询结束。本发明提出的键值库辅助索引的构建与管理方法,其特点和优点是键值库已经在海量数据的处理上应用很广泛,但要查询键值库中一列复合条件的行比较困难,一般是全表扫描才能得到,这在全表非常大的时候性能非常差。本发明在于解决键值库中如何高效和快速查询某个列值符合指定条件的行的难题,即构建辅助索引来避免全表扫描。本发明针对已有技术中的以下问题,提出新的键值库辅助索引的构建与管理方法(I)支持亿级数据量的索引。本发明是面向海量数据分布式存储的键值库场景,所 以数据量会很大,亿级以上。(2)高性能的范围查询,这也是构建辅助索引的目的。(3)数据的低冗余(存储所占的数据量),即索引本身带来额外的数据量要小,不能超过被索引的数据。(4)索引更新时数据的一致性能有效保证。其中性能与数据冗余,一致性是相互制约的关系。如果选择高性能的范围检索,必然需要靠冗余索引数据来提升性能,而数据冗余会导致更新数据时难以实现一致性,特别是分布式场景下。如果不要求高效地范围检索,那么可以不考虑产生冗余数据,一致性问题也可以间接避免。本发明的键值库辅助索引的构建与管理方法,基于键值库的列族,构建复合列名来进行索引,所以索引的大部分操作都是列操作,速度很快,并较好地解决了已有技术中的上述问题。
具体实施例方式本发明提出的键值库辅助索引的构建与管理方法,包括以下步骤(I)设键值库中没有待索引的数据,用户对键值库系统进行初始化,并建立用于数据索引的列族和列,向数据索引的列族和列中插入待索引数据;这样后续辅助索引才好去索引并查询;(2)在键值库中建立辅助索引列族,并初始化,其过程如下(2-1)在键值库中创建存储索引信息表;(2-2)向上述索引信息表中添加两个列族,两个列族分别为索引信息和索引项,并设定列族列名的比较类型为复合列名类型;复合列名是由多个字段拼接而成的列名,每个字段都是可比较的,并带有范围标记来表示和这个字段的大小关系;列名在键值库中是有序的,所以本发明利用这点构建复合列名来存储索引信息以获取高性能的查询;(2-3)设定上述索引信息列族的复合列名格式为{索引值类型编码字段,索引值字段,行键字段,全局唯一标识字段},与该索引信息列族的复合列名相对应的列值为空,行键为索引名;(2-4)设定上述索引项列族的复合列名格式为{索引列名字段,全局唯一标识字段},与该索引项的复合列名相对应的列值为复合式的{索引值字段},行键为与待索引的数据所在行相对应的行键;(3)进行键值库辅助索引,主要负责索引的构建和增量更新,包括以下步骤(3-1)从键值库中获取构建时间戳、当前键值库的唯一标识和构建索引名;时间戳是标识本次更新数据版本,键值库以时间戳来表示数据的新旧程度并总用新的数据覆盖旧的数据。全局唯一标识则是控制并发冲突的一个标识,并应用到索引项列族和索引信息列族的复合列名里,这样并发的时候不用锁来同步,因为每个并发操作都会有不同的全局唯一标识;(3-2 )设定一个构建键值库辅助索引过程进行批处理操作的操作列表m,设定索引信息列族的行键为索引名,因为索引的更新涉及到很多键值的更新,所以把它们都封装到一个批处理操作方便控制,也可以保证所有更新操作使用相同的时间戳。另外键值库支持批处理操作多次提交,因为是幂等操作。 (3-3)根据待索引数据,从索引项列族中获取一个与索引信息列族中与待索引数据相对应的旧索引的信息n,该信息n包括行键、索引列的值和全局唯一标识,并用信息n更新索引信息列族中的数据,并将该更新操作添加到操作列表m中,同时删除索引项列族中中的旧索引信息,并将该删除操作添加到操作列表m中;(3-4)对步骤(I)的数据索引进行判断,若数据索引的列族中待索引数据的值不为空,则在上述索引项列族和索引信息列族中添加一个新值,并将该添加操作添加到操作列表m中;(3-5)向键值库提交操作列表m,完成辅助索引的更新;(4)对键值库辅助索引进行管理,包括以下步骤(4-1)根据用户的查询请求,从索引信息列族中获取与待索引数据相对应的索引名,设定一个结果集列表r ;索引名是索引信息列族中的一个行键,结果集里存放的则是符合查询条件的源数据列族的行键。(4-2)根据用户的查询请求中指定的索引信息列族中复合列名的最小值和最大值,从索引信息列族中得到查询范围;因为查询条件有可能是大于,小于或等于,所以需要设置查询时列名的范围,在复合列名设置相应的范围标记;(4-3)根据上述查询范围,对索引信息列族进行查询,得到查询数据;键值库直接支持这种查询,所以速度很快。(4-4)从查询得到的数据中提取行键,将该行键添加到结果集列表r中;返回的复合列名列表并不是想要的结果,所以还需进行拆解得到对应的行键才能添加到结果集。(4-5)将上述表示查询范围的最小值和最大值之间的差值X与步骤(4-4)的结果集列表r中的结果个数y进行比较,若X大于或等于y,则进行步骤(4_6),若x小于y,则查询结束;(4-6)根据用户查询请求中的翻页信息,若存在翻页信息,则返回步骤(4-3),若不存在翻页信息,则查询结束。
权利要求
1.一种键值库辅助索引的构建与管理方法,其特征在于该方法包括以下步骤 (1)设键值库中没有待索引的数据,用户对键值库系统进行初始化,并建立用于数据索引的列族和列,向数据索引的列族和列中插入待索引数据; (2)在键值库中建立辅助索引列族,并初始化,其过程如下 (2-1)在键值库中创建存储索引信息表; (2-2 )向上述索引信息表中添加两个列族,两个列族分别为索引信息和索引项,并设定列族列名的比较类型为复合列名类型; (2-3)设定上述索引信息列族的复合列名格式为{索引值类型编码字段,索引值字段,行键字段,全局唯一标识字段},与该索引信息列族的复合列名相对应的列值为空,行键为索引名; (2-4)设定上述索引项列族的复合列名格式为{索引列名字段,全局唯一标识字段},与该索引项的复合列名相对应的列值为复合式的{索引值字段},行键为与待索引的数据所在行相对应的行键; (3 )进行键值库辅助索引,包括以下步骤 (3-1)从键值库中获取构建时间戳、当前键值库的唯一标识和构建索引名; (3-2)设定一个构建键值库辅助索引过程进行批处理操作的操作列表m,设定索引信息列族的行键为索引名; (3-3)根据待索引数据,从索引项列族中获取一个与索引信息列族中与待索引数据相对应的旧索引的信息n,该信息n包括行键、索引列的值和全局唯一标识,并用信息n更新索引信息列族中的数据,并将该更新操作添加到操作列表m中,同时删除索引项列族中中的旧索引信息,并将该删除操作添加到操作列表m中; (3-4)对步骤(I)的数据索引进行判断,若数据索引的列族中待索引数据的值不为空,则在上述索引项列族和索引信息列族中添加一个新值,并将该添加操作添加到操作列表m中; (3-5)向键值库提交操作列表m,完成辅助索引的更新; (4)对键值库辅助索引进行管理,包括以下步骤 (4-1)根据用户的查询请求,从索引信息列族中获取与待索引数据相对应的索引名,设定一个结果集列表r ; (4-2)根据用户的查询请求中指定的索引信息列族中复合列名的最小值和最大值,从索引信息列族中得到查询范围; (4-3)根据上述查询范围,对索引信息列族进行查询,得到查询数据; (4-4)从查询得到的数据中提取行键,将该行键添加到结果集列表r中; (4-5)将上述表示查询范围的最小值和最大值之间的差值X与步骤(4-4)的结果集列表r中的结果个数y进行比较,若X大于或等于y,则进行步骤(4_6),若x小于y,则查询结束; (4-6)根据用户查询请求中的翻页信息,若存在翻页信息,则返回步骤(4-3),若不存在翻页信息,则查询结束。
全文摘要
本发明涉及一种键值库辅助索引的构建与管理方法,属于计算机数据管理技术领域。本发明提出的键值库辅助索引的构建与管理方法,主要是针对键值库中的列进行索引,以能加快对列的范围查询。本方法首先对键值库辅助索引需要的索引信息列族和索引项列族的初始化,并设定列族列名的比较类型为复合列名类型;对待索引数据构建辅助索引的批处理操作列表,并向键值库提交完成索引创建;根据用户的查询请求,以索引名作为行键,以查询范围构建复合列名的最小值和最大值,从索引信息列族中得到查询结果并返回。本发明方法基于键值库的列族,构建复合列名来进行索引,所以索引的大部分操作都是列操作,速度快,能方便用户进行高效范围查询。
文档编号G06F17/30GK102750356SQ20121019162
公开日2012年10月24日 申请日期2012年6月11日 优先权日2012年6月11日
发明者丁贵广, 卓安, 王建民 申请人:清华大学