CN104133867A - 分布式顺序表片内二级索引方法及系统 - Google Patents
分布式顺序表片内二级索引方法及系统 Download PDFInfo
- Publication number
- CN104133867A CN104133867A CN201410345063.0A CN201410345063A CN104133867A CN 104133867 A CN104133867 A CN 104133867A CN 201410345063 A CN201410345063 A CN 201410345063A CN 104133867 A CN104133867 A CN 104133867A
- Authority
- CN
- China
- Prior art keywords
- index
- data
- record
- major key
- file
- 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.)
- Pending
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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (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
技术领域
本发明涉及分布式顺序表信息处理技术,特别涉及一种分布式顺序表片内二级索引方法及系统。
背景技术
分布式顺序表(Distributed Ordered Table简称DOT)是一种最适用于海量数据下多维区间查询的数据库系统,与本专利相关的现有技术是一个名为“一种对分布式顺序表进行多维区间查询的方法及其系统”的专利,专利号为201210517589.3,其实现方案包括,分别为所述分布式顺序表的每个索引列创建一张对应的二级索引表,各索引列对应的二级索引表的主键为该列值、所述分布式顺序表的主键值和该列值的长度三者的拼接值;当接收到区间查询请求时,依据所述查询请求的字段名称,从各所述二级索引表中查找所述字段名称对应的二级索引表,依据所述查询请求的字段值,从所述对应的二级索引表中查找所述查询请求字段值对应的记录位置,直接从所述分布式顺序表中的该记录位置读取相应的数据。该现有技术的缺点和不足包括如下几个方面:
(1)需要更改原来机制或增加新的机制来保证数据和索引的一致性。因为分布式顺序表缺少跨表、跨行的事务支持,所以必须要更改原有的预写日志机制或者额外添加一致性保证机制来保证索引和数据的一致性。
(2)数据写入性能下降严重。由于额外的索引操作开销,在对表进行写入操作的时候的性能将会有很大下降,而且索引越多,写入性能下降也越多。
(3)查询性能不好,仅对较小的查询有加速效果。对于大多数多维区间查询,这种索引带来的速度提升很有限,因为数据表数据读取速度慢,客户端和服务端的来回网络开销大,只有在查询很小的时候才相对于全表扫描有速度上的优势。
(4)索引带来的额外存储开销较大。直接使用存储数据的数据结构来存储索引,没有针对索引存储的特点进行优化,会存储一些无用的数据,存储开销较大。
(5)一次查询不能使用多列索引。在一次多维区间查询中,因为索引的读取和对数据表的读取都在客户端完成,客户端资源有限,在面对存储海量数据的分布式顺序表的时候,客户端难以完成多个索引数据合并的任务。索引不能用于带聚集函数的服务端计算。服务端计算是单独处理每个数据分片,对局部数据进行计算,该索引是一种全局的索引,无法对索引进行划分获得局部数据对应的索引。
发明人在进行分布式顺序表索引及多维区间查询技术研究时,发现现有技术中的缺陷是因为在较高的存储层级,即表级维护索引,没有针对索引存储、使用特点,以及分布式顺序表设计原理、内部结构特点来设计和优化索引导致的,发明人经过对索引和分布式顺序表的特点进行深入研究发现,解决该项缺陷可以通过在更低的存储级别,即存储文件级来维护索引,重新设计专用的索引存储结构,充分利用分布式顺序表的框架来维护和管理索引的方法来实现。
发明内容
为解决上述问题,本发明提出了一种分布式顺序表片内二级索引方法及系统,本发明通过对索引和分布式顺序表的特点进行深入研究,重新设计索引存储结构,来减小索引存储开销,提高索引查询性能,解决了一次查询不能使用多列索引,索引不能用于服务端计算等问题,通过一致性更新模块、合并和分裂模块保证索引和数据的一致性,通过内存存储刷写模块提高数据写入性能。
为了达到本发明的目的,本发明提供了一种分布式顺序表片内二级索引方法,包括如下步骤:
S1索引布局管理步骤,为分布式顺序表的每个数据分片中的每个数据存储文件创建对应的索引存储文件,该索引存储文件存储列名、列值、主键;
S2一致性更新步骤,向该分布式顺序表写入数据时,先将该数据写入预写日志中,再写入内存存储中,若该内存存储中该数据部分丢失,将该预写入日志中未成功写入磁盘上的该数据重新写入该内存存储中;
S3内存存储刷写步骤,若该内存存储存量达到某阈值,先生成该内存存储中类型不为“删除”的数据记录对应的索引记录,并刷写该索引记录到该磁盘上生成该索引存储文件,再刷写数据记录到磁盘上生成该数据存储文件;
S4合并和分裂步骤,在数据分片合并时,先将多个索引存储文件合并成一个新的索引存储文件,再将对应的多个数据存储文件合并成一个新的数据存储文件;以及
在该数据片按照某主键分裂成两个新数据分片时,首先将该数据分片内的每个索引存储文件按照该主键分裂成两个新索引存储文件后分别加入到所述两个新数据分片中,然后再把该数据分片内的每个数据存储文件按照该主键分裂成两个新数据存储文件后分别加入到所述的两个新的数据分片中;
S5多维区间查询步骤,对该分布式顺序表进行多维区间查询时,按照查询条件对每个数据分片单独查询,查询时对该查询条件进行预处理得到索引查询条件,再依次单独查询每列索引、合并多列索引查询结果、读取满足该索引查询条件的该些数据作为最终查询结果。
所述一种分布式顺序表片内二级索引方法,该索引存储文件结构包括:多个记录块,记录块索引,文件信息和结尾,每个记录块存储多条索引记录,保存每个记录块中第一条索引记录作为记录块索引。
所述分布式顺序表片内二级索引方法,该索引记录结构使用键值对结构存储,键主要包括列值和列名,值主要包括主键,键长度、值长度和列名长度都是用于快速读取索引记录的某部分。
所述一种分布式顺序表片内二级索引方法,该多维区间查询步骤S5还包括:
在查询每个索引存储文件时,直接二分查找该块索引,快速查找开始、结束记录块的偏移位置,然后直接读取中间所有的记录块以获取满足该索引查询条件的主键集合。
所述一种分布式顺序表片内二级索引方法,该多维区间查询步骤S5还包括:
S51预处理步骤,用户对该分布式顺序表进行多维区间查询时,将查询条件发送到每个数据分片后预处理该查询条件,获得索引查询条件;
S52读取主键步骤,分别从该索引存储文件和该内存存储中查找满足该索引查询条件的索引记录和数据记录,并分别读取该索引记录和该数据记录的主键,得到主键集合;
S53合并主键步骤,按照该索引查询条件间关系和该查询规模大小次序合并该主键集合,按主键排序后得到最终主键集合;
S54结果集生成步骤,依据最终主键集合查询该数据分片中数据,并把满足该索引查询条件的数据放入结果集中;
S55合并结果集步骤,合并每个数据分片的结果集得到最终的查询结果集,并把该最终的查询结果集返回给该用户。
本发明还涉及一种分布式顺序表片内二级索引系统,包括:
索引布局管理模块,用于为所述分布式顺序表的每个数据分片中的每个数据存储文件创建对应的索引存储文件,该索引存储文件存储列名、列值、主键;
一致性更新模块,向该分布式顺序表写入数据时,先将该数据写入预写日志中,再写入内存存储中,若该内存存储中该数据部分丢失,将该预写入日志中部分未成功写入磁盘上的该数据重新写入该内存存储中;
内存存储刷写模块,若该内存存储存量达到某阈值,先生成该内存存储中类型不为“删除”的数据记录对应的索引记录,并刷写该索引记录到该磁盘上生成该索引存储文件,再刷写数据记录到磁盘上生成该数据存储文件;
合并和分裂模块,在数据分片合并时,先将多个索引存储文件合并成一个新的索引存储文件,再将对应的多个数据存储文件合并成一个新的数据存储文件;以及
在该数据分片按照某主键分裂成两个数据分片时,首先将该数据分片内的每个索引存储文件按照该主键分裂成两个索引存储文件后分别加入到所述两个新的数据分片中,然后再把该数据分片内的每个数据存储文件按照所述主键分裂成两个数据存储文件后分别加入到所述的两个新的数据分片中;
多维区间查询模块,用于该分布式顺序表接收多维区间查询条件,按照该查询条件对每个数据分片单独查询,查询时对该查询条件进行预处理得到索引查询条件,再依次单独查询每列索引、合并多列索引查询结果、读取满足该列索引查询条件的该些数据作为最终查询结果。
所述一种分布式顺序表片内二级索引系统,该索引存储文件结构包括:多个记录块,记录块索引,文件信息和结尾,每个记录块存储多条索引记录,保存每个记录块中第一条索引记录作为记录块索引。
所述一种分布式顺序表片内二级索引系统,该多维区间查询模块还包括:
在查询每个索引存储文件时,直接二分查找块索引,快速查找开始、结束记录块的偏移位置,然后直接读取中间所有的记录块以获取满足该索引查询条件的主键集合。
所述分布式顺序表片内二级索引系统,该索引记录结构使用键值对结构存储,键主要包括列值和列名,值主要包括主键,键长度、值长度和列名长度都是用于快速读取索引记录的某部分。
所述一种分布式顺序表片内二级索引系统,该多维区间查询模块还包括:
预处理模块,用于用户对该分布式顺序表进行多维区间查询时,将查询条件发送到每个数据分片后预处理该查询条件,获得索引查询条件;
读取主键模块,用于分别从索引存储文件和内存存储中查找满足该索引查询条件的索引记录和数据记录,并分别读取该索引记录和该数据记录的主键,得到主键集合;
合并主键模块,用于按照该索引查询条件间关系和该查询规模大小次序合并该主键集合,按主键排序后得到最终主键集合;
结果集生成模块,用于依据最终主键集合查询该数据分片中数据,并把满足该索引查询条件的数据放入结果集中;
合并结果集模块,用于合并每个数据分片的结果集得到最终的查询结果集,并把该查询结果集返回给该用户。
由以上方案可知,本发明的优点在于:
(1)通过改变内存存储刷写过程即可保证数据记录和索引记录的一致性。仅在内存存储刷写的时候生成索引记录,不需要对原有的数据恢复机制做任何的更改即可保证该内存存储中数据对应的索引不丢失,索引存储文件随着数据存储文件一起变迁,保证该索引存储文件中的索引不丢失,因此可以保证整个系统中索引和数据的一致性。
(2)数据写入性能下降较小。由于没有在写入过程中没有为索引引入额外的开销,特别是为了保证一致性的额外开销,仅在内存存储刷写时生成索引记录,写入性能增加。
(3)查询性能好。索引记录和数据记录读取都在数据分片内,避免了大量的来回网络时间开销,经过查询条件预处理、去掉较大查询规模的索引查询条件、按照查询规模从小到大合并主键集合、最终主键集合排序等优化技术,查询性能有大幅度提升。
(4)索引带来的额外存储开销较小。使用重新设计的专用数据结构来存储索引可以把索引的存储开销压缩到最小。
(5)一次查询能使用多列索引。查询是对每个数据分片单独进行,绝大多数情况下每个数据分片内的数据量不会太大,可以使用内存对多个索引的查询结果进行合并,故一次查询可以使用多列索引。
(6)索引能用于带聚集函数的服务端计算。索引的使用是在数据分片内,对服务端计算完全透明,服务端计算可以使用索引查询数据。
附图说明
图1为分布式顺序表片内二级索引布局示意图;
图2为分布式顺序表片内二级索引记录结构图;
图3为分布式顺序表片内二级索引存储文件结构图;
图4为分布式顺序表片内二级索引组织示意图;
图5为分布式顺序表片内二级索引多维区间查询流程图;
其中附图标记为:分布式顺序表片内二级索引多维区间查询步骤:
S51,S52,S53,S54,S55
具体实施方式
下面给出具体实施方式,结合附图对本发明做出详细的描述,但不作为对本发明的限定。
本发明提出了一种分布式顺序表片内二级索引方法及系统。具体而言,本发明将使用重新设计的专用数据结构来存储索引,可以把索引的存储开销压缩到最小,同时索引的读写性能更好,本发明通过更改内存存储的刷写过程,不需要对原有的数据恢复机制做任何的更改即可保证内存存储中数据对应的索引不丢失,保证了内存存储中索引和数据的一致性,本发明通过更改合并和分裂流程,保证了存储文件中索引和数据的一致性,本发明是对每个数据分片单独进行查询,绝大多数情况下每个数据分片内的数据量不会太大,可以使用内存对多个索引的查询结果进行合并,故一次查询可以使用多列索引。同时,索引的使用是在数据分片内,对服务端计算完全透明,服务端计算可以使用索引查询数据。另外,索引和数据读取都在数据分片内,避免了大量的来回网络时间开销,查询性能大幅提升,经过查询条件预处理、去掉较大查询规模的索引查询条件、按照查询规模从小到大合并主键集合、最终主键集合排序等优化技术,查询性能有进一步地大幅度提升。
为了完成上述过程,本发明提供一种分布式顺序表片内二级索引方法,所述方法包括:
S1索引布局管理步骤,如图1所示,为所述分布式顺序表的每个数据分片中的每个数据存储文件创建对应的索引存储文件,该索引存储文件存储列名、列值、主键;
S2一致性更新步骤,向该分布式顺序表写入数据时,先将该数据写入预写日志中,再写入内存存储中,若该内存存储中该数据部分丢失,将该预写入日志中部分未成功写入磁盘上的该数据重新写入该内存存储中;
S3内存存储刷写步骤,若该内存存储存量达到某阈值,先生成该内存存储中类型不为“删除”的数据记录对应的索引记录,并刷写该索引记录到该磁盘上生成该索引存储文件,再刷写数据记录到磁盘上生成该数据存储文件;
S4合并和分裂步骤,在数据分片合并时,先将多个索引存储文件合并成一个新的索引存储文件,再将对应的多个数据存储文件合并成一个新的数据存储文件;以及
在该数据分片按照某主键分裂成两个数据片时,首先将该数据分片内的每个索引存储文件按照该主键分裂成两个索引存储文件后分别加入到所述两个新的数据分片中,然后再把该数据分片内的每个数据存储文件按照所述主键分裂成两个数据存储文件后分别加入到所述的两个新的数据分片中;
S5多维区间查询步骤,该分布式顺序表接收多维区间查询条件,按照该查询条件对每个数据分片单独查询,查询时对该查询条件进行预处理得到索引查询条件,再依次单独查询每列索引、合并多列索引查询结果、读取数据作为最终查询结果。
如图2所示,该索引记录结构使用键值对数据结构存储,“键”包括列名和列值,“值”包括包括主键,键长度、值长度和列名长度都是用于快速读取索引记录的某个部分。索引记录依次按照列名、列值、主键来排序。
如图3所示,该索引存储文件结构包括:多个记录块,记录块索引,文件信息和结尾,每个记录块存储多条索引记录,保存每个记录块中第一条索引记录作为记录块索引,在查询每个索引存储文件时,直接二分查找块索引,快速查找开始、结束记录块的偏移位置,然后直接读取中间所有的记录块以获取满足该索引查询条件的主键集合。该文件信息中存储的是文件的几个统计数据,大小不是固定的,该结尾的大小是固定的,存储各部分的偏移和一些其他文件统计信息。
如图4所示,本发明具体实施所述的面向分布式顺序表的片内二级索引的索引组织示例。所述分布式顺序表共有三列,即c1,c2和c3。为其中两列c1和c2分别添加片内二级索引,系统会为每个数据存储文件维护对应的索引存储文件,并且把该数据存储文件中c1和c2两列的类型不为“删除”的数据记录写入到该索引存储文件中,c1、c2为索引列,c3为非索引列。该数据存储文件中每条数据记录有五个属性:主键、列名、时间戳、类型和列值,并依次按照主键、列名、时间戳和类型排序,该索引存储文件中每条索引记录有三个属性:列名、列值和主键,并依次按照列名、列值、主键排序。
所述一种分布式顺序表片内二级索引方法,该多维区间查询步骤S5还包括:
S51预处理步骤,用户对该分布式顺序表进行多维区间查询时,将查询条件发送到每个数据分片后预处理该查询条件,获得索引查询条件;进一步地说,当接收到区间查询请求时,把查询请求分别送到每个数据分片,在数据分片内,首先对所述查询请求中的查询条件进行条件合并和去重、索引条件筛选和较大查询规模的索引条件去除等预处理步骤,得到最终的索引查询条件。
S52读取主键步骤,分别从索引存储文件和内存存储中查找满足该索引查询条件的索引记录和数据记录,并分别读取该索引记录和该数据记录的主键,得到主键集合;
S53合并主键步骤,按照该索引查询条件间关系和该查询规模大小次序合并该主键集合,按主键排序后得到最终主键集合;进一步说,按照索引查询条件间的“与”或者“或”关系合并各自的主键集合,合并时按照查询规模从小到大的顺序进行,最后得到一个合并后的主键集合,对其按照主键进行排序,得到最终主键集合;
S54结果集生成步骤,依据最终主键集合查询该数据分片中的数据,并把满足该索引查询条件的数据放入结果集中;进一步说,依据所述最终主键值集合,从该数据分片的所有数据存储文件和内存存储中读取相应的数据,并用查询条件对该数据进行筛选,把满足该查询条件的数据记录放入查询结果集中;
S55合并结果集步骤,合并每个数据分片的结果集得到最终的查询结果集,并把该最终的查询结果集返回给该用户。
现在列举本发明的一个实施例,下面的实施例基于Apache HBase来创建本发明所述的片内二级索引方法及系统,HBase是一种典型的分布式顺序表,构建于Apache Hadoop(用于构建大规模共享存储和计算设施的软件)之上。一个HBase(分布式顺序表)系统包括一个HMaster(主服务节点)和多个HRegionServer(数据服务节点)。
本发明所述的片内二级索引采用HBase-0.94.16作为代码基础,采用Java语言实现。在HBase中为每个HRegion(数据分片)中的每个HFile(数据存储文件)维护一个对应的IndexFile(索引存储文件)。与HFile存储KeyValue(数据记录)类似,IndexFile存储IndexKeyValue(索引记录)。IndexKeyValue是一种类似KeyValue的存储结构,与KeyValue在存储内容上的主要区别在于不存储列名、时间戳和类型。KeyValue结构按照主键、列名、时间戳、类型、列值进行排序,而IndexKeyValue结构按照列名、列值、主键进行排序。另外,MemStore(内存存储)中的数据不维护索引,在MemStore刷写生成HFile的之前先生成对应的IndexFile。
在进行Minor(次)合并时,将多个小HFile合并成一个较大HFile的之前先将对应的多个IndexFile合并成一个大的IndexFile。在进行Major(主)合并时,在多个HFile合并成一个大的HFile之后,从新生成的HFile中生成IndexKeyValue列表后还需要在内存中进行排序,为了控制内存的使用,设置一个可以使用的最大内存量,在内存装满后,将排序好的IndexKeyValue刷写到磁盘上生成临时的IndexFile,最后再将多个临时IndexFile合并成一个最终的IndexFile。
在HRegion分裂时,父HRegion中的HFile并没有立即分裂,子HRegion只是对父HRegion中所有的HFile创建了一个对应的ReferenceFile(应用文件),在子HRegion做合并的时候才会真正生成存有实际数据的HFile,合并之前都是通过读取父HRegion中被引用的HFile。基于这个原理,可以对HRegion分裂过程不做任何更改,而是在HRegion上线时,如果发现有ReferenceFile,就同时读取被引用的HFile对应的IndexFile,在HRegion合并之后真正生成自己的IndexFile。
在对数据表进行多维区间查询时,把查询请求分别送到每个HRegion中单独查询。在每个HRegion内查询时,首先对查询条件进行预处理,得到索引查询条件,再查询IndexFile中的索引和MemStore中的数据,得到满足索引查询条件的主键集合,然后对多个索引查询条件的查询结果进行合并,根据他们之间的关系和查询规模大小次序合并各自得到主键集合,并对合并后的主键集合按照主键排序得到最终的主键集合,最后根据最终主键集合中的主键在HRegion中的HFile和MemStore中读出整行数据,并使用该查询条件进一步判断,把满足该查询条件的数据放入查询结果集中。最后把每个HRegion的查询结果集进行合并,得到最终的查询结果集。
本发明还涉及一种分布式顺序表片内二级索引系统,包括:
索引布局管理模块,用于为所述分布式顺序表的每个数据分片中的每个数据存储文件创建对应的索引存储文件,该索引存储文件存储列名、列值、主键;
一致性更新模块,向该分布式顺序表写入数据时,先将该数据写入预写日志中,再写入内存存储中,若该内存存储中该数据部分丢失,将该预写入日志中部分未成功写入磁盘上的该数据重新写入该内存存储中;
内存存储刷写模块,若该内存存储存量达到某阈值,先生成该内存存储中类型不为“删除”的数据记录对应的索引记录,并刷写该索引记录到该磁盘上生成该索引存储文件,再刷写数据记录到磁盘上生成该数据存储文件;
合并和分裂模块,在数据片合并时,先将多个索引存储文件合并成一个新的索引存储文件,再将对应的多个数据存储文件合并成一个新的数据存储文件;以及
在该数据片按照某主键分裂成两个数据片时,首先将该数据分片内的每个索引存储文件按照该主键分裂成两个索引存储文件后分别加入到所述两个新的数据分片中,然后再把该数据分片内的每个数据存储文件按照所述主键分裂成两个数据存储文件后分别加入到所述的两个新的数据分片中;
多维区间查询模块,用于该分布式顺序表接收多维区间查询条件,按照该查询条件对每个数据分片单独查询,查询时对该查询条件进行预处理得到索引查询条件,再依次单独查询每列索引、合并多列索引查询结果、读取数据作为最终查询结果。
所述一种分布式顺序表片内二级索引系统,该索引存储文件结构包括:多个记录块,记录块索引,文件信息和结尾,每个记录块存储多条索引记录,保存每个记录块中第一条索引记录作为记录块索引。
所述一种分布式顺序表片内二级索引系统,该索引记录结构使用键值对数据结构存储,“键”包括列名和列值,“值”包括包括主键,键长度、值长度和列名长度都是用于快速读取索引记录的某个部分。索引记录依次按照列名、列值、主键来排序。
所述一种分布式顺序表片内二级索引系统,该多维区间查询模块还包括:
在查询每个索引存储文件时,直接二分查找块索引,快速查找开始、结束记录块的偏移位置,然后直接读取中间所有的记录块以获取满足该索引查询条件的主键集合。
所述一种分布式顺序表片内二级索引系统,该多维区间查询模块还包括:
预处理模块,用于用户对该分布式顺序表进行多维区间查询时,将查询条件发送到每个数据分片后预处理该查询条件,获得索引查询条件;
读取主键模块,用于分别从索引存储文件和内存存储中查找满足该索引查询条件的索引记录和数据记录,并分别读取该索引记录和该数据记录的主键,得到主键集合;
合并主键模块,用于按照该索引查询条件间关系和该查询规模大小次序合并该主键集合,按主键排序后得到最终主键集合;
结果集生成模块,用于依据最终主键集合查询该数据分片中数据,并把满足该索引查询条件的数据放入结果集中;
合并结果集模块,用于合并每个数据分片的结果集得到最终的查询结果集,并把该最终的查询结果集返回给该用户。
Claims (10)
1.一种分布式顺序表片内二级索引方法,其特征在于,包括如下步骤:
S1索引布局管理步骤,为分布式顺序表的每个数据分片中的每个数据存储文件创建对应的索引存储文件,该索引存储文件存储列名、列值、主键;
S2一致性更新步骤,向该分布式顺序表写入数据时,先将该数据写入预写日志中,再写入内存存储中,若该内存存储中该数据部分丢失,将该预写入日志中未成功写入磁盘上的该数据重新写入该内存存储中;
S3内存存储刷写步骤,若该内存存储存量达到某阈值,先生成该内存存储中类型不为“删除”的数据记录对应的索引记录,并刷写该索引记录到该磁盘上生成该索引存储文件,再刷写该数据记录到磁盘上生成该数据存储文件;
S4合并和分裂步骤,在数据分片合并时,先将多个索引存储文件合并成一个新的索引存储文件,再将对应的多个数据存储文件合并成一个新的数据存储文件;以及
在该数据片按照某主键分裂成两个新数据分片时,首先将该数据分片内的每个索引存储文件按照该主键分裂成两个新索引存储文件后分别加入到所述两个新数据分片中,然后再把该数据分片内的每个数据存储文件按照该主键分裂成两个新数据存储文件后分别加入到所述的两个新的数据分片中;
S5多维区间查询步骤,对该分布式顺序表进行多维区间查询时,按照查询条件对每个数据分片单独查询,查询时对该查询条件进行预处理得到索引查询条件,再依次单独查询每列索引、合并多列索引查询结果、读取满足该索引查询条件的该些数据作为最终查询结果。
2.如权利要求1所述分布式顺序表片内二级索引方法,其特征在于,该索引存储文件结构包括:多个记录块,记录块索引,文件信息和结尾,每个记录块存储多条索引记录,保存每个记录块中第一条索引记录作为记录块索引。
3.如权利要求1所述分布式顺序表片内二级索引方法,其特征在于,该索引记录结构使用键值对结构存储,键主要包括列值和列名,值主要包括主键,键长度、值长度和列名长度都是用于快速读取索引记录的某部分。
4.如权利要求1所述一种分布式顺序表片内二级索引方法,其特征在于,该多维区间查询步骤S5还包括:
查询每个索引存储文件时,直接二分查找该块索引,快速查找开始、结束记录块的偏移位置,然后直接读取中间所有的记录块以获取满足该索引查询条件的主键集合。
5.如权利要求1所述分布式顺序表片内二级索引方法,其特征在于,该多维区间查询步骤S5还包括:
S51,用户对该分布式顺序表进行多维区间查询时,将查询条件发送到每个数据分片后预处理该查询条件,获得索引查询条件;
S52,分别从该索引存储文件和该内存存储中查找满足该索引查询条件的索引记录和数据记录,并分别读取该索引记录和该数据记录的主键,得到主键集合;
S53,按照该索引查询条件间关系和该查询规模大小次序合并该主键集合,按主键排序后得到最终主键集合;
S54,依据最终主键集合查询该数据分片中数据,并把满足该索引查询条件的数据放入结果集中;
S55,合并每个数据分片的结果集得到最终的查询结果集,并把该最终的查询结果集返回给该用户。
6.一种分布式顺序表片内二级索引系统,其特征在于,包括:
索引布局管理模块,用于为所述分布式顺序表的每个数据分片中的每个数据存储文件创建对应的索引存储文件,该索引存储文件存储列名、列值、主键;
一致性更新模块,向该分布式顺序表写入数据时,先将该数据写入预写日志中,再写入内存存储中,若该内存存储中该数据部分丢失,将该预写入日志中部分未成功写入磁盘上的该数据重新写入该内存存储中;
内存存储刷写模块,若该内存存储存量达到某阈值,先生成该内存存储中类型不为“删除”的数据记录对应的索引记录,并刷写该索引记录到该磁盘上生成该索引存储文件,再刷写数据记录到磁盘上生成该数据存储文件;
合并和分裂模块,在数据分片合并时,先将多个索引存储文件合并成一个新的索引存储文件,再将对应的多个数据存储文件合并成一个新的数据存储文件;以及
在该数据分片按照某主键分裂成两个数据片时,首先将该数据分片内的每个索引存储文件按照该主键分裂成两个索引存储文件后分别加入到所述两个新的数据分片中,然后再把该数据分片内的每个数据存储文件按照所述主键分裂成两个数据存储文件后分别加入到所述的两个新的数据分片中;
多维区间查询模块,用于该分布式顺序表接收多维区间查询条件,按照该查询条件对每个数据分片单独查询,查询时对该查询条件进行预处理得到索引查询条件,再依次单独查询每列索引、合并多列索引查询结果、读取满足该列索引查询条件的该些数据作为最终查询结果。
7.如权利要求6所述分布式顺序表片内二级索引系统,其特征在于,该索引存储文件结构包括:多个记录块,记录块索引,文件信息和结尾,每个记录块存储多条索引记录,保存每个记录块中第一条索引记录作为记录块索引。
8.如权利要求6所述分布式顺序表片内二级索引系统,其特征在于,该多维区间查询模块还包括:在查询每个索引存储文件时,直接二分查找块索引,快速查找开始、结束记录块的偏移位置,然后直接读取中间所有的记录块以获取满足该索引查询条件的主键集合。
9.如权利要求6所述分布式顺序表片内二级索引系统,其特征在于,该索引记录结构使用键值对结构存储,键主要包括列值和列名,值主要包括主键,键长度、值长度和列名长度都是用于快速读取索引记录的某部分。
10.如权利要求6所述分布式顺序表片内二级索引系统,其特征在于,该多维区间查询模块还包括:
预处理模块,用于用户对该分布式顺序表进行多维区间查询时,将查询条件发送到每个数据分片后预处理该查询条件,获得索引查询条件;
读取主键模块,用于分别从索引存储文件和内存存储中查找满足该索引查询条件的索引记录和数据记录,并分别读取该索引记录和该数据记录的主键,得到主键集合;
合并主键模块,用于按照该索引查询条件间关系和该查询规模大小次序合并该主键集合,按主键排序后得到最终主键集合;
结果集生成模块,用于依据最终主键集合查询该数据分片中数据,并把满足该索引查询条件的数据放入结果集中;
合并结果集模块,用于合并每个数据分片的结果集得到最终的查询结果集,并把该查询结果集返回给该用户。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410345063.0A CN104133867A (zh) | 2014-07-18 | 2014-07-18 | 分布式顺序表片内二级索引方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410345063.0A CN104133867A (zh) | 2014-07-18 | 2014-07-18 | 分布式顺序表片内二级索引方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104133867A true CN104133867A (zh) | 2014-11-05 |
Family
ID=51806545
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410345063.0A Pending CN104133867A (zh) | 2014-07-18 | 2014-07-18 | 分布式顺序表片内二级索引方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104133867A (zh) |
Cited By (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104657513A (zh) * | 2015-03-20 | 2015-05-27 | 烟台威尔数据系统有限公司 | 嵌入式系统中档案操作与快速检索方法 |
CN105354315A (zh) * | 2015-11-11 | 2016-02-24 | 华为技术有限公司 | 分布式数据库中子表分裂的方法、子表节点和系统 |
CN105574074A (zh) * | 2015-11-23 | 2016-05-11 | 江苏瑞中数据股份有限公司 | 一种基于智能电网wams的时序大数据存储方法 |
CN106021570A (zh) * | 2016-05-31 | 2016-10-12 | 广东凯通软件开发有限公司 | 数据查询方法及系统 |
WO2016192057A1 (zh) * | 2015-06-03 | 2016-12-08 | 华为技术有限公司 | 索引表的更新方法和设备 |
CN106294814A (zh) * | 2016-08-16 | 2017-01-04 | 上海欣方软件有限公司 | 基于内存数据库的HBase二级索引构建与查询的装置及方法 |
CN106528579A (zh) * | 2015-09-15 | 2017-03-22 | 阿里巴巴集团控股有限公司 | 一种基于分库分表结构数据库的查询方法、装置及系统 |
CN106844555A (zh) * | 2016-12-30 | 2017-06-13 | 江苏瑞中数据股份有限公司 | 一种用于电网wams系统的时序数据存储方法 |
WO2017096939A1 (zh) * | 2015-12-10 | 2017-06-15 | 深圳市华讯方舟软件技术有限公司 | 一种在基于HDFS的spark-sql大数据处理系统上建立索引的方法 |
CN106886375A (zh) * | 2017-03-27 | 2017-06-23 | 百度在线网络技术(北京)有限公司 | 存储数据的方法和装置 |
CN106909623A (zh) * | 2017-01-19 | 2017-06-30 | 中国科学院信息工程研究所 | 一种支持高效海量数据分析和检索的数据装置及数据存储方法 |
CN107704475A (zh) * | 2016-08-10 | 2018-02-16 | 泰康保险集团股份有限公司 | 多层分布式非结构化数据存储方法、查询方法及装置 |
CN107783980A (zh) * | 2016-08-24 | 2018-03-09 | 阿里巴巴集团控股有限公司 | 索引数据生成及数据查询方法及装置、存储和查询系统 |
CN108319602A (zh) * | 2017-01-17 | 2018-07-24 | 广州市动景计算机科技有限公司 | 数据库管理方法及数据库系统 |
CN108319625A (zh) * | 2017-01-17 | 2018-07-24 | 广州市动景计算机科技有限公司 | 文件合并方法和装置 |
WO2018133762A1 (zh) * | 2017-01-17 | 2018-07-26 | 广州市动景计算机科技有限公司 | 文件合并方法和装置 |
CN108509438A (zh) * | 2017-02-24 | 2018-09-07 | 南京烽火星空通信发展有限公司 | 一种ElasticSearch分片扩展方法 |
CN110532123A (zh) * | 2019-08-30 | 2019-12-03 | 北京小米移动软件有限公司 | HBase系统的故障转移方法及装置 |
CN110716942A (zh) * | 2019-10-26 | 2020-01-21 | 南京录信软件技术有限公司 | 一种基于Lucene的大索引快速分裂方法 |
CN110851436A (zh) * | 2018-08-03 | 2020-02-28 | Emc Ip控股有限公司 | 具有虚拟编索引的分布式搜索框架 |
CN111752913A (zh) * | 2019-03-28 | 2020-10-09 | 阿里巴巴集团控股有限公司 | 分布式系统的数据恢复方法、介质、计算机设备、装置 |
CN111949439A (zh) * | 2019-05-17 | 2020-11-17 | 中国移动通信集团河南有限公司 | 基于数据库的数据文件更新方法和装置 |
CN112236759A (zh) * | 2018-09-14 | 2021-01-15 | 谷歌有限责任公司 | 日志结构合并森林中的交错合并 |
CN112632008A (zh) * | 2020-12-29 | 2021-04-09 | 华录光存储研究院(大连)有限公司 | 一种数据分片的传输方法、装置及计算机设备 |
WO2021142643A1 (en) * | 2020-01-15 | 2021-07-22 | Alibaba Group Holding Limited | Fast partition splitting solution in distributed data storage systems |
WO2023197404A1 (zh) * | 2022-04-14 | 2023-10-19 | 上海川源信息科技有限公司 | 一种基于分布式数据库的对象存储方法及装置 |
CN117555906A (zh) * | 2024-01-12 | 2024-02-13 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN117743337A (zh) * | 2023-12-20 | 2024-03-22 | 平凯星辰(北京)科技有限公司 | 数据处理方法、装置、电子设备及可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101655858A (zh) * | 2009-08-26 | 2010-02-24 | 华中科技大学 | 一种基于分块组织的密文索引结构及其管理方法 |
CN101727465A (zh) * | 2008-11-03 | 2010-06-09 | 中国移动通信集团公司 | 分布式列存储数据库索引建立、查询方法及装置与系统 |
CN102375853A (zh) * | 2010-08-24 | 2012-03-14 | 中国移动通信集团公司 | 分布式数据库系统、在其中建立索引的方法和查询方法 |
CN103020204A (zh) * | 2012-12-05 | 2013-04-03 | 北京普泽天玑数据技术有限公司 | 一种对分布式顺序表进行多维区间查询的方法及其系统 |
CN103366015A (zh) * | 2013-07-31 | 2013-10-23 | 东南大学 | 一种基于Hadoop的OLAP数据存储与查询方法 |
-
2014
- 2014-07-18 CN CN201410345063.0A patent/CN104133867A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727465A (zh) * | 2008-11-03 | 2010-06-09 | 中国移动通信集团公司 | 分布式列存储数据库索引建立、查询方法及装置与系统 |
CN101655858A (zh) * | 2009-08-26 | 2010-02-24 | 华中科技大学 | 一种基于分块组织的密文索引结构及其管理方法 |
CN102375853A (zh) * | 2010-08-24 | 2012-03-14 | 中国移动通信集团公司 | 分布式数据库系统、在其中建立索引的方法和查询方法 |
CN103020204A (zh) * | 2012-12-05 | 2013-04-03 | 北京普泽天玑数据技术有限公司 | 一种对分布式顺序表进行多维区间查询的方法及其系统 |
CN103366015A (zh) * | 2013-07-31 | 2013-10-23 | 东南大学 | 一种基于Hadoop的OLAP数据存储与查询方法 |
Cited By (46)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104657513A (zh) * | 2015-03-20 | 2015-05-27 | 烟台威尔数据系统有限公司 | 嵌入式系统中档案操作与快速检索方法 |
CN104657513B (zh) * | 2015-03-20 | 2018-02-09 | 山东威尔数据股份有限公司 | 嵌入式系统中档案操作与快速检索方法 |
WO2016192057A1 (zh) * | 2015-06-03 | 2016-12-08 | 华为技术有限公司 | 索引表的更新方法和设备 |
US10642817B2 (en) | 2015-06-03 | 2020-05-05 | Huawei Technologies Co., Ltd. | Index table update method, and device |
CN106528579A (zh) * | 2015-09-15 | 2017-03-22 | 阿里巴巴集团控股有限公司 | 一种基于分库分表结构数据库的查询方法、装置及系统 |
CN105354315B (zh) * | 2015-11-11 | 2018-10-30 | 华为技术有限公司 | 分布式数据库中子表分裂的方法、子表节点和系统 |
WO2017080139A1 (zh) * | 2015-11-11 | 2017-05-18 | 华为技术有限公司 | 分布式数据库中子表分裂的方法、子表节点和系统 |
US11868315B2 (en) | 2015-11-11 | 2024-01-09 | Huawei Cloud Computing Technologies Co., Ltd. | Method for splitting region in distributed database, region node, and system |
CN105354315A (zh) * | 2015-11-11 | 2016-02-24 | 华为技术有限公司 | 分布式数据库中子表分裂的方法、子表节点和系统 |
CN105574074A (zh) * | 2015-11-23 | 2016-05-11 | 江苏瑞中数据股份有限公司 | 一种基于智能电网wams的时序大数据存储方法 |
WO2017096939A1 (zh) * | 2015-12-10 | 2017-06-15 | 深圳市华讯方舟软件技术有限公司 | 一种在基于HDFS的spark-sql大数据处理系统上建立索引的方法 |
CN106021570A (zh) * | 2016-05-31 | 2016-10-12 | 广东凯通软件开发有限公司 | 数据查询方法及系统 |
CN107704475B (zh) * | 2016-08-10 | 2021-12-14 | 泰康保险集团股份有限公司 | 多层分布式非结构化数据存储方法、查询方法及装置 |
CN107704475A (zh) * | 2016-08-10 | 2018-02-16 | 泰康保险集团股份有限公司 | 多层分布式非结构化数据存储方法、查询方法及装置 |
CN106294814B (zh) * | 2016-08-16 | 2019-09-20 | 上海欣方软件有限公司 | 基于内存数据库的HBase二级索引构建与查询的装置及方法 |
CN106294814A (zh) * | 2016-08-16 | 2017-01-04 | 上海欣方软件有限公司 | 基于内存数据库的HBase二级索引构建与查询的装置及方法 |
CN107783980A (zh) * | 2016-08-24 | 2018-03-09 | 阿里巴巴集团控股有限公司 | 索引数据生成及数据查询方法及装置、存储和查询系统 |
CN106844555A (zh) * | 2016-12-30 | 2017-06-13 | 江苏瑞中数据股份有限公司 | 一种用于电网wams系统的时序数据存储方法 |
CN108319602A (zh) * | 2017-01-17 | 2018-07-24 | 广州市动景计算机科技有限公司 | 数据库管理方法及数据库系统 |
CN108319625A (zh) * | 2017-01-17 | 2018-07-24 | 广州市动景计算机科技有限公司 | 文件合并方法和装置 |
WO2018133762A1 (zh) * | 2017-01-17 | 2018-07-26 | 广州市动景计算机科技有限公司 | 文件合并方法和装置 |
CN108319625B (zh) * | 2017-01-17 | 2019-10-25 | 广州市动景计算机科技有限公司 | 文件合并方法和装置 |
CN108319602B (zh) * | 2017-01-17 | 2020-10-16 | 阿里巴巴(中国)有限公司 | 数据库管理方法及数据库系统 |
CN106909623A (zh) * | 2017-01-19 | 2017-06-30 | 中国科学院信息工程研究所 | 一种支持高效海量数据分析和检索的数据装置及数据存储方法 |
CN106909623B (zh) * | 2017-01-19 | 2019-11-26 | 中国科学院信息工程研究所 | 一种支持高效海量数据分析和检索的数据装置及数据存储方法 |
CN108509438A (zh) * | 2017-02-24 | 2018-09-07 | 南京烽火星空通信发展有限公司 | 一种ElasticSearch分片扩展方法 |
CN108509438B (zh) * | 2017-02-24 | 2021-08-31 | 南京烽火星空通信发展有限公司 | 一种ElasticSearch分片扩展方法 |
CN106886375B (zh) * | 2017-03-27 | 2019-11-05 | 百度在线网络技术(北京)有限公司 | 存储数据的方法和装置 |
CN106886375A (zh) * | 2017-03-27 | 2017-06-23 | 百度在线网络技术(北京)有限公司 | 存储数据的方法和装置 |
CN110851436A (zh) * | 2018-08-03 | 2020-02-28 | Emc Ip控股有限公司 | 具有虚拟编索引的分布式搜索框架 |
CN110851436B (zh) * | 2018-08-03 | 2023-10-27 | Emc Ip控股有限公司 | 具有虚拟编索引的分布式搜索框架 |
CN112236759B (zh) * | 2018-09-14 | 2024-08-06 | 谷歌有限责任公司 | 日志结构合并森林中的交错合并 |
CN112236759A (zh) * | 2018-09-14 | 2021-01-15 | 谷歌有限责任公司 | 日志结构合并森林中的交错合并 |
CN111752913A (zh) * | 2019-03-28 | 2020-10-09 | 阿里巴巴集团控股有限公司 | 分布式系统的数据恢复方法、介质、计算机设备、装置 |
CN111752913B (zh) * | 2019-03-28 | 2024-03-01 | 阿里云计算有限公司 | 分布式系统的数据恢复方法、介质、计算机设备、装置 |
CN111949439B (zh) * | 2019-05-17 | 2023-08-01 | 中国移动通信集团河南有限公司 | 基于数据库的数据文件更新方法和装置 |
CN111949439A (zh) * | 2019-05-17 | 2020-11-17 | 中国移动通信集团河南有限公司 | 基于数据库的数据文件更新方法和装置 |
CN110532123A (zh) * | 2019-08-30 | 2019-12-03 | 北京小米移动软件有限公司 | HBase系统的故障转移方法及装置 |
CN110532123B (zh) * | 2019-08-30 | 2023-08-04 | 北京小米移动软件有限公司 | HBase系统的故障转移方法及装置 |
CN110716942A (zh) * | 2019-10-26 | 2020-01-21 | 南京录信软件技术有限公司 | 一种基于Lucene的大索引快速分裂方法 |
WO2021142643A1 (en) * | 2020-01-15 | 2021-07-22 | Alibaba Group Holding Limited | Fast partition splitting solution in distributed data storage systems |
CN112632008A (zh) * | 2020-12-29 | 2021-04-09 | 华录光存储研究院(大连)有限公司 | 一种数据分片的传输方法、装置及计算机设备 |
WO2023197404A1 (zh) * | 2022-04-14 | 2023-10-19 | 上海川源信息科技有限公司 | 一种基于分布式数据库的对象存储方法及装置 |
CN117743337A (zh) * | 2023-12-20 | 2024-03-22 | 平凯星辰(北京)科技有限公司 | 数据处理方法、装置、电子设备及可读存储介质 |
CN117555906A (zh) * | 2024-01-12 | 2024-02-13 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN117555906B (zh) * | 2024-01-12 | 2024-04-05 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104133867A (zh) | 分布式顺序表片内二级索引方法及系统 | |
JP7410181B2 (ja) | ハイブリッド・インデックス作成方法、システム、プログラム | |
CN110019218B (zh) | 数据存储与查询方法及设备 | |
WO2015106711A1 (zh) | 一种为半结构化数据构建NoSQL数据库索引的方法及装置 | |
US9720992B2 (en) | DML replication with logical log shipping | |
CN105224546B (zh) | 数据存储和查询方法及设备 | |
CN108694195B (zh) | 一种分布式数据仓库的管理方法及系统 | |
CN111382226A (zh) | 一种数据库查询检索方法、装置和电子设备 | |
CN107491487B (zh) | 一种全文数据库架构及位图索引创建、数据查询方法、服务器及介质 | |
CN112286941B (zh) | 一种基于Binlog+HBase+Hive的大数据同步方法和装置 | |
CN106909595B (zh) | 一种数据迁移方法及装置 | |
CN103268336A (zh) | 一种快数据和大数据结合的数据处理方法及其系统 | |
CN102169507A (zh) | 一种分布式实时搜索引擎 | |
CN107807932B (zh) | 一种基于路径枚举的层级数据管理方法和系统 | |
CN104239377A (zh) | 跨平台的数据检索方法及装置 | |
CN106649412B (zh) | 一种数据处理方法和设备 | |
CN104199899A (zh) | 一种基于Hbase的海量图片存储方法及装置 | |
CN104834650A (zh) | 一种有效查询任务生成方法及系统 | |
CN104615785A (zh) | 一种基于TYKY cNosql数据库的数据存储方法及装置 | |
CN112262379A (zh) | 存储数据项并且标识存储的数据项 | |
CN113177090A (zh) | 数据处理方法及装置 | |
CN101963993B (zh) | 一种数据库单表记录快速查找的方法 | |
CN112131214A (zh) | 数据写入、数据查询的方法、系统、设备和存储介质 | |
CN112965939A (zh) | 一种文件合并方法、装置和设备 | |
CN113094442A (zh) | 全量数据同步方法、装置、设备和介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20141105 |