基于消息队列的跨数据源查询方法、系统及服务器节点
技术领域
本发明属于大数据技术领域,特别是涉及跨数据源分布式查询技术领域。
背景技术
跨数据源分布式查询是近年来业界的研究热点之一。传统的技术方案由于可扩展性和处理性能的限制无法满足其要求。新兴基于消息队列的具有良好的可扩展性,需要将不同数据源数据汇聚到同一个数据库里,由于不可篡改性、匿名性和去中心化等特性,区块链技术得到了工业界和学术界的广泛关注,催生了大量区块链应用,包括比特币、以太坊等。传统区块链采用链式结构,通过全网共识机制维护全局统一的最长链,查询吞吐量低、且不可扩展,使其不能应用于对实时性要求较高和高吞吐量的场景中,如银行和交易所等。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种基于消息队列的跨数据源查询方法、系统及服务器节点,用于解决现有技术中跨数据源查询数据查询吞吐量低、且不可扩展的技术问题。
为实现上述目的及其他相关目的,本发明的实施例提供一种基于消息队列的跨数据源查询方法,包括:基于用户输入的数据生成SOL语句;对所述SOL语句进行优化获取执行效率最高的SOL语句;根据所述执行效率最高的SOL语句获取搜索数据,并根据所述搜索数据更新本地节点;将更新数据随机镜像到预先配置的消息队列集群中的各个节点的消息队列。
于本申请的一实施例中,所述基于用户输入的查询数据生成SOL语句的一种具体实现方式包括:声明待查询的变量;对操作数据进行分组和/或关联;根据所述待查询的变量、操作数据的分组和/或关联以及本地节点的元数据生成SOL语句。
于本申请的一实施例中,所述对所述SOL语句进行优化获取执行效率最高的SOL语句的实现方式包括:对所述SOL语句进行语法解析,将带索引的变量放在查询条件的最前方并删除非必要的变量。
于本申请的一实施例中,所述基于消息队列的跨数据源查询方法还包括:搭建RabbotMQ集群,配置RabbotMQ集群中的多个节点,使得每个所述节点既是中心节点,又是附属节点,连接到任意节点的用户端均可看到集群中所有队列。
于本申请的一实施例中,所述更新本地节点的方式包括实时更新,手动更新和触发更新。
本申请的实施例还提供一种基于消息队列的跨数据源查询系统,包括:SOL预处理模块,用于基于用户输入的数据生成SOL语句;SOL优化模块,用于对所述SOL语句进行优化获取执行效率最高的SOL语句;元数据更新模块,用于根据所述执行效率最高的SOL语句获取搜索数据,并根据所述搜索数据更新本地节点,将更新数据随机镜像到预先配置的消息队列集群中的各个节点的消息队列。
于本申请的一实施例中,所述基于消息队列的跨数据源查询系统还包括:可视化操作模块,用于声明待查询的变量、对操作数据进行分组和/或关联。
于本申请的一实施例中,所述SOL优化模块通过对所述SOL语句进行语法解析,将带索引的变量放在查询条件的最前方并删除非必要的变量的方式获取执行效率最高的SOL语句。
于本申请的一实施例中,所述基于消息队列的跨数据源查询系统还包括:节点配置模块,用于搭建RabbotMQ集群,配置RabbotMQ集群中的多个节点,使得每个所述节点既是中心节点,又是附属节点,连接到任意节点的用户端均可看到集群中所有队列。
本申请的实施例还提供一种服务器节点,包括处理器和存储器,所述存储器存储有程序指令;所述处理器运行程序指令实现如上所述的基于消息队列的跨数据源查询方法。
如上所述,本发明的基于消息队列的跨数据源查询方法、系统及服务器节点,具有以下有益效果:
本发明可以进一步提高查询吞吐量,实现跨数据源跨区域的分布式查询,连接到任意节点的用户端能够看到集群中所有队列,即使该队列不位于连接节点上。
附图说明
图1显示为本发明的基于消息队列的跨数据源查询方法的整体流程示意图。
图2显示为本发明的基于消息队列的跨数据源查询方法中生成SOL语句的一种具体实现的流程示意图。
图3显示为本发明的基于消息队列的跨数据源查询方法的应用架构结构示意图。
图4至图6显示为本发明的基于消息队列的跨数据源查询方法实施交互过程示意图。
图7显示为本发明的基于消息队列的跨数据源查询系统的原理结构框图。
图8显示为本发明的基于消息队列的跨数据源查询系统的一种优选原理结构框图。
图9显示为本申请一实施例中的服务器节点的结构示意图。
元件标号说明
100 基于消息队列的跨数据源查询系统
110 SOL预处理模块
120 SOL优化模块
130 元数据更新模块
140 可视化操作模块
150 节点配置模块
1100 服务器节点
1101 处理器
1102 存储器
1103 显示器
S100~S400 步骤
S110~S130 步骤
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
本实施例的目的在于提供一种基于消息队列的跨数据源查询方法、系统及服务器节点,用于解决现有技术中跨数据源查询数据查询吞吐量低、且不可扩展的技术问题。
以下将详细阐述本实施例的基于消息队列的跨数据源查询方法、系统及服务器节点的原理及实施方式,使本领域技术人员不需要创造性劳动即可理解本发明的基于消息队列的跨数据源查询方法、系统及服务器节点。
实施例1
如图1所示,本实施例提供一种基于消息队列的跨数据源查询方法,包括:
步骤S100,基于用户输入的数据生成SOL语句;
步骤S200,对所述SOL语句进行优化获取执行效率最高的SOL语句;
步骤S300,根据所述执行效率最高的SOL语句获取搜索数据,并根据所述搜索数据更新本地节点;
步骤S400,将更新数据随机镜像到预先配置的消息队列集群中的各个节点的消息队列。
以下对本实施例基于消息队列的跨数据源查询方法的步骤S100至步骤S400进行详细说明。
步骤S100,基于用户输入的数据生成SOL语句。
于本实施例中,如图2所示,所述基于用户输入的查询数据生成SOL语句的一种具体实现方式包括:
步骤S110,声明待查询的变量;
步骤S120,对操作数据进行分组和/或关联;
步骤S130,根据所述待查询的变量、操作数据的分组和/或关联以及本地节点的元数据生成SOL语句。
具体地,本实施例中,通过RabbitMQ管理页面声明要查询的变量,并可视化的操作数据分组和关联。基于页面指定的变量以及分组、关联,配合本地节点(即本地数据库)的元数据生成的SOL进行预处理以及编译操作,生成SOL语句。
步骤S200,对所述SOL语句进行优化获取执行效率最高的SOL语句。
于本实施例中,所述对所述SOL语句进行优化获取执行效率最高的SOL语句的实现方式包括:
对所述SOL语句进行语法解析,将带索引的变量放在查询条件的最前方并删除非必要的变量。
即本实施例中,对SOL语句的语法通过精简逻辑、调整语法的方式优化SOL,主要方式为但不限于:将带索引的变量放在查询条件的最前方,及早命中索引提高查询效率,删除不必要的变量,减少查询出的数据量进而提高查询效率等。
步骤S300,根据所述执行效率最高的SOL语句获取搜索数据,并根据所述搜索数据更新本地节点。
对SOL进行语法解析、精简逻辑、最优化语法之后得到执行效率最高的SOL语句之后,根据所述执行效率最高的SOL语句获取搜索数据,将所需数据查询出来,提供给查询接口进行输出。
然后根据所述搜索数据更新本地节点。具体地,对数据搜索并对本地节点的医疗数据进行优化并配合可视化执行计划调整申请请求,将修改后的元数据写回本地节点的数据库内,实现本地节点的数据更新。
其中,于本实施例中,所述更新本地节点的方式包括实时更新,手动更新和触发更新。
步骤S400,将更新数据随机镜像到预先配置的消息队列集群中的各个节点的消息队列。
基于RabbitMQ通常采用消息队列可以进一步提高查询吞吐量,并采用数据在小型局域网同步的方式,采用了随机化存储的策略,数据被随机存放到网络中的若干节点上,且共识算法基于所有相关节点的检索结果。但是这种基于数据结构随机存储的分布式数据对查询提出了巨大挑战,即如何要在节点数量和全网TPS(每秒钟的查询数)增加的情况下,保证查询功能的可扩展性。
于本实施例中,所述基于消息队列的跨数据源查询方法还包括:搭建RabbotMQ集群,配置RabbotMQ集群中的多个节点,使得每个所述节点既是中心节点,又是附属节点,连接到任意节点的用户端均可看到集群中所有队列。其中,各节点之间通过AMQP协议通信。
在将修改后的元数据写回本地节点的数据库内,实现本地节点的数据更新之后,通过RabbitMQ发送到其他节点,与其他节点数据融合,并将数据返回发起节点。
如图3和图6所示,本实施例的基于消息队列的跨数据源查询方法的操作过程如下:
通过RabbitMQ可视化操作界面,操作者在主中心(例如图2至图6中所示的医生端、内容发布用户、用户端A、用户端B)将数据查询出来,消息推送到Rabbitmq数据处理中间件之后,由Rabbitmq将消息同步到各个分中心(例如图2至图6中所示的医生端、内容消费用户、用户端1至用户端3),各分中心接收到从Rabbitmq中间件传递的数据,接着存储到分中心的系统内,最后在页面上进行显示。
本实施例中,基于RabbitMQ来实现跨数据源跨区域的分布式查询,借助RabbitMQ良好的可靠性和吞吐量将虚拟主机、交换机、用户信息和数据会自动镜像到集群中各个节点,配合SOL预处理以及SOL优化带来的性能提升,同时队列消息可能位于单个节点或镜像到多个节点。连接到任意节点的用户端能够看到集群中所有队列,即使该队列不位于连接节点上。允许单个节点上的交换机或队列接收发布到另一节点上交换机或队列的消息,可以是单独节点或集群。
实施例2
如图7所示,本实施例提供一种基于消息队列的跨数据源查询系统100,所述基于消息队列的跨数据源查询系统100包括:SOL预处理模块110,SOL优化模块120以及元数据更新模块130。
于本实施例中,所述SOL预处理模块110用于基于用户输入的数据生成SOL语句。
其中,所述SOL预处理模块110根据待查询的变量、操作数据的分组和/或关联以及本地节点的元数据生成SOL语句。
于本实施例中,所述基于消息队列的跨数据源查询系统100还包括:可视化操作模块140,用于声明待查询的变量、对操作数据进行分组和/或关联。
具体地,本实施例中,通过可视化操作模块140的RabbitMQ管理页面声明要查询的变量,并可视化的操作数据分组和关联。基所述SOL预处理模块110于页面指定的变量以及分组、关联,配合本地节点(即本地数据库)的元数据生成的SOL进行预处理以及编译操作,生成SOL语句。
于本实施例中,所述SOL优化模块120用于对所述SOL语句进行优化获取执行效率最高的SOL语句。
具体地,于本实施例中,所述SOL优化模块120通过对所述SOL语句进行语法解析,将带索引的变量放在查询条件的最前方并删除非必要的变量的方式获取执行效率最高的SOL语句。
即本实施例中,所述SOL优化模块120对SOL语句的语法通过精简逻辑、调整语法的方式优化SOL,主要方式为但不限于:将带索引的变量放在查询条件的最前方,及早命中索引提高查询效率,删除不必要的变量,减少查询出的数据量进而提高查询效率等。
于本实施例中,所述元数据更新模块130用于根据所述执行效率最高的SOL语句获取搜索数据,并根据所述搜索数据更新本地节点,将更新数据随机镜像到预先配置的消息队列集群中的各个节点的消息队列。
对SOL进行语法解析、精简逻辑、最优化语法之后得到执行效率最高的SOL语句之后,根据所述执行效率最高的SOL语句获取搜索数据,将所需数据查询出来,提供给查询接口进行输出。
然后所述元数据更新模块130根据所述搜索数据更新本地节点。具体地,对数据搜索并对本地节点的医疗数据进行优化并配合可视化执行计划调整申请请求,将修改后的元数据写回本地节点的数据库内,实现本地节点的数据更新。
其中,于本实施例中,所述更新本地节点的方式包括实时更新,手动更新和触发更新。
基于RabbitMQ通常采用消息队列可以进一步提高查询吞吐量,并采用数据在小型局域网同步的方式,采用了随机化存储的策略,数据被随机存放到网络中的若干节点上,且共识算法基于所有相关节点的检索结果。但是这种基于数据结构随机存储的分布式数据对查询提出了巨大挑战,即如何要在节点数量和全网TPS(每秒钟的查询数)增加的情况下,保证查询功能的可扩展性。
于本实施例中,所述基于消息队列的跨数据源查询系统100还包括:节点配置模块150,用于搭建RabbotMQ集群,配置RabbotMQ集群中的多个节点,使得每个所述节点既是中心节点,又是附属节点,连接到任意节点的用户端均可看到集群中所有队列。其中,各节点之间通过AMQP协议通信。
在将修改后的元数据写回本地节点的数据库内,实现本地节点的数据更新之后,通过RabbitMQ发送到其他节点,与其他节点数据融合,并将数据返回发起节点。
本实施例中,基于RabbitMQ来实现跨数据源跨区域的分布式查询,借助RabbitMQ良好的可靠性和吞吐量将虚拟主机、交换机、用户信息和数据会自动镜像到集群中各个节点,配合SOL预处理以及SOL优化带来的性能提升,同时队列消息可能位于单个节点或镜像到多个节点。连接到任意节点的用户端能够看到集群中所有队列,即使该队列不位于连接节点上。允许单个节点上的交换机或队列接收发布到另一节点上交换机或队列的消息,可以是单独节点或集群。
实施例3
如图9所示,本实施例还提供一种服务器节点1100,如图8所示,所述服务器节点1100包括处理器1101、存储器1102和显示器1103。于一实施例中,所述显示器可以是OLED、LED或LCD显示器等,所述显示器1103也可以包括触摸屏等交互式显示设备,本实施例不做具体限定。
存储器1102通过系统总线与处理器1101连接并完成相互间的通信,存储器1102用于存储计算机程序,处理器1101耦接于所述显示器1003及存储器1002,处理器1101用于运行计算机程序,以使所述服务器节点1100执行实施例1所述的基于消息队列的跨数据源查询方法。实施例1已经对所述基于消息队列的跨数据源查询方法进行了详细说明,在此不再赘述。
所述的基于消息队列的跨数据源查询方法可应用于多种类型的服务器节点1100。所述服务器节点1100例如是控制器,具体如ARM(Advanced RISC Machines)控制器、FPGA(Field Programmable Gate Array)控制器、SoC(System on Chip)控制器、DSP(DigitalSignal Processing)控制器、或者MCU(Micorcontroller Unit)控制器等等。所述服务器节点1100例如也可以是包括存储器、存储控制器、一个或多个处理单元(CPU)、外设接口、RF电路、音频电路、扬声器、麦克风、输入/输出(I/O)子系统、显示屏、其他输出或控制设备,以及外部端口等组件的计算机;所述计算机包括但不限于如台式电脑、笔记本电脑、平板电脑、智能手机、智能电视、个人数字助理(Personal Digital Assistant,简称PDA)等个人电脑。在另一些实施方式中,所述服务器节点1100还可以是服务器,所述服务器可以根据功能、负载等多种因素布置在一个或多个实体服务器上,也可以由分布的或集中的服务器集群构成,本实施例不作限定。
于实际的实现方式中,所述服务器节点1100例如为安装Android操作系统或者iOS操作系统,或者Palm OS、Symbian(塞班)、或者Black Berry(黑莓)OS、Windows Phone等操作系统的服务器节点1100。
在示例性实施例中,所述服务器节点1100可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器、摄像头或其他电子元件实现,用于执行上述基于消息队列的跨数据源查询方法。
另需说明的是,上述提到的系统总线可以是外设部件互连标准(PeripheralComponent Interconnect,简称PCI)总线或扩展工业标准结构(Extended IndustryStandard Architecture,简称EISA)总线等。该系统总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口用于实现数据库访问装置与其他设备(例如客户端、读写库和只读库)之间的通信。存储器可能包含随机存取存储器(Random Access Memory,简称RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
上述的处理器1101可以是通用处理器,包括中央处理器(Central ProcessingUnit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
实施例4
本实施例提供一种计算机可读存储介质,所述存储介质例如为存储器,存储器被配置为存储各种类型的数据以支持在设备的操作。这些数据的示例包括用于在服务器节点1100上操作的任何应用程序或方法的指令,消息,图片等。存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),高速随机存取存储器,电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘等。所述存储器存储有程序指令,所述程序指令被执行时实现如上所述的基于消息队列的跨数据源查询方法。上述已经对所述的基于消息队列的跨数据源查询方法进行了详细说明,在此不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过计算机程序相关的硬件来完成。前述的计算机程序可以存储于一计算机可读存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
综上所述,本发明可以进一步提高查询吞吐量,实现跨数据源跨区域的分布式查询,连接到任意节点的用户端能够看到集群中所有队列,即使该队列不位于连接节点上。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。