删除ES索引的方法及装置与流程

文档序号:16209189发布日期:2018-12-08 07:30阅读:1673来源:国知局
删除ES索引的方法及装置与流程

本公开涉及数据库技术领域,尤其涉及一种删除es索引的方法及装置。

背景技术

目前,大数据为人们的生活带来了巨大的改变,当前新兴的移动支付、语音识别、面部识别、系统画像、共享物品以及人工智能等应用均需要依靠大数据技术来实现。一份数据具有与其对应的一个生命周期(lifecycle),数据的产生、使用、迁移、清理以及销毁,集数据体验、数据清理、历史信息查询以及知识共享为一体。对一个系统来说,为了确保系统稳定、高效地运行,需要将数据量控制在一个稳定的水平,基于此,则诞生了dlm(datalifecyclemanagement,数据生命周期管理)。按照时间对数据进行划分,则数据可分为:热数据、温数据、冷数据、冻结以及解冻等阶段的数据。冷数据一般需进行备份归档、删除等操作。在一个场景下,提供数据监控业务的企业每天所产生的数据量是巨大的,如果设定的存储天数为七天,七天前的数据为冷数据,则源数据失去了存在的意义,且占用较大的存储空间,在这种情况下,则需要对这些冷数据执行删除操作。

es,即,elasticsearch,其提供了一个分布式多用户能力的全文搜索引擎。es的索引(index)是es对逻辑数据的逻辑存储,索引的结构是为快速有效地进行全文索引所准备的,它不存储原始值,其检索数据以json形式输出。



技术实现要素:

为了解决相关技术中存在的删除es索引操作较为复杂的问题,本公开提出了一种删除es索引的方法及装置。

根据本公开的一个方面,提供了一种删除es索引的方法,该方法应用于客户端,包括:生成es索引删除命令,所述es索引删除命令指示目标数据源中的待删除es索引;将es索引删除命令中指示的目标数据源中待删除es索引的索引名放入集合中,其中,一个所述集合中的待删除es索引按照同一周期生成;针对任一集合,向es服务器发送删除所述集合中的第一个es索引的请求,以使所述es服务器从所述目标数据源中删除所述第一个es索引;确定所述第一个es索引不存在于所述目标数据源中时,向所述es服务器发送删除所述集合中下一个es索引的请求,直至所述集合中的es索引均被删除。

根据本公开的第二个方面,提供了一种删除es索引的装置,该装置应用于客户端,包括:生成模块,用于生成es索引删除命令,所述es索引删除命令指示目标数据源中的待删除es索引;设置模块,用于将es索引删除命令中指示的目标数据源中待删除es索引的索引名放入集合中,其中,一个所述集合中的待删除es索引按照同一周期生成;第一发送模块,用于针对任一集合,向es服务器发送删除所述集合中的第一个es索引的请求,以使所述es服务器从所述目标数据源中删除所述第一个es索引;第二发送模块,用于确定所述第一个es索引不存在于所述目标数据源中时,向所述es服务器发送删除所述集合中下一个es索引的请求,直至所述集合中的es索引均被删除。

本实施例提供的删除es索引的方法,可根据es索引删除命令定期保留最近一段时间内生成的索引,删除除该段时间之外其他时间生成的索引,无需根据系统现场情况额外编辑索引删除脚本,降低了es索引删除的复杂度,减少了人力成本。

附图说明

包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。

图1是根据一示例性实施例示出的一种删除es索引的方法的流程图;

图2是根据一示例性实施例示出的按天生成的索引的示意图;

图3是根据一示例性实施例示出的按月生成的索引的示意图;

图4是根据一示例性实施例示出的按年生成的索引的示意图;

图5是根据一示例性实施例示出的一种删除es索引的方法的流程图;

图6是根据一示例性实施例示出的一种删除es索引的装置的框图。

具体实施方式

以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。

在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。

另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。

es索引定时删除机制在磁盘告警、存储规划中起到关键性的作用。es索引的定时删除操作可以是按es照索引的生成方式定时删除es索引,例如,对于按天生成的es索引,则按天删除es索引。但是在系统现场数据压力大的情况下,一般根据系统的现场情况编写索引删除脚本,配置相关参数后,利用crontab定时运行索引删除脚本,但额外增加索引删除脚本增加了定时删除索引机制的复杂度,以及人力成本。

图1是根据一示例性实施例示出的删除es索引的方法的流程图,该方法可以由客户端来实现,例如可以通过在客户端上配置es索引删除命令,根据es索引删除命令向服务器发送请求,请求删除相应的es索引,客户端可通过与es服务器进行交互,来确认es索引是否删除成功。其中,客户端和es服务器可以部署在同一个设备上,也可以分开部署,只要两者可以通信即可,本公开不作限定。如图1所示,该方法包括:

步骤101:生成es索引删除命令,所述es索引删除命令指示目标数据源中的待删除es索引;

在本公开中,目标数据源中的es索引可以包括按照多种周期生成的es索引,例如按天生成、按月生成、按日生成等等,还可以包括非周期性生成的es索引。

在一种可实现方式中,es索引删除命令可根据用户触发而生成,例如,用户在客户端上指示删除待删除es索引,则生成es索引删除命令;es索引删除命令还可以周期性生成,例如,可以预先配置一个定时器,当定时器到时,则生成es索引删除命令,然后定时器重置,开始重新计时。

该es索引删除命令可以用于指示保留最近一段时间段内生成的es索引、即将该最近一段时间段以外的时间生成的es索引删除。由用户触发生成的es索引删除命令时,该最近一段时间的时长可以由用户指定;周期性生成es索引删除命令时,该最近一段时间的时长可以小于上述定时器时间,也可以大于或等于上述定时器时长,本公开不作限制。例如,每7天生成一次es索引删除命令,该es索引删除命令可以指示保留最近5天内生成的es索引,也可以指示保留最近10天内生成的es索引,也可以指示保留最近7天内生成的es索引。

步骤102:将es索引删除命令中指示的目标数据源中待删除es索引的索引名放入集合中,其中,一个所述集合中的待删除es索引按照同一周期生成。

es索引删除命令中指示的待删除es索引可以包括按照多种周期生成的es索引,也可以包括非周期性生成的es索引,这里可以将按照同一种周期生成的es索引放入一个集合中。集合中的待删除es索引可以按照生成的时间排序。

步骤103:针对任一集合,向es服务器发送删除集合中的第一个es索引的请求;其中,集合中包括目标数据源中待删除es索引的索引名;

步骤104:确定所述第一个es索引不存在于所述目标数据源中时,向所述es服务器发送删除所述集合中下一个es索引的请求,直至所述集合中的es索引均被删除。

本实施例提供的删除es索引的方法,可根据es索引删除命令保留最近一段时间内生成的索引,删除除该段时间之外其他时间生成的索引,无需根据系统现场情况额外编辑索引删除脚本,降低了es索引删除的复杂度,减少了人力成本。

为了便于对本公开的删除es索引的方法进行说明,首先结合图2对本公开中涉及的索引的生成方式进行说明。

数据一般可通过logstash解析和java程序两种方式进入es,数据在进入es前会匹配es索引模板,在匹配es索引模板时,即符合某一es索引模板的数据进入该索引模板,es索引可以使用预定义的模板进行创建。例如,一个索引模板的名称为template_1,该模板中定义了template为“te*”,表示该模板对所有te开头的新索引都有效,模板中包括settings和mappings两个属性可以配置索引的生成方式,例如按天、月或年生成的索引,其中,按天生成的索引如图2所示,索引名为snmp-data-2017.12.10、snmp-data-2017.12.11…,其中,2017.12.10、2017.12.11表示索引生成的日期;按月生成的索引如图3所示,索引名为zjj-2017.01、zjj-2017.02…,其中,2017.01、2017.02表示索引的生成月份;按年生成的索引如图4所示,索引名为flow_ndp-2015、flow_ndp-2016,2015、2016表示索引的生成年份。

基于索引的生成方式,在一种可实现方式中,本公开的删除es索引的方法还可包括:所述生成es索引删除命令之后,所述方法还包括:确定待删除es索引不是按照预设的任一周期生成的es索引时,向es服务器发送删除所述待删除es索引的索引数据的请求,以使所述es服务器从所述目标数据源中删除所述待删除es索引的索引数据。由于删除索引数据会导致内存泄漏等问题,所以删除索引数据只在数据量少的情况下进行。在待删除es索引是非周期性生成的es索引时,可认为该es索引的数据量较少,则向es服务器发送删除待删除es索引的索引数据的请求。例如,如果es索引名后缀体现出该es索引是按照固定周期,例如,es索引的后缀为“-年.月.日”形式,则说明该es索引是按天生成的,则后续删除es索引;如果es索引没有按照固定周期生成,则可认为此es索引存储的文档数少(即数据少),后续删除es索引的数据,可以起到对少量并非周期性生成的索引的数据进行清理的目的,节省了磁盘空间。

