一种非时序数据处理方法
文献发布时间:2023-06-19 09:27:35
技术领域
本发明涉及数据处理技术领域,具体是一种基于Elasticsearch的索引智能滚动及数据冷热分离方法。
背景技术
随着移动互联网的迅猛发展,公司业务不断拓展,相应的业务数据、日志数据也随之飞速增长。传统数据库难以满足大体量数据的多维度实时查询及统计,出现了数据存储及获取低效的难题。由于无法对大规模数据集中检索分析,从而导致难以从数据中获取到有价值的信息。
Elasticsearch是一个基于Lucene(Lucene是apache软件基金会4jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包)的分布式、可扩展、高可用、实时的搜索与数据分析引擎,可以用来做全文检索、结构化查询、海量数据进行近实时处理、分析统计等。时至今日,Elasticsearch已经在各大企业以及中小企业中得到了广泛应用,但随着企业数据的快速增长,Elasticsearch集群也需要进行扩容,而对于预算有限,服务器扩容速度跟不上数据增长速度的企业来说,尚未有既不需要扩容,也不降低检索性能的成熟的方案。
发明内容
在下文中给出了关于本发明实施例的简要概述,以便提供关于本发明的某些方面的基本理解。应当理解,以下概述并不是关于本发明的穷举性概述。它并不是意图确定本发明的关键或重要部分,也不是意图限定本发明的范围。其目的仅仅是以简化的形式给出某些概念,以此作为稍后论述的更详细描述的前序。
为了不降低检索性能,本申请通过索引滚动及数据冷热分离的方式来达到曲线救国的目的。同时,基于Elasticsearch官方所提供的rollover(滚动)接口只能针对具有强时序性的数据引进行滚动拆分,例如日志数据以及部分业务数据等,并且对于已经滚动拆分后的历史索引中的数据,用户想要进行修改和删除时需要知道待操作的数据所在的具体索引,因此操作会十分繁琐,而且稍有差池可能会造成不可预料的后果。本申请针对企业中产生的大量具有弱时序性或非时序性的数据,根据用户配置,能够实现索引的自动滚动拆分,并且对于常见操作如:insert、update、delete、query、bulk、delete_by_query、update_by_query、mapping、setting、refresh等操作,可以实现请求自动路由分发,同时数据会定期自动进行冷热分离处理,这些底层实现完全对用户透明,用户操作起来和平常操作单个索引的感觉别无两样。
根据本申请的一个方面,提供一种非时序数据处理方法,其包括:
预先执行如下操作:根据预先设定的规则将集群的节点按性能高低来分为热节点和冷节点,其中高性能的热节点用于存储热点数据(经常被检索的数据),性能低的冷节点用于存储冷数据(很少被检索的数据);创建一个或者多个索引模板并进行环境配置,索引模板实现索引自动滚动以及自动创建,环境配置用于标记和存储索引模板信息和路由信息,索引模板信息以及路由信息包括索引模板名、路由字段、路由周期、保留热节点的索引数、创建时间和更新时间;
接收用户的命令请求并解析,拦截针对环境配置中的索引的命令请求,并根据环境配置中该索引对应的路由信息转发,实现自动路由。本申请实现通过对用户的请求拦截并进行转发来实现自动路由,其可以在索引拆分之后,能够把用户的请求转发到相对应的索引,从而保证索引拆分这个过程完全对用户透明。
进一步的,该方法还包括对索引进行拆分,将数据量大于预设阈值的大索引拆成多个小索引的步骤。其中,预设阈值可以设为当集群总磁盘10T,单索引100G。索引拆分一般是将已有的数据量较大的索引,如果是时序数据,则按照某个时间周期,例如:月、季、年等拆分成一个个的小索引,如果是非时序数据,则按照预定的规则将数据量大的大索引拆分为数据量小的小索引。
其中,索引自动滚动具体包括:索引模板中具有热索引(活跃索引)、冷索引(不活跃索引)、一个用于写入的索引别名和一个用于读取(搜索)的索引别名,用于写入的索引别名指向热索引,用于读取的索引别名指向冷索引;热索引具有和热节点数量一样多的分片,可以充分发挥昂贵硬件的索引写入能力;索引进行拆分后,针对新增的数据新创建一个最新周期的新索引,该最新周期内的所有数据都会被保存在这个新索引里面。
进一步的,该方法还包括索引模板以及环境配置定时更新的步骤。
对于拆分后的索引,如果对历史数据已经很少有新增、修改、删除以及查询等操作的时候,例如半年前或者一年前的数据,这些历史数据则不应当再被保存在硬件配置较高的热节点上,因为热节点应该用来保存那些操作比较频繁的数据。因此,本方法会自动将历史数据从热节点移动至冷节点,保证了热节点的性能。因此,该方法还包括根据配置自动将热节点中的数据在请求量少的时候移动至冷节点的步骤。该步骤主要是通过为索引配置标签的方式来实现的,Elasticsearch集群的热冷热属性是通过节点的标签参数来区分,因此将每个索引配置冷热属性的标签,并根据操作频繁度来自动修改该索引的标签的冷热属性;当修改了某个索引的冷热属性标签后,则定时对该索引进行移动。由于移动索引是很耗集群资源的操作,因此本方法中通过定时任务,在集群请求量较低的时候,会自动修改索引的标签值,以达到索引从热节点移动至冷节点的目的,同时避免了该操作对集群性能带来的影响。
其中,将每个索引配置冷热属性的标签,并根据操作频繁度来自动修改该索引的标签的冷热属性,还包括将每个拆分后的索引的标签配置为冷属性。
索引自动创建是当请求路由生成的索引在环境配置缓存中未找到时,则进行索引的自动创建。这样无论是在对现有的历史数据进行批量路由,还是新数据的写入,都能够避免去手动创建索引,对用户的操作更加友好。
本发明的方案可利用ES提供的插件接口,开发成插件形式,插件随ES服务同时启动,无需单独做成服务。同时配置也非常简单,使用者操作起来与正常操作索引并没有什么区别,底层实现细节均对用户透明,具有便于使用的优势。
另外,对于具有弱时序性或非时序性的索引,随着数据量增加,读写速度和检索速度都会越来越慢,而本发明能够对此类索引进行拆分,将大索引拆成多个小索引,且支持修改删除等操作,同时通过解析查询条件最终只会查询对应的路由索引,避免扫描所有路由索引,对读写操作都起到了非常明显的优化作用。
此外,集群中的服务器配置参差不齐,热节点配置较高,用来保留经常被检索的数据,冷节点配置相对较低,用来保存很少被检索的数据。本插件会根据配置自动将数据在请求量少的时候移动至冷节点,充分利用集群的硬件资源,可以一方面保证热数据的性能,另一方面保证冷数据的存储,降低存储成本。
现有基于Elasticsearch的检索方案,基本是针对时序数据的处理方案。而目前业界针对时序性数据的拆分和滚动,也只局限于Elasticsearch官方提供的一两个接口,并且该接口使用的局限性较大,一般要求用户对于已经拆分出来的索引不能再做数据新增、修改或删除等操作,如果需要进行这些数据新增、修改或删除等操作,则用户必须手动指定具体的历史索引,查询操作亦是如此,因此使用起来极为不便。而本发明两者兼顾,针对时序性和非时序性的数据,甚至从理论上来说,只要数据中包含日期类型的字段,用户无需对项目做任何改动,只需进行简单的配置,本方法均可做到索引自动拆分及滚动,用户完全无感。因此,本申请的方案特别适用于弱时序性或非时序性且数据量巨大的索引。
附图说明
本发明可以通过参考下文中结合附图所给出的描述而得到更好的理解,其中在所有附图中使用了相同或相似的附图标记来表示相同或者相似的部件。所述附图连同下面的详细说明一起包含在本说明书中并且形成本说明书的一部分,而且用来进一步举例说明本发明的优选实施例和解释本发明的原理和优点。在附
图中:
图1为本发明的请求拦截与修改的原理;
图2为本发明的自动路由的流程图;
图3为本发明实施例中的查询结果示意图;
图4为本发明的数据自动定期冷热分离的示意图。
具体实施方式
下面将参照附图来说明本发明的实施例。在本发明的一个附图或一种实施方式中描述的元素和特征可以与一个或更多个其它附图或实施方式中示出的元素和特征相结合。应当注意,为了清楚的目的,附图和说明中省略了与本发明无关的、本领域普通技术人员已知的部件和处理的表示和描述。
本发明实施例提供一种非时序数据处理方法,根据预先设定的规则将集群的节点按性能高低来分为热节点和冷节点,其中高性能的热节点用于存储热点数据,性能低的冷节点用于存储冷数据;创建一个或者多个索引模板并进行环境配置,索引模板实现索引自动滚动以及自动创建,环境配置用于标记和存储索引模板信息和路由信息;接收用户的命令请求并解析,拦截针对环境配置中的索引的命令请求,并根据环境配置中该索引对应的路由信息转发,实现自动路由。自动路由是通过对用户的请求拦截并进行转发来实现的,目的是为了在索引拆分之后,能够把用户的请求转发到相对应的索引,从而保证索引拆分这个过程完全对用户透明。
其中,该非时序数据处理方法通过对Elasticsearch部分源码的修改,基于用户配置,实现了用户请求拦截与路由转发、索引自动创建、数据自动定期冷热分离等功能。本实施例中,基于该处理方可形成为一款Elasticsearch插件,便于用户使用。下面针对每个功能做具体说明如下:
预先执行如下操作:
一、自动路由(用户请求拦截与路由转发)
用户请求拦截与路由转发参见图1,本发明的Elasticsearch(简称ES)的请求处理流程部分流程如图1所示,Rest请求会被一层一层转发并最终被封装成BaseRestHandler的实现类,请求处理过程中会先调用该类的handleRequest方法,在此方法中会再调用具体实现类的prepareRequest方法来处理请求,但源码中所有的BaseRestHandler的实现类都是被注册成了单例模式,所以无法通过重写prepareRequest方法的方式来修改请求,因此只能通过创建与原实现类相同的类并在prepareRequest方法中加入自己的逻辑并以此替换原实现类的方式达到拦截并修改请求的目的。
用户只需要进行简单配置即可使用本Elasticsearch插件,对应的配置说明如表一所示:
表一:
索引自动滚动具体包括:索引模板中具有热索引(活跃索引)、冷索引(不活跃索引)、一个用于写入的索引别名和一个用于读取(搜索)的索引别名,用于写入的索引别名指向热索引,用于读取的索引别名指向冷索引;热索引具有和热节点数量一样多的分片,可以充分发挥昂贵硬件的索引写入能力;索引进行拆分后,针对新增的数据新创建一个最新周期的新索引,该最新周期内的所有数据都会被保存在这个新索引里面。也可以是当定时到或者热索引太满(或者太老)的时候,新建一个索引并且索引别名自动从旧索引切换到新索引(该步骤即为索引滚动过程);移动旧索引到冷节点上并且缩小为一个分片,之后可以强制合并和压缩。同时,索引拆分一般是将已有的数据量较大的索引,按照某个时间周期,例如:月、季、年等拆分成一个个的小索引。而索引滚动是指在索引已经拆分的基础上,对于新增的数据,会新创建一个最新周期的索引,该周期内的所有数据都会被保存在这个新索引中。
对于需要自动滚动的索引,使用索引模板创建索引不仅操作简单,而且有配置统一,管理方便等优点。该配置保存在一个名为t_es_route_config的索引中,在插件中使用一个ConcurrentHashMap集合进行缓存,同时启动一个定时任务定时刷新。
对于配置中的索引,本插件会拦截针对该索引的部分请求,如:新增文档(insert)、修改文档(update)、删除文档(delete)、查询(query)、批操作(bulk)、条件删除(delete_by_query)、条件更新(update_by_query)、修改映射(mapping)、修改配置(setting)、索引刷新(refresh)等。拦截到请求后,本插件会跟据被请求索引的对应配置中的“路由字段”的值,生成该请求应该被分发到的索引,然后进行请求转发,达到自动路由的目的。该流程图如图2所示,图中的index_1到index_5是相同索引模板创建出来的索引,其mapping及相关配置都是完全相同的。
对于非查询类的请求,一般都是根据其请求文档中的路由字段的值,生成其对应的路由索引,再将请求的中索引修改为路由索引再进行后续处理。而对于查询请求,拦截后需要对查询条件进行解析,生成最终需要查询的索引列表,避免扫描所有路由索引,达到优化查询的效果。
现举例说明:
索引模板配置为:
创建第一个索引,自动匹配模板,后续的所有请求都只针对该索引进行操作:
路由配置如下:
当收到插入(insert)请求时:
路由插件最终会将数据插入到t_rollover_test_202003m中,执行查询:
查询结果如图3所示,与预期一致。
二、索引自动创建
对于insert请求路由生成的索引在配置缓存中未找到时,此时插件会进行索引的自动创建,与此同时,插件中也有定时任务去定期创建即将生成的新索引。这样无论是在对现有的历史数据进行批量路由,还是新数据的写入,都能够避免去手动创建索引,对用户的操作更加友好。
三、数据自动定期冷热分离
Elasticsearch插件会定时检查所有路由索引,根据配置,相同的路由索引最终只会在热节点中保留最新的N(即配置中“KEEP_HOT”的字段值)个索引,其余索引会被移动到冷节点。为避免数据移动对集群造成的资源占用,因此该定时任务一般在凌晨请求少的时候进行。冷热分离示例效果如图4所示。
本发明的方案不仅适用于时序性,同时也非常适用于非时序性的数据,甚至从理论上来说,只要数据中包含日期类型的字段,用户无需对项目做任何改动,只需进行简单的配置,本方法均可做到索引自动拆分及滚动,用户完全无感。综上,本申请通过上述方案,具有如下优点:
1、优化弱时序性或非时序性且数据量巨大的索引:对于具有弱时序性或非时序性的索引,随着数据量增加,读写速度和检索速度都会越来越慢,而本发明能够对此类索引进行拆分,将大索引拆成多个小索引,且支持修改删除等操作,同时通过解析查询条件最终只会查询对应的路由索引,避免扫描所有路由索引,对读写操作来说都起到了非常明显的优化作用。
2、充分利用集群硬件资源:集群中的服务器配置参差不齐,热节点配置较高,用来保留经常被检索的数据,冷节点配置相对较低,用来保存很少被检索的数据。本插件会根据配置自动将数据在请求量少的时候移动至冷节点,充分利用集群的硬件资源。
3、使用便捷:本发明利用ES提供的插件接口,开发成插件形式,插件随ES服务同时启动,无需单独做成服务。同时配置也非常简单,使用者操作起来与正常操作索引并没有什么区别,底层实现细节均对用户透明。
应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。
此外,本发明的方法不限于按照说明书中描述的时间顺序来执行,也可以按照其他的时间顺序地、并行地或独立地执行。因此,本说明书中描述的方法的执行顺序不对本发明的技术范围构成限制。
尽管上面已经通过对本发明的具体实施例的描述对本发明进行了披露,但是,应该理解,上述的所有实施例和示例均是示例性的,而非限制性的。本领域的技术人员可在所附权利要求的精神和范围内设计对本发明的各种修改、改进或者等同物。这些修改、改进或者等同物也应当被认为包括在本发明的保护范围内。
- 一种非时序数据处理方法
- 一种电磁能系统业务时序数据压缩方法、非暂态可读记录媒体及数据处理装置