分布式顺序表片内二级索引方法及系统的制作方法

文档序号:6620704阅读:219来源:国知局
分布式顺序表片内二级索引方法及系统的制作方法
【专利摘要】本发明公开了一种分布式顺序表片内二级索引方法及系统,其中系统包括,索引布局管理模块,为每个数据存储文件创建对应的索引存储文件;一致性更新模块,写入数据时,先将该数据写入预写日志中,再写入内存存储中,若该内存存储中该数据部分丢失,将该预写入日志中未成功写入磁盘上的该数据重新写入该内存存储中;内存存储刷写模块,若该内存存储存量达到某阈值,先生成该内存存储中类型不为“删除”的数据记录对应的索引记录,并刷写该索引记录到该磁盘上生成该索引存储文件,再生成数据存储文件;合并和分裂模块,索引存储文件随着数据存储文件一起合并和分裂,保证两者的一致性;多维区间查询模块,对每个数据分片单独查询,一次查询可使用多列索引。
【专利说明】分布式顺序表片内二级索引方法及系统

【技术领域】
[0001]本发明涉及分布式顺序表信息处理技术,特别涉及一种分布式顺序表片内二级索引方法及系统。

【背景技术】
[0002]分布式顺序表(Distributed Ordered Table简称DOT)是一种最适用于海量数据下多维区间查询的数据库系统,与本专利相关的现有技术是一个名为“一种对分布式顺序表进行多维区间查询的方法及其系统”的专利,专利号为201210517589.3,其实现方案包括,分别为所述分布式顺序表的每个索引列创建一张对应的二级索引表,各索引列对应的二级索引表的主键为该列值、所述分布式顺序表的主键值和该列值的长度三者的拼接值;当接收到区间查询请求时,依据所述查询请求的字段名称,从各所述二级索引表中查找所述字段名称对应的二级索引表,依据所述查询请求的字段值,从所述对应的二级索引表中查找所述查询请求字段值对应的记录位置,直接从所述分布式顺序表中的该记录位置读取相应的数据。该现有技术的缺点和不足包括如下几个方面:
[0003](I)需要更改原来机制或增加新的机制来保证数据和索引的一致性。因为分布式顺序表缺少跨表、跨行的事务支持,所以必须要更改原有的预写日志机制或者额外添加一致性保证机制来保证索引和数据的一致性。
[0004](2)数据写入性能下降严重。由于额外的索引操作开销,在对表进行写入操作的时候的性能将会有很大下降,而且索引越多,写入性能下降也越多。
[0005](3)查询性能不好,仅对较小的查询有加速效果。对于大多数多维区间查询,这种索引带来的速度提升很有限,因为数据表数据读取速度慢,客户端和服务端的来回网络开销大,只有在查询很小的时候才相对于全表扫描有速度上的优势。
[0006](4)索引带来的额外存储开销较大。直接使用存储数据的数据结构来存储索引,没有针对索引存储的特点进行优化,会存储一些无用的数据,存储开销较大。
[0007](5) 一次查询不能使用多列索引。在一次多维区间查询中,因为索引的读取和对数据表的读取都在客户端完成,客户端资源有限,在面对存储海量数据的分布式顺序表的时候,客户端难以完成多个索引数据合并的任务。索引不能用于带聚集函数的服务端计算。服务端计算是单独处理每个数据分片,对局部数据进行计算,该索引是一种全局的索引,无法对索引进行划分获得局部数据对应的索引。
[0008]发明人在进行分布式顺序表索引及多维区间查询技术研究时,发现现有技术中的缺陷是因为在较高的存储层级,即表级维护索引,没有针对索引存储、使用特点,以及分布式顺序表设计原理、内部结构特点来设计和优化索引导致的,发明人经过对索引和分布式顺序表的特点进行深入研究发现,解决该项缺陷可以通过在更低的存储级别,即存储文件级来维护索引,重新设计专用的索引存储结构,充分利用分布式顺序表的框架来维护和管理索引的方法来实现。


【发明内容】

[0009]为解决上述问题,本发明提出了一种分布式顺序表片内二级索引方法及系统,本发明通过对索引和分布式顺序表的特点进行深入研究,重新设计索引存储结构,来减小索引存储开销,提高索引查询性能,解决了一次查询不能使用多列索引,索引不能用于服务端计算等问题,通过一致性更新模块、合并和分裂模块保证索引和数据的一致性,通过内存存储刷与1旲块提闻数据与入性能。
[0010]为了达到本发明的目的,本发明提供了一种分布式顺序表片内二级索引方法,包括如下步骤:
[0011]SI索引布局管理步骤,为分布式顺序表的每个数据分片中的每个数据存储文件创建对应的索引存储文件,该索引存储文件存储列名、列值、主键;
[0012]S2 一致性更新步骤,向该分布式顺序表写入数据时,先将该数据写入预写日志中,再写入内存存储中,若该内存存储中该数据部分丢失,将该预写入日志中未成功写入磁盘上的该数据重新写入该内存存储中;
[0013]S3内存存储刷写步骤,若该内存存储存量达到某阈值,先生成该内存存储中类型不为“删除”的数据记录对应的索引记录,并刷写该索引记录到该磁盘上生成该索引存储文件,再刷写数据记录到磁盘上生成该数据存储文件;
[0014]S4合并和分裂步骤,在数据分片合并时,先将多个索引存储文件合并成一个新的索引存储文件,再将对应的多个数据存储文件合并成一个新的数据存储文件;以及
[0015]在该数据片按照某主键分裂成两个新数据分片时,首先将该数据分片内的每个索引存储文件按照该主键分裂成两个新索引存储文件后分别加入到所述两个新数据分片中,然后再把该数据分片内的每个数据存储文件按照该主键分裂成两个新数据存储文件后分别加入到所述的两个新的数据分片中;
[0016]S5多维区间查询步骤,对该分布式顺序表进行多维区间查询时,按照查询条件对每个数据分片单独查询,查询时对该查询条件进行预处理得到索引查询条件,再依次单独查询每列索引、合并多列索引查询结果、读取满足该索引查询条件的该些数据作为最终查询结果。
[0017]所述一种分布式顺序表片内二级索引方法,该索引存储文件结构包括:多个记录块,记录块索引,文件信息和结尾,每个记录块存储多条索引记录,保存每个记录块中第一条索引记录作为记录块索引。
[0018]所述分布式顺序表片内二级索引方法,该索引记录结构使用键值对结构存储,键主要包括列值和列名,值主要包括主键,键长度、值长度和列名长度都是用于快速读取索引记录的某部分。
[0019]所述一种分布式顺序表片内二级索引方法,该多维区间查询步骤S5还包括:
[0020]在查询每个索引存储文件时,直接二分查找该块索引,快速查找开始、结束记录块的偏移位置,然后直接读取中间所有的记录块以获取满足该索引查询条件的主键集合。
[0021]所述一种分布式顺序表片内二级索引方法,该多维区间查询步骤S5还包括:
[0022]S51预处理步骤,用户对该分布式顺序表进行多维区间查询时,将查询条件发送到每个数据分片后预处理该查询条件,获得索引查询条件;
[0023]S52读取主键步骤,分别从该索引存储文件和该内存存储中查找满足该索引查询条件的索引记录和数据记录,并分别读取该索引记录和该数据记录的主键,得到主键集合;
[0024]S53合并主键步骤,按照该索引查询条件间关系和该查询规模大小次序合并该主键集合,按主键排序后得到最终主键集合;
[0025]S54结果集生成步骤,依据最终主键集合查询该数据分片中数据,并把满足该索引查询条件的数据放入结果集中;
[0026]S55合并结果集步骤,合并每个数据分片的结果集得到最终的查询结果集,并把该最终的查询结果集返回给该用户。
[0027]本发明还涉及一种分布式顺序表片内二级索引系统,包括:
[0028]索引布局管理模块,用于为所述分布式顺序表的每个数据分片中的每个数据存储文件创建对应的索引存储文件,该索引存储文件存储列名、列值、主键;
[0029]一致性更新模块,向该分布式顺序表写入数据时,先将该数据写入预写日志中,再写入内存存储中,若该内存存储中该数据部分丢失,将该预写入日志中部分未成功写入磁盘上的该数据重新写入该内存存储中;
[0030]内存存储刷写模块,若该内存存储存量达到某阈值,先生成该内存存储中类型不为“删除”的数据记录对应的索引记录,并刷写该索引记录到该磁盘上生成该索引存储文件,再刷写数据记录到磁盘上生成该数据存储文件;
[0031]合并和分裂模块,在数据分片合并时,先将多个索引存储文件合并成一个新的索引存储文件,再将对应的多个数据存储文件合并成一个新的数据存储文件;以及
[0032]在该数据分片按照某主键分裂成两个数据分片时,首先将该数据分片内的每个索引存储文件按照该主键分裂成两个索引存储文件后分别加入到所述两个新的数据分片中,然后再把该数据分片内的每个数据存储文件按照所述主键分裂成两个数据存储文件后分别加入到所述的两个新的数据分片中;
[0033]多维区间查询模块,用于该分布式顺序表接收多维区间查询条件,按照该查询条件对每个数据分片单独查询,查询时对该查询条件进行预处理得到索引查询条件,再依次单独查询每列索引、合并多列索引查询结果、读取满足该列索引查询条件的该些数据作为最终查询结果。
[0034]所述一种分布式顺序表片内二级索引系统,该索引存储文件结构包括:多个记录块,记录块索引,文件信息和结尾,每个记录块存储多条索引记录,保存每个记录块中第一条索引记录作为记录块索引。
[0035]所述一种分布式顺序表片内二级索引系统,该多维区间查询模块还包括:
[0036]在查询每个索引存储文件时,直接二分查找块索引,快速查找开始、结束记录块的偏移位置,然后直接读取中间所有的记录块以获取满足该索引查询条件的主键集合。
[0037]所述分布式顺序表片内二级索引系统,该索引记录结构使用键值对结构存储,键主要包括列值和列名,值主要包括主键,键长度、值长度和列名长度都是用于快速读取索引记录的某部分。
[0038]所述一种分布式顺序表片内二级索引系统,该多维区间查询模块还包括:
[0039]预处理模块,用于用户对该分布式顺序表进行多维区间查询时,将查询条件发送到每个数据分片后预处理该查询条件,获得索引查询条件;
[0040]读取主键模块,用于分别从索引存储文件和内存存储中查找满足该索引查询条件的索引记录和数据记录,并分别读取该索引记录和该数据记录的主键,得到主键集合;
[0041]合并主键模块,用于按照该索引查询条件间关系和该查询规模大小次序合并该主键集合,按主键排序后得到最终主键集合;
[0042]结果集生成模块,用于依据最终主键集合查询该数据分片中数据,并把满足该索引查询条件的数据放入结果集中;
[0043]合并结果集模块,用于合并每个数据分片的结果集得到最终的查询结果集,并把该查询结果集返回给该用户。
[0044]由以上方案可知,本发明的优点在于:
[0045](I)通过改变内存存储刷写过程即可保证数据记录和索引记录的一致性。仅在内存存储刷写的时候生成索引记录,不需要对原有的数据恢复机制做任何的更改即可保证该内存存储中数据对应的索引不丢失,索引存储文件随着数据存储文件一起变迁,保证该索引存储文件中的索引不丢失,因此可以保证整个系统中索引和数据的一致性。
[0046](2)数据写入性能下降较小。由于没有在写入过程中没有为索引引入额外的开销,特别是为了保证一致性的额外开销,仅在内存存储刷写时生成索引记录,写入性能增加。
[0047](3)查询性能好。索引记录和数据记录读取都在数据分片内,避免了大量的来回网络时间开销,经过查询条件预处理、去掉较大查询规模的索引查询条件、按照查询规模从小到大合并主键集合、最终主键集合排序等优化技术,查询性能有大幅度提升。
[0048](4)索引带来的额外存储开销较小。使用重新设计的专用数据结构来存储索引可以把索引的存储开销压缩到最小。
[0049](5) 一次查询能使用多列索引。查询是对每个数据分片单独进行,绝大多数情况下每个数据分片内的数据量不会太大,可以使用内存对多个索引的查询结果进行合并,故一次查询可以使用多列索引。
[0050](6)索引能用于带聚集函数的服务端计算。索引的使用是在数据分片内,对服务端计算完全透明,服务端计算可以使用索引查询数据。

