本发明涉及es技术领域,特别涉及一种es更新数据的优化方法及服务端。
背景技术:
elasticsearch,简称es,它是一个基于lucene的搜索服务器。它基于restfulweb接口并提供了一个分布式多用户能力的全文搜索引擎,elasticsearch是用java开发的,并作为apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
在现有的很多项目中,其索引存储都是使用es,以此来加快查询的效率。虽然在大多数情况下,es的查询效率很高且用到es的项目也能够基本完成相关的查询功能。比如数据量在10亿级别量级之内,则基本上能够完成绝大多数项目的要求,索引的查询以及相关更新操作也都能正常进行。但是,在高并发请求的应用场景下,如果数据量继续增大,在进行索引数据更新时,则会占用服务器一定的时间和资源,从而影响了用户的查询效率,使得使用es的项目无法达到快速的数据查询。
技术实现要素:
本发明所要解决的技术问题是:提供一种es更新数据的优化方法及服务端,以使得在大数据量情况下,支持数据的快速更新与高效查询。
为了解决上述技术问题,本发明采用的技术方案为:
一种es更新数据的优化方法,包括步骤:
s1、获取索引数据更新信息,将所述索引数据更新信息更新至实时数据库单元;
s2、判断是否达到预设更新时间,若是,则将所述实时数据库单元里的所述索引数据更新信息更新至全量数据库单元。
为了解决上述技术问题,本发明采用的另一种技术方案为:
一种es更新数据的优化服务端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
s1、获取索引数据更新信息,将所述索引数据更新信息更新至实时数据库单元;
s2、判断是否达到预设更新时间,若是,则将所述实时数据库单元里的所述索引数据更新信息更新至全量数据库单元。
本发明的有益效果在于:一种es更新数据的优化方法及服务端,通过实时数据库单元进行索引数据更新,然后再定时更新到全量数据库单元中,保证了全量数据库单元的数据完整性,同时,系统基于全量数据库单元和实时数据库单元进行数据查询时,由于同时进行索引更新和数据查询的实时数据库单元中的数据量较小,故而在进行数据更新时,对于用户的查询效率的影响要远小于现有技术,从而实现在大数据量的情况下,同时支持数据的快速更新与高效查询。
附图说明
图1为本发明实施例的一种es更新数据的优化方法的流程示意图;
图2为本发明实施例的一种es更新数据的优化服务端的结构示意图;
图3为本发明实施例的一种es更新数据的优化服务端与其他模块的连接示意图。
标号说明:
1、一种es更新数据的优化服务端;2、处理器;3、存储器。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
请参照图1,一种es更新数据的优化方法,包括步骤:
s1、获取索引数据更新信息,将所述索引数据更新信息更新至实时数据库单元;
s2、判断是否达到预设更新时间,若是,则将所述实时数据库单元里的所述索引数据更新信息更新至全量数据库单元。
从上述描述可知,本发明的有益效果在于:通过实时数据库单元进行索引数据更新,然后再定时更新到全量数据库单元中,保证了全量数据库单元的数据完整性,同时,系统基于全量数据库单元和实时数据库单元进行数据查询时,由于同时进行索引更新和数据查询的实时数据库单元中的数据量较小,故而在进行数据更新时,对于用户的查询效率的影响要远小于现有技术,从而实现在大数据量的情况下,同时支持数据的快速更新与高效查询。
进一步地,所述步骤s1具体为:
s1、获取索引数据更新信息,将所述索引数据更新信息更新至小时数据库单元;
所述步骤s1与所述步骤s2之间还包括步骤:
s20、判断当前时间和前一小时更新时间的时间差是否超过一小时,若是,则将所述小时数据库单元里的所述索引数据更新信息更新至日数据库单元;
所述步骤s2具体为:
s2、判断当前时间和前一日更新时间的时间差是否超过一天,若是,则将所述日数据库单元里的所述索引数据更新信息更新至全量数据库单元。
从上述描述可知,即通过细分日数据库单元和小时数据库单元,当索引数据进行更新时,只实时更新小时数据库单元里的数据,然后定时更新到日数据库单元,日数据库单元再定时更新到全量数据库单元。当将日数据库单元更新至全量数据库单元时,由于是通过批量更新索引的操作来进行,总体请求次数比现有的频繁更新索引的次数要少很多。另外对于短时间内多次更新同一条索引,本申请只需要在一天的时间内只进行更新一次,相对现有的频繁更新索引来说,故而本申请对于高并发请求的影响要远小于现有技术,从而能提高用户的查询效率。
进一步地,所述步骤s2还包括:
在所述索引数据更新信息更新至全量数据库单元完毕之后,删除所述实时数据库单元里的所述索引数据更新信息。
从上述描述可知,在更新完之后,删掉实时数据库单元里的数据,以减小实时数据库单元的存储压力,同时也使得下一次更新不会受到上一次更新的影响,保证了更新速度和更新准确性。
进一步地,还包括步骤:
s3、获取数据查询请求,从所述全量数据库单元中获取全量查询结果,从所述实时数据库单元中获取实时查询结果;
s4、判断所述全量查询结果与所述实时查询结果是否存在相同的第一id,若存在,则将所述实时查询结果中所述第一id所对应的数据覆盖掉所述全量查询结果中所述第一id所对应的数据,得到已更新查询结果;
s5、返回所述已更新查询结果。
从上述描述可知,即当进行数据查询时,为了保证客户查询的数据是最新的,会从全量数据库单元和实时数据库单元中进行查询并去重,虽然实时数据库单元是在同时进行索引数据更新以及数据查询,但是实时数据库单元的数据量非常小,故而在进行索引数据更新的同时对于数据查询的影响也非常小,其两次的数据查询再加去重也会比频繁更新索引而引起的延迟要更加高效。
进一步地,所述步骤s4具体为:
将所述全量查询结果与所述实时查询结果放入至set集合,以得到已更新查询结果。
其中,set集合包括hashset、linkedhashset以及treeset,hashset的特点是无序且集合中的元素不重复,linkedhashset是有序的hashset,treeset能自动去重排序,无论是其中哪一种,都具有去重功能,能够对所有的查询结果进行覆盖,以保证得到最新的查询结果。
从上述描述可知,通过set集合来自动进行覆盖操作,保证数据查询的效率。
请参照图2以及图3,一种es更新数据的优化服务端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
s1、获取索引数据更新信息,将所述索引数据更新信息更新至实时数据库单元;
s2、判断是否达到预设更新时间,若是,则将所述实时数据库单元里的所述索引数据更新信息更新至全量数据库单元。
从上述描述可知,本发明的有益效果在于:通过实时数据库单元进行索引数据更新,然后再定时更新到全量数据库单元中,保证了全量数据库单元的数据完整性,同时,系统基于全量数据库单元和实时数据库单元进行数据查询时,由于同时进行索引更新和数据查询的实时数据库单元中的数据量较小,故而在进行数据更新时,对于用户的查询效率的影响要远小于现有技术,从而实现在大数据量的情况下,同时支持数据的快速更新与高效查询。
进一步地,所述步骤s1具体为:
s1、获取索引数据更新信息,将所述索引数据更新信息更新至小时数据库单元;
所述步骤s1与所述步骤s2之间还包括步骤:
s20、判断当前时间和前一小时更新时间的时间差是否超过一小时,若是,则将所述小时数据库单元里的所述索引数据更新信息更新至日数据库单元;
所述步骤s2具体为:
s2、判断当前时间和前一日更新时间的时间差是否超过一天,若是,则将所述日数据库单元里的所述索引数据更新信息更新至全量数据库单元。
从上述描述可知,即通过细分日数据库单元和小时数据库单元,当索引数据进行更新时,只实时更新小时数据库单元里的数据,然后定时更新到日数据库单元,日数据库单元再定时更新到全量数据库单元。当将日数据库单元更新至全量数据库单元时,由于是通过批量更新索引的操作来进行,总体请求次数比现有的频繁更新索引的次数要少很多。另外对于短时间内多次更新同一条索引,本申请只需要在一天的时间内只进行更新一次,相对现有的频繁更新索引来说,故而本申请对于高并发请求的影响要远小于现有技术,从而能提高用户的查询效率。
进一步地,所述步骤s2还包括:
在所述索引数据更新信息更新至全量数据库单元完毕之后,删除所述实时数据库单元里的所述索引数据更新信息。
从上述描述可知,在更新完之后,删掉实时数据库单元里的数据,以减小实时数据库单元的存储压力,同时也使得下一次更新不会受到上一次更新的影响,保证了更新速度和更新准确性。
进一步地,还包括步骤:
s3、获取数据查询请求,从所述全量数据库单元中获取全量查询结果,从所述实时数据库单元中获取实时查询结果;
s4、判断所述全量查询结果与所述实时查询结果是否存在相同的第一id,若存在,则将所述实时查询结果中所述第一id所对应的数据覆盖掉所述全量查询结果中所述第一id所对应的数据,得到已更新查询结果;
s5、返回所述已更新查询结果。
从上述描述可知,即当进行数据查询时,为了保证客户查询的数据是最新的,会从全量数据库单元和实时数据库单元中进行查询并去重,虽然实时数据库单元是在同时进行索引数据更新以及数据查询,但是实时数据库单元的数据量非常小,故而在进行索引数据更新的同时对于数据查询的影响也非常小,其两次的数据查询再加去重也会比频繁更新索引而引起的延迟要更加高效。
进一步地,所述步骤s4具体为:
将所述全量查询结果与所述实时查询结果放入至set集合,以得到已更新查询结果。
从上述描述可知,通过set集合来自动进行覆盖操作,保证数据查询的效率。
请参照图1,本发明的实施例一为:
本实施例的应用场景是在10亿条数据量以上的场景使用,且下述的全量数据库单元为全部数据的存储记录单元,实时数据库单元为实时更新的存储记录单元。
一种es更新数据的优化方法,包括步骤:
s1、获取索引数据更新信息,将索引数据更新信息更新至实时数据库单元;
s2、判断是否达到预设更新时间,若是,则将实时数据库单元里的索引数据更新信息更新至全量数据库单元,在索引数据更新信息更新至全量数据库单元完毕之后,删除实时数据库单元里的索引数据更新信息。
当需要进行数据查询时,执行以下步骤:
s3、获取数据查询请求,从全量数据库单元中获取全量查询结果,从实时数据库单元中获取实时查询结果;
s4、判断全量查询结果与实时查询结果是否存在相同的第一id,若存在,则将实时查询结果中第一id所对应的数据覆盖掉全量查询结果中第一id所对应的数据,得到已更新查询结果,在本实施例中,该步骤具体为:将全量查询结果与实时查询结果放入至set集合,以得到已更新查询结果;
s5、返回已更新查询结果。
请参照图2,本发明的实施例二为:
本实施例的应用场景是在10亿条数据量以上的场景使用,且下述的全量数据库单元为全部数据的存储记录单元,日数据库单元为每天更新数据的存储记录单元,小时数据库单元为每小时更新数据的存储记录单元。
一种es更新数据的优化方法,在上述实施例一的基础上,本实施例中实时数据库单元包括日数据库单元和小时数据库单元,其具体实现过程如下:
步骤s1具体为:获取索引数据更新信息,将索引数据更新信息更新至小时数据库单元,即每次数据变更时,不会修改全量数据库单元与日数据库单元里的信息,将会按照小时的方式只记录更新数据信息至小时数据库单元中;
在步骤s1与步骤s2之间还包括步骤:
s20、判断当前时间和前一小时更新时间的时间差是否超过一小时,若是,则将小时数据库单元里的索引数据更新信息更新至日数据库单元,并在更新完成后删除小时数据库单元中存储的所有索引数据更新信息;
步骤s2具体为:判断当前时间和前一日更新时间的时间差是否超过一天,若是,则将日数据库单元里的索引数据更新信息更新至全量数据库单元,并在更新完成后删除日数据库单元中存储的所有索引数据更新信息。
在本实施例中,在进行数据查询时,是从全量数据库单元中获取全量查询结果,从日数据库单元中获取日查询结果,从小时数据库单元中查询小时查询结果;
s4、判断全量查询结果与日查询结果是否存在相同的第一id,若存在,则将日查询结果中第一id所对应的数据覆盖掉全量查询结果中第一id所对应的数据,得到日更新查询结果;再判断日更新查询结果与小时查询结果是否存在相同的第一id,若存在,则将小时查询结果中第一id所对应的数据覆盖掉日更新查询结果中第一id所对应的数据,从而得到已更新查询结果。
为了便于理解,本实施例具体举例如下:某次查询中,从全量数据库单元a中查询出10条id的数据出来,以得到a集合;之后,会日数据库单元b中查询出4条id,以得到b集合,其中b集合中有3条id在a集合;之后,会从小时数据库单元c中查询出2条id,以得到c集合,其中c集合中有1条id在b集合;然后,使用b集合中的最新数据覆盖a集合,此时a集合中的数据是全量数据库单元加上日数据库单元中的最新数据;再使用c集合中数据来覆盖a集合,此时a集合中数据将是全量数据库单元加上日数据库单元加上小时数据库单元中的最新数据,最后得到了合并后的10条id,且其中的数据都已经是日数据库单元或者小时数据库单元中的最新数据。
请参照图2以及图3,本发明的实施例三为:
一种es更新数据的优化服务端1,包括存储器3、处理器2及存储在存储器3上并可在处理器2上运行的计算机程序,处理器2执行计算机程序时实现上述实施例一的步骤。
如图3所示,一种es更新数据的优化服务端1包括es和数据迁移模块,其中,es包括全量数据库单元、日数据库单元以及小时数据库单元通过数据迁移模块定时将小时数据库单元里的数据更新到日数据库单元,然后定时将日数据库单元里的数据更新到全量数据库单元。
如图3所示,整个数据查询的流程如下:客户端请求api接口,api接口请求相关的es集群以进行数据的获取,在获取到相关数据之后进行组装,并最终返回给用户。
请参照图2以及图3,本发明的实施例四为:
一种es更新数据的优化服务端1,在上述实施例三的基础上,处理器2执行计算机程序时实现上述实施例二的步骤。
综上所述,本发明提供的一种es更新数据的优化方法及服务端,当索引数据进行更新时,只实时更新小时数据库单元里的数据,然后定时更新到日数据库单元,日数据库单元再定时更新到全量数据库单元,保证了全量数据库单元的数据完整性,同时,基于全量数据库单元、日数据库单元以及小时数据库单元进行数据查询,虽然小时数据库单元是在同时进行索引数据更新以及数据查询,但是小时数据库单元的数据量非常小,故而在进行索引数据更新的同时对于数据查询的影响也非常小,其三次的数据查询再加去重也会比频繁更新索引而引起的延迟要更加高效;另外,当将日数据库单元更新至全量数据库单元时,由于是通过批量更新索引的操作来进行,总体请求次数比现有的频繁更新索引的次数要少很多。另外对于短时间内多次更新同一条索引,本申请只需要在一天的时间内只进行更新一次,相对现有的频繁更新索引来说,故而本申请对于高并发请求的影响要远小于现有技术,从而实现在大数据量的情况下,同时支持数据的快速更新与高效查询;另外,在更新完之后,删掉实时数据库单元里的数据,以减小实时数据库单元的存储压力,同时也使得下一次更新不会受到上一次更新的影响,保证了更新速度和更新准确性。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。