CN114329155A - 一种包含时序数据库的多模态存储缓存系统及查询方法 - Google Patents
一种包含时序数据库的多模态存储缓存系统及查询方法 Download PDFInfo
- Publication number
- CN114329155A CN114329155A CN202111682432.1A CN202111682432A CN114329155A CN 114329155 A CN114329155 A CN 114329155A CN 202111682432 A CN202111682432 A CN 202111682432A CN 114329155 A CN114329155 A CN 114329155A
- Authority
- CN
- China
- Prior art keywords
- data
- layer
- query
- cache
- sub
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种包含时序数据库的多模态存储缓存系统及查询方法,涉及计算机技术领域。本发明是为了解决目前数据库在时间片的统计分析查询需求下添加对非时间类数据的常规查询的方法还存在由于数据库不够成熟稳定导致存储风险大的问题。本发明包括:交互层、控制层、服务层、数据访问对象层、缓存层、存储层;交互层用于接收用户输入的数据、显示查询结果数据和启动控制层;控制层用于校验接口参数并调度服务层;服务层用于实现数据查询业务逻辑;数据访问对象层用于利用数据访问函数调用缓存层或存储层进行数据查询并返回给服务层;缓存层用于缓存数据访问对象层从存储层库中读取的数据;存储层用于存储数据;本发明用于多模态数据查询。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种包含时序数据库的多模态存储缓存系统及查询方法。
背景技术
近年来,互联网大数据技术逐渐兴起,各式各样的新业务场景出现在日常的生活中,同时也出现了各种各样的新型数据,数据库技术也因此得到了蓬勃发展。现如今的数据库应用市场已不是关系数据库一家独大的局面,数据库的发展逐渐由通用变得专精,各种新式的数据库在其特定的业务场景下发挥着不可替代的作用。以最近较为热门的时序数据库为例,由于时序数据能展现事物发展趋势、周期规律和异常性的特点,时序数据库技术逐渐兴起。时序数据库对海量的时序数据进行分布式存储并提供快速的查询用以对未来发展做出预测分析,许多优点是其它数据库所不具备的,比如支持每秒钟上千万上亿数据点的写入和支持在秒级对上亿数据的分组聚合运算。
由于当下互联网交流信息的多样性,在一个业务场景下,可能会产生各种格式的数据。其中一部分数据面临的业务查询可能主要是单点查询或者小范围查询,比如关系数据库(mysql等)查询某几个特殊值或特定范围内的信息;而另一部分的数据面临的业务查询又可能是统计分析查询,比如应用时序数据库(cnosdb等)存储的时序数据进行数据分析做未来预测。正因有如此的特殊需求,一个业务场景下的数据可能会由于发挥作用的不同而分别存储在不同的数据库中。但也因为分布在不同数据库中的数据又同属于一个业务场景,数据之间则必然存在着相互关联的价值,那么就有必要解决这种混合存储情景下的数据查询问题。特别是对于以cnosdb为代表的时序数据库,需要在满足时间片的统计分析查询需求下添加对非时间类数据的常规查询以支持简单的查询需求。
目前针对数据库需要在满足时间片的统计分析查询需求下添加对非时间类数据的常规查询以支持简单的查询需求的问题,主要采用两种方式实现:第一,使用目前存在的全新数据库--HTAP数据库,这种数据库内部存储着多种数据结构,可以同时存储和管理多种类型的数据,可以对不同类型数据提供尽可能高性能的查询服务。但是这种技术目前还不够成熟稳定,使用起来会有很大的风险,即使冒着风险使用HTAP数据库,其数据迁移工作量以及代码重构工作量也是巨大的,会造成大量的人力资源的浪费。第二,将不同数据库之间相互解耦,分别各自管理,由其他工具进行数据的定期同步,然后分别在相应的数据库上做所需要的业务查询。但是这种方法还存在数据延迟的问题,定期同步数据的间隔如果过长,将导致数据不一致问题,对长查询造成的影响十分巨大;定期同步数据的间隔如果过短,将会消耗大量的资源,影响到其他的业务场景。
发明内容
本发明目的是为了解决目前数据库在时间片的统计分析查询需求下添加对非时间类数据的常规查询的方法还存在由于数据库不够成熟稳定导致存储风险大的问题,同时还存在迁移数据工作量大以及数据查询时存在数据延迟的问题,而提出了一种包含时序数据库的多模态存储缓存系统及查询方法。
一种包含时序数据库的多模态存储缓存系统包括:交互层、控制层、服务层、数据访问对象层、缓存层、存储层;
所述交互层用于接收用户输入的数据、显示查询结果数据以及在接收到用户输入的数据后启动控制层;
所述控制层用于校验接口参数并在校验合格后根据交互层输入的数据调度服务层;
所述服务层用于实现数据查询业务逻辑,包括:基本库、日志库、数据模型库、主体服务程序库;
所述基本库用于提供业务功能插件,包括:数据格式功能插件、数据模型对象的序列化和反序列化操作功能插件、常量池插件、数据预处理功能插件;
所述数据预处理包括:数据库的建库、建表、更改数据格式并插入数据;
所述日志库用于记录程序发生的错误、性能测试的进度和性能测试的结果;
所述日志库记录程序发生错误的等级包括:exception、warn、error;
所述数据模型库用于存储数据对应数据库中表的抽象数据类型和连接操作执行结果的抽象数据类型;以及构造数据类型对应的数据模型,数据的读取以及更新操作;所述主体服务程序库用于存储系统的业务逻辑代码;
所述系统的业务包括:调用数据访问对象层的数据访问函数,并在缓存层进行流量检查和拦截;建立缓存击穿容灾机制、缓存穿透容灾机制、缓存雪崩容灾机制;利用哈希连接算法或排序连接算法对在缓存层或存储层获取的查询结果表进行连接;
所述缓存击穿容灾机制用于防止由于大量查询数据未命中缓存而导致查询存储层的请求量过大,进而导致的存储层瘫痪;
所述缓存雪崩容灾机制用于防止由于大量缓存数据过期时间相同而导致的存储层崩溃;
所述缓存穿透容灾机制用于防止由于大量请求访问的数据是缓存层和存储层都不存在的热点key,进而导致的存储层瘫痪;
所述数据访问对象层用于利用数据访问函数调用缓存层或存储层进行单点数据查询或批量数据查询,并将查询到的数据序列化处理后返回给服务层;
所述缓存层采用memcache,用于缓存数据访问对象层从存储层库中读取的数据;
所述存储层采用MySQL关系数据库、MongoDB文档数据库以及cnosdb时序数据库,用于存储数据。
一种包含时序数据库的多模态存储缓存查询方法,包括以下步骤:
步骤一、交互层接收用户输入的数据,并将输入数据传输给控制层;
步骤二、控制层调用服务层,根据获得的输入数据调用服务层中的主体服务程序库中的逻辑代码;
步骤三、主体服务程序库中的逻辑代码调用数据访问对象层的数据访问函数在缓存层中进行查询;若查询到结果,则将结果通过数据访问对象层传入到服务层中进行哈希连接或排序连接,最后通过交互层显示结果;若没有查询到结果则直接调用存储层获得查询结果,将查询结果通过数据访问对象层传入服务层中进行哈希连接或排序连接,最后将连接后的结果保存在缓存系统中的同时将结果显示在交互层。
本发明的有益效果为:
本发明提出的一种包含时序数据库的多模态存储缓存查询系统,综合多种数据库进行混合存储数据,在成了多个数据库的整体系统的性能的同时,保证了在每个数据库中基于不同数据模型的查询优势;同时在高并发场景下,由本发明抗住外部的大部分流量,缓解外部流量对数据库系统的压力,方便建设整个系统的稳定性和安全性;本发明还包含时序数据库,符合当下多数应用场景使用时序数据进行分析这一情景,增加了系统的应用领域和商业价值。本发明将现有的数据库综合到同一系统中进行混合存储避免了使用目前还不成熟的数据库,避免了不成熟的数据库存储风险大的问题,同时也避免了对数据的迁移避免了资源的浪费,本发明在混合存储的数据库中进行查询避免了多次在不同数据库中查询,避免了数据延迟的问题。
附图说明
图1为系统整理架构图;
图2为哈希连接时序图;
图3为排序连接时序图;
图4为从缓存查询数据时序图。
具体实施方式
具体实施方式一:本实施方式一种包含时序数据库的多模态存储缓存系统包括:交互层(UI层)、控制层(controller层)、服务层(service层)、数据访问对象层(dataaccess object,DAO层)、缓存层、储存层;如图1所示。
所述交互层用于显示数据和接收用户输入的数据,并在接收到用户输入的数据后启动控制层,为用户提供一种交互式操作的界面;
所述控制层用于完成接口参数校验等安全检查工作,并在校验合格后根据UI层穿入的参数要求对服务层提供的功能进行调度;
所述服务层用于实现数据查询的业务逻辑,包括:基本库(utils)、日志库(log)、数据模型库(model)、主体服务程序库(service);
所述基本库用于提供满足业务功能的插件,包括:数据格式功能插件、数据模型对象的序列化和反序列化操作功能插件、常量池插件、数据预处理功能插件(数据库的建库、建表、更改数据格式并插入数据等);
所述日志库不仅可以用于程序发生错误时的记录,以便于在发生错误时快速的进行排查;还可以用于收集性能测试进度以及测试结果等,包括exception、warn、error三个级别的日志记录。
所述数据模型库用于存储数据对应存储中的数据库中表的抽象数据类型和Join操作执行结果的抽象数据类型;以及构造数据类型对应的数据模型,数据的读取以及更新等操作;
所述主体服务程序库用于存储系统的业务逻辑代码;
所述系统的业务包括:调用数据访问对象层(DAO层)的数据访问函数提供数据查询服务,并在缓存层进行流量检查和拦截;建立缓存穿透、缓存击穿、缓存雪崩的容灾机制;实现哈希连接算法、排序连接算法的操作执行等。
所述缓存击穿容灾机制用于防止由于大量查询数据未命中缓存而导致查询存储层的请求量过大,进而导致的存储层瘫痪;
所述缓存雪崩容灾机制用于防止由于大量缓存数据过期时间相同而导致的存储层崩溃;
所述缓存穿透容灾机制用于防止由于大量请求访问的数据是缓存层和存储层都不存在的热点key,进而导致的存储层瘫痪;
所述数据访问对象层用于利用数据访问函数调用缓存层或储存模块,同时对储存层的访问操作进行隔离保证数据库连接对其它层隐藏,同时实现了对储存层连接和数据访问操作进行隔离,降低代码间的耦合度,提高系统的复用性和扩展性;同时对外实现针对各自数据库的单点数据查询服务和批量数据查询服务,并将所查询到的数据序列化处理到数据模型中,返回给服务层层;
所述储存层模块用于存储数据,采用MySQL关系数据库、MongoDB文档数据库以及cnosdb时序数据库;
所述缓存层采用memcache,用于缓存从储存层中读取的数据,具体为:提供数据的哈希存储服务,以及设置空数据的对应黑名单机制,从而实现数据的快速访问以及流量监控和拦截。
具体实施方式二:所述缓存击穿容灾机制用于防止由于大量查询数据未命中缓存而导致查询储存层请求量过大进而导致数据库瘫痪,具体方法为:加自旋锁,在容灾机制下,并发的多个请求中,只有第一个请求线程A能拿到锁并执行数据库查询操作,其他的线程拿不到锁就一直自旋,等到第一个查询线程A将数据写入缓存后,其余的线程就可以通过缓存进行查询。经过这样的容灾处理,大大降低了在上述场景中瞬时压力过大导致的数据库宕机的发生概率,同时还有效的防止了某个热点业务查询对其他业务查询的资源占有影响。
本实施方式中,如果查询的数据是拥有缓存权限的数据,那么service层首先要到dao层的memcache缓存中请求数据,若本次查询未命中缓存,该数据的流量就会穿过缓存层,到达存储层的对应数据库。如果对这一过程不做特殊处理,系统就可能会发生数据库宕机的灾难。同时对于某一个热点key,在缓存过期的一瞬间,如果同时有大量的请求打进来,而此时缓存过期了,那么请求流量最终都会打到db上,造成瞬时数据库请求量大、压力骤增,甚至可能打垮数据库,这种灾难叫做缓存击穿。
具体实施方式三:所述缓存穿透容灾机制用于防止由于大量请求流量访问数据的是一个缓存和数据库都不存在的热点key,进而导致存储瘫痪的情况,具体策略如下:
当获得锁的第一个线程成功访问数据库并查询到结果时需要将结果写入到缓存系统中。如果该数据存在于数据库中,则可以正常把数据结果写入到缓存中;但如果该数据不存在,也即本次查询请求没有相应的数据,那么需要对这种空值做相应的处理。当一个请求流量访问的是一个缓存和数据库都不存在的key时,该请求流量会直接打到数据库上,并且查不到数据,没法写缓存,而且下一次的请求流量同样会打到数据库上。此时,缓存起不到作用,请求每次都会走到数据库,缓存就好像被“穿透”了一样。流量大时数据库可能会被打挂,特别是对于时序数据库来讲,请求是千万级的,缓存的“穿透”会给存储应用带来致命的影响。
因此本发明采用hash技术记录存储层中存在的热点key,对于查询请求,判断查询内容是否能匹配到存储层中的热点key,若能匹配到热点key则存储层中存在查询的数据条目,则对存储层进行访问是否存在该条目;若无法匹配到热点key,则不存在查询的数据条目,则直接返回结果不对数据库进行访问。
具体实施方式四:所述缓存雪崩容灾机制用于防止由于大量缓存数据过期时间相同而导致的数据库崩溃,具体如下:
若某次查询命中缓存,则service层可以直接返回数据给controller层,这些数据不可能永远的存储在缓存中,否则无论多大的缓存都会出现内存爆炸,因此需要为这些数据设置过期时间并将过期时间打散。如果某次查询所涉及的大量数据都设置了相同的过期时间,那么在过期时间来到之际,缓存中的这些数据会在同一时刻全部失效,在失效时刻,缓存系统会占用大量资源来清除缓存,给其他业务查询带来影响。同样地,下次同样的该请求也会因为大量数据同时都不在缓存中造成瞬时数据库请求量大且压力骤增,引起雪崩,甚至导致数据库被打挂。为了避免发生缓存雪崩,本发明为数据设置过期时间,由于时序数据库本身存储的数据对象存在过期时间,系统就可以结合时序数据库的过期时间设置满足预设范围的随机过期时间。
本实施方式中,如果需要查询的数据是没有缓存权限的数据,那么service层直接调用dao层的数据查询接口,这样的数据往往是大批量查询,此时可利用数据库原生的优势,提高查询效率。
具体实施方式五:所述哈希连接算法,如图2,如下:
若两个子查询目标数据都具有缓存权限,通过以下方式进行哈希连接:所述两个子查询分别为针对同一数据同时在两个不同数据库中进行的查询。
两个子查询结果都由service层服务访问memcache缓存来获取目标数据,由于在缓存中查询的过程可以以O(1)的时间直接访问且各个数据之间互不影响,所以在具体执行连接操作时可以创建多个线程并行执行join操作,在每个独立的线程中,根据两个子查询结果数据的哈希值,依次去缓存中查找相应的数据值,如果命中缓存,则可以直接返回数据,否则,缓存会将数据库中的数据回源到缓存中,并返回给调用线程。在此过程中,直接确定了两者的等值连接的数据相等,故获取后的数据可以直接进行join操作,最后统一合并每个线程的连接结果。
若两个子查询目标数据中有一个数据具有缓存权限,通过以下方式进行哈希连接:
首先通过service层服务直接访问dao层提供的服务,直接进行批量的没有缓存权限的子查询M的数据拉取。将数据加载到缓存层中之后,将子查询M的数据进行平均分配给各个执行线程。由于子查询N的数据具有缓存权限,故进行join连接操作时,子查询M的数据之间互不影响。接下来创建多个线程并行执行join操作,在每个独立的线程中,遍历子查询1的数据结果集,根据进行等值连接的列值获取子查询N的数据对应的哈希key值,然后去缓存中查找该key值对应的value值,所以此过程也保证了数值相等,可以直接进行join连接操作,最后统一合并每个线程的连接结果。
若两个子查询目标数据均没有缓存权限,通过以下方式进行哈希连接:
若两个子查询结果均没有缓存权限,便无法利用缓存带来的性能优势,不过这类的查询往往是企业进行数据分析时所作的查询,故对于相应速度并不会严格要求,可以允许延时的等待结果。在这种情况下,首先由service层服务直接调用dao层的批量数据查询函数,在获取到两个子查询结果后,根据任务量大小对两个子查询的数据进行平均划分,并分配给各个执行线程。在每个独立的线程内部,为每个子查询结果子集进行哈希分桶。当所有的线程执行完毕后,每个线程都得到了两个子查询结果子集的哈希表。然后对每个线程中的子查询a的结果集遍历,将a中的hash值与b中的hash进行匹配,将hash值一致的数据id对应的查询结果进行join连接,获得连接结果。
所述哈希分桶采用如下方式:计算每个子查询结果集中数据的id的hash值,并分别存储到由List组成的数组中。
具体实施方式六:所述排序连接算法,如图3,具体如下:
若两个子查询目标数据都具有缓存权限,通过以下方式进行排序连接:
两个子查询结果都由service层服务访问memcache缓存来获取目标数据,由于在缓存中查询的过程可以以O(1)的时间直接访问,所以可以在此阶段直接按照key值的顺序进行访问,得到的查询结果集直接就是有序数据集,省去了排序所花费的时间和资源占用。最后得到两组有序数据,使用双指针归并有序数组的方式进行排序连接,算法伪代码如表1。
表1
若两个子查询目标数据中有一个数据具有缓存权限,通过以下方式进行排序连接:
假设子查询x的数据没有缓存权限,子查询y的数据有缓存权限。
子查询x的数据可由service层服务访问memcache缓存来获取目标数据,直接有序的遍历查询所需要的key值即可得到有序数据。而对于没有缓存权限的子查询y需要通过service层调用dao层的数据库批量查询函数,由于获取的数据为对象形式,故重写比较器之后调用sort函数对数据进行排序。最后得到两组有序数据,使用双指针归并有序数组的方式进行排序连接。
若两个子查询目标数据均没有缓存权限,通过以下方式进行排序连接:
同哈希连接时该种情形一样,无法利用缓存带来的优势,需要直接访问dao层的数据库批量查询函数,在获取数据结果集之后,重写比较器之后调用sort函数对数据进行排序。然后使用双指针归并有序数组的方式进行排序连接。
具体实施方式七:一种包含时序数据库的多模态存储缓存查询方法基于一种包含时序数据库的多模态存储缓存系统实现数据查询,如图4,包括以下步骤:
步骤一、交互层接收用户输入的数据,并将输入数据传输给控制层;
步骤二、控制层调用服务层,根据获得的输入数据调用服务层中的主体服务程序库中的逻辑代码;
步骤三、主体服务程序库中的逻辑代码调用DAO层的数据访问函数在缓存数据库中进行查询,若查询到结果,则将结果通过数据访问对象层传入到服务层中进行哈希连接或排序连接,最后通过交互层显示结果;若没有查询到结果则直接调用存储层获得查询结果,将查询结果通过数据访问对象层传入服务层进行哈希连接或排序连接,最后将连接后的结果保存在缓存系统中的同时将结果显示在交互层。
Claims (10)
1.一种包含时序数据库的多模态存储缓存系统,其特征在于:所述系统包括:交互层、控制层、服务层、数据访问对象层、缓存层、存储层;
所述交互层用于接收用户输入的数据、显示查询结果数据以及在接收到用户输入的数据后启动控制层;
所述控制层用于校验接口参数并在校验合格后根据交互层输入的数据调度服务层;
所述服务层用于实现数据查询业务逻辑,包括:基本库、日志库、数据模型库、主体服务程序库;
所述基本库用于提供业务功能插件,包括:数据格式功能插件、数据模型对象的序列化和反序列化操作功能插件、常量池插件、数据预处理功能插件;
所述数据预处理包括:数据库的建库、建表、更改数据格式并插入数据;
所述日志库用于记录程序发生的错误、性能测试的进度和性能测试的结果;
所述日志库记录程序发生错误的等级包括:exception、warn、error;
所述数据模型库用于存储数据对应数据库中表的抽象数据类型和连接操作执行结果的抽象数据类型;以及构造数据类型对应的数据模型,数据的读取以及更新操作;所述主体服务程序库用于存储系统的业务逻辑代码;
所述系统的业务包括:调用数据访问对象层的数据访问函数,并在缓存层进行流量检查和拦截;建立缓存击穿容灾机制、缓存穿透容灾机制、缓存雪崩容灾机制;利用哈希连接算法或排序连接算法对在缓存层或存储层获取的查询结果表进行连接;
所述缓存击穿容灾机制用于防止由于大量查询数据未命中缓存而导致查询存储层的请求量过大,进而导致的存储层瘫痪;
所述缓存雪崩容灾机制用于防止由于大量缓存数据过期时间相同而导致的存储层崩溃;
所述缓存穿透容灾机制用于防止由于大量请求访问的数据是缓存层和存储层都不存在的热点key,进而导致的存储层瘫痪;
所述数据访问对象层用于利用数据访问函数调用缓存层或存储层进行单点数据查询或批量数据查询,并将查询到的数据序列化处理后返回给服务层;
所述缓存层采用memcache,用于缓存数据访问对象层从存储层库中读取的数据;
所述存储层采用MySQL关系数据库、MongoDB文档数据库以及cnosdb时序数据库,用于存储数据。
2.根据权利要求1所述的一种包含时序数据库的多模态存储缓存系统,其特征在于:所述缓存击穿容灾机制用于防止由于大量查询数据未命中缓存而导致查询存储层的请求量过大,进而导致的存储层瘫痪,具体容灾策略如下:
在每个查询请求线程上添加自旋锁,在并发的多个查询请求中,只有一个查询请求线程A能执行数据库查询操作,其他查询请求线程则一直自旋直到A将查询到的数据写入缓存,其他线程直接通过缓存进行查询。
3.根据权利要求2所述的一种包含时序数据库的多模态存储缓存系统,其特征在于:所述缓存穿透容灾机制用于防止由于大量请求访问的数据是缓存层和存储层都不存在的热点key,进而导致的存储层瘫痪,具体容灾策略为:
采用hash技术记录存储层中存在的热点key,对于查询请求,判断查询内容是否能匹配到存储层中的热点key,若能匹配到热点key则存储层中存在查询的数据条目,则对存储层进行访问是否存在该条目;若无法匹配到热点key,则不存在查询的数据条目,则直接返回结果不对数据库进行访问。
4.根据权利要求3所述的一种包含时序数据库的多模态存储缓存系统,其特征在于:所述缓存雪崩容灾机制用于防止由于大量缓存数据过期时间相同而导致的存储层崩溃,具体容灾策略如下:根据时序数据库本身存储的数据对象的过期时间,设置满足预设范围的随机过期时间。
5.根据权利要4所述的一种包含时序数据库的多模态存储缓存系统,其特征在于:所述哈希连接算法包括以下三中情况的连接:两个子查询目标数据均具有缓存权限的哈希连接,两个子查询目标数据中只有一个数据具有缓存权限的哈希连接,两个子查询目标数据均不具有缓存权限的哈希连接;
所述两个子查询分别为针对同一数据同时在不同两个数据库中进行的查询。
6.根据权利要5所述的一种包含时序数据库的多模态存储缓存系统,其特征在于:所述两个子查询目标数据均具有缓存权限的哈希连接,具体如下:
S101、在连接操作时创造多个独立线程;
S102、在每个独立线程中,根据两个子查询结果数据的热点key值在缓存层中查找对应的数据值,若命中缓存则直接返回数据,若没有命中缓存则将存储层中的数据回源到缓存层中并返回调用线程;
S103、将S102获取的数据进行join操作获得每个线程的连接结果;
S104、将每个线程的连接结果统一合并获得最终连接结果。
7.根据权利要6所述的一种包含时序数据库的多模态存储缓存系统,其特征在于:所述两个子查询目标数据中只有一个数据具有缓存权限的哈希连接,具体如下:
S201、服务层直接通过访问对象层调用存储层批量查询没有缓存权限的子查询M的数据,获取没有缓存权限的子查询M的查询结果;
S202、将M的查询结果加载到缓存层中,创建多个独立的线程并将M的查询结果平均分配给各个独立线程;
S203、在缓存层中获取具有缓存权限的子查询N查找数据的热点key对应的value值,并将每个线程中的value值进行join操作,获得每个线程中N的连接结果;
S204、在每个独立线程中遍历M的查询结果,并对M的查询结果执行Join操作,获得每个独立线程中M的连接结果;
S205、对每个线程中N的连接结果和M的连接结果进行Join操作获得每个线程的连接结果,最后将所有线程的连接结果统一合并获得最终连接结果。
8.根据权利要7所述的一种包含时序数据库的多模态存储缓存系统,其特征在于:所述两个子查询目标数据均不具有缓存权限的哈希连接,具体如下:
S301、两个子查询a、b均由服务层通过访问对象层直接调用存储层进行批量查询操作,获得两个子查询的查询结果;
S302、创建多个独立线程,将两个子查询的查询结果分别平均分配给各个独立线程;
S303、在每个独立线程内部,为每个子查询结果进行哈希分桶,获得每个独立线程的子查询结果子集的哈希表;
所述哈希分桶采用如下方式:获得每个子查询结果中数据id的hash值,并分别存储到由List组成的数组中;
S304、对S303获取的每个哈希表中a查询结果进行遍历,并将a中的hash值与b中的hash进行匹配,将hash值一致的数据id对应的查询结果进行join连接,获得连接结果。
9.根据权利要8所述的一种包含时序数据库的多模态存储缓存系统,其特征在于:所述排序连接算法包括以下三种情况的连接:两个子查询目标数据都具有缓存权限的连接、两个子查询目标数据中仅有一个数据具有缓存权限的连接、两个子查询目标数据均没有缓存权限的连接;
所述两个子查询目标数据都具有缓存权限的连接,具体如下:
首先,两个子查询均按照热点key的顺序由服务层通过访问对象层调用缓存层获取每个子查询的查询结果,获取的结果集即为有序数据集;
然后、将两个子查询的查询结果,使用双指针归并有序数组的方式进行排序连接,获得连接结果;
所述两个子查询目标数据中仅有一个数据具有缓存权限的连接,具体如下:
首先,获取没有缓存权限的子查询x的有序数据:
由服务层通过访问对象层调用缓存层获取目标数据,接着有序遍历查询所需要的热点key值,获取x的有序数据;
然后,获取没有缓存权限的子查询y的有序数据:
由服务层通过访问对象层调用存储层获取y的目标数据,接着重写比较器,利用重写后的比较器调用sort函数对y的目标数据进行排序,获取y的有序数据;
最后,使用双指针归并有序数组的方式对x的有序数据和y的有序数据进行排序连接,获得连接结果;
所述两个子查询目标数据均没有缓存权限的连接,具体如下:
由服务层通过访问对象层调用存储层获取两个子查询的目标数据,接着重写比较器,利用重写后的比较器调用sort函数对两个子查询的目标数据进行排序,获取两个子查询的有序数据,再使用双指针归并有序数组的方式两个子查询的有序数据进行排序连接,获得连接结果。
10.根据权利要9所述的一种包含时序数据库的多模态存储缓存查询方法,其特征在于,所述方法具体过程如下:
步骤一、交互层接收用户输入的数据,并将输入数据传输给控制层;
步骤二、控制层调用服务层,根据获得的输入数据调用服务层中的主体服务程序库中的逻辑代码;
步骤三、主体服务程序库中的逻辑代码调用数据访问对象层的数据访问函数在缓存层中进行查询;若查询到结果,则将结果通过数据访问对象层传入到服务层中进行哈希连接或排序连接,最后通过交互层显示结果;若没有查询到结果则直接调用存储层获得查询结果,将查询结果通过数据访问对象层传入服务层中进行哈希连接或排序连接,最后将连接后的结果保存在缓存系统中的同时将结果显示在交互层。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111682432.1A CN114329155A (zh) | 2021-12-30 | 2021-12-30 | 一种包含时序数据库的多模态存储缓存系统及查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111682432.1A CN114329155A (zh) | 2021-12-30 | 2021-12-30 | 一种包含时序数据库的多模态存储缓存系统及查询方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114329155A true CN114329155A (zh) | 2022-04-12 |
Family
ID=81022916
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111682432.1A Pending CN114329155A (zh) | 2021-12-30 | 2021-12-30 | 一种包含时序数据库的多模态存储缓存系统及查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114329155A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114911830A (zh) * | 2022-05-12 | 2022-08-16 | 平安科技(深圳)有限公司 | 基于时序数据库的索引缓存方法、装置、设备及存储介质 |
CN116662449A (zh) * | 2023-06-14 | 2023-08-29 | 浙江大学 | 基于广播子查询缓存的olap查询优化方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2469424A1 (en) * | 2010-12-23 | 2012-06-27 | Sap Ag | Hash-join in parallel computation environments |
US20130275364A1 (en) * | 2012-04-17 | 2013-10-17 | Renmin University Of China | Concurrent OLAP-Oriented Database Query Processing Method |
US20160275078A1 (en) * | 2015-03-20 | 2016-09-22 | International Business Machines Corporation | Parallel build of non-partitioned join hash tables and non-enforced n:1 join hash tables |
CN107784030A (zh) * | 2016-08-31 | 2018-03-09 | 华为技术有限公司 | 一种处理连接查询的方法及装置 |
CN109241049A (zh) * | 2018-07-04 | 2019-01-18 | 杭州数云信息技术有限公司 | 一种olap架构 |
CN113626478A (zh) * | 2021-07-20 | 2021-11-09 | 南京满星数据科技有限公司 | 一种基于多级缓存实现气象数据服务调用方法 |
-
2021
- 2021-12-30 CN CN202111682432.1A patent/CN114329155A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2469424A1 (en) * | 2010-12-23 | 2012-06-27 | Sap Ag | Hash-join in parallel computation environments |
US20130275364A1 (en) * | 2012-04-17 | 2013-10-17 | Renmin University Of China | Concurrent OLAP-Oriented Database Query Processing Method |
US20160275078A1 (en) * | 2015-03-20 | 2016-09-22 | International Business Machines Corporation | Parallel build of non-partitioned join hash tables and non-enforced n:1 join hash tables |
CN107784030A (zh) * | 2016-08-31 | 2018-03-09 | 华为技术有限公司 | 一种处理连接查询的方法及装置 |
CN109241049A (zh) * | 2018-07-04 | 2019-01-18 | 杭州数云信息技术有限公司 | 一种olap架构 |
CN113626478A (zh) * | 2021-07-20 | 2021-11-09 | 南京满星数据科技有限公司 | 一种基于多级缓存实现气象数据服务调用方法 |
Non-Patent Citations (4)
Title |
---|
林志煌: "《Hive性能调优实战》", 31 January 2020, 机械工业出版社 * |
袁林,尹皓,陈宁: "《React+Node.js开发实战 从入门到项目上线》", 28 February 2021, 机械工业出版社 * |
钟林森,罗剑: "《Spring Boot企业级项目开发 从入门到精通》", 31 December 2020, 华中科技大学出版社 * |
陈红顺,黄秋颖,周鹏: "《数据库系统原理与实践》", 31 July 2018, 中国铁道出版社 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114911830A (zh) * | 2022-05-12 | 2022-08-16 | 平安科技(深圳)有限公司 | 基于时序数据库的索引缓存方法、装置、设备及存储介质 |
CN114911830B (zh) * | 2022-05-12 | 2024-04-05 | 平安科技(深圳)有限公司 | 基于时序数据库的索引缓存方法、装置、设备及存储介质 |
CN116662449A (zh) * | 2023-06-14 | 2023-08-29 | 浙江大学 | 基于广播子查询缓存的olap查询优化方法及系统 |
CN116662449B (zh) * | 2023-06-14 | 2024-06-04 | 浙江大学 | 基于广播子查询缓存的olap查询优化方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107247808B (zh) | 一种分布式NewSQL数据库系统及图片数据查询方法 | |
US10474645B2 (en) | Automatically retrying transactions with split procedure execution | |
US20180095829A1 (en) | Data replication in a database management system | |
US9798759B2 (en) | Delegation of database post-commit processing | |
US8510316B2 (en) | Database processing system and method | |
US9262458B2 (en) | Method and system for dynamically partitioning very large database indices on write-once tables | |
US7158996B2 (en) | Method, system, and program for managing database operations with respect to a database table | |
US7146365B2 (en) | Method, system, and program for optimizing database query execution | |
US9529881B2 (en) | Difference determination in a database environment | |
US20180336263A1 (en) | Hash Collision Tables For Relational Operations | |
US11275759B2 (en) | Data storage method and apparatus, server, and storage medium | |
CN114329155A (zh) | 一种包含时序数据库的多模态存储缓存系统及查询方法 | |
US9367585B2 (en) | Data storage and query method | |
US10515078B2 (en) | Database management apparatus, database management method, and storage medium | |
US9870399B1 (en) | Processing column-partitioned data for row-based operations in a database system | |
US20240020298A1 (en) | Serialization of data in a concurrent transaction processing distributed database | |
CN107590199B (zh) | 一种面向内存的多线程数据库设计方法 | |
US12061587B2 (en) | Query processing using hybrid table secondary indexes | |
US20240095248A1 (en) | Data transfer in a computer-implemented database from a database extension layer | |
CN115629822A (zh) | 一种基于多核处理器的并发事务处理方法及其系统 | |
CN112000666B (zh) | 一种面向列的数据库管理系统 | |
US12086154B1 (en) | Columnar cache in hybrid transactional/analytical processing (HTAP) workloads | |
CN118132598B (zh) | 基于多级缓存的数据库数据处理方法及设备 | |
US11829354B2 (en) | Managing a read statement of a transaction | |
EP4390718A1 (en) | Method and apparatus for controlling database transaction, and related device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |