数据缓存方法、数据查询方法及装置与流程

文档序号:11918518阅读:279来源:国知局
数据缓存方法、数据查询方法及装置与流程

本申请涉及网络技术领域,尤其涉及一种数据缓存方法、数据查询方法及装置。



背景技术:

随着网络技术的飞速发展,越来越多的用户通过网络获取信息,网站需要处理的数据量也越来越大,当今已然进入大数据时代。网站的服务端通常包括至少一个大数据终端、推送服务器和数据库,其中,不同的大数据终端可能处理用户的不同业务,各个大数据终端之间有时也会进行数据交互,也就是说,每个大数据终端可能会处理来自用户和其他大数据终端的数据获取请求,大数据终端从接收数据获取请求到反馈数据所需的时间为响应时间,很显然,响应时间越短,大数据终端的性能越好,用户体验也越好。

为了减少响应时间,推送服务器会以设定周期获取数据库中的全量数据,然后再将每个大数据终端的数据推送给对应的大数据终端。按照相关的数据缓存方法,各个大数据终端以设定周期接收推送服务器推送的数据,若大数据终端的内存中存在已有数据,则将接收到的数据替换已有数据,若大数据终端的内存中不存在已有数据,则直接将接收到的数据保存在内存中,当大数据终端接收到数据获取请求后,会从内存缓存的数据中获取需要的数据元素,并反馈给发送数据获取请求的用户或者其它大数据终端。

上述数据缓存方法中,为保证大数据终端可以正常处理数据获取请求,在替换已有数据的过程中,内存中会保存两份数据,由于这两份数据都是在数据库中保存的该大数据终端所需的全部数据元素,数据量非常大,替换数据的过程会占用很多内存资源,从而容易造成内存不足,甚至会引发内存回收和大数据终端宕机。



技术实现要素:

本申请实施例提供一种数据缓存方法、数据查询方法及装置,用以解决相关技术中存在的替换数据的过程占用很多内存资源,从而容易造成内存不足,甚至会引发内存回收和大数据终端宕机的问题。

根据本申请实施例,提供一种数据缓存方法,应用在大数据终端中,包括:

接收待缓存数据,针对所述待缓存数据包括的每个第一数据元素,执行:

获取所述第一数据元素的标识;

确定所述大数据终端的内存中是否保存所述第一数据元素的标识对应的已有数据元素;

若确定所述内存中保存所述已有数据元素,则将所述已有数据元素替换为所述第一数据元素;

若确定所述内存中未保存所述已有数据元素,确定所述内存的存储量是否达到设定阈值;若所述内存的存储量未达到所述设定阈值,则将所述第一数据元素及其标识保存在所述内存中;若所述内存的存储量达到所述设定阈值,则将所述第一数据元素保存在所述大数据终端的外部存储器中,并将所述第一数据元素的标识和存储位置保存在所述内存中。

具体的,获取所述第一数据元素的标识,具体包括:

从所述第一数据元素中查找选定字段;

获取所述选定字段的数值,得到所述第一数据元素的标识。

具体的,确定所述大数据终端的内存中是否保存所述第一数据元素的标识对应的已有数据元素,具体包括:

获取所述内存中保存的带有索引的双向链表;

确定所述双向链表的索引中是否包括所述第一数据元素的标识;

若所述双向链表的索引中包括所述第一数据元素的标识,则确定所述内存中保存所述已有数据元素;

若所述双向链表的索引中未包括所述第一数据元素的标识,则确定所述内存中未保存所述已有数据元素。

可选的,确定所述内存中保存所述已有数据元素之后,还包括:

获取所述双向链表中所述第一数据元素的标识对应的第一结点;

从所述第一结点的数据字段获取所述已有数据元素;

对比所述第一数据元素包括的内容与所述已有数据元素包括的内容是否完全相同;

若所述第一数据元素包括的内容与所述已有数据元素包括的内容不完全相同,则执行将所述已有数据元素替换为所述第一数据元素的步骤。

具体的,将所述第一数据元素及其标识保存在所述内存中,具体包括:

在所述双向链表的索引中保存所述第一数据元素的标识;

在所述双向链表中建立与所述第一数据元素的标识对应的第二结点,并将所述第一数据元素保存在所述第二节点的数据字段中。

具体的,将所述第一数据元素保存在所述大数据终端的外部存储器中,并将所述第一数据元素的标识和存储位置保存在所述内存中,具体包括:

将所述第一数据元素保存在所述大数据终端的外部存储器的文件中;

获取所述第一数据元素在所述大数据终端的外部存储器的存储位置;

在所述内存保存的标识与存储位置的对应关系中建立包括所述第一数据元素的标识与存储位置的表项。

可选的,还包括:

接收用户或者其它大数据终端发送的携带第二数据元素的标识的数据获取请求;

根据所述第二数据元素的标识在所述内存中查询所述第二数据元素或者所述第二数据元素的存储位置;

若查询到所述第二数据元素,则将所述第二数据元素发送给所述用户或者其它大数据终端;

若查询到所述第二数据元素的存储位置,则根据所述第二数据元素的存储位置从所述外部存储器获取所述第二数据元素,并发送给所述用户或者其它大数据终端;以及,将所述第二数据元素保存在所述内存中。

可选的,根据所述第二数据元素的标识在所述内存中查询所述第二数据元素或者所述第二数据元素的存储位置,具体包括:

分别从所述内存中保存的带有索引的双向链表中、以及标识与存储位置的对应关系中查找所述第二数据元素的标识;

若在所述双向链表中查找到所述第二数据元素的标识,则从所述双向链表中获取所述第二数据元素的标识对应的第三结点,并从所述第三结点的数据字段获取所述第二数据元素;

若在所述对应关系中查找到包括所述第二数据元素的标识的表项,则在所述表项中获取所述第二数据元素的存储位置。

可选的,查询到所述第二数据元素之后,还包括:

更新所述第三结点中所述第二数据元素的被访问次数;以及,

按照被访问次数调整所述双向链表中各个结点的位置,并相应调整所述双向链表中各 个结点中的指针。

具体的,将所述第二数据元素保存在所述内存中,具体包括:

判断所述内存的存储量是否达到所述设定阈值;

若所述内存的存储量达到所述设定阈值,则确定所述内存中保存的被访问次数最少的第三数据元素,将所述第三数据元素保存在所述外部存储器中,并在所述对应关系中保存包括所述第三数据元素的标识和存储位置的表项;删除所述双向链表的索引中保存的所述第三数据元素的标识和所述双向链表中所述第三数据元素所在的结点;在所述双向链表中建立与所述第二数据元素的标识对应的第四结点,将所述第二数据元素保存在所述第四节点的数据字段中,并在所述双向链表的索引中保存所述第二数据元素的标识;更新所述第四结点中所述第二数据元素的被访问次数,按照被访问次数调整所述双向链表中各个结点的位置,并相应调整所述双向链表中各个结点中的指针;

若所述内存的存储量未达到所述设定阈值,则在所述双向链表中建立与所述第二数据元素的标识对应的第五结点,将所述第二数据元素保存在所述第五节点的数据字段中,并在所述双向链表的索引中保存所述第二数据元素的标识;更新所述第五结点中所述第二数据元素的被访问次数,按照被访问次数调整所述双向链表中各个结点的位置,并相应调整所述双向链表中各个结点中的指针。

根据本申请实施例,还提供一种数据查询方法,应用在大数据终端中,包括:

接收用户或者其它大数据终端发送的携带第二数据元素的标识的数据获取请求;

根据所述第二数据元素的标识在所述大数据终端的内存中查询所述第二数据元素或者所述第二数据元素的存储位置;

若查询到所述第二数据元素,则将所述第二数据元素发送给所述用户或者其它大数据终端;

若查询到所述第二数据元素的存储位置,则根据所述第二数据元素的存储位置从所述大数据终端的外部存储器获取所述第二数据元素,并发送给所述用户或者其它大数据终端;以及,将所述第二数据元素保存在所述内存中。

具体的,根据所述第二数据元素的标识在所述内存中查询所述第二数据元素或者所述第二数据元素的存储位置,具体包括:

分别从所述内存中保存的带有索引的双向链表中、以及标识与存储位置的对应关系中查找所述第二数据元素的标识;

若在所述双向链表中查找到所述第二数据元素的标识,则从所述双向链表中获取所述 第二数据元素的标识对应的第三结点,并从所述第三结点的数据字段获取所述第二数据元素;

若在所述对应关系中查找到包括所述第二数据元素的标识的表项,则在所述表项中获取所述第二数据元素的存储位置。

可选的,查询到所述第二数据元素之后,还包括:

更新所述第三结点中所述第二数据元素的被访问次数;以及,

按照被访问次数调整所述双向链表中各个结点的位置,并相应调整所述双向链表中各个结点中的指针。

具体的,将所述第二数据元素保存在所述内存中,具体包括:

判断所述内存的存储量是否达到所述设定阈值;

若所述内存的存储量达到所述设定阈值,则确定所述内存中保存的被访问次数最少的第三数据元素,将所述第三数据元素保存在所述外部存储器中,并在所述对应关系中保存包括所述第三数据元素的标识和存储位置的表项;删除所述双向链表的索引中保存的所述第三数据元素的标识和所述双向链表中所述第三数据元素所在的结点;在所述双向链表中建立与所述第二数据元素的标识对应的第四结点,将所述第二数据元素保存在所述第四节点的数据字段中,并在所述双向链表的索引中保存所述第二数据元素的标识;更新所述第四结点中所述第二数据元素的被访问次数,按照被访问次数调整所述双向链表中各个结点的位置,并相应调整所述双向链表中各个结点中的指针;

若所述内存的存储量未达到所述设定阈值,则在所述双向链表中建立与所述第二数据元素的标识对应的第五结点,将所述第二数据元素保存在所述第五节点的数据字段中,并在所述双向链表的索引中保存所述第二数据元素的标识;更新所述第五结点中所述第二数据元素的被访问次数,按照被访问次数调整所述双向链表中各个结点的位置,并相应调整所述双向链表中各个结点中的指针。

根据本申请实施例,还提供一种数据缓存装置,应用在大数据终端中,包括:

第一接收单元,用于接收待缓存数据,针对所述待缓存数据包括的每个第一数据元素,执行:

获取单元,用于获取所述第一数据元素的标识;

确定单元,用于确定所述大数据终端的内存中是否保存所述第一数据元素的标识对应的已有数据元素;

缓存单元,用于若确定所述内存中保存所述已有数据元素,则将所述已有数据元素替 换为所述第一数据元素;若确定所述内存中未保存所述已有数据元素,确定所述内存的存储量是否达到设定阈值;若所述内存的存储量未达到所述设定阈值,则将所述第一数据元素及其标识保存在所述内存中;若所述内存的存储量达到所述设定阈值,则将所述第一数据元素保存在所述大数据终端的外部存储器中,并将所述第一数据元素的标识和存储位置保存在所述内存中。

具体的,所述获取单元,用于获取所述第一数据元素的标识,具体用于:

从所述第一数据元素中查找选定字段;

获取所述选定字段的数值,得到所述第一数据元素的标识。

具体的,所述确定单元,用于确定所述大数据终端的内存中是否保存所述第一数据元素的标识对应的已有数据元素,具体包括:

获取所述内存中保存的带有索引的双向链表;

确定所述双向链表的索引中是否包括所述第一数据元素的标识;

若所述双向链表的索引中包括所述第一数据元素的标识,则确定所述内存中保存所述已有数据元素;

若所述双向链表的索引中未包括所述第一数据元素的标识,则确定所述内存中未保存所述已有数据元素。

可选的,所述确定单元,还用于:

确定所述内存中保存所述已有数据元素之后,获取所述双向链表中所述第一数据元素的标识对应的第一结点;

从所述第一结点的数据字段获取所述已有数据元素;

对比所述第一数据元素包括的内容与所述已有数据元素包括的内容是否完全相同;

若所述第一数据元素包括的内容与所述已有数据元素包括的内容不完全相同,则转向所述缓存单元。

具体的,所述缓存单元,用于将所述第一数据元素及其标识保存在所述内存中,具体用于:

在所述双向链表的索引中保存所述第一数据元素的标识;

在所述双向链表中建立与所述第一数据元素的标识对应的第二结点,并将所述第一数据元素保存在所述第二节点的数据字段中。

具体的,所述缓存单元,用于将所述第一数据元素保存在所述大数据终端的外部存储 器中,并将所述第一数据元素的标识和存储位置保存在所述内存中,具体用于:

将所述第一数据元素保存在所述大数据终端的外部存储器的文件中;

获取所述第一数据元素在所述大数据终端的外部存储器的存储位置;

在所述内存保存的标识与存储位置的对应关系中建立包括所述第一数据元素的标识与存储位置的表项。

可选的,还包括:

第二接收单元,用于接收用户或者其它大数据终端发送的携带第二数据元素的标识的数据获取请求;

查询单元,用于根据所述第二数据元素的标识在所述内存中查询所述第二数据元素或者所述第二数据元素的存储位置;

发送单元,用于若查询到所述第二数据元素,则将所述第二数据元素发送给所述用户或者其它大数据终端;若查询到所述第二数据元素的存储位置,则根据所述第二数据元素的存储位置从所述外部存储器获取所述第二数据元素,并发送给所述用户或者其它大数据终端;以及,将所述第二数据元素保存在所述内存中。

具体的,所述查询单元,用于根据所述第二数据元素的标识在所述内存中查询所述第二数据元素或者所述第二数据元素的存储位置,具体用于:

分别从所述内存中保存的带有索引的双向链表中、以及标识与存储位置的对应关系中查找所述第二数据元素的标识;

若在所述双向链表中查找到所述第二数据元素的标识,则从所述双向链表中获取所述第二数据元素的标识对应的第三结点,并从所述第三结点的数据字段获取所述第二数据元素;

若在所述对应关系中查找到包括所述第二数据元素的标识的表项,则在所述表项中获取所述第二数据元素的存储位置。

可选的,所述发送单元,还用于:

在所述查询单元查询到所述第二数据元素之后,更新所述第三结点中所述第二数据元素的被访问次数;以及,

按照被访问次数调整所述双向链表中各个结点的位置,并相应调整所述双向链表中各个结点中的指针。

具体的,所述发送单元,用于将所述第二数据元素保存在所述内存中,具体用于:

判断所述内存的存储量是否达到所述设定阈值;

若所述内存的存储量达到所述设定阈值,则确定所述内存中保存的被访问次数最少的第三数据元素,将所述第三数据元素保存在所述外部存储器中,并在所述对应关系中保存包括所述第三数据元素的标识和存储位置的表项;删除所述双向链表的索引中保存的所述第三数据元素的标识和所述双向链表中所述第三数据元素所在的结点;在所述双向链表中建立与所述第二数据元素的标识对应的第四结点,将所述第二数据元素保存在所述第四节点的数据字段中,并在所述双向链表的索引中保存所述第二数据元素的标识;更新所述第四结点中所述第二数据元素的被访问次数,按照被访问次数调整所述双向链表中各个结点的位置,并相应调整所述双向链表中各个结点中的指针;

若所述内存的存储量未达到所述设定阈值,则在所述双向链表中建立与所述第二数据元素的标识对应的第五结点,将所述第二数据元素保存在所述第五节点的数据字段中,并在所述双向链表的索引中保存所述第二数据元素的标识;更新所述第五结点中所述第二数据元素的被访问次数,按照被访问次数调整所述双向链表中各个结点的位置,并相应调整所述双向链表中各个结点中的指针。

根据本申请实施例,还提供一种数据查询装置,应用在大数据终端中,包括:

接收单元,用于接收用户或者其它大数据终端发送的携带第二数据元素的标识的数据获取请求;

查询单元,用于根据所述第二数据元素的标识在所述大数据终端的内存中查询所述第二数据元素或者所述第二数据元素的存储位置;

发送单元,用于若查询到所述第二数据元素,则将所述第二数据元素发送给所述用户或者其它大数据终端;若查询到所述第二数据元素的存储位置,则根据所述第二数据元素的存储位置从所述大数据终端的外部存储器获取所述第二数据元素,并发送给所述用户或者其它大数据终端;以及,将所述第二数据元素保存在所述内存中。

具体的,所述查询单元,用于根据所述第二数据元素的标识在所述内存中查询所述第二数据元素或者所述第二数据元素的存储位置,具体用于:

分别从所述内存中保存的带有索引的双向链表中、以及标识与存储位置的对应关系中查找所述第二数据元素的标识;

若在所述双向链表中查找到所述第二数据元素的标识,则从所述双向链表中获取所述第二数据元素的标识对应的第三结点,并从所述第三结点的数据字段获取所述第二数据元素;

若在所述对应关系中查找到包括所述第二数据元素的标识的表项,则在所述表项中获 取所述第二数据元素的存储位置。

可选的,所述发送单元,还用于:

在所述查询单元查询到所述第二数据元素之后,更新所述第三结点中所述第二数据元素的被访问次数;以及,

按照被访问次数调整所述双向链表中各个结点的位置,并相应调整所述双向链表中各个结点中的指针。

具体的,所述发送单元,用于将所述第二数据元素保存在所述内存中,具体用于:

判断所述内存的存储量是否达到所述设定阈值;

若所述内存的存储量达到所述设定阈值,则确定所述内存中保存的被访问次数最少的第三数据元素,将所述第三数据元素保存在所述外部存储器中,并在所述对应关系中保存包括所述第三数据元素的标识和存储位置的表项;删除所述双向链表的索引中保存的所述第三数据元素的标识和所述双向链表中所述第三数据元素所在的结点;在所述双向链表中建立与所述第二数据元素的标识对应的第四结点,将所述第二数据元素保存在所述第四节点的数据字段中,并在所述双向链表的索引中保存所述第二数据元素的标识;更新所述第四结点中所述第二数据元素的被访问次数,按照被访问次数调整所述双向链表中各个结点的位置,并相应调整所述双向链表中各个结点中的指针;

若所述内存的存储量未达到所述设定阈值,则在所述双向链表中建立与所述第二数据元素的标识对应的第五结点,将所述第二数据元素保存在所述第五节点的数据字段中,并在所述双向链表的索引中保存所述第二数据元素的标识;更新所述第五结点中所述第二数据元素的被访问次数,按照被访问次数调整所述双向链表中各个结点的位置,并相应调整所述双向链表中各个结点中的指针。

本申请实施例提供一种数据缓存方法、数据查询方法及装置,接收待缓存数据,针对所述待缓存数据包括的每个第一数据元素,执行:获取所述第一数据元素的标识;确定所述大数据终端的内存中是否保存所述第一数据元素的标识对应的已有数据元素;若确定所述内存中保存所述已有数据元素,则将所述已有数据元素替换为所述第一数据元素;若确定所述内存中未保存所述已有数据元素,确定所述内存的存储量是否达到设定阈值;若所述内存的存储量未达到所述设定阈值,则将所述第一数据元素及其标识保存在所述内存中;若所述内存的存储量达到所述设定阈值,则将所述第一数据元素保存在所述大数据终端的外部存储器中,并将所述第一数据元素的标识和存储位置保存在所述内存中。该方案中,并不是将推送服务器或者数据库推送的待缓存数据都保存在内存中,而是采用内存和外部存储相结合的方式来保存待缓存数据,内存的存储量始终控制在设定阈值之内,从而可以 有效避免相关技术中替换数据的过程占用很多内存资源,从而容易造成内存不足,甚至会引发内存回收和大数据终端宕机的问题。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为本申请实施例中一种数据缓存方法的流程图;

图2为本申请实施例中S12的流程图;

图3为本申请实施例中S13的流程图;

图4为本申请实施例中带有索引的双向链表的结构示意图;

图5为本申请实施例中一种数据查询方法的流程图;

图6为本申请实施例中一种数据缓存装置的结构示意图;

图7为本申请实施例中另一种数据缓存装置的结构示意图;

图8为本申请实施例中一种数据查询装置的结构示意图。

具体实施方式

为了使本申请所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图和实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

为了解决相关技术中存在的替换数据的过程占用很多内存资源,从而容易造成内存不足,甚至会引发内存回收和大数据终端宕机的问题,本申请实施例提供一种数据缓存方法,该方法可以但不限于应用在大数据终端中,该大数据终端可以是网站的服务端中唯一的大数据终端,也可以是大数据终端集群中的任一个大数据终端,该方法的流程如图1所示,具体包括如下步骤:

S11:接收待缓存数据,针对待缓存数据包括的每个第一数据元素,执行S12。

待缓存数据可能是推送服务器或者数据库推送的,下面分别介绍推送服务器和数据库推送待缓存数据的情况。

推送服务器会在以下两种情况推送待缓存数据:

第一种情况,推送服务器以第一周期从数据库获取全量数据并从中选取出各个大数据终端所需的数据,得到各个大数据终端的待缓存数据,然后推送给对应的大数据终端,第一周期可以根据实际需要进行设定,可以设定为1天、2天等等,优选的是选择每天业务量比较少的时段进行推送,例如每天0点、0点30分等等。

第二种情况,推送服务器还会以第二周期从数据库获取更新数据并从中选取出各个大数据终端的更新数据,得到各个大数据终端的待缓存数据,然后推送给对应的大数据终端,第二周期小于第一周期,可以根据实际需要进行设定,可以设定为1小时、2小时、3小时等等。由于推送服务器定时推送各个大数据终端的更新数据,从而可以确保大数据终端中保存的是最新、最全的数据,进而确保大数据终端可以实时处理来自用户的业务,减少业务处理延时。

数据库会在以下情况推送待缓存数据,当大数据终端初始化时,首先向推送服务器注册,然后推送服务器将从数据库获取的全量数据中选取出该大数据终端所需的数据推送给该大数据终端,若推送服务器以第一设定周期向各个大数据终端推动待缓存数据,也就是说推送服务器推送的是固定时间之前的数据,为了确保获取到最新的数据,大数据终端可以自行向数据库请求当前时间到固定时间之间的数据,数据库将大数据终端请求的数据推送该大数据终端。例如,若推送服务器在每天0点定时向大数据终端推送数据,而当前时刻是13点,那么今天0点到13点之间的数据需要大数据终端向数据库请求,数据库将今天0点到13点之间的数据推送给大数据终端。

S12:获取第一数据元素的标识。

S13:确定大数据终端的内存中是否保存第一数据元素的标识对应的已有数据元素,若确定内存中保存已有数据元素,执行S14;若确定内存中未保存已有数据元素,执行S15。

一个数据元素包括的数据量可能会比较大,在确定大数据终端的内存中是否保存第一数据元素时,可以获取第一数据元素的标识,然后确定大数据终端的内存中是否保存第一数据元素的标识对应的已有数据元素,由于第一数据元素的标识数据量非常小,从而可以大大减少大数据终端的工作量,提升数据缓存效率。

S14:将已有数据元素替换为第一数据元素。

若内存中保存已有数据元素,为了确保内存中保存的是最新的数据元素,可以直接将已有数据元素替换为第一数据元素。

S15:确定内存的存储量是否达到设定阈值,若内存的存储量未达到设定阈值,执行S16;若内存的存储量达到设定阈值,执行S17。

若内存中未保存已有数据元素,则需要确定第一数据元素是保存在内存中还是保存在 大数据终端的外部存储器中,具体可以确定内存是否还有存储空间,即判断内存的存储量是否达到设定阈值,设定阈值可以根据实际需要进行设定。

S16:将第一数据元素及其标识保存在内存中。

S17:将第一数据元素保存在大数据终端的外部存储器中,并将第一数据元素的标识和存储位置保存在内存中。

若内存的存储量达到设定阈值,则需要将第一数据元素保存在外部存储器中。其中,第一数据元素的标识和存储位置可以采用键(Key)/值(Vlaue)对的形式保存在内存中,Key为第一数据元素的标识,Value为第一数据元素在外部存储器中的存储位置。在一个实施方式中,该存储位置具体可以是外部存储器的偏移量。在另一个实施方式中,该存储位置具体可以是外部存储器中的离散存储位置。

该方案中,并不是将推送服务器或者数据库推送的待缓存数据都保存在内存中,而是采用内存和外部存储相结合的方式来保存待缓存数据,内存的存储量始终控制在设定阈值之内,从而可以有效避免相关技术中替换数据的过程占用很多内存资源,从而容易造成内存不足,甚至会引发内存回收和大数据终端宕机的问题。

下面详细介绍上述数据缓存方法中的每个步骤。

具体的,上述S12中的获取一数据元素的标识的实现过程如图2所示,具体包括如下步骤:

S121:从第一数据元素中查找选定字段。

S122:获取选定字段的数值,得到第一数据元素的标识。

第一数据元素中通常包括很多与其他数据元素相区别的唯一字段,可以从中选取出一个或多个字段得到选定字段,将该选定字段的数值作为第一数据元素的标识,该标识为第一数据元素的全局唯一标示符,可以是包括数字、字母、字符等等形式,也可以包括数字、字母、字符等等各种形式的组合。

具体的,上述S13中确定大数据终端的内存中是否保存第一数据元素的标识对应的已有数据元素的实现过程如图3所示,具体包括如下步骤:

S131:获取内存中保存的带有索引的双向链表。

内存中数据元素的存储结构可以采用多种形式,例如双向链表、数据表格等等,下面以如图4所示带有索引的双向链表为例进行说明,其中:

表头指针(Head):链表的第一个结点指针,可以从这个表头指针找到链表的第一个结点;

前结点指针(Pre):指向当前结点的上一个结点,如果没有上一个结点,表明当前结点是第一个结点;

后结点指针(Next):指向当前结点的下一个结点,没有没有下一个结点,表明当前结点就是最后一个结点;

数据字段(data):当前结点的数据实体,可以是业务数据等等;

表尾结点(Tail):链表的最后一个结点指针,可以从这个表尾结点找到链表的最后一个结点。

上述带有索引的双向链表采用Key/Vlaue对的形式,其中,数据元素的标识为Key,数据元素所在的结点为Value。

S132:确定双向链表的索引中是否包括第一数据元素的标识,若双向链表的索引中包括第一数据元素的标识,执行S133;若双向链表的索引中未包括第一数据元素的标识,执行S134。

S133:确定内存中保存已有数据元素。

S134:确定内存中未保存已有数据元素。

由于带有索引的双向链表中数据元素的标识与该数据元素所在的结点是一一对应的,因此,可以根据双向链表的索引中是否保存第一数据元素的标识来确定内存中是否保存第一数据元素,从而可以快速确定内存中是否保存第一数据元素,提高数据缓存效率。

可选的,在确定内存中保存已有数据元素之后,执行S16之前,还包括:

获取双向链表中第一数据元素的标识对应的第一结点;

从第一结点的数据字段获取已有数据元素;

对比第一数据元素包括的内容与已有数据元素包括的内容是否完全相同;

若第一数据元素包括的内容与已有数据元素包括的内容不完全相同,则执行S16。

若内存中保存已有数据元素,可以进一步确定已有数据元素与第一数据元素是否相同,若第一数据元素与已有数据元素不同,也就是说第一数据元素相对于已有数据元素的内容有了一定的更新,由于标识没有改变,只需要将已有数据元素替换为第一数据元素即可;若第一数据元素与已有数据元素相同,那么就可以忽略第一数据元素,继续针对下一个数据元素进行判断。

在一个替换实施方式中,也可以省略将第一数据元素包括的内容与已有数据元素包括的内容进行比较的步骤,直接将已有数据元素替换为第一数据元素。即,不论已有数据元 素的内容如何,始终默认所获取的第一数据元素为最新的值,因而执行替换操作。

具体的,当内存中的存储结构为采用带有索引的双向链表时,上述S16中将已有数据元素替换为第一数据元素,具体包括:删除第一结点的数据字段中保存的已有数据元素;将第一数据元素保存在第一结点的数据字段中。

替换已有数据元素时,实际上就是将第一数据元素的标识对应的第一结点中的数据字段中保存的数据元素替换为第一数据元素。

相应地,上述S17中将第一数据元素及其标识保存在内存中,具体包括:在双向链表的索引中保存第一数据元素的标识;在双向链表中建立与第一数据元素的标识对应的第二结点,并将第一数据元素保存在第二节点的数据字段中。

在内存中保存第一数据元素及其标识,就是要在带有索引的双向链表中建立Key/Value对,Key为第一数据元素的标识,Value为包括第一数据元素的第二结点。

相应地,上述S17中的将第一数据元素保存在大数据终端的外部存储器中,并将第一数据元素的标识和存储位置保存在内存中,具体包括:将第一数据元素保存在大数据终端的外部存储器的文件中;获取第一数据元素在大数据终端的外部存储器的存储位置;在内存保存的标识与存储位置的对应关系中建立包括第一数据元素的标识与存储位置的表项。

外部存储器可以根据实际需要进行设定,优选的可以采用具有高数据读取/写入速度的大容量存储设备,诸如,固态硬盘(Solid State Drives,SSD),也可以采用普通的大容量存储设备。外部存储器中的数据元素可以保存在一个文件中,当然还可以采用其他的存储方式,这里不再赘述。

以上介绍了数据缓存方法,大数据终端在对数据进行缓存后,还会从缓存的数据中查找需要的数据元素,本申请实施例还提供一种数据查询方法,该方法可以但不限于应用在大数据终端中,该方法的流程如图5所示,包括如下步骤:

S51:接收用户或者其它大数据终端发送的携带第二数据元素的标识的数据获取请求。

当用户或者其它大数据终端需要获取数据元素时,这些数据元素可以定义为第二数据元素,可以向大数据终端发送携带第二数据元素的标识的数据获取请求。

S52:根据第二数据元素的标识在大数据终端的内存中查询第二数据元素或者第二数据元素的存储位置,若查询到第二数据元素,执行S53;若查询到第二数据元素的存储位置,执行S54。

由于大数据终端的内存中保存数据元素或者数据元素的存储位置,并且内存中的查询速度非常快,因此,可以直接在内存中查找第二数据元素或者第二数据元素的存储位置。

具体的,可以分别从内存中保存的带有索引的双向链表中、以及标识与存储位置的对应关系中查找第二数据元素的标识;若在双向链表中查找到第二数据元素的标识,则从双向链表中获取第二数据元素的标识对应的第三结点,并从第三结点的数据字段获取第二数据元素;若在对应关系中查找到包括第二数据元素的标识的表项,则在表项中获取第二数据元素的存储位置。

S53:将第二数据元素发送给用户或者其它大数据终端。

S54:根据第二数据元素的存储位置从大数据终端的外部存储器获取第二数据元素,并发送给用户或者其它大数据终端;以及,将第二数据元素保存在内存中。

该方案中,由于大数据终端中的数据元素采用内存加外部存储相结合的方式,而保存在外部存储器中的数据元素的标识和存储位置保存在内存中,相应地,在查询第二数据元素时,若第二数据元素保存在内存中,可以直接获取第二数据元素,若第二数据元素保存在外部存储器中,可以在内存中查询到第二数据元素的存储位置,因此,即使第二数据元素保存在外部存储器中,也可以快速获取第二数据元素的存储位置,进而获取第二数据元素,从而减少数据查询的延时,确保数据查询的实时性,提升了用户体验。

下面详细介绍上述数据查询方法的各个步骤。

可选的,查询到第二数据元素之后,还包括:

更新第三结点中第二数据元素的被访问次数;以及,

按照被访问次数调整双向链表中各个结点的位置,并相应调整双向链表中各个结点中的指针。

若内存的存储结构为带索引的双向链表,可以在双向链表的每个结点中增加计数器(counter)指针,用来记录对应结点中数据元素的被访问次数。在一个替换实施方式中,若双向链表中的结点是按照数据元素的被访问次数大小排序的,在更新第三结点中第二数据元素的被访问次数后,还需要调整第二数据元素的位置。即,举例而言,第二数据元素为A,双向链表中的两个数据元素B和C,则当更新完A的被访问次数后,从A所在的结点开始向前查找被访问次数大于A的结点,假设查找到B的被访问次数大于A,C的被访问次数小于A,则将A所在的结点调整到B所在的结点之后、C所在的结点之前,并调整A、B、C所在结点中的指针。

可选的,上述S54中将第二数据元素保存在内存中之后,为了避免重复保存,还可以删除内存中保存的第二数据元素的存储位置和外部存储器中保存的第二数据元素,具体过程为:从对应关系中删除包括第二数据元素的标识及其存储位置的表项;以及,从外部存储器中删除第二数据元素。

具体的,上述S54中的将第二数据元素保存在内存中的实现过程,具体包括以下步骤:

第一步,判断内存的存储量是否达到设定阈值,若内存的存储量达到设定阈值,执行第二步;若内存的存储量未达到设定阈值,执行第三步。

第二步,确定内存中保存的被访问次数最少的第三数据元素,将第三数据元素保存在外部存储器中,并在对应关系中保存包括第三数据元素的标识和存储位置的表项;删除双向链表的索引中保存的第三数据元素的标识和双向链表中第三数据元素所在的结点;在双向链表中建立与第二数据元素的标识对应的第四结点,将第二数据元素保存在第四节点的数据字段中,并在双向链表的索引中保存第二数据元素的标识;更新第四结点中第二数据元素的被访问次数,按照被访问次数调整双向链表中各个结点的位置,并相应调整双向链表中各个结点中的指针。

由于第三数据元素的被访问次数最少,说明第三数据元素被重复使用的可能性很小,因此,可以将其保存在外部存储器中,将内存的空间留给被访问次数多的数据元素。在一个具体实施方式中第二数据元素为A,若内存的存储量达到设定阈值,在删除第三数据元素后,则从双向链表的尾部向前查找,一旦找到数据元素B的被访问次数大于1,则在B所在的结点之后建立包括A的结点,如果不存在B,则将在双向链表的尾部建立包括A的结点,同时调整A所在的第四结点相邻结点中的指针,并更新第四结点中的被访问次数为1。

第三步,在双向链表中建立与第二数据元素的标识对应的第五结点,将第二数据元素保存在第五节点的数据字段中,并在双向链表的索引中保存第二数据元素的标识;更新第五结点中第二数据元素的被访问次数,按照被访问次数调整双向链表中各个结点的位置,并相应调整双向链表中各个结点中的指针。

在一个具体实施方式中,第二数据元素为A,若内存的存储量未达到设定阈值,则直接在双向链表的尾部建立包括A的第五结点,同时调整第五结点中的指针,并更新第五结点中的被访问次数为1。

需要说明的是,以上分别介绍了数据缓存方法和数据查询方法,但是对于大数据终端来说,既可以分别执行上述数据缓存方法和数据查询方法,也可以同时执行上述数据缓存方法和数据查询方法。

基于同一发明构思,本申请实施例还提供一种数据缓存装置,该装置与如图1所示的数据缓存方法对应,该装置的结构如6图所示,包括

第一接收单元61,用于接收待缓存数据,针对待缓存数据包括的每个第一数据元素,执行:

获取单元62,用于获取第一数据元素的标识;

确定单元63,用于确定大数据终端的内存中是否保存第一数据元素的标识对应的已有数据元素;

缓存单元64,用于若确定内存中保存已有数据元素,则将已有数据元素替换为第一数据元素;若确定内存中未保存已有数据元素,确定内存的存储量是否达到设定阈值;若内存的存储量未达到设定阈值,则将第一数据元素及其标识保存在内存中;若内存的存储量达到设定阈值,则将第一数据元素保存在大数据终端的外部存储器中,并将第一数据元素的标识和存储位置保存在内存中。

该方案中,并不是将推送服务器或者数据库推送的待缓存数据都保存在内存中,而是采用内存和外部存储相结合的方式来保存待缓存数据,内存的存储量始终控制在设定阈值之内,从而可以有效避免相关技术中替换数据的过程占用很多内存资源,从而容易造成内存不足,甚至会引发内存回收和大数据终端宕机的问题。

具体的,获取单元62,用于获取第一数据元素的标识,具体用于:

从第一数据元素中查找选定字段;

获取选定字段的数值,得到第一数据元素的标识。

具体的,确定单元63,用于确定大数据终端的内存中是否保存第一数据元素的标识对应的已有数据元素,具体包括:

获取内存中保存的带有索引的双向链表;

确定双向链表的索引中是否包括第一数据元素的标识;

若双向链表的索引中包括第一数据元素的标识,则确定内存中保存已有数据元素;

若双向链表的索引中未包括第一数据元素的标识,则确定内存中未保存已有数据元素。

可选的,确定单元63,还用于:

确定内存中保存已有数据元素之后,获取双向链表中第一数据元素的标识对应的第一结点;

从第一结点的数据字段获取已有数据元素;

对比第一数据元素包括的内容与已有数据元素包括的内容是否完全相同;

若第一数据元素包括的内容与已有数据元素包括的内容不完全相同,则转向缓存单元。

具体的,缓存单元64,用于将第一数据元素及其标识保存在内存中,具体用于:

在双向链表的索引中保存第一数据元素的标识;

在双向链表中建立与第一数据元素的标识对应的第二结点,并将第一数据元素保存在 第二节点的数据字段中。

具体的,缓存单元64,用于将第一数据元素保存在大数据终端的外部存储器中,并将第一数据元素的标识和存储位置保存在内存中,具体用于:

将第一数据元素保存在大数据终端的外部存储器的文件中;

获取第一数据元素在大数据终端的外部存储器的存储位置;

在内存保存的标识与存储位置的对应关系中建立包括第一数据元素的标识与存储位置的表项。

根据本申请实施例还提供另一种数据缓存装置,该装置的结构如图7所示,该装置与如图6所示的装置相同的单元省略不表,在如图6所示的装置的基础上,还包括:

第二接收单元65,用于接收用户或者其它大数据终端发送的携带第二数据元素的标识的数据获取请求;

查询单元66,用于根据第二数据元素的标识在内存中查询第二数据元素或者第二数据元素的存储位置;

发送单元67,用于若查询到第二数据元素,则将第二数据元素发送给用户或者其它大数据终端;若查询到第二数据元素的存储位置,则根据第二数据元素的存储位置从外部存储器获取第二数据元素,并发送给用户或者其它大数据终端;以及,将第二数据元素保存在内存中。

具体的,查询单元66,用于根据第二数据元素的标识在内存中查询第二数据元素或者第二数据元素的存储位置,具体用于:

分别从内存中保存的带有索引的双向链表中、以及标识与存储位置的对应关系中查找第二数据元素的标识;

若在双向链表中查找到第二数据元素的标识,则从双向链表中获取第二数据元素的标识对应的第三结点,并从第三结点的数据字段获取第二数据元素;

若在对应关系中查找到包括第二数据元素的标识的表项,则在表项中获取第二数据元素的存储位置。

可选的,发送单元67,还用于:

在查询单元66查询到第二数据元素之后,更新第三结点中第二数据元素的被访问次数;以及,

按照被访问次数调整双向链表中各个结点的位置,并相应调整双向链表中各个结点中 的指针。

具体的,发送单元67,用于将第二数据元素保存在内存中,具体用于:

判断内存的存储量是否达到设定阈值;

若内存的存储量达到设定阈值,则确定内存中保存的被访问次数最少的第三数据元素,将第三数据元素保存在外部存储器中,并在对应关系中保存包括第三数据元素的标识和存储位置的表项;删除双向链表的索引中保存的第三数据元素的标识和双向链表中第三数据元素所在的结点;在双向链表中建立与第二数据元素的标识对应的第四结点,将第二数据元素保存在第四节点的数据字段中,并在双向链表的索引中保存第二数据元素的标识;更新第四结点中第二数据元素的被访问次数,按照被访问次数调整双向链表中各个结点的位置,并相应调整双向链表中各个结点中的指针;

若内存的存储量未达到设定阈值,则在双向链表中建立与第二数据元素的标识对应的第五结点,将第二数据元素保存在第五节点的数据字段中,并在双向链表的索引中保存第二数据元素的标识;更新第五结点中第二数据元素的被访问次数,按照被访问次数调整双向链表中各个结点的位置,并相应调整双向链表中各个结点中的指针。

基于同一发明构思,本申请实施例还提供一种数据查询装置,该装置与如图5所示的数据查询方法对应,该装置的结构如图8所示,包括

接收单元81,用于接收用户或者其它大数据终端发送的携带第二数据元素的标识的数据获取请求;

查询单元82,用于根据第二数据元素的标识在大数据终端的内存中查询第二数据元素或者第二数据元素的存储位置;

发送单元83,用于若查询到第二数据元素,则将第二数据元素发送给用户或者其它大数据终端;若查询到第二数据元素的存储位置,则根据第二数据元素的存储位置从大数据终端的外部存储器获取第二数据元素,并发送给用户或者其它大数据终端;以及,将第二数据元素保存在内存中。

该方案中,由于大数据终端中的数据元素采用内存加外部存储相结合的方式,而保存在外部存储器中的数据元素的标识和存储位置保存在内存中,相应地,在查询第二数据元素时,若第二数据元素保存在内存中,可以直接获取第二数据元素,若第二数据元素保存在外部存储器中,可以在内存中查询到第二数据元素的存储位置,因此,即使第二数据元素保存在外部存储器中,也可以快速获取第二数据元素的存储位置,进而获取第二数据元素,从而减少数据查询的延时,确保数据查询的实时性,提升了用户体验。

具体的,查询单元82,用于根据第二数据元素的标识在内存中查询第二数据元素或者 第二数据元素的存储位置,具体用于:

分别从内存中保存的带有索引的双向链表中、以及标识与存储位置的对应关系中查找第二数据元素的标识;

若在双向链表中查找到第二数据元素的标识,则从双向链表中获取第二数据元素的标识对应的第三结点,并从第三结点的数据字段获取第二数据元素;

若在对应关系中查找到包括第二数据元素的标识的表项,则在表项中获取第二数据元素的存储位置。

可选的,发送单元83,还用于:

在查询单元82查询到第二数据元素之后,更新第三结点中第二数据元素的被访问次数;以及,

按照被访问次数调整双向链表中各个结点的位置,并相应调整双向链表中各个结点中的指针。

具体的,发送单元83,用于将第二数据元素保存在内存中,具体用于:

判断内存的存储量是否达到设定阈值;

若内存的存储量达到设定阈值,则确定内存中保存的被访问次数最少的第三数据元素,将第三数据元素保存在外部存储器中,并在对应关系中保存包括第三数据元素的标识和存储位置的表项;删除双向链表的索引中保存的第三数据元素的标识和双向链表中第三数据元素所在的结点;在双向链表中建立与第二数据元素的标识对应的第四结点,将第二数据元素保存在第四节点的数据字段中,并在双向链表的索引中保存第二数据元素的标识;更新第四结点中第二数据元素的被访问次数,按照被访问次数调整双向链表中各个结点的位置,并相应调整双向链表中各个结点中的指针;

若内存的存储量未达到设定阈值,则在双向链表中建立与第二数据元素的标识对应的第五结点,将第二数据元素保存在第五节点的数据字段中,并在双向链表的索引中保存第二数据元素的标识;更新第五结点中第二数据元素的被访问次数,按照被访问次数调整双向链表中各个结点的位置,并相应调整双向链表中各个结点中的指针。

上述说明示出并描述了本申请的优选实施例,但如前所述,应当理解本申请并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本申请的精神和范围,则都应在本申请所附权利要求的保护范围内。

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