以下分别对删除索引以及删除索引数据进行举例说明,在删除索引时,例如,有一个索引名称为zjj-2017.01.01的索引,里面有1000个文档,执行删除索引之后,该索引消失了,即被删除了;同样是名称为zjj-2017.01.01的索引,该索引包含1000个文档,执行删除索引数据操作之后,该索引还存在,但是文档数变为了0。

在一种可实现方式中,判断待删除es索引是否是按固定周期生成的es索引可包括:按照待删除es索引的索引名判断待删除es索引是否是按照固定周期生成的es索引。可以根据待删除es索引的后缀中是否包含时间周期的标识来判断,在es索引的后缀中包含时间周期的标识时,确定es索引是按照固定周期生成,在es索引的后缀中不包含时间周期的标识时,确定es索引不是按照固定周期生成。例如,按天生成的索引后缀为“-年.月.日”形式,按月生成的索引后缀为“-年.月”形式,按年生成的索引后缀为“-年”形式,其中,年、月、日均可被识别为时间周期的标识。基于对es索引的生成方式进行判断,可在后续删除es索引的数据时,对es索引加以区分,确保仅删除并非按固定周期生成的少量es索引的数据,避免了删除es索引的数据导致内存泄漏等问题。

在一种可实现方式中,确定所述第一个es索引不存在于所述目标数据源中,包括:在向es服务器发送删除所述集合中的第一个es索引的请求之后,等待预设时长,向所述es服务器发送第一确认请求;根据所述es服务器针对所述第一确认请求返回的第一信息确定所述第一个es索引删除失败时,向所述es服务器发送第二确认请求;根据所述es服务器针对所述第一确认请求返回的第一信息确定所述第一个es索引删除成功时,执行向所述es服务器发送删除所述集合中下一个es索引的请求的步骤。其中,向es服务器发送第一确认请求以请求确认es索引是否删除成功可以调用es的api(applicationprogramminginterface,应用程序接口)中的preparedelete()来实现,根据es服务器返回的isacknowledged()的值判断es索引是否删除成功,其中,服务器返回的isacknowledged()的值作为上述第一信息的一个示例,在该值为true时表示es索引删除成功,在该值为false时,表示es索引删除失败;向es服务器发送第二确认请求以请求确认删除的es索引是否存在于目标数据源可以调用es的api接口中的isexists()来实现,在es服务器返回该值为true时确定es索引仍存在于目标数据源中,在es服务器返回该值为false时,确定es索引不存在于目标数据源中。在向es服务器请求删除第一个es索引后,向es服务器请求确认该es索引是否删除成功,且在该es索引删除成功的情况下,继续向es服务器请求确认该es索引是否还存在于目标数据源中,能够进一步确保es索引被成功删除,从而不必在下一个处理周期时对之前未删除成功的索引再次执行删除操作,降低了磁盘负担。

在一种可实现方式中,删除es索引的方法的还可包括:在向es服务器发送第二确认请求之后,如果根据es服务器针对第二确定请求返回的第二信息确定第一个es索引存在于目标数据源中时,例如在调用es的api接口中的isexists()后,es服务器返回isexists()的值(可以为第二确认信息的一个示例)为true时的情况,则向es服务器发送删除第一个es索引的请求,直至向es服务器发送删除第一个es索引的请求的次数达到阈值时,例如三次,执行向es服务器发送删除集合中下一个es索引的请求的步骤;根据es服务器针对所述第二确认请求返回的第二信息确定目标数据源中不存在第一个es索引时,例如在调用es的api接口中的isexists()后,es服务器返回false时,执行向es服务器发送删除集合中下一个es索引的请求的步骤。

图5是根据一示例性实施例示出的删除es索引的方法的流程图,在该实施例中,以删除按天生成的es索引为例进行说明,为了便于表述,以下将es索引简称为索引,es服务器简称服务器,如图5所示,该方法包括如下处理:

步骤501:生成es索引删除命令;

其中,删除索引的操作指示删除目标数据源中的es索引;

例如,假设当前时间是2018年5月9日,生成的es索引删除命令表示删除2018年5月3日之前生成的索引,保留2018年5月3日至2018年5月9日这段时间(包括2018年5月3日以及2018年5月9日生成的索引)内生成的索引,即最近7天内生成的索引。

步骤502:将待删除的es索引的索引名放入集合list中;

例如,待删除的索引的索引名分别为zjj-2017.01.01,zjj-2017.01.02,zjj-2017.01.03,这些索引为按天生成,则list1中的元素分别为zjj-2017.01.01,zjj-2017.01.02,zjj-2017.01.03;

再例如,待删除的索引的索引名分别为zjj-2017.01,zjj-2017.02,zjj-2017.03,这些索引为按月生成,则list2中的元素分别为zjj-2017.01,zjj-2017.02,zjj-2017.03。

步骤503:针对每个集合list,向es服务器发送删除该list中第一个es索引的请求,该请求中可包含第一个索引的索引名,例如,对于list1,发送的请求包含第一个索引的索引名zjj-2017.01.01;对于list2,发送的请求包含第一个索引的索引名zjj-2017.01;

步骤504:线程睡眠一分钟;

步骤505:调用es的api中的preparedelete(),在es服务器返回的isacknowledged()的值为true时表示第一个索引删除成功,执行步骤506,在es服务器返回的isacknowledged()的值为false时表示第一个索引删除失败,执行步骤507;

步骤506:向es服务器发送删除list中下一个索引的请求,该下一个索引例如上述list1中索引名为zjj-2017.01.02的索引;或者上述list2中索引名为zjj-2017.02的索引;

步骤507:调用es的api接口中的isexists(),判断第一es索引是否存在于目标数据源中,在es服务器返回true时确定第一个es索引存在于目标数据源中,执行步骤508,在es服务器返回false时,确定第一个es索引不存在于目标数据源中,返回执行步骤506。

步骤508:重新向es服务器发送删除第一个索引的请求,直至向es服务器发送删除第一个索引的请求的次数达到阈值时再返回执行步骤506,其中,阈值可以是3。

图6是根据一示例性实施例示出的一种删除es索引的装置的框图,如图6所示,该装置60包括如下组成部分:

生成模块61,用于生成es索引删除命令,所述es索引删除命令指示目标数据源中的待删除es索引;

设置模块62,用于将es索引删除命令中指示的目标数据源中待删除es索引的索引名放入集合中,其中,一个所述集合中的待删除es索引按照同一周期生成。

在一种可实现方式中,es删除命令以预设时间段周期性生成。

第一发送模块63,用于针对任一集合,向es服务器发送删除所述集合中的第一个es索引的请求,以使所述es服务器从所述目标数据源中删除所述第一个es索引;

第二发送模块64,用于确定所述第一个es索引不存在于所述目标数据源中时,向所述es服务器发送删除所述集合中下一个es索引的请求,直至所述集合中的es索引均被删除。

在一种可实现方式中,上述删除es索引的装置还可包括:第三发送模块,用于确定待删除es索引不是按照预设的任一周期生成的es索引时,向es服务器发送删除所述待删除es索引的索引数据的请求,以使所述es服务器从所述目标数据源中删除所述待删除es索引的索引数据。

在一种可实现方式中,所述第二发送模块包括:第一发送单元,用于在向es服务器发送删除所述集合中的第一个es索引的请求之后,等待预设时长,向所述es服务器发送第一确认请求;第二发送单元,用于根据所述es服务器针对所述第一确认请求返回的第一信息确定所述第一个es索引删除失败时,向所述es服务器发送第二确认请求;执行单元,用于根据所述es服务器针对所述第一确认请求返回的第一信息确定所述第一个es索引删除成功时,执行向所述es服务器发送删除所述集合中下一个es索引的请求的步骤。

在一种可实现方式中,上述删除es索引的装置还可包括:第二执行模块,用于根据所述es服务器针对所述第二确认请求返回的第二信息确定所述第一个es索引存在于所述目标数据源时,向所述es服务器发送删除所述第一个es索引的请求,直至向所述es服务器发送删除所述第一个es索引的请求的次数达到阈值时,执行向所述es服务器发送删除所述集合中下一个es索引的请求的步骤;第三执行模块,用于根据所述es服务器针对所述第二确认请求返回的所述第二信息确定所述目标数据源中不存在所述第一个es索引时,执行向所述es服务器发送删除所述集合中下一个es索引的请求的步骤。

以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1