CN110019259B - 分布式索引服务引擎的数据更新方法、装置及存储介质 - Google Patents
分布式索引服务引擎的数据更新方法、装置及存储介质 Download PDFInfo
- Publication number
- CN110019259B CN110019259B CN201710880735.1A CN201710880735A CN110019259B CN 110019259 B CN110019259 B CN 110019259B CN 201710880735 A CN201710880735 A CN 201710880735A CN 110019259 B CN110019259 B CN 110019259B
- Authority
- CN
- China
- Prior art keywords
- data
- updated
- updating
- cache
- pieces
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
- G06F16/2386—Bulk updating operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Abstract
本申请提供了一种用于分布式索引服务引擎的数据更新方法、装置及存储介质。其中,该方法包括:获取多条待更新数据;确定与每条所述待更新数据相对应的插入数据;基于所述待更新数据更新所述插入数据,得到更新的插入数据;调用所述分布式索引服务引擎的批量插入接口,通过所述批量插入接口将基于所述待更新数据得到的所述更新的插入数据批量插入分布式索引服务引擎。本申请通过上述手段批量更新ES中数据,解决了现有技术中ES更新操作处理效率低、系统负荷高的问题,提高了更新效率、降低了系统负荷。
Description
技术领域
本申请涉及数据处理技术领域,特别地,涉及一种用于分布式索引服务引擎的数据更新方法、装置及存储介质。
背景技术
数据处理系统对于ES的操作都集中在插入和查询操作上,这也是操作大数据的通用操作模式。因此很多大数据中间件产品,对于插入和查询支持比较好。而ES除了支持插入和查询操作外,还提供了更新操作的方法。然而,目前ES支持的更新操作虽然可以解决大数据的更新问题,但其操作方式会降低ES的处理性能。
具体地,现有的更新操作是针对一条需要更新的数据,单次进行提交更新。在实际业务场景中,在一个很短的时间短内往往需要对大量的数据进行更新,采用逐一提交更新的方式,将占用大量的I/O资源(输入/输出资源),大量的I/O请求会堵塞在数据处理系统与ES的交互上,影响数据处理系统的整体处理性能。
综上,现有技术中ES提供的数据更新方法,采用单次单条提交的方法,处理效率低下,系统响应慢;大数据量请求更新时,占用系统I/O资源和网络带宽,系统耗时在等待ES处理更新数据的过程中,阻塞其它进程工作,系统负荷变高。
针对上述问题,目前尚未提出有效的解决方案。
发明内容
本申请提供一种数据更新方法和装置,用于解决现有技术ES更新操作处理效率低、系统负荷高的问题。
为了实现上述目的,本申请实施例公开了一种用于分布式索引服务引擎的数据更新方法,该方法包括:获取多条待更新数据;确定与每条上述待更新数据相对应的插入数据;基于上述待更新数据更新上述插入数据,得到更新的插入数据;调用上述分布式索引服务引擎的批量插入接口,通过上述批量插入接口将基于上述待更新数据得到的上述更新的插入数据批量插入分布式索引服务引擎。
进一步地,确定与每条上述待更新数据相对应的插入数据包括:获取上述待更新数据的特征信息;从第一缓存中查询与上述待更新数据的特征信息相匹配的插入数据,其中,上述第一缓存中缓存有多条插入数据。
进一步地,在获取多条待更新数据之后,上述方法还包括:将上述多条待更新数据存储入第二缓存;监测上述第二缓存中待更新数据的缓存时长;若上述待更新数据的缓存时长达到预定时长,从上述第二缓存中读取上述待更新数据;获取上述待更新数据的特征信息包括:提取读取的上述待更新数据的特征信息;在得到更新的插入数据之后,上述方法还包括:基于上述更新的插入数据更新上述第一缓存中缓存的插入数据。
进一步地,在获取上述待更新数据的特征信息之后,上述方法还包括:若从上述第一缓存中未查询到与上述待更新数据的特征信息相匹配的插入数据,则通过数据更新接口,更新上述分布式索引服务引擎中与上述待更新数据对应的数据。
进一步地,基于上述待更新数据更新上述插入数据,得到更新的插入数据包括:从上述第一缓存中提取上述插入数据的数据对象;将上述数据对象中的属性值替换为上述待更新数据的属性值,得到更新的插入数据。
进一步地,获取多条待更新数据包括:从数据接入模块接收待处理数据;将上述待处理数据解析成预定格式的第二数据,其中,上述预定格式为上述分布式索引服务引擎所支持的格式;按照数据类型拆分上述第二数据,得到拆分数据,其中,上述数据类型与数据待执行的操作相对应,上述待执行的操作包括更新操作和/或插入操作,上述拆分数据包括上述多条待更新数据。
进一步地,上述拆分数据还包括多条插入数据,其中,在得到拆分数据之后,上述方法还包括:将上述多条插入数据批量插入上述分布式索引服务引擎和存入第一缓存。
为了实现上述目的,本申请实施例公开了一种用于分布式索引服务引擎的数据更新装置,该装置包括:获取单元,用于获取多条待更新数据;确定单元,用于确定与每条上述待更新数据相对应的插入数据;第一更新单元,用于基于上述待更新数据更新上述插入数据,得到更新的插入数据;第一处理单元,用于调用上述分布式索引服务引擎的批量插入接口,通过上述批量插入接口将基于上述待更新数据得到的上述更新的插入数据批量插入分布式索引服务引擎。
进一步地,上述确定单元包括:特征信息获取模块,用于获取上述待更新数据的特征信息;查询模块,用于从第一缓存中查询与上述待更新数据的特征信息相匹配的插入数据,其中,上述第一缓存设置在上述数据更新装置的存储单元中,上述第一缓存中缓存有多条插入数据。
进一步地,存储单元中还设置有第二缓存,上述第二缓存用于存储获取到的多条待更新数据;上述装置还包括:监测单元,用于监测上述第二缓存中待更新数据的缓存时长;读取单元,用于若上述待更新数据的缓存时长达到预定时长,从上述第二缓存中读取上述待更新数据;第二更新单元,用于在得到更新的插入数据之后,基于上述更新的插入数据更新上述第一缓存中缓存的插入数据。
进一步地,上述装置还包括:第三更新单元,用于在获取上述待更新数据的特征信息之后,若从上述第一缓存中未查询到与上述待更新数据的特征信息相匹配的插入数据,则通过数据更新接口,更新上述分布式索引服务引擎中与上述待更新数据对应的数据。
进一步地,上述第一更新单元包括:提取模块,用于从上述第一缓存中提取上述插入数据的数据对象;替换模块,用于将上述数据对象中的属性值替换为上述待更新数据的属性值,得到更新的插入数据。
进一步地,上述获取单元包括:接收模块,用于从数据接入模块接收待处理数据;解析模块,用于将上述待处理数据解析成预定格式的第二数据,其中,上述预定格式为上述分布式索引服务引擎所支持的格式;拆分模块,用于按照数据类型拆分上述第二数据,得到拆分数据,其中,上述数据类型与数据待执行的操作相对应,上述待执行的操作包括更新操作和/或插入操作,上述拆分数据包括上述多条待更新数据。
进一步地,上述拆分数据还包括多条插入数据,上述装置还包括:第二处理单元,用于在得到拆分数据之后,将上述多条插入数据批量插入上述分布式索引服务引擎和存入第一缓存。
为了实现上述目的,本申请实施例公开了一种存储介质,上述存储介质存储有用于执行于分布式索引服务引擎的数据更新方法的程序。
采用上述实施例,在获取到待更新数据之后,确定与每条上述待更新数据相对应的插入数据,并基于上述待更新数据更新上述插入数据,得到更新的插入数据;调用上述分布式索引服务引擎的批量插入接口,将更新的插入数据批量插入分布式索引服务引擎。通过上述实施例,可以批量获取多条待更新数据,在利用待更新数据更新插入数据之后,批量插入更新的插入数据,以实现批量更新ES中数据的效果。在上述实施例中,无需一条一条得输入待更新数据,一条一条得更新数据,减少了大量的I/O请求,节省了大量的系统I/O资源和网络带宽,ES更新操作处理效率高、系统负荷低,解决了现有技术中ES更新操作处理效率低、系统负荷高的问题。
附图说明
附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是根据本发明实施例的用于分布式索引服务引擎的数据更新方法的网络环境示意图;
图2是根据本发明实施例的用于分布式索引服务引擎的数据更新方法的流程图一;
图3是根据本发明实施例的用于分布式索引服务引擎的数据更新方法的数据处理系统的工作原理示意图;
图4是根据本发明实施例的用于分布式索引服务引擎的数据更新方法的批量更新适配器的工作原理示意图;
图5是根据本发明实施例的用于分布式索引服务引擎的数据更新方法的数据结构中字段标识信息的示意图;
图6是根据本发明实施例的用于分布式索引服务引擎的数据更新方法的流程图二;以及
图7是根据本发明实施例的用于分布式索引服务引擎的数据更新装置的结构示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
首先,对本申请涉及的术语含义解释如下:
ElasticSearch:简称ES,是一个搜索服务器,提供一种开源的分布式索引服务引擎。
批量更新:对于需要更新的数据,采用一批次多条数据统一操作的方式。
在本申请的描述中,需要理解的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。“多个”的含义是两个或两个以上,除非另有明确具体的限定。术语“包括”、“包含”及类似术语应该被理解为是开放性的术语,即“包括/包含但不限于”。术语“基于”是“至少部分地基于”。术语“一实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”。其他术语的相关定义将在下文描述中给出。
本申请用于分布式索引服务引擎的数据更新方法可以应用于图1所示的网络环境中。如图1所示,该网络环境包括数据处理系统10和分布式索引服务引擎20,该数据处理系统与分布式索引服务引擎相连接,该数据处理系统可以为分布式索引服务引擎提供数据,该数据可以用于插入、更新、修改或删除分布式索引服务引擎中的数据。
可选地,本申请提供的数据更新方法用于对分布式索引服务引擎中的数据进行批量更新,具体地,如图2所示,该实施例可以通过以下步骤实现:
步骤S201:获取多条待更新数据。
可选地,数据处理系统可以通过数据接入模块获取多条待更新的数据,该待更新数据可以是批量输入的。在一个可选的实施例中,用户可以通过其他终端向数据处理系统输入多条数据,该多条数据中的部分或全部可以是待更新数据,本申请实施例对待更新数据的输入方式不作限定。
步骤S203:确定与每条上述待更新数据相对应的插入数据。
具体地,每条待更新数据中可以包括特征字段和属性字段,在接收到待更新数据之后,可以基于每条待更新数据的特征字段和属性字段来确定与其相对应的插入数据。
其中,插入数据为插入ES的数据,待更新数据(或称之为更新数据)用于更新ES中的数据,因为ES中的数据可以通过插入得到,更新ES的插入数据也可以实现对ES中数据的更新。
步骤S205:基于上述待更新数据更新上述插入数据,得到更新的插入数据。
可选地,在确定每条待更新数据对应的插入数据之后,使用待更新数据更新对应的插入数据,得到多条更新的插入数据。
步骤S207:调用上述分布式索引服务引擎的批量插入接口,通过上述批量插入接口将基于上述待更新数据得到的上述更新的插入数据批量插入分布式索引服务引擎。
具体地,分布式索引服务引擎具有批量插入接口,数据处理系统可以通过调用该接口将插入数据批量插入ES。在上述实施例中,在基于每条待更新数据更新插入数据,得到多条更新的插入数据之后,将多条更新的插入数据进行封装,通过批量插入接口将封装的数据对象(包括多条更新的插入数据)插入ES,以完成对ES中数据的更新。
应用程序接口:Application Program Interface,简称API,是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的API而使操作系统去执行应用程序的命令(或动作)。在本申请实施例中,API接口是ES留给数据处理系统的一个调用接口。
采用上述实施例,在获取到待更新数据之后,确定与每条上述待更新数据相对应的插入数据,并基于上述待更新数据更新上述插入数据,得到更新的插入数据;调用上述分布式索引服务引擎的批量插入接口,将更新的插入数据批量插入分布式索引服务引擎。通过上述实施例,可以批量获取多条待更新数据,在利用待更新数据更新插入数据之后,批量插入更新的插入数据,以实现批量更新ES中数据的效果。在上述实施例中,无需一条一条得输入待更新数据,一条一条得更新数据,减少了大量的I/O请求,节省了大量的系统I/O资源和网络带宽,ES更新操作处理效率高、系统负荷低,解决了现有技术中ES更新操作处理效率低、系统负荷高的问题。
在一个可选的实施例中,确定与每条上述待更新数据相对应的插入数据包括:获取上述待更新数据的特征信息;从第一缓存中查询与上述待更新数据的特征信息相匹配的插入数据,其中,上述第一缓存中缓存有多条插入数据。
可选地,待更新数据包括特征字段和属性字段,特征字段中记录该待更新数据的特征信息,例如,该待更新数据所属的业务信息。属性字段中记录有该待更新数据的属性值,该属性值与待更新数据的特征信息相对应。该实施例中的特征信息可以用于表示该条数据的数据类型,例如,更新、插入、删除、批量插入等,而数据类型与其待执行的操作相对应,也即,若数据类型为更新,则该条数据待执行的操作为更新操作。
例如,待更新数据可以为键值对的数据结构形式,其中,键为用于记录特征信息的特征字段(可选地,为业务特征值),值为用于记录属性值的属性字段。
进一步可选地,在获取待更新数据的特征信息之后,方法还包括:若从第一缓存中未查询到与待更新数据的特征信息相匹配的插入数据,则通过数据更新接口,更新分布式索引服务引擎中与待更新数据对应的数据。
可选地,插入数据可以具有与待更新数据一致的数据结构形式。该实施例中的插入数据可以为已经插入ES的数据,也可以为待插入ES的数据。在第一缓存中的插入数据为待批量更新数据的数据基础。将插入ES的数据缓存在这里,在确定的与待更新数据相对应的插入数据时,可以查询第一缓存中是否存在与待更新数据的特征信息相匹配的插入数据,若存在,则根据该待更新数据更新对应的插入数据,在更新完成后批量处理更新的插入数据;若不存在,则单独更新该条待更新数据。
一种可选的,缓存中存在一条插入数据的特征信息与待更新数据的特征信息一致,可以确定插入数据与所述待更新数据的特征信息相匹配,也即,第一缓存中存在与待更新数据相匹配的插入数据。
在上述实施例中,若ES中存在与该数据的键相同的数据,则该数据为待插入数据;若ES中不存在与该数据的键相同的数据,则该数据为待更新数据。ES中已经存在的键可以记录在数据处理系统中,例如,记录在数据处理系统的第一缓存中。该待更新数据可以用于更新已经插入或未插入ES中的插入数据。
通过上述实施例,基于缓存更新插入数据,通过数据存储在缓存中,实现批量数据的组装。
进一步地,在获取多条待更新数据之后,上述方法还可以包括:将上述多条待更新数据存储入第二缓存;监测上述第二缓存中待更新数据的缓存时长;若上述待更新数据的缓存时长达到预定时长,从上述第二缓存中读取上述待更新数据;获取上述待更新数据的特征信息包括:提取读取的上述待更新数据的特征信息。
因ES本身,对于刚插入的数据需要进行排序、索引、分词等动作,因此不能马上被使用。上述的延迟时间就是避免数据刚刚插入后,就立即更新而查询不到。通过上述实施例,将待更新数据缓存预定时长,再更新插入,使得更新进ES的数据可以被及时查询到。
可选地,第一缓存和第二缓存均为数据更新流程开始之前预先创建的缓存空间。在第二缓存中建立监听机制,将待更新数据进入第一缓存的缓存时刻与系统当前时刻进行比较,若两个时刻之差,达到(或超过)设置的时间阈值(及上述的预定时长),则确定待更新数据的缓存时长达到预定时长。一种可选的,预定时长可以为3秒钟。
在待更新数据的缓存时长达到预定时长的情况下,将待更新数据弹出第一缓存,进入更新插入数据和批量更新的流程。
根据本申请的一个可选实施例,在得到更新的插入数据之后,上述方法还包括:基于上述更新的插入数据更新上述第一缓存中缓存的插入数据。通过该实施例,可以将第一缓存中的数据也进行实时更新,以便下次更新时使用。
在一个可选的实施例中,基于上述待更新数据更新上述插入数据,得到更新的插入数据包括:从上述第一缓存中提取上述插入数据的数据对象;将上述数据对象中的属性值替换为上述待更新数据的属性值,得到更新的插入数据。通过该实施例可以精确实现插入数据的更新。
根据本发明的上述实施例,获取多条待更新数据包括:从数据接入模块接收待处理数据;将上述待处理数据解析成预定格式的第二数据,其中,上述预定格式为上述分布式索引服务引擎所支持的格式;按照数据类型拆分上述第二数据,得到拆分数据,其中,上述数据类型与数据待执行的操作相对应,上述待执行的操作包括更新操作和/或插入操作,上述拆分数据包括上述多条待更新数据。通过上述实施例,可以提高数据兼容性和提高处理效率。
进一步地,上述拆分数据还包括多条插入数据,其中,在得到拆分数据之后,上述方法还包括:将上述多条插入数据批量插入上述分布式索引服务引擎和存入第一缓存。通过该实施例可以提供进行更新的数据基础。
下面结合图3至图6对用于分布式索引服务引擎的数据更新方法的一种可选的实施例进行详细说明,如图3至图6所示,该实施例可以应用在数据处理系统中,该实施例可以包括图6示出的如下步骤。
步骤S601:从数据接入模块接收待处理数据。
数据处理系统在接收到数据接入模块传递的待处理数据。传递的数据可以是XML格式和protobuf格式的数据。
其中,扩展标记语言XML,即eXtensible Markup Language,是一种数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立。protobuf格式是基于二进制的数据交换格式。
步骤S602:解析待处理数据。
具体地,通过数据解析模块将待处理数据解析成预定格式的第二数据。其中,预定格式可以为key-value键值对格式或JSON格式。可选地,通过相应的解析方法,将原始数据(即待处理数据)解析成key-value键值对形式的数据结构进行存储。另一种可选的,也可以将待处理数据的解析封装成JSON格式。因为ES封装的数据操作接口支持数据Map、JSON等格式数据传输,将待处理数据解析成JSON格式,系统的兼容性更好。
其中,JSON格式(JavaScript Object Notation)是一种轻量级的数据交换格式。
步骤S603:拆分解析后的数据。
通过数据拆分模块按照数据类型拆分所述第二数据,得到拆分数据。根据待处理数据的业务类型进行判断,将不同类型的数据拆分开,拆分数据可以包括需要插入ES库、或更新ES库、或删除ES库的数据信息。可选地,可以在执行拆分操作的同时对数据进行规范化处理。例如,某些时间类型的字段,按照要求格式输出;无值字段被赋予默认的数值;增加一些字段或者删除一些字段等等。
通过将数据进行拆分,可以对待处理数据中的不同类型数据执行不同类型的操作(如更新、插入、删除操作),提高数据的处理效率。例如,将需要插入ES的数据进行缓存,可以对批量更新ES提供基础数据支持。
步骤S604:通过批量更新适配器和数据操作模块根据业务来判断执行插入、更新或者删除操作。具体地,批量更新适配器根据业务判断数据进行数据操作,该操作包括:更新、批量更新、插入、删除。
如图4所示,拆分数据进入批量更新适配器和数据操作模块,在这个模块里,可以根据业务类型,提取数据特征值(即特征信息)进行比较,以此来判断数据是需要插入ES或者是更新ES,数据操作执行具体的插入或更新操作。
当数据需要插入ES时,首先根据ES的操作API(如批量插入数据接口)进行数据封装、传输到达ES服务端。同时这部分插入数据会以业务特征值作为key,以属性值作为value(如完整的告警数据),以key-value存储结构存储入第一缓存。其中,特征值是指能够唯一标识一条数据的标志性字段的数据。其中,在数据处理系统的程序启动后,可以建立一套针对插入数据的第一缓存,缓存建立原则,可以按照LRU算法或者时间或者空间要求规划,进行自动化清理。LRU算法,即Least Recently Used,最少使用页面置换算法,是为虚拟页式存储管理服务的一种算法。
当数据需要更新ES时,将更新数据存入第二缓存,并在该第二缓存中建立监听机制,按照待更新数据进入第二缓存的数据时间与系统当前处理时间进行比较,超出设置的时间阈值后进行弹出,重新发动到接收数据模块。上述的时间阈值可以为3秒钟。通过上述操作,当更新数据进入系统,在缓存中存在3秒钟后,再从缓存中弹出,由后面的逻辑进行继续处理,因ES本身,对于刚插入的数据需要进行排序、索引、分词等动作,因此不能马上被使用,上述的延迟时间可以避免数据刚刚插入后,就立即更新而查询不到的问题。
当获取更新数据模块监听到待更新数据时,提取待更新数据的特征值,根据待更新数据的特征值查询第一缓存中与其相匹配的插入数据。
如果能够根据特征值查询到第一缓存中存在匹配的数据,则提取这条插入数据的数据对象object,用待更新数据中的属性字段覆盖(替换)掉该数据对象object中相应的属性值。此时这个数据对象就是一条被更新过的数据对象。按照上述步骤将多条插入数据更新完成之后,将多条更新的插入数据封装,通过ES的批量插入接口传输完成数据的批量更新。同时,将更新的插入数据回写到插入数据的第一缓存中,待再次被更新。
如果根据特征值未查询到第一缓存中存在匹配的数据(即没有能够命中第一缓存),则调用ES的单条数据更新接口,根据该条待更新数据更新ES中的相应数据。
通过上述实施例,在批量待更新的插入数据的过程中,可以将第一缓存中的全部数据批量插入ES中,也可以将当前发生更新操作的插入数据(即上述的更新的插入数据)批量插入ES中,以减少数据操作量,提高更新效率。进一步地,在将更新的插入数据批量插入ES之后,可以在ES中执行去重操作,以去除掉ES中历史得到的数据,以减少数据冗余和保证数据的准确性。该去重操作可以为:保留键相同的多条数据中插入时间最晚数据的保留操作。
例如:当一条需要插入ES的告警(及待处理数据)进入本系统后,数据整体内容如下:
<?xml version='1.0'encoding='iso-8859-1'?>
<xml><message client_q_name='HUAWEI803.Q'type='1406'
msg_serial=”><OneRecord fp0='2209479606'fp1='2090550447'
fp2='1206666294'fp3='1427014728'ParentIntId=”
ParentObjectClass=”QNAME=”TimeStamp_C=”ack_flag=”
ack_terminal=”ack_time=”ack_user=”active_status='1'
alarm_abnormal_type=”alarm_act_count=”alarm_c_fp=”
alarm_content='0'alarm_eqp_status='-1'alarm_explanation=”
alarm_exps=”alarm_fp=”alarm_locate_object=”alarm_memo=”
alarm_ne_status='-1'alarm_object_severity=”alarm_origin='0'
alarm_resource_status='1'alarm_source=”alarm_text='START
ALARMID=62071320'alarm_title='2427319'alarm_unit='0'alarm_value=”
attachment=”board_id=”bureau=”business_area=”
business_region_ids=”business_regions=”c_fp0='3553588853'
c_fp1='2981326934'c_fp2='872112352'c_fp3='4193197748'cancel_time=”
cellular_type=”ne_alias='天津增兴窑-HLH[140566]'ne_int_id=”
ne_label='増兴窑[140566]'ne_location='天津增兴窑平房无线机房'
province_id='1047933115'province_name='天津市'
province_process_flag=”redefine_severity='1'redefine_type='1'
region_id='-1275219157'region_name='天津'title_text='eNodeB退服告警'tmsc_cat='-1'vendor_name='华为'vendor_severity='重要'
vendor_type='2'vip_flag='0'wlboard_id=”wlmq_region_id=”yhs='无'additional_related_cm_info='无'/></message></xml>
将这条数据中的特征值字段fp0='2209479606'作为key-value缓存中的key,整体这条数据对象作为value,存储到插入数据的第一缓存中。同时将这条数据调用ES的批量插入接口将其插入ES。
当接入到待更新的数据后,数据格式如下:
<?xml version='1.0'encoding='iso-8859-1'?>
<xml><message client_q_name='HUAWEI803.Q'type='1406'
msg_serial=”><OneRecord fp0='334235672'fp1='123889247'
fp2='892387273'fp3='9028947234'active_status='0'
event_time='2017-06-12 22:23:34'c_fp0='3553588853'
c_fp1='2981326934'c_fp2='872112352'c_fp3='4193197748'cancel_time=”
cellular_type=”ne_alias='天津增兴窑-HLH[140566]'/></message></xml>
根据这条待更新数据的特征值字段fp0='334235672”作为key-value缓存中的key,整体这条数据对象作为value,存储到待更新数据的第二缓存中。当这条数据进入缓存3秒中后,取出来,利用这条数据的更新特征字段值c_fp0='3553588853',在第一缓存中查找。当查找到这条待更新数据对应的插入数据后,将插入数据取出来,使用待更新数据中的字段数据进行替换。最终得到一条全新的数据对象如下:
<?xml version='1.0'encoding='iso-8859-1'?>
<xml><message client_q_name='HUAWEI803.Q'type='1406'
msg_serial=”><OneRecord fp0='2209479606'fp1='2090550447'
fp2='1206666294'fp3='1427014728'ParentIntId=”
ParentObjectClass=”active_status='0'event_time='2017-06-12
22:23:34'QNAME=”TimeStamp_C=”ack_flag=”ack_terminal=”
ack_time=”ack_user=”active_status='1'alarm_abnormal_type=”
aactive_status='0'event_time='2017-06-12 22:23:34'larm_act_count=”
alarm_c_fp=”alarm_content='0'alarm_eqp_status='-1'
alarm_explanation=”alarm_exps=”alarm_fp=”alarm_locate_object=”
alarm_memo=”alarm_ne_status='-1'alarm_object_severity=”
alarm_origin='0'alarm_resource_status='1'alarm_source=”
alarm_text='START
ALARMID=62071320'alarm_title='2427319'alarm_unit='0'alarm_value=”
attachment=”board_id=”bureau=”business_area=”
business_region_ids=”business_regions=”c_fp0='3553588853'
c_fp1='2981326934'c_fp2='872112352'c_fp3='4193197748'cancel_time=”
cellular_type=”ne_alias='天津增兴窑-HLH[140566]'ne_int_id=”
ne_label='増兴窑[140566]'ne_location='天津增兴窑平房无线机房'
province_id='1047933115'province_name='天津市'
province_process_flag=”redefine_severity='1'redefine_type='1'
region_id='-1275219157'region_name='天津'title_text='eNodeB退服告警'tmsc_cat='-1'vendor_name='华为'vendor_severity='重要'
vendor_type='2'vip_flag='0'wlboard_id=”wlmq_region_id=”yhs='无'additional_related_cm_info='无'/></message></xml>
此时的插入数据就是一条在本地被更新后的数据对象。再根据ES批量插入接口的操作方式,封装数据、传输完成数据的批量更新动作,同时将更新后得object对象回写到插入数据的缓存中,待再次被更新。
通过上述实施例,利用ES的批量插入方法进行数据的批量更新。由于ES本身的数据操作特性,当相同的ES索引进入后,ES会根据索引自动覆盖已经存在的object对象。正是利用这个特性,将已经插入到ES的数据对象进行本地缓存,再获取到更新数据的object后,提取本地已经缓存的对象进行本地更新。然后利用批量插入方法实现ES的批量更新操作。
需要说明的是,上述实施例是利用内部缓存作为中间媒介,通过数据存储在第一缓存和第二缓存中,实现批量更新数据。如图4所示,数据根据业务拆分成不同的操作类型,而无论是插入数据和更新数据都有其自身的特征值或者称为特征属性。如图5所示,一条数据需要一个数据的唯一标识属性fp(数据指纹字段名称),清除告警指纹字段名称cfp作为被更新的特征标识。active_status作为数据操作属性。这三个属性贯穿始终,首先根据active_status判断是插入数据还是更新数据。
如果是插入数据,则调用数据插入类,实现以fp为key,整体数据属性作为object对象存储到缓存中,同时将cfp属性和fp属性作为key-value存储到关联关系缓存中,目的是更新数据通过这个关联关系,快速查找出插入数据得key值,快速提取响应的object对象。然后调用ES的API方法插入数据到ES中。
如果是待更新数据,则根据cfp属性,首先查找数据关联缓存,得到插入数据的特征值fp后,以此为key查询插入缓存,获取object对象,然后更新此object对象,完成本地缓存内插入数据的更新操作。进一步地,更新后的插入数据再存储回第一缓存中,待再次被更新。这样object对象就是一条被更新过的对象,再调用ES的批量插入API接口,实现对ES现有数据得覆盖,以此达到对ES数据的更新操作。也即,通过上述实施例,将更新操作在本地完成之后,将更新后的数据批量传输至ES端,实现了在ES端数据的批量更新,大幅度提升了ES数据更新性能,以及减少ES客户端的ES服务请求链接数,节省网络和系统资源。
为了实现上述目的,本申请实施例公开了一种用于分布式索引服务引擎的数据更新装置,该装置设置在数据处理系统中,该装置包括如图7所示的:获取单元71,用于获取多条待更新数据;确定单元73,用于确定与每条上述待更新数据相对应的插入数据;第一更新单元75,用于基于上述待更新数据更新上述插入数据,得到更新的插入数据;第一处理单元77,用于调用上述分布式索引服务引擎的批量插入接口,通过上述批量插入接口将基于上述待更新数据得到的上述更新的插入数据批量插入分布式索引服务引擎。
采用上述实施例,在获取到待更新数据之后,确定与每条上述待更新数据相对应的插入数据,并基于上述待更新数据更新上述插入数据,得到更新的插入数据;调用上述分布式索引服务引擎的批量插入接口,将更新的插入数据批量插入分布式索引服务引擎。通过上述实施例,可以批量获取多条待更新数据,在利用待更新数据更新插入数据之后,批量插入更新的插入数据,以实现批量更新ES中数据的效果。在上述实施例中,无需一条一条得输入待更新数据,一条一条得更新数据,减少了大量的I/O请求,节省了大量的系统I/O资源和网络带宽,ES更新操作处理效率高、系统负荷低,可以保障系统稳定性,解决了现有技术中ES更新操作处理效率低、系统负荷高的问题。
可选地,确定单元73和第一更新单元75设置在数据处理单元的批量更新适配器中;第一处理单元77设置在数据处理系统的数据操作模块中。
进一步地,上述确定单元包括:特征信息获取模块,用于获取上述待更新数据的特征信息;查询模块,用于从第一缓存中查询与上述待更新数据的特征信息相匹配的插入数据,其中,上述第一缓存设置在所述数据更新装置的存储单元中,上述第一缓存中缓存有多条插入数据。该获取模块和查询模块设置在数据处理系统的批量更新适配器中。
进一步地,上述装置还包括:存储单元中还设置有第二缓存,上述第二缓存用于存储获取到的多条待更新数据;监测单元,用于监测上述第二缓存中待更新数据的缓存时长;读取单元,用于若上述待更新数据的缓存时长达到预定时长,从上述第二缓存中读取上述待更新数据;上述获取模块包括:提取子模块,用于提取读取的上述待更新数据的特征信息。上述存储单元、监测单元、提取子模块设置在数据处理系统的批量更新适配器中。
进一步地,上述装置还包括:第三更新单元,用于在获取上述待更新数据的特征信息之后,若从上述第一缓存中未查询到与上述待更新数据的特征信息相匹配的插入数据,则通过数据更新接口,更新上述分布式索引服务引擎中与上述待更新数据对应的数据。
进一步地,上述装置还包括:第二更新单元,用于在得到更新的插入数据之后,基于上述更新的插入数据更新上述第一缓存中缓存的插入数据。上述第二更新单元设置在数据处理系统的批量更新适配器中。
进一步地,上述第一更新单元包括:提取模块,用于从上述第一缓存中提取上述插入数据的数据对象;替换模块,用于将上述数据对象中的属性值替换为上述待更新数据的属性值,得到更新的插入数据。上述提取模块、替换模块设置在数据处理系统的批量更新适配器中。
进一步地,上述获取单元包括:接收模块,用于从数据接入模块接收待处理数据;解析模块,用于将上述待处理数据解析成预定格式的第二数据,其中,上述预定格式为上述分布式索引服务引擎所支持的格式;拆分模块,用于按照数据类型拆分上述第二数据,得到拆分数据,其中,上述数据类型与数据待执行的操作相对应,上述待执行的操作包括更新操作和/或插入操作,上述拆分数据包括上述多条待更新数据。上述接收模块设置在数据处理系统的数据接入模块中,解析模块设置在数据处理系统的数据解析模块中,拆分模块设置在数据处理系统的数据拆分模块中。
进一步地,上述拆分数据还包括多条插入数据,上述装置还包括:第二处理单元,用于在得到拆分数据之后,将上述多条插入数据批量插入上述分布式索引服务引擎和存入第一缓存。上述第二处理单元设置在数据处理系统的批量更新适配器中。
需要说明的是,上述装置实施例属于优选实施例,所涉及的单元和模块并不一定是本申请所必须的。
对于前述的各方法实施例,为了描述简单,故将其都表述为一系列的动作组合,但是本领域的技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为根据本申请,某些步骤可以采用其他顺序或同时执行;其次,本领域技术人员也应该知悉,上述方法实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
本申请还公开了一种在其上记录有用于执行上述方法的程序的存储介质。所述存储介质包括配置为以计算机(以计算机为例)可读的形式存储或传送信息的任何机制。例如,存储介质包括只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光存储介质、闪速存储介质、电、光、声或其他形式的传播信号(例如,载波、红外信号、数字信号等)等。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于本申请的装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例部分的说明即可。以上所描述的装置及装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,既可以位于一个地方或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上对本申请所提供的一种用于分布式索引服务引擎的方法和装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (11)
1.一种用于分布式索引服务引擎的数据更新方法,其特征在于,包括:
获取多条待更新数据;
确定与每条所述待更新数据相对应的插入数据;
基于所述待更新数据更新所述插入数据,得到更新的插入数据;
调用所述分布式索引服务引擎的批量插入接口,通过所述批量插入接口将基于所述待更新数据得到的所述更新的插入数据批量插入分布式索引服务引擎;
其中,确定与每条所述待更新数据相对应的插入数据包括:
获取所述待更新数据的特征信息;
从第一缓存中查询与所述待更新数据的特征信息相匹配的插入数据,其中,所述第一缓存中缓存有多条插入数据;并且
在获取多条待更新数据之后,所述方法还包括:将所述多条待更新数据存储入第二缓存;监测所述第二缓存中待更新数据的缓存时长;若所述待更新数据的缓存时长达到预定时长,从所述第二缓存中读取所述待更新数据;
获取所述待更新数据的特征信息包括:提取读取的所述待更新数据的特征信息;
在得到更新的插入数据之后,所述方法还包括:基于所述更新的插入数据更新所述第一缓存中缓存的插入数据。
2.根据权利要求1所述的数据更新方法,其特征在于,在获取所述待更新数据的特征信息之后,所述方法还包括:
若从所述第一缓存中未查询到与所述待更新数据的特征信息相匹配的插入数据,则通过数据更新接口,更新所述分布式索引服务引擎中与所述待更新数据对应的数据。
3.根据权利要求1所述的数据更新方法,其特征在于,基于所述待更新数据更新所述插入数据,得到更新的插入数据包括:
从第一缓存中提取所述插入数据的数据对象;
将所述数据对象中的属性值替换为所述待更新数据的属性值,得到更新的插入数据。
4.根据权利要求1所述的数据更新方法,其特征在于,获取多条待更新数据包括:
从数据接入模块接收待处理数据;
将所述待处理数据解析成预定格式的第二数据,其中,所述预定格式为所述分布式索引服务引擎所支持的格式;
按照数据类型拆分所述第二数据,得到拆分数据,其中,所述数据类型与数据待执行的操作相对应,所述待执行的操作包括更新操作和/或插入操作,所述拆分数据包括所述多条待更新数据。
5.根据权利要求4所述的数据更新方法,其特征在于,所述拆分数据还包括多条插入数据,其中,在得到拆分数据之后,所述方法还包括:
将所述多条插入数据批量插入所述分布式索引服务引擎和存入第一缓存。
6.一种用于分布式索引服务引擎的数据更新装置,其特征在于,包括:
获取单元,用于获取多条待更新数据;
确定单元,用于确定与每条所述待更新数据相对应的插入数据;
第一更新单元,用于基于所述待更新数据更新所述插入数据,得到更新的插入数据;
第一处理单元,用于调用所述分布式索引服务引擎的批量插入接口,通过所述批量插入接口将基于所述待更新数据得到的所述更新的插入数据批量插入分布式索引服务引擎;
其中,所述确定单元包括:
特征信息获取模块,用于获取所述待更新数据的特征信息;
查询模块,用于从第一缓存中查询与所述待更新数据的特征信息相匹配的插入数据,其中,所述第一缓存设置在所述数据更新装置的存储单元中,所述第一缓存中缓存有多条插入数据;并且
所述存储单元中还设置有第二缓存,所述第二缓存用于存储获取到的多条待更新数据;
所述装置还包括:
监测单元,用于监测所述第二缓存中待更新数据的缓存时长;
读取单元,用于若所述待更新数据的缓存时长达到预定时长,从所述第二缓存中读取所述待更新数据;
第二更新单元,用于在得到更新的插入数据之后,基于所述更新的插入数据更新所述第一缓存中缓存的插入数据。
7.根据权利要求6所述的数据更新装置,其特征在于,所述装置还包括:
第三更新单元,用于在获取所述待更新数据的特征信息之后,若从所述第一缓存中未查询到与所述待更新数据的特征信息相匹配的插入数据,则通过数据更新接口,更新所述分布式索引服务引擎中与所述待更新数据对应的数据。
8.根据权利要求6所述的数据更新装置,其特征在于,所述第一更新单元包括:
提取模块,用于从第一缓存中提取所述插入数据的数据对象;
替换模块,用于将所述数据对象中的属性值替换为所述待更新数据的属性值,得到更新的插入数据。
9.根据权利要求6所述的数据更新装置,其特征在于,所述获取单元包括:
接收模块,用于从数据接入模块接收待处理数据;
解析模块,用于将所述待处理数据解析成预定格式的第二数据,其中,所述预定格式为所述分布式索引服务引擎所支持的格式;
拆分模块,用于按照数据类型拆分所述第二数据,得到拆分数据,其中,所述数据类型与数据待执行的操作相对应,所述待执行的操作包括更新操作和/或插入操作,所述拆分数据包括所述多条待更新数据。
10.根据权利要求9所述的数据更新装置,其特征在于,所述拆分数据还包括多条插入数据,所述装置还包括:
第二处理单元,用于在得到拆分数据之后,将所述多条插入数据批量插入所述分布式索引服务引擎和存入第一缓存。
11.一种存储介质,其特征在于,所述存储介质存储有用于执行权利要求1至5中任意一项所述的用于分布式索引服务引擎的数据更新方法的程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710880735.1A CN110019259B (zh) | 2017-09-26 | 2017-09-26 | 分布式索引服务引擎的数据更新方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710880735.1A CN110019259B (zh) | 2017-09-26 | 2017-09-26 | 分布式索引服务引擎的数据更新方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110019259A CN110019259A (zh) | 2019-07-16 |
CN110019259B true CN110019259B (zh) | 2023-09-22 |
Family
ID=67186372
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710880735.1A Active CN110019259B (zh) | 2017-09-26 | 2017-09-26 | 分布式索引服务引擎的数据更新方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110019259B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113760933B (zh) * | 2021-08-25 | 2023-11-03 | 福建天泉教育科技有限公司 | 一种数据更新方法及终端 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814090A (zh) * | 2010-03-22 | 2010-08-25 | 深圳市芯朗金能源技术有限公司 | 一种关系数据库的大批量数据插入方法 |
CN102117309A (zh) * | 2010-01-06 | 2011-07-06 | 卓望数码技术(深圳)有限公司 | 一种数据缓存系统和数据查询方法 |
CN102542054A (zh) * | 2011-12-29 | 2012-07-04 | 厦门雅迅网络股份有限公司 | 一种利用缓存表来提高数据库数据插入性能的方法 |
CN103489061A (zh) * | 2013-09-04 | 2014-01-01 | 用友软件股份有限公司 | 批量数据处理装置和批量数据处理方法 |
CN105677865A (zh) * | 2016-01-08 | 2016-06-15 | 天津车之家科技有限公司 | 一种索引数据更新方法、系统及搜索引擎 |
CN106021468A (zh) * | 2016-05-17 | 2016-10-12 | 上海携程商务有限公司 | 分布式缓存和本地缓存的更新方法和系统 |
CN106815329A (zh) * | 2016-12-29 | 2017-06-09 | 网易无尾熊(杭州)科技有限公司 | 一种缓存数据的更新方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB201004449D0 (en) * | 2010-02-22 | 2010-05-05 | Corbett Sean | Data accelerator |
US9720949B2 (en) * | 2013-11-22 | 2017-08-01 | Sap Se | Client-side partition-aware batching of records for insert operations |
US9665612B2 (en) * | 2014-05-29 | 2017-05-30 | Sybase, Inc. | Run-time decision of bulk insert for massive data loading |
-
2017
- 2017-09-26 CN CN201710880735.1A patent/CN110019259B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102117309A (zh) * | 2010-01-06 | 2011-07-06 | 卓望数码技术(深圳)有限公司 | 一种数据缓存系统和数据查询方法 |
CN101814090A (zh) * | 2010-03-22 | 2010-08-25 | 深圳市芯朗金能源技术有限公司 | 一种关系数据库的大批量数据插入方法 |
CN102542054A (zh) * | 2011-12-29 | 2012-07-04 | 厦门雅迅网络股份有限公司 | 一种利用缓存表来提高数据库数据插入性能的方法 |
CN103489061A (zh) * | 2013-09-04 | 2014-01-01 | 用友软件股份有限公司 | 批量数据处理装置和批量数据处理方法 |
CN105677865A (zh) * | 2016-01-08 | 2016-06-15 | 天津车之家科技有限公司 | 一种索引数据更新方法、系统及搜索引擎 |
CN106021468A (zh) * | 2016-05-17 | 2016-10-12 | 上海携程商务有限公司 | 分布式缓存和本地缓存的更新方法和系统 |
CN106815329A (zh) * | 2016-12-29 | 2017-06-09 | 网易无尾熊(杭州)科技有限公司 | 一种缓存数据的更新方法及装置 |
Non-Patent Citations (2)
Title |
---|
基于谓词索引的海量数据压缩存储及数据操作算法;赵锴等;《计算机科学》;20050925(第09期);全文 * |
数据缓存按需同步的设计与应用;周京晖;;软件(第05期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110019259A (zh) | 2019-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8200626B1 (en) | Mobile device file management | |
CN103365873B (zh) | 业务数据的推送方法及装置 | |
US10831612B2 (en) | Primary node-standby node data transmission method, control node, and database system | |
CN109086382B (zh) | 一种数据同步方法、装置、设备及存储介质 | |
CN112579695A (zh) | 一种数据同步方法和装置 | |
EP2674868A1 (en) | Database update notification method | |
CN110781149A (zh) | 管理直播间信息的方法、装置、设备及存储介质 | |
CN102780603A (zh) | 网站流量控制方法及装置 | |
WO2024041022A1 (zh) | 数据库表变更方法、装置、设备和存储介质 | |
US8600990B2 (en) | Interacting methods of data extraction | |
CN113438275B (zh) | 数据迁移方法、装置、存储介质及数据迁移设备 | |
US20220342888A1 (en) | Object tagging | |
CN110019259B (zh) | 分布式索引服务引擎的数据更新方法、装置及存储介质 | |
US7441252B2 (en) | Cache control device, and method and computer program for the same | |
CN113051244B (zh) | 数据访问方法和装置、数据获取方法和装置 | |
CN111753141A (zh) | 一种数据管理方法及相关设备 | |
US20160085638A1 (en) | Computer system and method of identifying a failure | |
CN116542668A (zh) | 一种基于区块链的数据处理方法、设备及可读存储介质 | |
CN114493875A (zh) | 交易执行方法、计算机设备和存储介质 | |
CN114201496A (zh) | 数据更新方法、装置、电子设备、系统及存储介质 | |
CN112711606A (zh) | 数据库访问方法、装置、计算机设备和存储介质 | |
CN108694219B (zh) | 一种数据处理方法及装置 | |
CN116938961B (zh) | 用于数据同步的系统、方法及数据读取方法 | |
CN111881085B (zh) | 一种读写带宽性能的优化方法及系统 | |
WO2021063242A1 (zh) | 一种存储系统的元数据的发送方法及存储系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |