CN105335475A - 一种基于流式数据的局部性非聚簇索引方法及系统 - Google Patents
一种基于流式数据的局部性非聚簇索引方法及系统 Download PDFInfo
- Publication number
- CN105335475A CN105335475A CN201510641703.7A CN201510641703A CN105335475A CN 105335475 A CN105335475 A CN 105335475A CN 201510641703 A CN201510641703 A CN 201510641703A CN 105335475 A CN105335475 A CN 105335475A
- Authority
- CN
- China
- Prior art keywords
- index
- key
- data
- hash
- record
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24568—Data stream processing; Continuous queries
-
- 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
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)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于流式数据的局部性非聚簇索引方法及系统,该方法包括:实时更新步骤,实时更新哈希索引表中针对所接收到的每条流式数据而产生的索引记录,该索引记录记载了该流式数据中出现的索引键、该索引键首次出现时所对应的主键以及从首次出现到当前最末次出现所覆盖的数据个数;写入步骤,当达到触发条件时,将该哈希索引表中的该索引记录写入索引表中,继续执行该实时更新步骤。本发明极大地缩小了索引表的空间及构建索引表所产生的带宽开销,该索引方法将随机访问与顺序扫描结合起来,有效地利用了流式数据的时间局部特性,更符合存储介质的访问模型,提高了索引数据查询的效率。
Description
技术领域
本发明涉及大规模数据处理领域,特别是涉及一种基于流式数据的局部性非聚簇索引方法及系统。
背景技术
目前的流式索引技术主要通过传统数据库的索引方式,实时地对每条数据建立对应的索引。
如图1所示为现有技术中的索引建立方式的示意图。
图1中左侧表为流式数据处理系统源源不断收到的流式数据,以数据表的形式进行显示,表中主键用于以时间递增的方式标识各条数据,待索引列为每条数据所携带的可供索引的数据项目,每条数据还可带有数据列等其他数据项目。
在现有技术中,为了便于检索和查询,快速定位数据,需为每条数据基于待索引的项目建立索引,目前有序索引通常利用的数据结构为B树,将索引键相同的数据插置在同一B树上,从而为数据归类,以便于检索定位。图1中右侧为索引表,如表可见索引键同为a的数据包括外键为P1、P3、P5的数据,该外键即指向数据表中的主键。可见现有技术中的索引表顺序记载了对应同一索引键的所有数据的出现位置。
目前基于有序索引的优化方案集中于对索引表的存储方式的优化,如使用优化的B树,压缩索引表,编码索引表等。
图1所述方法的缺点在于:
1、存储该索引表需占用大量空间,对于流式数据实时建立该索引表开销极大。
2、顺序扫描一段索引表将导致随机访问数据表,失去空间局部性,读取性能下降。
3、没有利用流式数据的时间局部性。
发明内容
本发明解决的技术问题在于,提出一种基于流式数据的局部性非聚簇索引方法及系统,针对流式数据,借助时间局部性进行实时索引。
为了解决以上问题,本发明公开了一种基于流式数据的局部性非聚簇索引方法,包括:
实时更新步骤,实时更新哈希索引表中针对所接收到的每条流式数据而产生的索引记录,该索引记录记载了该流式数据中出现的索引键、该索引键首次出现时所对应的主键以及从首次出现到当前最末次出现所覆盖的数据个数;
写入步骤,当达到触发条件时,将该哈希索引表中的该索引记录写入索引表中,继续执行该实时更新步骤。
该方法还包括一查询步骤,在该哈希索引表以及该索引表中分别找到索引键为待查询的索引值的全部索引记录,根据所找到的索引记录中所记载的主键,在流式数据的数据表中确认查询起点,根据索引记录中所记载的数据个数,确定查询终点,从该查询起点到查询终点所覆盖的数据中,过滤掉索引键与该索引值不符的数据。
该触发条件包括预设的触发计数以及预设的触发时长;
如果该哈希索引表中任一索引键所对应的该数据个数达到该触发计数,将该哈希索引表中该索引键所对应的索引记录写入该索引表中;
在达到该触发时长时,执行写入步骤,将该哈希索引表中所有索引记录写入该索引表中。
该写入步骤后还包括维护索引一致性步骤,每次以达到该预设的触发时长而触发该写入步骤时,存储当前最后一条数据的主键,当发生系统重启时,从该主键所对应的数据开始,重新执行该实时更新步骤。
在该维护索引一致性步骤之后执行该查询步骤时,还包括:过滤掉主键相同的索引记录。
该方法可以分别利用不同的哈希索引表执行该实时更新步骤,但任一时刻仅一个哈希索引表可以执行该实时更新步骤。
该方法还包括:当达到触发条件时,将该哈希索引表送入一索引写队列,以排队等待写入该索引表。
该方法还包括:当需要对索引表中的索引记录进行更新,将原始索引键修改为目标索引键时,在索引表中利用该目标索引键进行查询,得到目标扫描窗口,判断该原始索引键所对应的主键是否被覆盖于该目标扫描窗口,如果是,直接将所述索引记录中的原始索引键修改为目标索引键,如果否,在索引表中增加一条索引记录,索引键为该目标索引键,主键为该原始索引键所对应的主键,数据个数为1。
本发明公开了一种基于流式数据的局部性非聚簇索引系统,包括:
实时更新单元,用于实时更新哈希索引表中针对所接收到的每条流式数据而产生的索引记录,该索引记录记载了该流式数据中出现的索引键、该索引键首次出现时所对应的主键以及从首次出现到当前最末次出现所覆盖的数据个数;
写入单元,用于当达到触发条件时,将该哈希索引表中的该索引记录写入索引表中,继续执行该实时更新步骤。
该系统还包括一查询单元,用于在该哈希索引表以及该索引表中分别找到索引键为待查询的索引值的全部索引记录,根据所找到的索引记录中所记载的主键,在流式数据的数据表中确认查询起点,根据索引记录中所记载的数据个数,确定查询终点,从该查询起点到查询终点所覆盖的数据中,过滤掉索引键与该索引值不符的数据。
该触发条件包括预设的触发计数以及预设的触发时长;
如果该哈希索引表中任一索引键所对应的该数据个数达到该触发计数,该写入单元将该哈希索引表中该索引键所对应的索引记录写入该索引表中;
在达到该触发时长时,该写入单元将该哈希索引表中所有索引记录写入该索引表中。
该系统还包括维护索引一致性单元,用于在每次以达到该预设的触发时长而调用该写入单元时,存储当前最后一条数据的主键,当发生系统重启时,从该主键所对应的数据开始,重新调用该实时更新单元。
该系统还包括维护查询一致性单元,用于在调用该维护索引一致性单元后并进行查询时,过滤掉主键相同的索引记录。
该实时更新单元可以分别利用不同的哈希索引表,但任一时刻仅能利用一个哈希索引表。
当该系统达到触发条件时,该写入单元将该哈希索引表送入一索引写队列,以排队等待写入该索引表。
该系统还包括更新单元,用于当需要对索引表中的索引记录进行更新,将原始索引键修改为目标索引键时,在索引表中利用该目标索引键进行查询,得到目标扫描窗口,判断该原始索引键所对应的主键是否被覆盖于该目标扫描窗口,如果是,直接将所述索引记录中的原始索引键修改为目标索引键,如果否,在索引表中增加一条索引记录,索引键为该目标索引键,主键为该原始索引键所对应的主键,数据个数为1。
通过使用本发明的方法,实现了如下技术成效:
1、极大地缩小了索引表的空间及构建索引表所产生的带宽开销。
2、该索引方法将随机访问与顺序扫描结合起来,有效地利用了流式数据的时间局部特性,更符合存储介质的访问模型,提高了索引数据查询的效率。
3、利用哈希表池和索引写入队列实现了异步聚合索引写入,减缓了流式数据索引的压力,增加了系统的吞吐量。
附图说明
图1所示为现有技术中的索引建立方式的示意图。
图2为本发明的数据表与内存中的哈希索引表的示意图。
图3所示为基于触发条件的数据表示意图。
图4、5为写入索引表的过程示意图。
图6为查询的过程示意图。
图7为维护索引一致性的过程示意图。
图8为索引器的结构示意图。
图9A-9C所示为该方法的流程图
具体实施方式
以下结合实施例对本发明的技术方案进行详细描述,不视为对本发明的限制。
发明人在对流式数据存储系统的研发中,发现流式数据具有时间局部性的特点。所谓时间局部性,就是一段时间内,流式数据存在相关性,即,由于通常在发布数据时,是针对同一主题顺序提出多条数据,正是由于在内容上的相关性,故而在一段时间内出现的数据,其索引键的具体数值覆盖一个相对小的范围,而并非覆盖该索引键所能涉及的所有数值,也就是待索引项的数据基数很小。
而现有的数据索引的建立与查询均没有利用该时间局部性,所建立的索引结构不适用于高流量场景,索引查询无法满足实时要求。
针对这个发现,发明人设计了一种基于流式数据的局部性非聚簇索引方法,将每个索引记录索引的范围扩大,从原先的一条记录变为以索引记录为起点的一个扫描窗口。
具体来说,本发明在内存中建立哈希索引表,流式数据处理系统接收流式数据,且流式数据在写入索引表之前,先利用该哈希索引表进行索引数据的实时聚合,再将哈希索引表中的记录写入索引表中。
该哈希索引表至少包括三个字段,索引键、外键、扫描窗口。
索引键字段记载了流式数据中出现的索引键,外键记载了流式数据中首次出现对应的索引键时的主键,扫描窗口记载了从首次出现具有该索引键的数据到当前最末次出现具有该索引键的数据,这一范围内所覆盖的数据个数。
以下结合实施例进行具体描述。流式数据处理系统每接收到一条数据,均对应更新一次哈希索引表的内容。图2为本发明的数据表与内存中的哈希索引表的示意图。针对图2所示内容,以下进行分解描述。
当流式数据处理系统接收到第一条数据,即图2数据表中主键为P1,待索引列为a的数据,则在哈希索引表中记录首次出现的索引键a,a首次出现时的主键为P1,且当前a最末次也出现在数据P1,首末次出现之间所覆盖的数据仅包括数据P1,故而此时其扫描窗口为1。可见,针对第一条数据P1,哈希索引表的内容为:
索引键 | 外键 | 扫描窗口 |
a | P1 | 1 |
当流式数据处理系统接收到第二条数据,即图2数据表中主键为P2,待索引列为b的数据,此时在哈希索引表中插入记录首次出现的索引键b,b首次出现时的主键为P2,b首次出现在数据P2,且当前b最末次也出现在数据P2,首末次出现之间所覆盖的数据仅包括数据P2,故而此时其扫描窗口为1。可见,针对前两条数据P1、P2,哈希索引表的内容为:
索引键 | 外键 | 扫描窗口 |
a | P1 | 1 |
b | P2 | 1 |
当流式数据处理系统接收到第三条数据,即图2数据表中主键为P3的数据,由于数据P3的待索引列为a,a已经记载在哈希索引表中,故而此时直接对快照中对于索引键a的记录进行更新。由于a首次出现时的主键为P1,当前a最末次出现在数据P3,首末次出现之间所覆盖的数据包括数据P1-P3,共三条数据,故而此时其扫描窗口为3。可见,针对前三条数据P1、P2、P3,哈希索引表的内容为:
索引键 | 外键 | 扫描窗口 |
a | P1 | 3 |
b | P2 | 1 |
同理,当流式数据处理系统接收到第四条数据P4时,更新哈希索引表的内容为:
索引键 | 外键 | 扫描窗口 |
A | P1 | 3 |
B | P2 | 3 |
同理,当流式数据处理系统接收到第五条数据P5时,更新哈希索引表的内容为:
索引键 | 外键 | 扫描窗口 |
A | P1 | 5 |
B | P2 | 3 |
同理,当流式数据处理系统接收到第六条数据P6时,更新哈希索引表的内容为:
索引键 | 外键 | 扫描窗口 |
A | P1 | 5 |
B | P2 | 3 |
C | P6 | 1 |
同理,当流式数据处理系统接收到第七条数据P7时,更新哈希索引表的内容为:
索引键 | 外键 | 扫描窗口 |
A | P1 | 5 |
B | P2 | 6 |
C | P6 | 1 |
以此类推。则当前图2中右侧表单的哈希索引表为流式数据处理系统接收到第二十条数据P20时,哈希索引表的内容。
同时,为了避免哈希索引表的记录数量不断增大,超出内存限制,以及为了避免单条索引的扫描窗口太长,影响查询性能,本发明还设计了一种触发机制,以将该哈希索引表中的记录写入索引表中。本发明设计有两个触发条件,预设的触发计数以及预设的触发时长。
首先,随着流式数据处理系统不断接收到流式数据,哈希索引表随之不断更新,如果该哈希索引表中任一索引键所对应的该扫描窗口所记载的数据个数达到该触发计数,将该哈希索引表中当前该索引键所对应的记录写入该索引表中,同时对该哈希索引表中该索引键所对应的记录内容进行更新。
其次,每当达到该触发时长时,将当前该哈希索引表中所有记录写入该索引表中。
以下举例详细说明。
假设预设的触发计数为10,预设的触发时长为40。如图3所示为基于触发条件的数据表示意图。该图3与图2中的数据表所记载的主键以及待索引列的数值相一致。图3中还包括每条数据的到达时间的字段。从图3中可知,流式数据处理系统接收到每条数据之间的间隔不等。
收到数据P6时,时间为34(未达到触发时长40),从时间34到时间40未收到任何数据,则截止到时间40时,仅接收数据P1-P6,由于时间来到40,触发了写入索引表的操作。将当前截止至数据P6的哈希索引表(下表)中的所有记录写入该索引表中。哈希索引表在收到新的数据时进行更新,重新开始记录。
索引键 | 外键 | 扫描窗口 |
A | P1 | 5 |
B | P2 | 3 |
C | P6 | 1 |
同理,当时间来到80时,会再次触发了写入索引表的操作。
事实上,本发明中的哈希索引表还带有一个计数器,初始化为0,每一条数据到达,计数器加1,当执行时间触发的写入索引表的操作后,计数器归零。如图3、4可知,由于达到触发时长40,故而触发了写入索引表的操作,计数器清零,收到数据P7后,计数器为1,数据P7为扫描窗口起点,从数据P7开始重新对哈希索引表进行记录。对应的,该哈希索引表中还包括一窗口起点的字段。该窗口起点字段记录着针对数据P7的记录插入快照后,计数器的值。通过计数器的当前值与该窗口起点的值做差可以计算出扫描窗口的长度。当扫描窗口的长度达到一窗口长度上限,也就是达到该触发计数时,将该条记录写入索引表。
截止到数据P17,哈希索引表中的内容如图4右侧图表所示,其中窗口长度的字段等同于图2中扫描窗口的字段。以下以流式数据处理系统接收到数据P18为例,详细描述将哈希索引表中的记录写入索引表的具体过程。
截止到数据P17,哈希索引表中的内容如图5中表10所示,此时,哈希表的属性如表A所示,计数器的数值为11,窗口长度上限为10。收到新数据P18,其内容如表20所示,而此时哈希表的属性如表B所示,计算器加1,从11变为12。接下来,在表10中查询索引键为b的记录,得到表30所述内容,由于此时计数器为12,而窗口起点为1,12-1=11,11大于窗口长度上限,故而符合触发条件,导致表30所述的记录被写入索引表中。由于截止到目前发生了两次写入,故而当前索引表的内容为:
索引键 | 外键 | 扫描窗口 |
a | P1 | 5 |
b | P2 | 3 |
b | P7 | 8 |
c | P6 | 1 |
此时,还需要对哈希索引表中内容进行对应的修正更新,如表40所示,由于索引键为b的记录已经写入索引表,则此时快照中索引键为b的记录,其外键修改为P18,窗口长度修改为1,窗口起点修改为计数器当前的数值12。
如表50所示,为更新后的哈希索引表的实际内容。
在实际应用过程中,针对每条流式数据400字节,每秒写入10000条记录,64G内存的流式数据处理系统,触发时长可设为30分钟,触发计数可设置为60万。
以上为对哈希索引表和索引表的更新和写入的描述,以下描述针对哈希索引表和索引表的查询过程。
本发明由于在哈希索引表和索引表中存在对所接收到的流式数据的索引内容,故而,在查询时,需要同时针对哈希索引表和索引表进行查询。仍以图2所述实施例为例,图2中触发计数设置为20。
参考图6可知,当对b提出查询请求时,首先在图6中上方的索引表中进行查询,得到索引键b的扫描窗口为17,外键为P2,据此在数据表中定位主键P2,并扫描确定查询窗口范围为P2到P18,共17条数据,从中过滤掉待索引列不为b的那些数据,最终得到过滤数据,如图6下方最右侧表单所示为经过过滤后的查询结果。对哈希索引表的查询也同样依照上述方式。当索引表中存在索引键为b的多条记录时,也分别依照上述方法进行查询。
本发明设置该触发计数,也就是窗口长度上限,是为了识别时间局部性的索引区块,将一个快照中的一条索引记录所覆盖的范围限制在有限的区间内,避免一个索引区块过大,如果一个所覆盖的范围超过该上限,将其拆分为两个小的区块,以保证每个索引区块,也就是索引表中的每条记录,所覆盖的数据的查询命中率将大为提高。
本发明设置该触发时长,是为了降低内存开销,以及提高持久化主键的实时性,减少故障恢复时间。
在一个实施例中,可能出现在建立索引后,又对数据表中的数据进行删除的情况。由于查询需依照所欲查询的索引键对应的外键,并在数据表中从该外键起向后确定一扫描窗口,如果该范围内的一条数据被删除,则扫描窗口会随之向后延伸一条数据,由于查询过程还需执行该过滤的过程,故而对于查询的准确性完全没有影响。
仍以图6为例,如果查询b时,扫描窗口为17,外键为P2,假定数据表中的P4数据被删除了,则扫描窗口将会从P2-P18变为P2-P19,但是由于过滤步骤的存在,查询的准确性完全没有影响。
在一个实施例中,还可能出现在建立索引后,索引表中的索引键进行更新的情况。
例如,将索引键a改为索引键b。此时,在索引表中,对作为更新结果的索引键b进行查询,得到多个目标扫描窗口,判断索引键a所对应的主键,是否被目标扫描窗口所覆盖,如果是,直接执行对索引键的更新,将索引键a改为索引键b,如果否,针对那些没有被覆盖的主键,在索引表中增加一条新的索引记录,主键保持不变,索引键设置为修改后的索引键,例如索引键为b,扫描窗口设置为1。
以图6为例,假设将数据P3的索引键a改为索引键b。此时,对索引键b进行查询,索引表中只有一条索引键b的记录,则根据图6中下表可以发现,在查询结果中,索引键b从P2开始,覆盖17条数据,这17条数据为目标扫描窗口,该窗口也覆盖到了P3,因此可以直接执行对索引键的更新,将P3的索引键a改为索引键b。如果发现待更新的索引键a未被更新结果索引键b的所有扫描窗口覆盖,则需要增加一条新的索引记录,新的索引记录的索引键为b,扫描窗口设置为1,主键为P3。
本发明在一个实施例中,还提供了维护索引一致性的方法。主要是针对系统异常结束后,重新启动时,可重新建立哈希索引表,保持索引表的准确性,查询的准确性。
该维护索引一致性的方法利用预设的触发时长来完成索引表的快照功能。每次达到该预设的触发时长而触发写入索引表时,均持久化存储当前最后一条数据的主键,当发生系统重启时,从被持久化的该主键所对应的数据开始,重新开始执行哈希索引表的更新操作。例如,图3所示方案中,在数据P7到来前,由于到达触发时长而触发了索引表的写入,则参考图7所示,写入索引表的记录包括三条,分别为索引键为a,外键P1,扫描窗口5;索引键为b,外键P2,扫描窗口3;索引键为c,外键P6,扫描窗口1。此时的持久化主键为空。索引写入成功后,将数据P6的主键记载在硬盘等非易失性的存储装置中,当重启以后,从数据P6重新开始执行哈希索引表的更新操作。但是,此后在执行查询时,由于数据P6这一数据可能存在于针对同一索引键的两条索引记录中,故而需要过滤掉查询结果中主键相同的记录,如此则可以保证查询结果的一致性。
另外,在达到触发时长而写入索引表的情况中,需要将哈希索引表中的全部记录均写入索引表,在哈希索引表中的记录较多的情况下,可能会发生由于写入量太大而阻塞的情况。为避免阻塞情况的发生,本发明设计了哈希表池与索引写队列,用以完成索引异步聚合写入。
在本发明的又一个实施例中,本发明在流式数据处理系统中利用一索引器实现对哈希索引表的更新以及写入索引表的操作,如图8所示为该索引器的结构示意图。在该索引器中,本发明建立一哈希表池,其设置于内存中,该哈希表池中可包括多个空闲的哈希表,用来产生本发明所述的哈希索引表。任一时刻仅一个哈希表被激活,负责流式数据索引的聚合,即,同一时刻永远只有一个哈希索引表可以发生更新。当内存中没有被激活的哈希表,而当前需要插入一条索引时,触发哈希表池的分配动作,激活一个空闲哈希表。
当达到触发条件,需要写入索引表时,该被激活的哈希表被冻结,被冻结即不再写入,则将被冻结的哈希表所对应的哈希索引表作为输入提交为索引写队列,由独立的写索引线程负责完成该索引写入的任务,该索引写队列也可以视为是对写入任务的缓存区,多个写入任务在该索引写队列中排队等待执行。由此,不论是更新哈希表还是写入索引表,均各自存在一次缓冲的过程,故而可以极大的避免数据阻塞。但是,当哈希表池没有空闲哈希表时,即发生了索引写入阻塞,此时就需要等待。当写入索引表的任务完成时,对应的完成任务的哈希表归还给哈希表池,继续使用。
基于图8所示的实施例,在执行查询的步骤时,除需查询索引表中的记录外,还需对内存中所有的非空闲哈希表均进行查询。
通过上述详细说明可知,本发明公开了一种基于流式数据的局部性非聚簇索引方法,如图9A-9C所示为该方法的流程图,其中包括:
实时更新步骤S1,实时更新哈希索引表中针对所接收到的每条流式数据而产生的索引记录,该索引记录记载了该流式数据中出现的索引键、该索引键首次出现时所对应的主键以及从首次出现到当前最末次出现所覆盖的数据个数;
写入步骤S2,当达到触发条件时,将该哈希索引表中的该索引记录写入索引表中,继续执行该实时更新步骤。
查询步骤S3,在该哈希索引表以及该索引表中分别找到索引键为待查询的索引值的全部索引记录,根据所找到的索引记录中所记载的主键,在流式数据中确认查询起点,根据索引记录中所记载的数据个数,确定查询终点,从该查询起点到查询终点所覆盖的数据中,过滤掉索引键与该索引值不符的数据。
更新步骤S3’,当需要对索引表中的索引记录进行更新,将原始索引键修改为目标索引键时,在索引表中利用该目标索引键进行查询,得到目标扫描窗口,判断该原始索引键所对应的主键是否被覆盖于该目标扫描窗口,如果是,直接将所述索引记录中的原始索引键修改为目标索引键,如果否,在索引表中增加一条索引记录,索引键为该目标索引键,主键为该原始索引键所对应的主键,数据个数为1。
通过使用本发明的方法,实现了如下技术成效:
1、极大地缩小了索引表的空间及构建索引表所产生的带宽开销。
2、该索引方法将随机访问与顺序扫描结合起来,有效地利用了流式数据的时间局部特性,更符合存储介质的访问模型,提高了索引数据查询的效率。
3、利用哈希表池和索引写入队列实现了异步聚合索引写入,减缓了流式数据索引的写入压力,增加了系统的吞吐量。
上述描述仅用于对本发明的实现过程提出详细的描述,任何明显的变形方案仍属于本发明的公开范围,具体保护范围需参照后续的权利要求书所界定者为准。
Claims (16)
1.一种基于流式数据的局部性非聚簇索引方法,其特征在于,包括:
实时更新步骤,实时更新哈希索引表中针对所接收到的每条流式数据而产生的索引记录,该索引记录记载了该流式数据中出现的索引键、该索引键首次出现时所对应的主键以及从首次出现到当前最末次出现所覆盖的数据个数;
写入步骤,当达到触发条件时,将该哈希索引表中的该索引记录写入索引表中,继续执行该实时更新步骤。
2.如权利要求1所述的方法,其特征在于,该方法还包括一查询步骤,在该哈希索引表以及该索引表中分别找到索引键为待查询的索引值的全部索引记录,根据所找到的索引记录中所记载的主键,在流式数据的数据表中确认查询起点,根据索引记录中所记载的数据个数,确定查询终点,从该查询起点到查询终点所覆盖的数据中,过滤掉索引键与该索引值不符的数据。
3.如权利要求2所述的方法,其特征在于,该触发条件包括预设的触发计数以及预设的触发时长;
如果该哈希索引表中任一索引键所对应的该数据个数达到该触发计数,将该哈希索引表中该索引键所对应的索引记录写入该索引表中;
在达到该触发时长时,执行该写入步骤,将该哈希索引表中所有索引记录写入该索引表中。
4.如权利要求3所述的方法,其特征在于,该写入步骤后还包括维护索引一致性步骤,每次以达到该预设的触发时长而触发该写入步骤时,存储当前最后一条数据的主键,当发生系统重启时,从该主键所对应的数据开始,重新执行该实时更新步骤。
5.如权利要求4所述的方法,其特征在于,在该维护索引一致性步骤之后执行该查询步骤时,还包括:过滤主键相同的索引记录。
6.如权利要求1所述的方法,其特征在于,可以分别利用不同的哈希索引表执行该实时更新步骤,但任一时刻仅一个哈希索引表可以执行该实时更新步骤。
7.如权利要求6所述的方法,其特征在于,当达到触发条件时,将该哈希索引表中的索引记录送入一索引写队列,以排队等待写入该索引表。
8.如权利要求1所述的方法,其特征在于,还包括:当需要对索引表中的索引记录进行更新,将原始索引键修改为目标索引键时,在索引表中利用该目标索引键进行查询,得到目标扫描窗口,判断该原始索引键所对应的主键是否被覆盖于该目标扫描窗口,如果是,直接将所述索引记录中的原始索引键修改为目标索引键,如果否,在索引表中增加一条索引记录,索引键为该目标索引键,主键为该原始索引键所对应的主键,数据个数为1。
9.一种基于流式数据的局部性非聚簇索引系统,其特征在于,包括:
实时更新单元,用于实时更新哈希索引表中针对所接收到的每条流式数据而产生的索引记录,该索引记录记载了该流式数据中出现的索引键、该索引键首次出现时所对应的主键以及从首次出现到当前最末次出现所覆盖的数据个数;
写入单元,用于当达到触发条件时,将该哈希索引表中的该索引记录写入索引表中,继续执行该实时更新步骤。
10.如权利要求9所述的系统,其特征在于,该系统还包括一查询单元,用于在该哈希索引表以及该索引表中分别找到索引键为待查询的索引值的全部索引记录,根据所找到的索引记录中所记载的主键,在流式数据的数据表中确认查询起点,根据索引记录中所记载的数据个数,确定查询终点,从该查询起点到查询终点所覆盖的数据中,过滤掉索引键与该索引值不符的数据。
11.如权利要求10所述的系统,其特征在于,该触发条件包括预设的触发计数以及预设的触发时长;
如果该哈希索引表中任一索引键所对应的该数据个数达到该触发计数,该写入单元将该哈希索引表中该索引键所对应的索引记录写入该索引表中;
在达到该触发时长时,该写入单元将该哈希索引表中所有索引记录写入该索引表中。
12.如权利要求11所述的系统,其特征在于,还包括维护索引一致性单元,用于在每次以达到该预设的触发时长而调用该写入单元时,存储当前最后一条数据的主键,当发生系统重启时,从该主键所对应的数据开始,重新调用该实时更新单元。
13.如权利要求12所述的系统,其特征在于,还包括维护查询一致性单元,用于过滤主键相同的索引记录。
14.如权利要求9所述的系统,其特征在于,该实时更新单元可以分别利用不同的哈希索引表,但任一时刻仅能利用一个哈希索引表。
15.如权利要求14所述的系统,其特征在于,当达到触发条件时,该写入单元将该哈希索引表中的索引记录送入一索引写队列,以排队等待写入该索引表。
16.如权利要求9所述的系统,其特征在于,还包括更新单元,用于当需要对索引表中的索引记录进行更新,将原始索引键修改为目标索引键时,在索引表中利用该目标索引键进行查询,得到目标扫描窗口,判断该原始索引键所对应的主键是否被覆盖于该目标扫描窗口,如果是,直接将所述索引记录中的原始索引键修改为目标索引键,如果否,在索引表中增加一条索引记录,索引键为该目标索引键,主键为该原始索引键所对应的主键,数据个数为1。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510641703.7A CN105335475B (zh) | 2015-09-30 | 2015-09-30 | 一种基于流式数据的局部性非聚簇索引方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510641703.7A CN105335475B (zh) | 2015-09-30 | 2015-09-30 | 一种基于流式数据的局部性非聚簇索引方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105335475A true CN105335475A (zh) | 2016-02-17 |
CN105335475B CN105335475B (zh) | 2018-07-10 |
Family
ID=55286002
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510641703.7A Active CN105335475B (zh) | 2015-09-30 | 2015-09-30 | 一种基于流式数据的局部性非聚簇索引方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105335475B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110069504A (zh) * | 2017-09-11 | 2019-07-30 | 阿里巴巴集团控股有限公司 | 一种数据操作方法及设备 |
CN114666237A (zh) * | 2022-02-25 | 2022-06-24 | 众安在线财产保险股份有限公司 | 秒级监控方法、装置及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101324898A (zh) * | 2008-08-05 | 2008-12-17 | 北京蓝色星际软件技术发展有限公司 | 一种基于文件属性的快速检索、恢复方法 |
CN101344893A (zh) * | 2008-07-17 | 2009-01-14 | 中兴通讯股份有限公司 | 一种历史数据的存取方法和装置 |
CN102375852A (zh) * | 2010-08-24 | 2012-03-14 | 中国移动通信集团公司 | 建立数据索引的方法、利用该索引查询数据的方法和系统 |
CN102521304A (zh) * | 2011-11-30 | 2012-06-27 | 北京人大金仓信息技术股份有限公司 | 基于哈希的聚簇表存储方法 |
US9141653B2 (en) * | 2012-11-02 | 2015-09-22 | Accenture Global Services Limited | Real-time data management for a power grid |
-
2015
- 2015-09-30 CN CN201510641703.7A patent/CN105335475B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101344893A (zh) * | 2008-07-17 | 2009-01-14 | 中兴通讯股份有限公司 | 一种历史数据的存取方法和装置 |
CN101324898A (zh) * | 2008-08-05 | 2008-12-17 | 北京蓝色星际软件技术发展有限公司 | 一种基于文件属性的快速检索、恢复方法 |
CN102375852A (zh) * | 2010-08-24 | 2012-03-14 | 中国移动通信集团公司 | 建立数据索引的方法、利用该索引查询数据的方法和系统 |
CN102521304A (zh) * | 2011-11-30 | 2012-06-27 | 北京人大金仓信息技术股份有限公司 | 基于哈希的聚簇表存储方法 |
US9141653B2 (en) * | 2012-11-02 | 2015-09-22 | Accenture Global Services Limited | Real-time data management for a power grid |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110069504A (zh) * | 2017-09-11 | 2019-07-30 | 阿里巴巴集团控股有限公司 | 一种数据操作方法及设备 |
CN110069504B (zh) * | 2017-09-11 | 2023-07-11 | 阿里巴巴集团控股有限公司 | 一种数据操作方法及设备 |
CN114666237A (zh) * | 2022-02-25 | 2022-06-24 | 众安在线财产保险股份有限公司 | 秒级监控方法、装置及存储介质 |
CN114666237B (zh) * | 2022-02-25 | 2023-10-31 | 众安在线财产保险股份有限公司 | 秒级监控方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105335475B (zh) | 2018-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102392944B1 (ko) | 데이터 백업 방법, 저장 매체 및 컴퓨팅 기기 | |
US8874515B2 (en) | Low level object version tracking using non-volatile memory write generations | |
CN105630863B (zh) | 用于多版本并发提交状态的事务控制块 | |
CN106462592B (zh) | 优化对索引的多版本支持的系统和方法 | |
US8140495B2 (en) | Asynchronous database index maintenance | |
US9881041B2 (en) | Multiple RID spaces in a delta-store-based database to support long running transactions | |
US9262458B2 (en) | Method and system for dynamically partitioning very large database indices on write-once tables | |
CN110704463B (zh) | 常用数据的本地缓存方法、装置、计算机设备及存储介质 | |
CN105556520A (zh) | 在存储器中镜像盘中的数据以提高查询性能 | |
CN111309720A (zh) | 时序数据的存储、读取方法、装置、电子设备及存储介质 | |
KR102038529B1 (ko) | 인-메모리 데이터베이스의 실시간 데이터 변경 처리 시스템 | |
CN105956068A (zh) | 基于分布式数据库的网页url去重方法 | |
CN110825752A (zh) | 基于无碎片回收的数据库多版本并发控制系统 | |
CN105335475A (zh) | 一种基于流式数据的局部性非聚簇索引方法及系统 | |
CN103778064A (zh) | 一种数据管理方法及装置 | |
CN111026783A (zh) | 一种防卡死的数据存储方法、系统及装置 | |
CN103177026A (zh) | 数据管理方法和数据管理系统 | |
CN113190281B (zh) | 一种基于rowid区间的初始化装载方法与装置 | |
CN115469810A (zh) | 一种数据获取方法、装置、设备及存储介质 | |
CN114691307A (zh) | 事务处理方法及计算机系统 | |
CN114385753B (zh) | 基于数据页预加载的数据库数据同步方法及设备 | |
US10303680B2 (en) | Data processing apparatus and data processing method | |
CN116010430B (zh) | 数据恢复方法、数据库系统、计算机设备和存储介质 | |
US20240320203A1 (en) | Method for data processing, database system, computer equipment, and storage medium | |
CN113051274B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |