首页> 中国专利> 一种Druid压实方法

一种Druid压实方法

摘要

本发明公开了一种Druid压实方法,属于数据查询技术领域。包括:通过Druid片段服务接口获取数据源的片段信息;筛选出需要参与压实的片段列表;对数据进行合并和汇总生成新的片段,新片段的开始根分区号与结束根分区号覆盖了参与压实的片段,生成的片段信息保存在Druid深度存储中;向Druid元数据库中写入需要新增的片段信息,Druid协调节点会从深度存储中加载到新的片段到历史节点,完成压实。可以提高查询性能。

著录项

  • 公开/公告号CN112307008A

    专利类型发明专利

  • 公开/公告日2021-02-02

    原文格式PDF

  • 申请/专利权人 湖南蚁坊软件股份有限公司;

    申请/专利号CN202011463087.8

  • 发明设计人 曾锐;王晓斌;

    申请日2020-12-14

  • 分类号G06F16/215(20190101);G06F16/28(20190101);

  • 代理机构43233 长沙心智力知识产权代理事务所(普通合伙);

  • 代理人谢如意

  • 地址 410000 湖南省长沙市高新开发区文轩路27号麓谷钰园A4栋N单元6层605号房

  • 入库时间 2023-06-19 09:47:53

说明书

技术领域

本发明涉及数据查询技术领域,尤其涉及一种Druid压实方法。

背景技术

Apache Druid是一个面向海量数据的分布式、高性能OLAP工具,它集时间序列数据库、数据仓库和全文检索系统特点于一体,兼具海量数据的高效摄入和快速查询能力,得到了国内外众多公司的广泛使用。

Druid基于近时序(如一天内数据乱序,跨天是有序)数据来设计,对于点击流、访问流、活动流等时序性较强的数据具有很高的处理性能。然而,对于时序性不强的乱时序数据(例如实时摄入的数据除了大部分当天的数据外,还包含之前较长时间段内的一些历史数据),Druid的处理性能就会大打折扣。

Druid摄取乱时序数据后,会将数据写入到对应时间段的时间块(例如每天一个时间块),的不同片段中。由于乱时序数据的时间跨度较大,导致数据没法做到充分的roll-up(一种预处理方式,Druid在数据摄取时通过roll-up来将原始数据聚合到片段中,以节约存储空间,并提高查询统计的性能,越高的roll-up率意味着片段碎片越少,查询速度越快),这样就会生成大量的片段碎片,在进行查询的时需要对这些碎片片段做聚合计算,该计算占用较高的CPU和磁盘IO资源,最终导致查询速度缓慢。

为解决片段碎片问题,Druid会定时对所属相同时间段的不同片段进行压实操作(一种数据合并的操作),减少片段碎片。目前Druid的压实任务存在一些问题,首先压实任务优先级低于数据摄取任务,数据摄取任务会长期保持着片段锁,导致压实任务很难获取到锁触发任务。再则压实任务必须对整个时间段内所有的片段进行全量的压实,随着数据量的增加,压实任务的运行时间会越来越长,最终会导致压实片段提高查询速度的效果。

以上问题的存在,对于Druid如何维持查询的高性能,特别是对于乱时序数据的应用场景,是一个很大的挑战。

发明内容

为了克服上述技术问题,本发明提供了一种Druid压实方法,可以提高查询性能。

为解决上述问题,本发明提供的技术方案为:

一种Druid压实方法,包括:通过Druid的接口获取数据源的片段信息;筛选需要参与压实的片段,生成包含有多个片段信息集合压实计划;提交MapReduce进行压实;Mapper 获取参与压实片段的每行信息,将该信息映射到需要生成新片段分区号;Reducer对数据进行合并和汇总生成新片段,新片段分区编码覆盖需要替换的片段分区号,生成的片段信息保存在Druid深度存储中;向Druid元数据库中写入需要新增的片段元数据信息,Druid协调节点会定时将新片段从深度存储中加载到历史节点,以完成压实。

可选的,所述片段信息至少包括:片段分区号、时间间隔、字节大小。

可选的,所述片段信息集合生成方法为:

segmentsTotalBytes/segmentBytesPerRow < maxCompactionRows;

其中:

segmentsTotalBytes :连续的片段字节大小之和;

segmentBytesPerRows:片段每行记录平均字节大小;

maxCompactionRows :压实任务处理最大行数;

连续的片段字节大小之和与片段每行记录平均字节大小相除,求出总行数,总行数小于压实任务处理最大行数,其中,压实任务处理最大行数提前设定,是常数值,根据不同系统测试而来,为经验值。

可选的,所述片段信息集合生成后,产生所述的压实计划。

可选的,所述片段信息集合作为Mapper任务的输入参数。

采用本发明提供的技术方案,与现有技术相比,具有如下有益效果:

(1)采用Hadoop MapReduce进行压实,对于Druid集群本身不会产生额外的负载,Hadoop在Druid中只是扮演了数据备份的角色。

(2)程序定时扫描数据源,按需提交压实任务、支持增量,可在摄取任务上传片段之后马上进行,单个压实处理的数据集在可控范围内简单并高效。

(3)新的片段会标记被覆盖片段分区号范围,无数据丢失风险。

附图说明

图1为本发明一实施例提供的一种Druid压实方法流程图。

具体实施方式

为进一步了解本发明的内容,结合附图及实施例对本发明作详细描述。

下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与发明相关的部分。本发明中所述的第一、第二等词语,是为了描述本发明的技术方案方便而设置,并没有特定的限定作用,均为泛指,对本发明的技术方案不构成限定作用。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

实施例1

本实施例提供了一种Druid压实方法,包括:通过Druid片段服务接口获取数据源的片段信息;筛选指定时间块片段信息集合生成压实计划;提交MapReduce任务进行压实;Mapper获取片段每行的分区信息,与压实计划中的指定时间块对应的分区范围进行匹配;Reducer对数据进行合并和汇总生成新的片段信息,将新片段分区编号待覆盖片段分区,生成新的片段信息保存在Druid深度存储目录中;向Druid元数据库中写入需要新增的片段元数据信息,Druid协调节点会将片段从深度存储中加载到历史节点,以完成压实。

作为本实施例可选的实施方式,所述片段信息至少包括:片段分区号、时间间隔、字节大小。作为本实施例可选的实施方式,所述片段信息集合生成方法为:segmentsTotalBytes/segmentBytesPerRow

segmentsTotalBytes :partitionId连续的segment字节大小之和;segmentBytesPerRows:segment每行记录平均字节大小;maxCompactionRows :参与compaction最大行数;segmentsTotalBytes :连续的片段字节大小之和;

segmentBytesPerRows:片段每行记录平均字节大小;

maxCompactionRows :压实任务处理最大行数;

连续的片段字节大小之和与片段每行记录平均字节大小相除,求出总行数,总行数小于压实任务处理最大行数,其中,压实任务处理最大行数提前设定,是常数值,根据不同系统测试而来,为经验值。

作为本实施例可选的实施方式,所述片段信息集合生成后,产生所述的压实计划。作为本实施例可选的实施方式,所述的压实计划包括在指定时间块中参与压实片段信息的多个片段分区范围。作为本实施例可选的实施方式,所述片段信息集合的多个片段分区范围为映射简化任务的输入参数。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号