【专利附图】

【附图说明】
[0051]图1为分布式顺序表片内二级索引布局示意图;
[0052]图2为分布式顺序表片内二级索引记录结构图;
[0053]图3为分布式顺序表片内二级索引存储文件结构图;
[0054]图4为分布式顺序表片内二级索引组织示意图;
[0055]图5为分布式顺序表片内二级索引多维区间查询流程图;
[0056]其中附图标记为:分布式顺序表片内二级索引多维区间查询步骤:
[0057]S51, S52, S53, S54, S55

【具体实施方式】
[0058]下面给出【具体实施方式】,结合附图对本发明做出详细的描述,但不作为对本发明的限定。
[0059]本发明提出了一种分布式顺序表片内二级索引方法及系统。具体而言,本发明将使用重新设计的专用数据结构来存储索引,可以把索引的存储开销压缩到最小,同时索引的读写性能更好,本发明通过更改内存存储的刷写过程,不需要对原有的数据恢复机制做任何的更改即可保证内存存储中数据对应的索引不丢失,保证了内存存储中索引和数据的一致性,本发明通过更改合并和分裂流程,保证了存储文件中索引和数据的一致性,本发明是对每个数据分片单独进行查询,绝大多数情况下每个数据分片内的数据量不会太大,可以使用内存对多个索引的查询结果进行合并,故一次查询可以使用多列索引。同时,索引的使用是在数据分片内,对服务端计算完全透明,服务端计算可以使用索引查询数据。另外,索引和数据读取都在数据分片内,避免了大量的来回网络时间开销,查询性能大幅提升,经过查询条件预处理、去掉较大查询规模的索引查询条件、按照查询规模从小到大合并主键集合、最终主键集合排序等优化技术,查询性能有进一步地大幅度提升。
[0060]为了完成上述过程,本发明提供一种分布式顺序表片内二级索引方法,所述方法包括:
[0061]SI索引布局管理步骤,如图1所示,为所述分布式顺序表的每个数据分片中的每个数据存储文件创建对应的索引存储文件,该索引存储文件存储列名、列值、主键;
[0062]S2 一致性更新步骤,向该分布式顺序表写入数据时,先将该数据写入预写日志中,再写入内存存储中,若该内存存储中该数据部分丢失,将该预写入日志中部分未成功写入磁盘上的该数据重新写入该内存存储中;
[0063]S3内存存储刷写步骤,若该内存存储存量达到某阈值,先生成该内存存储中类型不为“删除”的数据记录对应的索引记录,并刷写该索引记录到该磁盘上生成该索引存储文件,再刷写数据记录到磁盘上生成该数据存储文件;
[0064]S4合并和分裂步骤,在数据分片合并时,先将多个索引存储文件合并成一个新的索引存储文件,再将对应的多个数据存储文件合并成一个新的数据存储文件;以及
[0065]在该数据分片按照某主键分裂成两个数据片时,首先将该数据分片内的每个索引存储文件按照该主键分裂成两个索引存储文件后分别加入到所述两个新的数据分片中,然后再把该数据分片内的每个数据存储文件按照所述主键分裂成两个数据存储文件后分别加入到所述的两个新的数据分片中;
[0066]S5多维区间查询步骤,该分布式顺序表接收多维区间查询条件,按照该查询条件对每个数据分片单独查询,查询时对该查询条件进行预处理得到索引查询条件,再依次单独查询每列索引、合并多列索引查询结果、读取数据作为最终查询结果。
[0067]如图2所示,该索引记录结构使用键值对数据结构存储,“键”包括列名和列值,“值”包括包括主键,键长度、值长度和列名长度都是用于快速读取索引记录的某个部分。索弓I记录依次按照列名、列值、主键来排序。
[0068]如图3所示,该索引存储文件结构包括:多个记录块,记录块索引,文件信息和结尾,每个记录块存储多条索引记录,保存每个记录块中第一条索引记录作为记录块索引,在查询每个索引存储文件时,直接二分查找块索引,快速查找开始、结束记录块的偏移位置,然后直接读取中间所有的记录块以获取满足该索引查询条件的主键集合。该文件信息中存储的是文件的几个统计数据,大小不是固定的,该结尾的大小是固定的,存储各部分的偏移和一些其他文件统计信息。
[0069]如图4所示,本发明具体实施所述的面向分布式顺序表的片内二级索引的索引组织示例。所述分布式顺序表共有三列,即Cl,c2和c3。为其中两列Cl和c2分别添加片内二级索引,系统会为每个数据存储文件维护对应的索引存储文件,并且把该数据存储文件中Cl和c2两列的类型不为“删除”的数据记录写入到该索引存储文件中,cl、c2为索引列,c3为非索引列。该数据存储文件中每条数据记录有五个属性:主键、列名、时间戳、类型和列值,并依次按照主键、列名、时间戳和类型排序,该索引存储文件中每条索引记录有三个属性:列名、列值和主键,并依次按照列名、列值、主键排序。
[0070]所述一种分布式顺序表片内二级索引方法,该多维区间查询步骤S5还包括:
[0071]S51预处理步骤,用户对该分布式顺序表进行多维区间查询时,将查询条件发送到每个数据分片后预处理该查询条件,获得索引查询条件;进一步地说,当接收到区间查询请求时,把查询请求分别送到每个数据分片,在数据分片内,首先对所述查询请求中的查询条件进行条件合并和去重、索引条件筛选和较大查询规模的索引条件去除等预处理步骤,得到最终的索引查询条件。
[0072]S52读取主键步骤,分别从索引存储文件和内存存储中查找满足该索引查询条件的索引记录和数据记录,并分别读取该索引记录和该数据记录的主键,得到主键集合;
[0073]S53合并主键步骤,按照该索引查询条件间关系和该查询规模大小次序合并该主键集合,按主键排序后得到最终主键集合;进一步说,按照索引查询条件间的“与”或者“或”关系合并各自的主键集合,合并时按照查询规模从小到大的顺序进行,最后得到一个合并后的主键集合,对其按照主键进行排序,得到最终主键集合;
[0074]S54结果集生成步骤,依据最终主键集合查询该数据分片中的数据,并把满足该索引查询条件的数据放入结果集中;进一步说,依据所述最终主键值集合,从该数据分片的所有数据存储文件和内存存储中读取相应的数据,并用查询条件对该数据进行筛选,把满足该查询条件的数据记录放入查询结果集中;
[0075]S55合并结果集步骤,合并每个数据分片的结果集得到最终的查询结果集,并把该最终的查询结果集返回给该用户。
[0076]现在列举本发明的一个实施例,下面的实施例基于Apache HBase来创建本发明所述的片内二级索引方法及系统,HBase是一种典型的分布式顺序表,构建于ApacheHadoop (用于构建大规模共享存储和计算设施的软件)之上。一个HBase (分布式顺序表)系统包括一个HMaster (主服务节点)和多个HReg1nServer (数据服务节点)。
[0077]本发明所述的片内二级索引采用HBase-0.94.16作为代码基础,采用Java语言实现。在HBase中为每个HReg1n (数据分片)中的每个HFile (数据存储文件)维护一个对应的IndexFile (索引存储文件)。与HFile存储KeyValue (数据记录)类似,IndexFile存储IndexKeyValue (索引记录)。IndexKeyValue是一种类似KeyValue的存储结构,与KeyValue在存储内容上的主要区别在于不存储列名、时间戳和类型。KeyValue结构按照主键、列名、时间戳、类型、列值进行排序,而IndexKeyValue结构按照列名、列值、主键进行排序。另外,MemStore (内存存储)中的数据不维护索引,在MemStore刷写生成HFile的之前先生成对应的IndexFile。
[0078]在进行Minor (次)合并时,将多个小HFile合并成一个较大HFile的之前先将对应的多个IndexFile合并成一个大的IndexFile。在进行Major (主)合并时,在多个HFile合并成一个大的HFile之后,从新生成的HFile中生成IndexKeyValue列表后还需要在内存中进行排序,为了控制内存的使用,设置一个可以使用的最大内存量,在内存装满后,将排序好的IndexKeyValue刷写到磁盘上生成临时的IndexFile,最后再将多个临时IndexFile合并成一个最终的IndexFile。
[0079]在HReg1n分裂时,父HReg1n中的HFile并没有立即分裂,子HReg1n只是对父HReg1n中所有的HFile创建了一个对应的ReferenceFile (应用文件),在子HReg1n做合并的时候才会真正生成存有实际数据的HFile,合并之前都是通过读取父HReg1n中被引用的HFile。基于这个原理,可以对HReg1n分裂过程不做任何更改,而是在HReg1n上线时,如果发现有ReferenceFile,就同时读取被引用的HFile对应的IndexFile,在HReg1n合并之后真正生成自己的IndexFile。
[0080]在对数据表进行多维区间查询时,把查询请求分别送到每个HReg1n中单独查询。在每个HReg1n内查询时,首先对查询条件进行预处理,得到索引查询条件,再查询IndexFile中的索引和MemStore中的数据,得到满足索引查询条件的主键集合,然后对多个索引查询条件的查询结果进行合并,根据他们之间的关系和查询规模大小次序合并各自得到主键集合,并对合并后的主键集合按照主键排序得到最终的主键集合,最后根据最终主键集合中的主键在HReg1n中的HFile和MemStore中读出整行数据,并使用该查询条件进一步判断,把满足该查询条件的数据放入查询结果集中。最后把每个HReg1n的查询结果集进行合并,得到最终的查询结果集。
[0081]本发明还涉及一种分布式顺序表片内二级索引系统,包括:
[0082]索引布局管理模块,用于为所述分布式顺序表的每个数据分片中的每个数据存储文件创建对应的索引存储文件,该索引存储文件存储列名、列值、主键;
[0083]一致性更新模块,向该分布式顺序表写入数据时,先将该数据写入预写日志中,再写入内存存储中,若该内存存储中该数据部分丢失,将该预写入日志中部分未成功写入磁盘上的该数据重新写入该内存存储中;
[0084]内存存储刷写模块,若该内存存储存量达到某阈值,先生成该内存存储中类型不为“删除”的数据记录对应的索引记录,并刷写该索引记录到该磁盘上生成该索引存储文件,再刷写数据记录到磁盘上生成该数据存储文件;
[0085]合并和分裂模块,在数据片合并时,先将多个索引存储文件合并成一个新的索引存储文件,再将对应的多个数据存储文件合并成一个新的数据存储文件;以及
[0086]在该数据片按照某主键分裂成两个数据片时,首先将该数据分片内的每个索引存储文件按照该主键分裂成两个索引存储文件后分别加入到所述两个新的数据分片中,然后再把该数据分片内的每个数据存储文件按照所述主键分裂成两个数据存储文件后分别加入到所述的两个新的数据分片中;
[0087]多维区间查询模块,用于该分布式顺序表接收多维区间查询条件,按照该查询条件对每个数据分片单独查询,查询时对该查询条件进行预处理得到索引查询条件,再依次单独查询每列索引、合并多列索引查询结果、读取数据作为最终查询结果。
[0088]所述一种分布式顺序表片内二级索引系统,该索引存储文件结构包括:多个记录块,记录块索引,文件信息和结尾,每个记录块存储多条索引记录,保存每个记录块中第一条索引记录作为记录块索引。
[0089]所述一种分布式顺序表片内二级索引系统,该索引记录结构使用键值对数据结构存储,“键”包括列名和列值,“值”包括包括主键,键长度、值长度和列名长度都是用于快速读取索引记录的某个部分。索引记录依次按照列名、列值、主键来排序。
[0090]所述一种分布式顺序表片内二级索引系统,该多维区间查询模块还包括:
[0091]在查询每个索引存储文件时,直接二分查找块索引,快速查找开始、结束记录块的偏移位置,然后直接读取中间所有的记录块以获取满足该索引查询条件的主键集合。
[0092]所述一种分布式顺序表片内二级索引系统,该多维区间查询模块还包括:
[0093]预处理模块,用于用户对该分布式顺序表进行多维区间查询时,将查询条件发送到每个数据分片后预处理该查询条件,获得索引查询条件;
[0094]读取主键模块,用于分别从索引存储文件和内存存储中查找满足该索引查询条件的索引记录和数据记录,并分别读取该索引记录和该数据记录的主键,得到主键集合;
[0095]合并主键模块,用于按照该索引查询条件间关系和该查询规模大小次序合并该主键集合,按主键排序后得到最终主键集合;
[0096]结果集生成模块,用于依据最终主键集合查询该数据分片中数据,并把满足该索引查询条件的数据放入结果集中;
[0097]合并结果集模块,用于合并每个数据分片的结果集得到最终的查询结果集,并把该最终的查询结果集返回给该用户。
【权利要求】
1.一种分布式顺序表片内二级索引方法,其特征在于,包括如下步骤: Si索引布局管理步骤,为分布式顺序表的每个数据分片中的每个数据存储文件创建对应的索引存储文件,该索引存储文件存储列名、列值、主键; S2 一致性更新步骤,向该分布式顺序表写入数据时,先将该数据写入预写日志中,再写入内存存储中,若该内存存储中该数据部分丢失,将该预写入日志中未成功写入磁盘上的该数据重新写入该内存存储中; S3内存存储刷写步骤,若该内存存储存量达到某阈值,先生成该内存存储中类型不为“删除”的数据记录对应的索引记录,并刷写该索引记录到该磁盘上生成该索引存储文件,再刷写该数据记录到磁盘上生成该数据存储文件; S4合并和分裂步骤,在数据分片合并时,先将多个索引存储文件合并成一个新的索引存储文件,再将对应的多个数据存储文件合并成一个新的数据存储文件;以及 在该数据片按照某主键分裂成两个新数据分片时,首先将该数据分片内的每个索引存储文件按照该主键分裂成两个新索引存储文件后分别加入到所述两个新数据分片中,然后再把该数据分片内的每个数据存储文件按照该主键分裂成两个新数据存储文件后分别加入到所述的两个新的数据分片中; S5多维区间查询步骤,对该分布式顺序表进行多维区间查询时,按照查询条件对每个数据分片单独查询,查询时对该查询条件进行预处理得到索引查询条件,再依次单独查询每列索引、合并多列索引查询结果、读取满足该索引查询条件的该些数据作为最终查询结果O
2.如权利要求1所述分布式顺序表片内二级索引方法,其特征在于,该索引存储文件结构包括:多个记录块,记录块索引,文件信息和结尾,每个记录块存储多条索引记录,保存每个记录块中第一条索引记录作为记录块索引。
3.如权利要求1所述分布式顺序表片内二级索引方法,其特征在于,该索引记录结构使用键值对结构存储,键主要包括列值和列名,值主要包括主键,键长度、值长度和列名长度都是用于快速读取索引记录的某部分。
4.如权利要求1所述一种分布式顺序表片内二级索引方法,其特征在于,该多维区间查询步骤S5还包括: 查询每个索引存储文件时,直接二分查找该块索引,快速查找开始、结束记录块的偏移位置,然后直接读取中间所有的记录块以获取满足该索引查询条件的主键集合。
5.如权利要求1所述分布式顺序表片内二级索引方法,其特征在于,该多维区间查询步骤S5还包括: S51,用户对该分布式顺序表进行多维区间查询时,将查询条件发送到每个数据分片后预处理该查询条件,获得索引查询条件; S52,分别从该索弓I存储文件和该内存存储中查找满足该索弓I查询条件的索引记录和数据记录,并分别读取该索引记录和该数据记录的主键,得到主键集合; S53,按照该索引查询条件间关系和该查询规模大小次序合并该主键集合,按主键排序后得到最终主键集合; S54,依据最终主键集合查询该数据分片中数据,并把满足该索引查询条件的数据放入结果集中; S55,合并每个数据分片的结果集得到最终的查询结果集,并把该最终的查询结果集返回给该用户。
6.一种分布式顺序表片内二级索引系统,其特征在于,包括: 索引布局管理模块,用于为所述分布式顺序表的每个数据分片中的每个数据存储文件创建对应的索引存储文件,该索引存储文件存储列名、列值、主键; 一致性更新模块,向该分布式顺序表写入数据时,先将该数据写入预写日志中,再写入内存存储中,若该内存存储中该数据部分丢失,将该预写入日志中部分未成功写入磁盘上的该数据重新写入该内存存储中; 内存存储刷写模块,若该内存存储存量达到某阈值,先生成该内存存储中类型不为“删除”的数据记录对应的索引记录,并刷写该索引记录到该磁盘上生成该索引存储文件,再刷写数据记录到磁盘上生成该数据存储文件; 合并和分裂模块,在数据分片合并时,先将多个索引存储文件合并成一个新的索引存储文件,再将对应的多个数据存储文件合并成一个新的数据存储文件;以及 在该数据分片按照某主键分裂成两个数据片时,首先将该数据分片内的每个索引存储文件按照该主键分裂成两个索引存储文件后分别加入到所述两个新的数据分片中,然后再把该数据分片内的每个数据存储文件按照所述主键分裂成两个数据存储文件后分别加入到所述的两个新的数据分片中; 多维区间查询模块,用于该分布式顺序表接收多维区间查询条件,按照该查询条件对每个数据分片单独查询,查询时对该查询条件进行预处理得到索引查询条件,再依次单独查询每列索引、合并多列索引查询结果、读取满足该列索引查询条件的该些数据作为最终查询结果。
7.如权利要求6所述分布式顺序表片内二级索引系统,其特征在于,该索引存储文件结构包括:多个记录块,记录块索引,文件信息和结尾,每个记录块存储多条索引记录,保存每个记录块中第一条索引记录作为记录块索引。
8.如权利要求6所述分布式顺序表片内二级索引系统,其特征在于,该多维区间查询模块还包括:在查询每个索引存储文件时,直接二分查找块索引,快速查找开始、结束记录块的偏移位置,然后直接读取中间所有的记录块以获取满足该索引查询条件的主键集合。
9.如权利要求6所述分布式顺序表片内二级索引系统,其特征在于,该索引记录结构使用键值对结构存储,键主要包括列值和列名,值主要包括主键,键长度、值长度和列名长度都是用于快速读取索引记录的某部分。
10.如权利要求6所述分布式顺序表片内二级索引系统,其特征在于,该多维区间查询模块还包括: 预处理模块,用于用户对该分布式顺序表进行多维区间查询时,将查询条件发送到每个数据分片后预处理该查询条件,获得索引查询条件; 读取主键模块,用于分别从索引存储文件和内存存储中查找满足该索引查询条件的索引记录和数据记录,并分别读取该索引记录和该数据记录的主键,得到主键集合; 合并主键模块,用于按照该索引查询条件间关系和该查询规模大小次序合并该主键集合,按主键排序后得到最终主键集合; 结果集生成模块,用于依据最终主键集合查询该数据分片中数据,并把满足该索引查询条件的数据放入结果集中; 合并结果集模块,用于合并每个数据分片的结果集得到最终的查询结果集,并把该查询结果集返回给该用户。
【文档编号】G06F17/30GK104133867SQ201410345063
【公开日】2014年11月5日 申请日期:2014年7月18日 优先权日:2014年7月18日
【发明者】查礼, 万浩, 程学旗 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1