CN103810223B - 一种基于数据分组的内存数据组织查询方法 - Google Patents
一种基于数据分组的内存数据组织查询方法 Download PDFInfo
- Publication number
- CN103810223B CN103810223B CN201210461154.1A CN201210461154A CN103810223B CN 103810223 B CN103810223 B CN 103810223B CN 201210461154 A CN201210461154 A CN 201210461154A CN 103810223 B CN103810223 B CN 103810223B
- Authority
- CN
- China
- Prior art keywords
- packet
- data
- thread
- query
- inquiry
- 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.)
- Active
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/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Probability & Statistics with Applications (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Fuzzy Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开一种基于数据分组的内存数据组织查询方法,其步骤包括:将数据分成多个分组,在每个分组设立独立的插入任务队列、插入线程和查询线程;分组选择线程为待插入数据选择一个分组并将该数据插入到该分组的插入任务队列中;每个插入线程轮询其所属分组的插入任务队列,并将其中数据插入到该分组中;查询任务分发线程将查询任务分发给各分组的查询线程,各查询线程进行分组内部的数据查询并将查询结果反馈至查询任务分发线程;查询任务分发线程对各分组的查询结果进行汇总。本发明既能保证批量数据的快速的插入,又能有保证范围查询的快速的结果反馈,有效地提高了数据库系统的数据查询性能。
Description
技术领域
本发明涉及信息处理技术领域,尤其涉及到数据库管理系统内存数据的组织与查询方法。该方法可以使用于任何关系数据库使用的数据管理领域,尤其是范围查询比较多的数据分析领域。
背景技术
在数据库的应用领域,数据的查询性能是数据库最重要的指标之一。为了提高数据库的查询性能,许多数据的组织管理方法被提出,如hash、B+树、CSB+树等索引结构。这些方法,旨在提高数据的查询的性能。
近年来,随着应用的发展,数据的分析应用越来越多。如在金融领域,分析交易趋势以及统计交易量;在制造业,统计加工量、加工效率;在车辆监控领域,统计某个时间区段的车辆流量等。这些应用中,范围查询是最重要的查询类型之一。在数据的管理查询中,范围查询在数据的分析应用领域占有重要的作用。如,给定一个时间区段,查询该时间段内的交易量或给定一个地区,查询该区域内的交易总量等,都是金融领域里面重要的范围查询。
和精确查询不同,范围查询除了搜索到对应范围需要消耗时间之外,对结果的遍历获取也同样需要大量的时间消耗,尤其是当查询结果比较大的时候,结果获取所需要的时间甚至要大于范围搜索所需要的时间。传统的数据管理方法中的查询优化,往往是针对搜索过程中的性能的优化,而忽略了结果集获取的优化,因此,对范围查询的性能的提高有限。
同时,随着硬件的发展,现代的多核处理器、GPU等提供了更多的并行处理的能力,因此使得在进行数据管理以及更新、查询处理的时候,可以通过更多的并行化来提高处理的性能。
本发明将面向数据的内存管理,尤其是分析应用领域中的范围查询的数据的管理,并利用现代处理器高并行处理能力的特点,提出了基于数据分组的内存数据组织和查询优化方法,并在此基础之上,给出了改数据管理方法的并行的数据插入方法和并行的数据查询方法,从而提高数据查询、尤其是范围查询的性能。
发明内容
传统的内存数据的管理和查询优化方法,主要是针对精确查找的查找过程的优化,而范围查找除了查找过程中的消耗之外,结果的遍历获取过程也是范围查找的重要消耗之一。为此,本发明方案利用现代处理器高并发的特点,面向数据分析应用领域中的范围查询,提出了一种基于数据分组的内存数据组织和查询优化方法,通过提高查询过程中的并行度,有效地提高了范围查询的性能。
为实现上述目的,本发明采用如下技术方案:
一种基于数据分组的内存数据组织查询方法,其特征在于:
1)将数据分成多个具有互相独立的数据组织结构的分组,在每个分组设立独立的插入任务队列、插入线程和查询线程;
2)通过分组选择线程为待插入数据选择一个分组,并将该数据插入到该分组的插入任务队列中;
3)每个插入线程轮询其所属分组的插入任务队列,并将插入任务队列中存在的数据插入到该所属分组内部的数据组织结构中;
4)通过查询任务分发线程将查询任务分发给各分组的查询线程,各查询线程根据其所属分组内部的数据组织结构进行分组内部的数据查询;
5)将各分组的查询结果返回至查询客户端。
进一步地,步骤2)采用基本分组选择的方式,或者采用基本分组选择和轮询相结合的动态分组选择方法。所述基本分组选择的方式可以是按照顺序选择数据分组、随机选择数据分组、根据待插入的值对分组数目进行取余选择分组等。为了防止过度的分组轮询导致系统繁忙,可以为轮询的循环次数限定一阈值,比如设为100次,若达到阈值次数的轮询之后未选择到分组,则分组选择线程进入等待状态,直到初始选择分组的任务队列有空闲。。
进一步地,每个分组可以根据需求创建独立的分组内部的数据组织结构,如hash、B+树等,所有已有的索引结构都可以用作分组内部的数据组织结构。每个分组的数据组织结构相同或者不同。
进一步地,为每一个分组的查询线程设置独立的结果集缓存,分组完成内部的查找并返回结果后,由分组的查询线程直接将对应的缓存输出返回给查询客户端。
本发明具有的优点和有益效果如下:
1、通过并行处理批量连续的数据插入操作,能够有效的提高数据插入的性能;动态的分组选择算法,平衡了各个分组数据之间实际的处理负荷,进一步提高了批量插入的性能;
2、通过数据分组,减少了每个分组内部的数据,提高了分组处理的性能,同时,通过并行的分组查询线程,能够有效地减少整体查询的时间,提高查询性能;
3、在每个分组中,分组内部的数据组织相互独立,同时分组内部的数据组织可以进一步根据应用需求采用已有的数据组织管理和查询优化技术,可以很好的继承已有的技术。
附图说明
图1为本发明的基于数据分组的内存数据组织查询方法的流程图。
图2为实施例中动态的分组选择方法流程图。
图3为实施例中并行的批量数据插入的流程图。
图4为实施例中并行的范围查询的流程图。
具体实施方案
下面通过具体实施例,并配合附图,对本发明做详细的说明。
本发明提出的基于数据分组的内存数据组织查询优化方法,其总体流程如图1所示,具体说明如下:
首先,所有的数据被分成不同的数据分组,每个分组建立独立的分组数据组织结构,数据组织结构可以是hash、B+树等常用的经典的内存数据结构。每个分组拥有自己独立的插入线程、分组选择线程和插入任务队列。
如图3所示,当有一个新的数据要进入系统,分组选择线程为该数据选择一个唯一的分组。分组的确定可以根据不同的情况选择不同的方法:如按照顺序选择数据分组、随机选择数据分组、或者根据要插入的值对分组数目进行取余选择分组等方法。
当分组选择线程为数据选择确定的分组之后,将该数据插入到分组对应的插入任务队列中,即图1中的“插入缓冲区”中,其中V1_1~Vn_n表示各插入缓冲区的数据。插入任务队列是一个以该分组待插入值构成的队列。
每个分组的分组插入线程轮询分组对应的插入任务队列,当发现插入任务队列不为空的时候,即存在待插入的值时,由分组插入线程根据每个分组内部实际的数据组织结构将数据插入到对应分组内部的数据组织结构中。
当批量连续的数据进入系统中,由于不同分组处理速度不同,可能导致有的分组可能处于空闲状态,有的分组则出于繁忙的状态。为了提高批量插入时的性能,本发明还进一步提出了动态的分组选择方法。
如图2所示,动态的分组选择方法采用基本分组选择和轮询相结合的方式。在动态的分组选择方法中,当有新的值要进入系统,先根据基本的分组选择方法(顺序选择、随机选择等)为该值选择初始的分组,如果初始的分组插入任务队列有空闲,则直接将该值插入到该分组的任务队列中,结束分组选择。如果初始的分组插入任务队列无空闲,则进入轮询状态。轮询从初始选择的分组的开始,顺序判断每个分组的任务队列是否有空闲,直到找到一个任务队列有空闲的分组,将待插入的值插入到该分组的任务队列中,完成分组选择。为了防止过度的分组轮询导致系统繁忙,为轮询的循环次数限定了一个阈值(如100),在进行了达到阈值次数的轮询之后还没有选择到分组,则分组选择线程进入等待状态,直到初始选择的分组的任务队列有空闲后,将待插入的值插入到初始分组的任务队列中,完成分组选择。
图3为并行的批量数据插入的整体流程图。其中图3(a)为分组选择线程进行动态分组的流程图;图3(b)为插入线程进行分组内部的数据插入的流程图。如图3(a)所示,首先,根据动态的分组选择方法为待插入的值选择一个分组,然后分组选择线程进入等待状态等待分配下一个待插入的值。如图3(b)所示,首先,分组插入线程轮询分组插入队列,当分组插入队列存在待插入的值,则分组插入线程进行分组内部的插入操作,然后再度轮询插入队列,直到有新的待插入的值。
本发明提出的数据组织及查询优化方法还创建独立的查询任务分发线程。如图4所示,当有新的查询,查询任务的分发线程将查询任务分发给所有分组的查询线程。同时查询任务分发线程进入等待状态。分组的查询线程获取到查询任务分发线程发送的查询之后,根据每个分组内部的数据组织结构进行各自分组内部的数据的查询,当分组查询线程完成当前分组的查询之后,将结果反馈给查询任务分发线程,同时分组查询线程进入等待状态,等待新的查询的到来。当所有分组的分组线程都完成本分组的查询之后,各分组将查询结果直接反馈至查询客户端(这样可以有更高的查询效率),也可以通过查询任务分发线程汇总各分组的查询结果并返回至查询客户端。
下面提供一个具体应用实例。本实例以要管理的数据为1-1000000之间的数据、分组内部的数据组织管理结构为B+树,分组的数目为4为例子,介绍本发明提出的基于数据分组的内存数据组织管理方法的具体实施方案。
在系统初始化的时候,为每个分组创建一个空的B+树结构、数据插入线程和数据查询线程,每个数据创建一个插入任务队列。插入任务队列是一个长度为n的循环队列,在本实施方案中n取10,每个位置进行1-10的编号,每个队列维护队列头head和队列尾tail的编号,head表示第一个需要进行插入的值,tail表示第一个可以插入新的插入值的位置,当head和tail相等时,表示队列为空,初始head和tail的编号均为1。同时创建独立的分组选择线程和查询任务分发线程。每个分组按1-4进行编号。
当有输入要进入系统,如值1。分组选择线程按照动态的分组选择方法为分组进行选择分组。初始分组的选择方法选择按值取模加1。则值1根据分组数4取模加1得到的结果是2,因此,值1的初始分组为2。此时,由于分组2的插入任务队列为空,则直接将该值插入到tail指示的位置1中,然后将tail的序号设置为tail+1,即2。
分组的插入线程轮询对应分组的插入任务队列,判断head和tail的值,当head和tail不一致时,则从队列的head位置中取出对应的值进行处理,同时将head值设置为head+1。在1被插入之后,分组2的插入线程则从1的位置取出待插入的值1,并将head值设置为2,之后进行分组内部数据的B+树的值的插入的操作。
在插入队列中,为了区分空队列和满队列,在队列使用过程中预留一个空闲的位置,即当(tail+1)%10=head时,就表示队列已满。对于n=10的队列,最多智能存放9个待插入的值。
当有输入如1000要进入系统时,先计算的1000的初始选择的分组为1000%4+1=1,即初始分组为分组1,如果此时分组的状态为head为1,tail为10时,表示分组1对应的任务队列已经没有空闲。此时,分组选择线程,进入轮询状态。分组选择线程按顺序循环判断分组2、分组3、分组4、分组1、分组2....分组4的状态,假若发现分组3的状态为head为3,tail为9,则表示分组3有空闲,则将1000加入到分组3任务队列中编号为9的位置,tail设置为10。
重复上述过程,直到所有的数据都被加入到系统的分组中。
在查询的操作中,如需要查询[10,1000]范围的数据,则查询任务分发线程将该查询任务发送给4个分组各自的查询线程,然后进入等待状态。每个查询线程在各自分组的B+树中按照B+树查询的方法,先查找到10所对应的位置,然后遍历B+树的叶节点获取所有在范围[10,1000]中的结果。
在实施过程中,为了减少数据合并或者对同一缓存空间的互斥的延迟,为每一个分组的查询线程设置独立的结果集缓存,当分组完成内部的查找并返回结果,由分组的查询线程直接将对应的缓存输出返回给进行查询的客户端。即客户端程序将查询传递给查询任务分发线程,任务分发线程将任务分发给分组查询线程,每个分组查询线程直接返回当前分组的查询结果由客户端(查询提供程序)使用。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
Claims (10)
1.一种基于数据分组的内存数据组织查询方法,其步骤包括:
1)将数据分成多个具有互相独立的数据组织结构的分组,在每个分组设立独立的插入任务队列、插入线程和查询线程;
2)通过分组选择线程为待插入数据选择一个分组,并将该数据插入到该分组的插入任务队列中;
3)每个插入线程轮询其所属分组的插入任务队列,并将插入任务队列中存在的数据插入到该所属分组内部的数据组织结构中;
4)通过查询任务分发线程将查询任务分发给各分组的查询线程,各查询线程根据其所属分组内部的数据组织结构进行分组内部的数据查询;
5)将各分组的查询结果返回至查询客户端。
2.如权利要求1所述的方法,其特征在于,步骤2)采用基本分组选择方法,包括如下方式:按照顺序选择数据分组、随机选择数据分组、根据待插入的值对分组数目进行取模选择分组。
3.如权利要求1所述的方法,其特征在于:步骤2)采用基本分组选择和轮询相结合的动态分组选择方法处理批量数据的插入。
4.如权利要求3所述的方法,其特征在于:在轮询之前根据所述基本的分组选择方法选择初始分组,如果初始分组的插入任务队列有空闲,则直接将待插入数据插入到该插入任务队列中,并结束分组选择;如果初始分组的插入任务队列无空闲,则进入轮询状态。
5.如权利要求4所述的方法,其特征在于:为所述轮询的循环次数限定一阈值,若达到阈值次数的轮询之后未选择到分组,则分组选择线程进入等待状态,直到初始选择分组的插入任务队列有空闲。
6.如权利要求5所述的方法,其特征在于:所述阈值为100次。
7.如权利要求1至5中任一项所述的方法,其特征在于:每个分组根据需求创建独立的内部的数据组织结构,每个分组的数据组织结构相同或者不同。
8.如权利要求7所述的方法,其特征在于,所述数据组织结构的种类包括:hash、B+树。
9.如权利要求1至5中任一项所述的方法,其特征在于:步骤5)中各分组的查询结果直接返回至所述查询客户端,或者通过查询任务分发线程汇总各分组的查询结果,然后返回至查询客户端。
10.如权利要求9所述的方法,其特征在于:为每一个分组的查询线程设置独立的结果集缓存,分组完成内部的查找并返回结果后,由分组的查询线程直接将对应的缓存输出返回给查询客户端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210461154.1A CN103810223B (zh) | 2012-11-15 | 2012-11-15 | 一种基于数据分组的内存数据组织查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210461154.1A CN103810223B (zh) | 2012-11-15 | 2012-11-15 | 一种基于数据分组的内存数据组织查询方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103810223A CN103810223A (zh) | 2014-05-21 |
CN103810223B true CN103810223B (zh) | 2017-03-01 |
Family
ID=50707006
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210461154.1A Active CN103810223B (zh) | 2012-11-15 | 2012-11-15 | 一种基于数据分组的内存数据组织查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103810223B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106021399B (zh) * | 2016-05-12 | 2019-12-06 | 网易(杭州)网络有限公司 | 查询请求消息的处理方法及装置 |
CN106227782A (zh) * | 2016-07-15 | 2016-12-14 | 广东亿迅科技有限公司 | 一种基于多数据源插入到数据库的方法 |
CN108172268A (zh) * | 2017-12-27 | 2018-06-15 | 苏州麦迪斯顿医疗科技股份有限公司 | 一种批量数据处理方法、装置、终端和存储介质 |
CN108595251B (zh) * | 2018-05-10 | 2022-11-22 | 腾讯科技(深圳)有限公司 | 动态图更新方法、装置、存储引擎接口和程序介质 |
CN111581206B (zh) * | 2019-03-15 | 2021-06-15 | 北京忆芯科技有限公司 | B+树操作装置及其方法 |
CN110942046B (zh) * | 2019-12-05 | 2023-04-07 | 腾讯云计算(北京)有限责任公司 | 图像检索方法、装置、设备及存储介质 |
CN113177826A (zh) * | 2021-05-20 | 2021-07-27 | 青岛海信智慧生活科技股份有限公司 | 一种批量配置商品与小区的方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004019178A2 (en) * | 2002-08-23 | 2004-03-04 | Bae Systems Information And Electronic Systems Integration Inc. | Method and system for collating data in a distributed computer network |
CN1993674A (zh) * | 2004-03-31 | 2007-07-04 | 科威尔公司 | 多芯架构中的资源管理 |
CN101388844A (zh) * | 2008-11-07 | 2009-03-18 | 东软集团股份有限公司 | 一种数据流程的处理方法和系统 |
CN101771627A (zh) * | 2009-01-05 | 2010-07-07 | 武汉烽火网络有限责任公司 | 互联网实时深度包解析和控制节点设备和方法 |
CN102779058A (zh) * | 2012-06-28 | 2012-11-14 | 用友软件股份有限公司 | 界面数据加载装置和界面数据加载方法 |
-
2012
- 2012-11-15 CN CN201210461154.1A patent/CN103810223B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004019178A2 (en) * | 2002-08-23 | 2004-03-04 | Bae Systems Information And Electronic Systems Integration Inc. | Method and system for collating data in a distributed computer network |
CN1993674A (zh) * | 2004-03-31 | 2007-07-04 | 科威尔公司 | 多芯架构中的资源管理 |
CN101388844A (zh) * | 2008-11-07 | 2009-03-18 | 东软集团股份有限公司 | 一种数据流程的处理方法和系统 |
CN101771627A (zh) * | 2009-01-05 | 2010-07-07 | 武汉烽火网络有限责任公司 | 互联网实时深度包解析和控制节点设备和方法 |
CN102779058A (zh) * | 2012-06-28 | 2012-11-14 | 用友软件股份有限公司 | 界面数据加载装置和界面数据加载方法 |
Non-Patent Citations (2)
Title |
---|
《海量数据库系统高性能备份的研究与实现》;何平;《中国优秀硕士学位论文全文数据库信息科技辑》;20061115;全文 * |
多核处理器环境下内存数据库索引性能分析;郭超等;《计算机学报》;20100815;第33卷(第8期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN103810223A (zh) | 2014-05-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103810223B (zh) | 一种基于数据分组的内存数据组织查询方法 | |
CN103678520B (zh) | 一种基于云计算的多维区间查询方法及其系统 | |
US9152669B2 (en) | System and method for distributed SQL join processing in shared-nothing relational database clusters using stationary tables | |
CN103294831B (zh) | 列存储数据库中基于多维数组的分组聚集计算方法 | |
CN103345461B (zh) | 基于fpga的带有加速器的多核处理器片上网络系统 | |
CA3177212A1 (en) | Resource allocating method, device, computer equipment, and storage medium | |
US20120011144A1 (en) | Aggregation in parallel computation environments with shared memory | |
CN102722531B (zh) | 一种云环境中基于分片位图索引的查询方法 | |
RU2008138707A (ru) | Декларативная модель для управления параллельным выполнением легковесных потоков исполнения | |
CN105988876B (zh) | 内存分配方法及装置 | |
CN105808358B (zh) | 一种用于众核系统的数据相关性线程分组映射方法 | |
CN104133661A (zh) | 基于列存储的多核并行哈希分区优化方法 | |
CN103294531A (zh) | 一种任务分配方法及系统 | |
CN101916280A (zh) | 并行计算系统及按查询内容进行负载均衡的方法 | |
CN109388490A (zh) | 一种内存分配方法和服务器 | |
Liu et al. | Revisiting pipelined parallelism in multi-join query processing | |
CN105677447B (zh) | 分布式云中基于聚类的时延带宽极小化虚拟机部署方法 | |
CN102394809A (zh) | 一种多线程边界网关协议并行处理方法 | |
CN104834505A (zh) | 一种多核多线程环境下numa感知的同步方法 | |
CN104778077A (zh) | 基于随机和连续磁盘访问的高速核外图处理方法及系统 | |
CN105701128B (zh) | 一种查询语句的优化方法和装置 | |
CN105975345A (zh) | 一种基于分布式内存的视频帧数据动态均衡存储管理方法 | |
CN106909624B (zh) | 一种海量数据实时排序优化方法 | |
CN106201917A (zh) | 一种数据处理系统和方法 | |
Maas et al. | Buzzard: A numa-aware in-memory indexing system |
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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210121 Address after: 209, 2 / F, Lianchuang building, 2 Dongbeiwang Road, Haidian District, Beijing Patentee after: Anjie Zhongke (Beijing) data Technology Co.,Ltd. Address before: 100190 No. four, 4 South Street, Haidian District, Beijing, Zhongguancun Patentee before: Institute of Software, Chinese Academy of Sciences |
|
TR01 | Transfer of patent right |