CN103678609A - 一种基于分布式关系-对象映射处理的大数据查询的方法 - Google Patents
一种基于分布式关系-对象映射处理的大数据查询的方法 Download PDFInfo
- Publication number
- CN103678609A CN103678609A CN201310690335.6A CN201310690335A CN103678609A CN 103678609 A CN103678609 A CN 103678609A CN 201310690335 A CN201310690335 A CN 201310690335A CN 103678609 A CN103678609 A CN 103678609A
- Authority
- CN
- China
- Prior art keywords
- session
- node
- inquiry request
- data
- thread
- 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
Images
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
-
- 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/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Abstract
本发明公开了一种基于分布式关系-对象映射处理的大数据查询的方法。本方法为:1)选取m个数据处理节点,对每一数据处理节点构建一Hibernate Session对象,得到一分布式Hibernate架构,并生成一Session资源队列;2)设置一配置文件,设置每一类型表对应的存储策略和路由策略;将数据量较小S表在每一数据处理节点备份,将数据量较大L表分块存储到m个数据处理节点;3)对输入的查询请求进行解析,根据查询请求的类别选择对应的处理器;4)所选处理器根据该查询请求和对应的路由策略,从资源队列中选择对应的节点对该查询请求进行处理,并对处理结果进行规约。本发明显著提高对大数据表的查询速率。
Description
技术领域
本发明涉及一种大数据存储和查询的方法,尤其涉及一种使用分布式Hibernate架构处理大数据存储和查询的方法,属于网络技术领域。
技术背景
进人新世纪以来,随着网络的发展和普及,应用产生和需要处理的数据量越来越大,以Google每天处理的数据为例,2004年其每天需要处理100TB的数据(Jeffrey Dean and SanjayGhemawat.MapReduce:Simplified data processing on large clusters.In Proceedings of the6thSymposium on Operating System Design and Implementation(OSDI2004),137-150,2004),到2008年其每日数据量就达到了20PB(Jeffrey Dean and Sanjay Ghemawat.MapReduce:Simplified dataprocessing on large clusters.Communications of the ACM,51(1):107-113,2008),由此可知,随着数据的爆炸式增长,现在数据库系统的工作负载日益增大。因此并行处理是处理海量数据的必由之路。
Hibernate是Java开发者常用的关系-对象映射框架,它可以方便的把关系型数据库中的数据映射到Java对象上,通过Hibernate Session会话对象,开发者就可以以对象的方式操作数据并获得查询结果。目前很多Java项目,都以Hibernate作为其底层的数据处理层,来对数据库进行处理。
Hibernate是针对单数据库而设定的开发工具,在单数据机器节点上,当一个表的数据量增大到千万级别时,数据的查询处理时间就变得比较耗时,虽然采用数据库分区、增加索引的手段,可以将数据分散到多个文件中进行存储,通过索引文件加快查询速度,从而一定程度上解决这个问题,但是这种解决方案有两个缺点:
(1)当数据库的数据量增大到一定的数量级后,会超过单个数据库处理能力的极限,从而导致数据存储无法实现。
(2)当以非索引字段或者非分区字段来对数据进行查询时,数据库仍要检索所有分区文件中的数据,才能得到查询结果,查询速度又将变得很慢。
采用分布式的方式来改进Hibernate,使用Hibernate Session并行化的查询一个分布式的数据库系统,是使用Hibernate处理大数据量数据计算的一种可行的解决思路,虽然Apache社区推出了Hibernate Shard插件,通过使用数据划分接口来对数据进行分割从而将一个大的数据集分别存储在多个数据节点上,并解决了简单的Select查询、Update查询等问题,但是,由于Shard项目在处理查询时,默认是经过会话选择策略串行的处理数据节点查询,所以当处理Order by、Join时,效率很低,而且由于默认会话选择策略在处理Sum和Avg时只选择一个Session,所以处理结果只能代表单表节点的处理结果,不是所有节点的结果总集合,因此Shard项目在实际使用中仍然面对很多问题。
发明内容
针对大数据在关系型数据库中的分布式存储、查询问题,本发明的目的在于提供一种基于Hibernate-Session分布式处理的解决方法。本发明使用分布式管理Hibernate Session的方法,提出了一种分布式Hibernate架构、根据Hadoop的MapReduce的思路:将大数据集分散到多个处理节点、然后再对处理节点的结果集进行归约(Tom White.Hadoop:The Definitive Guide,30-31,2011),提出了Order by、Join等复杂查询在该分布式Hibernate架构下的解决方案。
本发明的技术方案为:
一种基于分布式关系-对象映射处理的大数据查询的方法,其步骤为:
1)选取m个数据处理节点,针对每一数据处理节点构建一Hibernate Session节点,得到一分布式Hibernate架构,并生成一Session资源队列;
2)在所述分布式Hibernate架构中设置一配置文件,所述配置文件包括表类型属性,以及每一类型表对应的存储策略和路由策略;其中,所述表类型属性包括S表和L表;将S表在每一所述数据处理节点备份,将L表分块存储到m个所述数据处理节点;L表为数据量大于或等于设定阈值的表,S表为数据量小于设定阈值的表;
3)所述分布式Hibernate架构对输入的查询请求进行解析,根据查询请求的类别选择对应的处理器;
4)所选处理器根据该查询请求和对应的路由策略,从所述Session资源队列中选择对应的Session节点对该查询请求进行处理,并对处理结果进行规约。
进一步的,所述配置文件包括表属性配置和划分策略配置;其中表属性配置为一Map集合,该集合中的元素以表名称TableName为Key,以L或者S为Value的键值对。
进一步的,如果所述查询请求的类别为插入或者更新语句,则Session选择器根据存储策略从所述Session资源队列获得目的Session,执行插入或者更新语句。
进一步的,如果所述查询请求的类别为选择语句且该查询请求中的表为S表,则Session选择器从所述Session资源队列中找到连接数最小的Session节点执行该查询请求。
进一步的,如果所述查询请求的类别为选择语句且该查询请求中的表为L表、且包含连接操作:
a)如果连接操作为S表与S表做连接查询,则Session选择器从所述Session资源队列中找到负载最小的Session节点执行该查询请求;
b)如果连接操作为S表与L表做连接查询,则Session选择器调用所述Session资源队列中全部可用的Session节点并行执行该查询请求;
c)如果连接操作为L表与L表做连接查询,则Session选择器调用所述Session资源队列中全部可用的n个Session节点,建立n个线程,每个线程分配一个Session节点;每个线程获取LL表在各个数据处理节点上的数据并规约得到LL表;然后各线程通过LL在各个数据节点执行LLxLR1、LLxLR2、…、LLxLRk…、LLxLRm,规约形成LLxLR;其中,LR表示连接操作右侧的L表,LL表示连接操作左侧的L表,LRk指LR表在数据处理节点k上的数据块,x表示连接符号。
进一步的,如果所述查询请求的类别为选择语句且该查询请求中的表为L表、不包含连接操作且包含排序操作,则Session选择器调用所述Session资源队列中全部可用的n个Session节点,建立n个线程,每个线程分配一个Session节点;每个线程调用自己的Hibernate Session对象执行该查询请求获得结果集,然后调用有序子段对结果集进行归并排序,获得最终有序目标序列。
进一步的,所述调用有序子段对结果集进行归并排序的方法为:
71)构建长度为h的目标队列targetList,其中h为需要得到的排序元素数;
72)在各数据处理节点上执行该查询请求所得有序子队列sonList1、sonList2、…、sonListn分配n个游标P1、P2、…、Pn,分别指向对应列表首元素;
73)比较sonList1[P1]、sonList2[P2]、…、sonListn[Pn],取其中的最小值或最大值sonList[Pi],将sonListi[Pi]放入目标队列第一个空位中,然后Pi指向sonListi的下一个位置;
74)判断targetList是否已存满,若没有存满则继续执行步骤73),否则排序结束。
进一步的,如果所述查询请求的类别为选择语句且该查询请求中的表为L表、不包含连接操作且不包含排序操作,则Session选择器调用所述Session资源队列中全部可用的n个Session节点,建立n个线程,每个线程分配一个Session节点;每个线程调用自己的HibernateSession对象执行该查询请求获得结果集,然后对结果集进行规约。
进一步的,所述分布式Hibernate架构中设置一监控系统,其每隔固定的时间对每个Session节点执行一条SQL语句,测试Session节点是否可用;同时记录可用Session节点的负载。
进一步的,采用Range划分方法或Hash划分方法,将L表分块存储到m个所述数据处理节点。
与简单的Map-Reduce数据处理流程不同,本发明通过预先设定不同的表属性(将表分为大数据表L和小数据表S),对不同数据量大小的表使用不同的分布式存储策略,进而使用分类思想,将查询处理分为不同的五类,分别进行不同的归约处理,除了实现传统的求和、取极值等归约处理之外,本发明还使用了改进的归并排序算法,有效的利用子序列的有序性,降低了排序的时间复杂度。同时本发明还在分布式架构下,实现了Join连接查询,并利用冗余存储,避免了S表在节点间传输引起资源开销,提高了查询效率,本方法的具体流程示意如图1所示。
Step1:架构初始化,Session资源池加载配置信息,对每个数据库节点构建HibernateSession,形成Session资源队列。配置信息主要作用是指定表属性(L表和S表、两种表的存储和查询策略不同)和L表的路由策略(用于根据列值确定某个元素所在的数据节点)。
Step2:用户输入SQL语句到语法分析器,由语法分析器进行语法分析,将查询分为5类。
Step3:Session操作器获取语法分析的结果,转发查询属性到Session选择器。
Step4:Session选择器根据查询分类以及配置文件的表属性和路由规则(Hash划分或者范围划分),使用5种不同的选择策略,从Session资源池获得Session队列。
Step5:操作器得到选择器的返回结果后,根据查询的不同类型,调用不同的查询处理器来操作Session队列,从而得到每个节点Session的输出:查询处理器调用不同的归约方法,对Session队列的结果进行归约得到一个结果集返回给用户,在处理器设计上,本发明主要针对Order By和Join做了算法优化,从而提高了查询的效率。
如图1所示,本方法基于4个构建的基本程序模块协调工作来完成对分布式关系型数据库的SQL语句处理,这4个基本模块的名称和功能分别是:
1、语法分析器:对用户输入的SQL语句进行语句的分析和查询属性的提取,得到查询的类型(select/insert/update等),将分析结果输入给Session操作器。
2、Session操作器:根据语法分析器的分析结果,调用Session选择器得到相应的分布式数据库的Hibernate Session,再通过操作原则调用相应的处理流程(具体后文介绍)来得到处理结果进行输出。
3、Session选择器:Session选择器是根据语法分析器得到的表名和查询属性,通过配置文件读取相应设置来获取Session列表。
4、Session资源池:资源池负责创建对每个单独的数据库节点创建Hibernate Session,通过工厂方法构建资源池队列,为选择器提供候选资源。
为了使选择器、操作器和资源池正常工作,还需要为它们提供配置文件,设置以下的预设信息:
预设信息1:每个表的L-S属性,其中L属性代表该表数据量超过千万,需要进行数据划分存储在各个数据库节点(在数据库系统中,数据节点即处理节点)上;S属性表示该表的数据量在单库处理能力下可以接受,数据无需进行横向划分处理,只需在各个分库中存储相同的表副本。
预设信息2:针对每个L属性的表,都需要为其指定相应的划分方法,该方法以划分表的列属性作为输入,以资源池中Session队列的标识游标作为输出。
与现有技术相比,本发明的优点:
(1)关系型数据的存储解决方案:通过对大数据量关系表的横向划分,解决大数量的关系型数据存储问题,通过分布式的表节点存储,即保证了总表的数据完整性和表结构在各个数据库节点的一致性,又保证了各个表节点的查询效率。
(2)对象化的管理:数据库分节点管理和操作使用Hibernate Session作为基础单元,以对象化的方式对数据库资源进行配置和调用,同时使用Hibernate Session来统一数据库节点的执行数据结果,以Java集合类来处理查询结果,为用户提供统一的结果类型。
(3)Map-Reduce思想处理大数据:基于Map-Reduce的编程思想来对数据库查询进行任务划分和结果归约,通过将大数据表划分成多个数据块分散到各个数据节点,并行的处理数据查询,可以显著提高对大数据表的查询速率,而且通过该过程通过语法分析器和Session操作器来分析执行,对用户透明,使得用户的数据层代码移植工作变得简单方便。
(4)灵活的接口模式:本法名的数据划分策略采用开放接口模式,除了传统的Range划分和Hash划分外,使用者还可以通过继承接口来实现特定的划分策略。此外,配置文件的表属性也由使用者进行预设,通过预设表属性来规定哪些表采用划分,哪些表不用划分,为以后并行查询操作提供策略依据。
附图说明
图1为本发明的方法流程示意图;
图2为Session资源池架构图;
图3语法分析器分类图;
图4StatisticParralledSessionProcessor执行流程图;
图5有序子段归并排序流程图;
图6LXS处理流程图;
图7LXL处理流程图。
具体实施方式
1、配置工作
在初次执行Hibernate加载之前,需要首先根据配置文件的配置信息初始化Session选择器,配置文件格式如下
配置文件主要存储两类配置信息:表属性配置和划分策略配置。其中表属性配置是一个Map集合,这个集合中的元素都是以表名称TableName为Key,以L或者S为Value的键值对,这个Map可以为Session选择器、语法分析器提供表属性的依据,L类型的表为大数据量的表,其数据是根据划分策略分块存储在各个数据节点上的,S类型的表为小数据量的表,表数据是在每个数据节点上都有完整备份的。
第二类配置信息主要是划分策略的实现类,这些实现类都继承一个接口:
List<int>partition(List<String>props){…}
参数说明:props是输入的列值
返回值说明:划分函数返回一个int的列表,每一个int都代表者一个Session在Session队列中的标识。
这个方法的作用是:根据各个表的列的值对表数据划分,也就是说,当Session选择器进行Session选择时,如果判断到要操作的表属性为L,则需要调用这些方法,根据查询语句提供的列值,来确定该查询语句需要在哪些分区(即哪个数据库节点)上执行。通常使用的分区方法有两种:Range划分和Hash划分。
Range划分时根据列的取值范围来返回分区号,如列值1到100的返回分区1,101到200返回分区2,在确定props的取值范围的情况下使用合理的Rang划分,可以方便数据的管理。
Hash划分则需要根据props构建一个Hash函数,从而根据列属性得到一个分区号,通常在数据分布平均的情况下,构建合理的Hash函数能够达到负载均衡且查询效率高的效果。
2、构建Session资源池
在设置好配置文件后,第二步工作就是建立Session资源池,Session资源池的作用是在各个分布式数据库节点上,使用Hibernate配置文件来生成Hibernte Session从而指定各个数据库的连接属性:对象映射、连接池管理等。再加载好这些配置后,资源池对外开放一个工厂方法List<Session>getListSessionFactory(),这个方法可以返回资源池中所有的Session列表给调用者。资源池的具体架构如图2。
由图2可见,Session资源池主要由三部分组成,除了上述的Hibernate配置部分和Session队列,另外一个组件就是监控系统,监控系统的原型是一个Java定时器,它的作用就每隔固定的时间对每个Session执行一条最原始的SQL语句,从而测试Session是否可用,如果语句没有得到响应,则系统发出警告。同时在Session可用的情况下将数据库的负载(当前会话数)记录下来,为Session选择器提供负载判断依据。
3、执行语法分析器
在配置好Session资源池后,就可以调用本系统进行SQL查询了,系统与用户的接口部分是语法分析器,当用户输入一条SQL语句时,语法分析器首先从语句中识别查询列属性、查询函数(avg、um等)和相应的查询表名(TableName),然后根据这些属性,调用分析规则将查询进行分类,具体的分类规则如图3所示,分类步骤如下:
(1)根据查询目的不同(Select或Update/Insert)将查询分为两类,Update/Insert语句使用A类处理策略。
(2)对Select语句(即选择操作),提取其From的表名称TableName,然后根据配置文件,获得表属性,根据所得到的表属性,将语句进行分类:不含L表的处理策略采用E,含有L表的处理进行下一步分类。
(3)对含有L表的查询来说,由于Join操作(即连接操作)比其他操作复杂很多,所以按照有无Join关键字,将查询分为两类:Join操作和非Join操作,其中Join操作使用策略D来处理。
(4)对非Join操作来说,根据是否涉及排序问题,将查询分为两种,涉及排序的(包含Orderby关键字)的处理,使用处理策略C;其他常用统计方法(如Sum/Count/Max/Min等)使用处理策略B。
总的来说,语法分析器的作用,就是通过上图的语法分类规则,把常用的SQL处理分为A、B、C、D、E五个种类,将查询属性(查询函数、表名、列属性)和查询类别(A、B、C、D、E)发送给Session操作器,为Session操作器对SQL查询的处理提供决策依据。
4、Session处理器对SQL查询进行分类处理
Session处理器主要由两部分组成:解析分发器和处理器,解析分发器的作用是接收语法分析器的处理请求,根据不同SQL语句类型,为SQL语句选择不同的处理器进行处理,具体的分类规则如下:
A类请求:采用SingleSessionProcessor处理器进行处理。
B类请求:采用StatisticParralledSessionProcessor处理器进行处理。
C类请求:采用SortParralledSessionProcessor处理器进行处理。
D类请求:采用JoinParralledSessionProcessor处理器进行处理。
E类请求:采用SmallTableSessionProcessor处理器进行处理
这些处理器所处理的Session对象可能是一个、也可能是多个,所执行的处理流程和使用归约算法也有所区别。具体来说:
SingleSessionProcessor处理的Session对象是根据查询属性从Session选择器根据划分函数得来的,也就是说,该处理器的操作对象是一个Session,这个Session由Session选择器提供,具体的Session由Session选择器部分说明。
StatisticParralledSessionProcessor和SortParralledSessionProcessor都是针对L表进行操作的处理器,由于L表的数据是分散存储在所有数据节点上的,所以这两个处理器的处理对象是系统内所有的Session。
JoinParralledSessionProcessor涉及到3种join情况,分别是SxS、SxL(以及LxS)、LxL(其中x表示连接操作)。对于SxS,Session选择器会提供负载最小的一个Session作为处理对象;对SxL和LxL,Session选择器会提供所有的Session作为处理对象。这里的SxS是指两个S类型的表做连接操作,也就是说,两个数据量较小的表做Join操作。
SSelectSessionProcessor是最简单Select情况、由于S表在所有的数据节点上都有完整的数据备份,Session选择器只需选择负载最小的数据库节点进行SQL处理即可。
在Session操作器对SQL查询分发到各个处理器之后,就需要各个处理器进行具体的查询处理了,这些处理器在运行具体计算之前,都需要经过Session选择器进行Session对象获取。
5、Session选择器选择Session
选择器首先拦截处理器的类型,然后根据类型规则进行不同的处理,类型规则如下:
SingleSessionProcessor:调用相应L表的划分函数,得到Session游标i,从Session列表中找出第i个Session作为返回。具体划分函数定义在配置文件中,本发明目前提供两种分区方法:
Range划分:该方法需要在配置文件中指定属性列l,l的最大值max(l)和最小值min(l),然后根据Session数n、对max到min之间进行平均划分,形成n个分区范围,根据输入的l值,就可以获取l所在的分区。
Hash划分:该方法需要在配置文件中指定Hash函数,函数的输入参数为列l的值,输出为游标i。
StatisticParralledSessionProcessor和SortParralledSessionProcessor:返回所有的Session。
JoinParralledSessionProcessor:需要从请求中解析Join类型,若请求类型为SxS,则获取Sesson资源池的监控系统对象,从对象中找到会话数最小的一个数据库的Session作为唯一结果进行返回。否则返回所有的Session。
SSelectSessionProcessor:获取Sesson资源池的监控系统对象,从对象中找到连接数最小的一个数据库的Session作为唯一结果进行返回。
6、Session操作器中处理器的处理流程
Session操作器的各个处理器在通过调用Session选择器选择了Session对象后,就需要根据以下的处理流程来获得处理结果:
6.1、SingleSessionProcessor
单一会话处理器流程如下
(step1)请求Session选择器,根据划分规则(即配置文件中的存储策略)获得唯一目的Session
(step2)调用Session,执行插入或者更新语句。
6.2、StatisticParralledSessionProcessor
统计处理器的流程如图4:
(step1)调用Session选择器选择Session队列中所有可用的Session对象。
(step2)根据Session的个数n,建立一个大小为n的线程池,建立n个线程,每个线程分配一个Session,然后发起线程,进行平行处理。n小于或等于m,只有当某节点不可用时,n小于m,m为数据处理节点总数。
(step3)每个Thread线程调用自己的Hibernate Session对象,执行SQL语句,获得结果集。
(step4)归约所有Thread返回的结果集,归约办法如下:
Max-Reduce:对所有结果集进行比较,取出最大的结果。
Min-Reduce:对所有结果集进行比较,取出最小的结果。
Avg-Reduce:对所有的结果集进行取均值处理。
Sum-Reduce:对所有的结果集进行求和处理。
Group-Reduce:利用Map<String,List>进行Group处理,String为Group的列属性值,List为关系对象(比如查询select*group by name,这里的String为查询出的name值,List保存同名的列)。
6.3SortParralledSessionProcessor
排序处理器的处理流程如下:
(step1)调用Session选择器获得所有可用的Session对象。
(step2)根据Session的个数n,建立一个大小为n的线程池,建立n个线程,每个线程分配一个Session,然后发起线程,进行平行处理。
(step3)每个Thread线程调用自己的Hibernate Session对象,执行SQL语句,获得结果集。
(step4)调用有序子段归并排序,获得最终有序目标序列。
可以看出,排序处理器的处理流程前三步和统计处理器相同,最后一步采用归并排序法进行排序,这种方法的流程如图5所示:
(step1)构建目标队列targetList,设置目标队列长度为h。其中h为需要得到的排序元素数。
(step2)通过在各个数据库节点上执行SQL语句,得到有序子队列,对等待排序的有序子列表sonList1、sonList2、…、sonListn分配n个游标P1、P2、…、Pn,分别指向对应列表首元素。
(step3)比较sonList1[P1]、sonList2[P2]、…、sonListn[Pn],取其中的最小值(最大值)sonList[Pi],将sonListi[Pi]放入目标队列第一个空位中。
(step4)Pi指向sonListi的下一个位置。
(step5)判断targetList是否已经存满,若没有存满则继续执行step3。否则排序结束。
使用这种归并排序作为排序处理器的归约方法,能有效利用待归约数据的有序性,减小时间复杂度,排序的时间复杂度为h(n-1)t,其中t为比较一次所需要的时间,与传统数据库排序查询使用的归并排序相比,传统查询排序的时间复杂度为hlog(h)t,由于通常情况下,待排序数据个数h远大于待排序子队列数n,所以使用有序字段归并算法可以有效提升排序效率。
6.4JoinParralledSessionProcessor
连接处理器与其他处理器不同,首先要根据表属性对连接处理做以下分类
类别J1:S表与S表做连接查询
类别J2:S表与L表做连接查询
类别J3:L表与L表做连接查询
(a)对J1,操作流程如下:
Step1:调用Session选择器,得到负载最小的Session。
Step2:在Session上做连接查询,返回结果集。
由于Session资源池介绍的表存储策略,S表在每个数据节点上都有备份,所以在每个节点上的查询结果都是相同的,使用Session选择器,在负载最小的Session上进行连接处理。
(b)对J2,操作流程如图6所示
(step1)调用Session选择器,取得所有可用的Session。
(step2)根据Session的个数n,建立一个大小为n的线程池,建立n个线程,每个线程分配一个Session,然后发起线程,进行平行处理。
(step3)对每个Session,调用Join处理方法,利用线程,在各个数据库节点上执行Join操作,得到SxLR1,SxLR2,…,SxLRn。其中:LRn指LR表(即连接操作右边的L表)在数据库节点n上的数据块。
(step4)对所有线程得到的结果SxLR1,SxLR2,…,SxLRn进行归约,得到一个完整的数据结果集合SxLR。
(c)对LxL处理的流程如图7所示
(step1)调用Session选择器,取得所有Session。
(step2)根据Session的个数n,建立一个大小为n的线程池,建立n个线程,每个线程分配一个Session,然后发起线程。
(step3)每个线程获取LL在各个数据节点上的数据,其中LL表示join操作左侧的L表。
(step4)将LL1到LLn归约成一个完整的LL表结果集合LL。其中LLk指LL存储在第k个节点上的数据表。
(step5)线程通过LL在各个数据节点执行LLxLR1、LLxLR2、…、LLxLRk…、LLxLRm。其中LR表示join操作右侧的L表。其中LRk指LR存储在第k个节点上的数据表。
(step6)归约step5得到的结果集,形成LLxLR。
Claims (10)
1.一种基于分布式关系-对象映射处理的大数据查询的方法,其步骤为:
1)选取m个数据处理节点,针对每一数据处理节点构建一Hibernate Session节点,得到一分布式Hibernate架构,并生成一Session资源队列;
2)在所述分布式Hibernate架构中设置一配置文件,所述配置文件包括表类型属性,以及每一类型表对应的存储策略和路由策略;其中,所述表类型属性包括S表和L表;将S表在每一所述数据处理节点备份,将L表分块存储到m个所述数据处理节点;L表为数据量大于或等于设定阈值的表,S表为数据量小于设定阈值的表;
3)所述分布式Hibernate架构对输入的查询请求进行解析,根据查询请求的类别选择对应的处理器;
4)所选处理器根据该查询请求和对应的路由策略,从所述Session资源队列中选择对应的Session节点对该查询请求进行处理,并对处理结果进行规约。
2.如权利要求1所述的查询方法,其特征在于所述配置文件包括表属性配置和划分策略配置;其中表属性配置为一Map集合,该集合中的元素以表名称TableName为Key,以L或者S为Value的键值对。
3.如权利要求1或2所述的查询方法,其特征在于如果所述查询请求的类别为插入或者更新语句,则Session选择器根据存储策略从所述Session资源队列获得目的Session,执行插入或者更新语句。
4.如权利要求1或2所述的查询方法,其特征在于如果所述查询请求的类别为选择语句且该查询请求中的表为S表,则Session选择器从所述Session资源队列中找到连接数最小的Session节点执行该查询请求。
5.如权利要求1或2所述的查询方法,其特征在于如果所述查询请求的类别为选择语句且该查询请求中的表为L表、且包含连接操作:
a)如果连接操作为S表与S表做连接查询,则Session选择器从所述Session资源队列中找到负载最小的Session节点执行该查询请求;
b)如果连接操作为S表与L表做连接查询,则Session选择器调用所述Session资源队列中全部可用的Session节点并行执行该查询请求;
c)如果连接操作为L表与L表做连接查询,则Session选择器调用所述Session资源队列中全部可用的n个Session节点,建立n个线程,每个线程分配一个Session节点;每个线程获取LL表在各个数据处理节点上的数据并规约得到LL表;然后各线程通过LL在各个数据节点执行LLxLR1、LLxLR2、…、LLxLRk…、LLxLRm,规约形成LLxLR;其中,LR表示连接操作右侧的L表,LL表示连接操作左侧的L表,LRk指LR表在数据处理节点k上的数据块,x表示连接符号。
6.如权利要求1或2所述的查询方法,其特征在于如果所述查询请求的类别为选择语句且该查询请求中的表为L表、不包含连接操作且包含排序操作,则Session选择器调用所述Session资源队列中全部可用的n个Session节点,建立n个线程,每个线程分配一个Session节点;每个线程调用自己的Hibernate Session对象执行该查询请求获得结果集,然后调用有序子段对结果集进行归并排序,获得最终有序目标序列。
7.如权利要求6所述的查询方法,其特征在于所述调用有序子段对结果集进行归并排序的方法为:
71)构建长度为h的目标队列targetList,其中h为需要得到的排序元素数;
72)在各数据处理节点上执行该查询请求所得有序子队列sonList1、sonList2、…、sonListn分配n个游标P1、P2、…、Pn,分别指向对应列表首元素;
73)比较sonList1[P1]、sonList2[P2]、…、sonListn[Pn],取其中的最小值或最大值sonList[Pi],将sonListi[Pi]放入目标队列第一个空位中,然后Pi指向sonListi的下一个位置;
74)判断targetList是否已存满,若没有存满则继续执行步骤73),否则排序结束。
8.如权利要求1或2所述的查询方法,其特征在于如果所述查询请求的类别为选择语句且该查询请求中的表为L表、不包含连接操作且不包含排序操作,则Session选择器调用所述Session资源队列中全部可用的n个Session节点,建立n个线程,每个线程分配一个Session节点;每个线程调用自己的Hibernate Session对象执行该查询请求获得结果集,然后对结果集进行规约。
9.如权利要求1所述的查询方法,其特征在于所述分布式Hibernate架构中设置一监控系统,其每隔固定的时间对每个Session节点执行一条SQL语句,测试Session节点是否可用;同时记录可用Session节点的负载。
10.如权利要求1所述的查询方法,其特征在于采用Range划分方法或Hash划分方法,将L表分块存储到m个所述数据处理节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310690335.6A CN103678609B (zh) | 2013-12-16 | 2013-12-16 | 一种基于分布式关系‑对象映射处理的大数据查询的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310690335.6A CN103678609B (zh) | 2013-12-16 | 2013-12-16 | 一种基于分布式关系‑对象映射处理的大数据查询的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103678609A true CN103678609A (zh) | 2014-03-26 |
CN103678609B CN103678609B (zh) | 2017-05-17 |
Family
ID=50316154
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310690335.6A Active CN103678609B (zh) | 2013-12-16 | 2013-12-16 | 一种基于分布式关系‑对象映射处理的大数据查询的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103678609B (zh) |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103984707A (zh) * | 2014-04-28 | 2014-08-13 | 东北大学 | 基于双阈值的分布式Top-|K|查询方法 |
WO2016101798A1 (zh) * | 2014-12-26 | 2016-06-30 | 华为技术有限公司 | 一种对大数据进行处理的方法和装置 |
CN106383886A (zh) * | 2016-09-21 | 2017-02-08 | 深圳市博瑞得科技有限公司 | 一种基于大数据分布式编程框架的大数据预统系统及方法 |
CN106528757A (zh) * | 2016-11-03 | 2017-03-22 | 北京中安智达科技有限公司 | 一种面向大数据的关系分析展示方法 |
CN106886568A (zh) * | 2017-01-12 | 2017-06-23 | 掌阅科技股份有限公司 | 一种分表方法、装置及电子设备 |
CN107436923A (zh) * | 2017-07-07 | 2017-12-05 | 北京奇虎科技有限公司 | 一种在大数据集群中查询索引的方法和装置 |
CN107992566A (zh) * | 2017-11-29 | 2018-05-04 | 北京天健通泰科技有限公司 | 基于Hibernate的数据映射方法及系统 |
CN108197277A (zh) * | 2018-01-09 | 2018-06-22 | 福建星瑞格软件有限公司 | 一种统一的数据库管理查询方法以及装置 |
CN108415912A (zh) * | 2017-02-09 | 2018-08-17 | 阿里巴巴集团控股有限公司 | 基于MapReduce模型的数据处理方法和设备 |
WO2018157333A1 (zh) * | 2017-03-01 | 2018-09-07 | 深圳市博信诺达经贸咨询有限公司 | 处理大数据的方法及系统 |
CN108664573A (zh) * | 2018-04-27 | 2018-10-16 | 厦门南讯软件科技有限公司 | 一种具有双通道数据库的大数据快速处理系统及方法 |
CN109902101A (zh) * | 2019-02-18 | 2019-06-18 | 国家计算机网络与信息安全管理中心 | 基于SparkSQL的透明分区方法及装置 |
CN109918366A (zh) * | 2019-03-11 | 2019-06-21 | 黑龙江中医药大学 | 一种基于大数据的数据安全处理方法 |
CN110196854A (zh) * | 2019-06-11 | 2019-09-03 | 中国科学院寒区旱区环境与工程研究所 | 数据处理方法及装置 |
CN110532282A (zh) * | 2019-08-09 | 2019-12-03 | 合肥工业大学 | 数据查询方法及装置 |
CN111125417A (zh) * | 2019-12-30 | 2020-05-08 | 深圳云天励飞技术有限公司 | 一种数据搜索方法、装置、电子设备及存储介质 |
CN111382207A (zh) * | 2020-03-23 | 2020-07-07 | 中国建设银行股份有限公司 | 一种数据处理方法、装置、系统和存储介质 |
CN111666295A (zh) * | 2019-03-05 | 2020-09-15 | 深圳市天软科技开发有限公司 | 数据提取方法、终端设备及计算机可读存储介质 |
CN111898024A (zh) * | 2020-07-30 | 2020-11-06 | 厦门渊亭信息科技有限公司 | 一种智能问答方法、装置、可读存储介质及计算设备 |
CN112241316A (zh) * | 2020-09-18 | 2021-01-19 | 武汉迎风聚智科技有限公司 | 一种分布式调度应用的方法以及装置 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109033456B (zh) * | 2018-08-28 | 2021-02-05 | 百度在线网络技术(北京)有限公司 | 一种条件查询方法、装置、电子设备和存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101021791A (zh) * | 2007-03-12 | 2007-08-22 | 华为技术有限公司 | 实现分布式对象持久化的方法、装置及编译单元 |
US7788270B2 (en) * | 2008-02-28 | 2010-08-31 | Red Hat, Inc. | Name-based filters utilized in full-text search engine |
CN101958838A (zh) * | 2010-10-14 | 2011-01-26 | 联动优势科技有限公司 | 数据访问方法及装置 |
CN102053982A (zh) * | 2009-11-02 | 2011-05-11 | 阿里巴巴集团控股有限公司 | 一种数据库信息管理方法和设备 |
CN102110150A (zh) * | 2011-02-18 | 2011-06-29 | 中交四航工程研究院有限公司 | 一种基于分布式数据库的自主审批方法及系统 |
CN102541927A (zh) * | 2010-12-30 | 2012-07-04 | 北京新媒传信科技有限公司 | 一种实现数据缓存的方法和装置 |
CN103207908A (zh) * | 2013-03-29 | 2013-07-17 | 成都康赛电子科大信息技术有限责任公司 | 多数据源动态隔离访问方法 |
-
2013
- 2013-12-16 CN CN201310690335.6A patent/CN103678609B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101021791A (zh) * | 2007-03-12 | 2007-08-22 | 华为技术有限公司 | 实现分布式对象持久化的方法、装置及编译单元 |
US7788270B2 (en) * | 2008-02-28 | 2010-08-31 | Red Hat, Inc. | Name-based filters utilized in full-text search engine |
CN102053982A (zh) * | 2009-11-02 | 2011-05-11 | 阿里巴巴集团控股有限公司 | 一种数据库信息管理方法和设备 |
CN101958838A (zh) * | 2010-10-14 | 2011-01-26 | 联动优势科技有限公司 | 数据访问方法及装置 |
CN102541927A (zh) * | 2010-12-30 | 2012-07-04 | 北京新媒传信科技有限公司 | 一种实现数据缓存的方法和装置 |
CN102110150A (zh) * | 2011-02-18 | 2011-06-29 | 中交四航工程研究院有限公司 | 一种基于分布式数据库的自主审批方法及系统 |
CN103207908A (zh) * | 2013-03-29 | 2013-07-17 | 成都康赛电子科大信息技术有限责任公司 | 多数据源动态隔离访问方法 |
Cited By (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103984707B (zh) * | 2014-04-28 | 2017-04-05 | 东北大学 | 基于双阈值的分布式Top‑|K|查询方法 |
CN103984707A (zh) * | 2014-04-28 | 2014-08-13 | 东北大学 | 基于双阈值的分布式Top-|K|查询方法 |
US10691669B2 (en) | 2014-12-26 | 2020-06-23 | Huawei Technologies Co., Ltd. | Big-data processing method and apparatus |
WO2016101798A1 (zh) * | 2014-12-26 | 2016-06-30 | 华为技术有限公司 | 一种对大数据进行处理的方法和装置 |
CN106383886A (zh) * | 2016-09-21 | 2017-02-08 | 深圳市博瑞得科技有限公司 | 一种基于大数据分布式编程框架的大数据预统系统及方法 |
CN106528757A (zh) * | 2016-11-03 | 2017-03-22 | 北京中安智达科技有限公司 | 一种面向大数据的关系分析展示方法 |
CN106886568B8 (zh) * | 2017-01-12 | 2018-05-01 | 掌阅科技股份有限公司 | 一种分表方法、装置及电子设备 |
CN106886568B (zh) * | 2017-01-12 | 2018-03-30 | 掌阅科技股份有限公司 | 一种分表方法、装置及电子设备 |
CN106886568A (zh) * | 2017-01-12 | 2017-06-23 | 掌阅科技股份有限公司 | 一种分表方法、装置及电子设备 |
CN108415912A (zh) * | 2017-02-09 | 2018-08-17 | 阿里巴巴集团控股有限公司 | 基于MapReduce模型的数据处理方法和设备 |
WO2018157333A1 (zh) * | 2017-03-01 | 2018-09-07 | 深圳市博信诺达经贸咨询有限公司 | 处理大数据的方法及系统 |
CN107436923A (zh) * | 2017-07-07 | 2017-12-05 | 北京奇虎科技有限公司 | 一种在大数据集群中查询索引的方法和装置 |
CN107992566A (zh) * | 2017-11-29 | 2018-05-04 | 北京天健通泰科技有限公司 | 基于Hibernate的数据映射方法及系统 |
CN108197277A (zh) * | 2018-01-09 | 2018-06-22 | 福建星瑞格软件有限公司 | 一种统一的数据库管理查询方法以及装置 |
CN108197277B (zh) * | 2018-01-09 | 2023-02-14 | 福建星瑞格软件有限公司 | 一种统一的数据库管理查询方法以及装置 |
CN108664573A (zh) * | 2018-04-27 | 2018-10-16 | 厦门南讯软件科技有限公司 | 一种具有双通道数据库的大数据快速处理系统及方法 |
CN109902101A (zh) * | 2019-02-18 | 2019-06-18 | 国家计算机网络与信息安全管理中心 | 基于SparkSQL的透明分区方法及装置 |
CN111666295A (zh) * | 2019-03-05 | 2020-09-15 | 深圳市天软科技开发有限公司 | 数据提取方法、终端设备及计算机可读存储介质 |
CN111666295B (zh) * | 2019-03-05 | 2023-12-26 | 深圳市天软科技开发有限公司 | 数据提取方法、终端设备及计算机可读存储介质 |
CN109918366B (zh) * | 2019-03-11 | 2020-05-12 | 黑龙江中医药大学 | 一种基于大数据的数据安全处理方法 |
CN109918366A (zh) * | 2019-03-11 | 2019-06-21 | 黑龙江中医药大学 | 一种基于大数据的数据安全处理方法 |
CN110196854A (zh) * | 2019-06-11 | 2019-09-03 | 中国科学院寒区旱区环境与工程研究所 | 数据处理方法及装置 |
CN110532282B (zh) * | 2019-08-09 | 2022-09-23 | 合肥工业大学 | 数据查询方法及装置 |
CN110532282A (zh) * | 2019-08-09 | 2019-12-03 | 合肥工业大学 | 数据查询方法及装置 |
CN111125417B (zh) * | 2019-12-30 | 2023-03-31 | 深圳云天励飞技术有限公司 | 一种数据搜索方法、装置、电子设备及存储介质 |
CN111125417A (zh) * | 2019-12-30 | 2020-05-08 | 深圳云天励飞技术有限公司 | 一种数据搜索方法、装置、电子设备及存储介质 |
CN111382207A (zh) * | 2020-03-23 | 2020-07-07 | 中国建设银行股份有限公司 | 一种数据处理方法、装置、系统和存储介质 |
CN111382207B (zh) * | 2020-03-23 | 2023-06-27 | 中国建设银行股份有限公司 | 一种数据处理方法、装置、系统和存储介质 |
CN111898024A (zh) * | 2020-07-30 | 2020-11-06 | 厦门渊亭信息科技有限公司 | 一种智能问答方法、装置、可读存储介质及计算设备 |
CN112241316A (zh) * | 2020-09-18 | 2021-01-19 | 武汉迎风聚智科技有限公司 | 一种分布式调度应用的方法以及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103678609B (zh) | 2017-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103678609A (zh) | 一种基于分布式关系-对象映射处理的大数据查询的方法 | |
CN107239335B (zh) | 分布式系统的作业调度系统及方法 | |
CN111382174B (zh) | 多方数据联合查询方法、装置、服务器和存储介质 | |
KR101365464B1 (ko) | 데이터베이스 미들웨어를 이용한 데이터 관리 시스템 및 방법 | |
CN109582667A (zh) | 一种基于电力调控大数据的多数据库混合存储方法及系统 | |
CN109815254B (zh) | 基于大数据的跨地域任务调度方法及系统 | |
US10565201B2 (en) | Query processing management in a database management system | |
CN105279276A (zh) | 一种数据库索引优化系统 | |
CN106126528B (zh) | 一种基于平台模型的小卫星测试基础信息生成方法 | |
CN109635037B (zh) | 一种关系型分布式数据库的分片存储方法及装置 | |
EP3373158B1 (en) | Data storage method and coordinator node | |
CN111159180A (zh) | 一种基于数据资源目录构建的数据处理方法及系统 | |
CN112163048A (zh) | 基于ClickHouse实现OLAP分析的方法、装置 | |
CN103177035A (zh) | 一种在数据库中查询数据的装置及方法 | |
Hu et al. | Output-optimal massively parallel algorithms for similarity joins | |
CN109299101B (zh) | 数据检索方法、装置、服务器和存储介质 | |
Hagedorn | Efficient spatio-temporal event processing with STARK | |
CN111008521A (zh) | 生成宽表的方法、装置及计算机存储介质 | |
CN112445776B (zh) | 基于Presto的动态分桶方法、系统、设备及可读存储介质 | |
CN113568931A (zh) | 一种数据访问请求的路由解析系统及方法 | |
CN116578558A (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN113590651B (zh) | 一种基于hql的跨集群数据处理系统及方法 | |
CN113986545A (zh) | 用户与角色关联方法及装置 | |
CN109117426A (zh) | 分布式数据库查询方法、装置、设备及存储介质 | |
CN112835932A (zh) | 业务表的批量处理方法及装置、非易失性存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |