一种面向海量规模KV缓存的数据生命周期管理方法与流程

文档序号:17762737发布日期:2019-05-24 21:50阅读:458来源:国知局
一种面向海量规模KV缓存的数据生命周期管理方法与流程

本发明涉及计算机大数据领域,具体涉及面向海量规模kv缓存的数据生命周期管理方法。



背景技术:

kv缓存数据库因其高性能的key-value访问模式在业界已经被广泛使用。比如redis、memcached被使用于双十一高并发订单系统、新闻资讯推荐的用户画像系统等。由于kv缓存数据库是使用珍贵的内存资源作为存储介质,因此kv数据的生命周期需要被有效管理,目的是为了减少内存资源的浪费。

目前业界已有的kv缓存数据库,为了兼顾内存使用和服务性能,在数据生命周期管理上普遍采用lazydelete方式:即当kv数据达到了生命周期,数据不会删除,而是标记可被删除,当数据下一次被读取时,返回空并进行删除。在大规模kv缓存数据的情况下,lazydelete方式使得大量的过期数据依然占用了珍贵的内存资源,严重浪费了内存资源。

术语解释:

1.kv:key-value的缩写,通过key查询、更新、删除value。常用kv缓存如redis、memcached等。

2.生命周期:key-value数据在数据库的存储时间,如果超过指定的时长,就不能被访问到。



技术实现要素:

为了解决以上问题,在海量规模的kv缓存数据的场景下,本申请引入一种数据生命周期管理方法,即面向海量规模kv缓存的数据生命周期管理方法,节省内存资源。

本发明解决技术问题所使用的技术方案:

一种面向海量规模kv缓存的数据生命周期管理方法,包括如下流程:

1.kv缓存数据用户方指定过期时间;

2.根据指定的过期时间,计算对应的时间窗口,执行操作流程,操作流程包括新增数据、删除数据和/或更新数据;

3.对kv进行存储及生命周期管理。

其中,时间窗口为kv缓存数据用户方设定的过期时间,但kv缓存执行过期过程中,超过时间窗口,批量删除已经过期的数据。

时间窗口的计算过程为:

计算过期时间=当前系统时间(到秒)+用户指定的过期时间长度(秒),

计算过期时间到分钟,然后根据时间窗口大小获得计算过期时间所在的创建区间。

所述时间窗口可以根据实际情况动态调整,即用户是改变过期时间,内部会触发下面的执行流程。

时间窗口的逻辑结构采用拉链法。

所述新增数据步骤如下:

新增一条数据<k,v>,

a.写入<k,v>数据;

b.根据指定的过期时间,计算对应的时间窗口,并更新生命周期管理;

(1)如果时间窗口已经存在,则在该时间窗口对应的key列表插入该k;

(2)如果时间窗口不存在,则在时间窗口列表合适的位置插入该时间窗口,保证有序,同时该时间窗口需要指向k;

所述删除数据步骤如下:

删除<k,v>数据,

a.执行<k,v>删除;

b.根据k的过期时间,计算对应的时间窗口;

c.从该时间窗口指向的key列表,查找包含k的key节点并删除;

更新过期时间步骤如下:

更新<k,v>过期时间,

a.查询k已有过期时间,计算对应的时间窗口;

b.从该时间窗口对应的key列表查找包含k的key节点,并删除;

c.计算新过期时间对应的时间窗口;

d.根据指定的过期时间,计算对应的时间窗口,并更新生命周期管理;

(1)如果时间窗口已经存在,则在该时间窗口对应的key列表插入该k;

(2)如果时间窗口不存在,则在时间窗口列表合适的位置插入该时间窗口,保证有序,同时该时间窗口需要指向k。

本发明流程如下:

一.定义时间窗口;

二.定义时间窗口数据结构;

三.执行数据增加/删除/更新过期时间等操作流程;

四.根据上述三点对kv进行存储及生命周期管理。

本发明制定了面向海量规模kv缓存的数据生命周期管理方法,在不影响kv缓存性能的情况下能节省珍贵的内存资源。性能测试数据如下:

附图说明

图1为本发明时间窗口的拉链法逻辑结构流程图。

图2为当时间窗口已经存在时,在该时间窗口对应的key列表插入该k的示意图。

图3为当时间窗口不存在,在时间窗口列表合适的位置插入该时间窗口,同时该时间窗口需要指向k的示意图。

图4为删除数据的示意图。

图5为时间窗口已经存在,在该时间窗口对应的key列表插入该k的示意图。

图6为时间窗口不存在,在时间窗口列表合适的位置插入该时间窗口,同时该时间窗口指向k的示意图。

具体实施方式

3.2.1定义时间窗口

本方案引入的一个重要概念:时间窗口(一定的时间跨度)。即kv缓存数据用户方设定了过期时间,但kv缓存执行过期过程中,以10分钟为一个窗口,去批量删除已经过期的数据。(这个窗口值可以根据实际情况动态调整)

比如写入一条kv数据:<“hello”,2>,当前写入时间为:2018-12-1012:02:00,过期时间为600s,则理论上这条数据在2018-12-1012:12:00会因为过期被删除。

同样地,另外一条数据:<“world”,3>,当前写入时间为:2018-12-1012:07:00,过期时间为600s,则理论上这条数据在2018-12-1012:17:00会因为过期被删除。

引入时间窗口机制后,这两条数据都不会在理论上的过期时间点删除。它们的过期时间点均属于:[2018-12-10_12:10,2018-12-10_12:20]这个时间窗口,因此在2018-12-10_12:20的时候,依次删除这两条过期的数据。同理,如果这个时间窗口内的过期数据更多,也只需要批量依次执行删除,内存资源将会很快被回收。

3.2.2定义时间窗口的数据结构

时间窗口的逻辑结构采用拉链法,如图1。

其中,timewindow结点表示一个时间窗口,比如:[2018-12-10_12:00,2018-12-10_12:10],timewindow节点之间以从小到大的方式有序连接,这样可以快速查找和插入新的timewindow节点。

timewindow节点还指向一个key的列表,表示这个列表上所有的key的过期时间,都在这个时间窗口内,即在timewindow末尾的时间点,可以批量删除这条列表上的所有key及其数据。

3.2.3数据更新操作流程

1)新增数据

新增一条数据<k,v>的步骤如下:

c.写入<k,v>数据;

d.根据指定的过期时间,计算对应的时间窗口,并更新生命周期管理。

(3)如果时间窗口已经存在,则在该时间窗口对应的key列表插入该k;如图2所示。

(4)如果时间窗口不存在,则在时间窗口列表合适的位置插入该时间窗口,保证有序,同时该时间窗口需要指向k。如图3所示。

2)删除数据

删除<k,v>数据的操作步骤如下:

d.执行<k,v>删除;

e.根据k的过期时间,计算对应的时间窗口;

f.从该时间窗口指向的key列表,查找包含k的key节点并删除(如图4所示)。

1)更新过期时间

更新<k,v>过期时间的步骤如下:

e.查询k已有过期时间,计算对应的时间窗口;

f.从该时间窗口对应的key列表查找包含k的key节点,并删除;

g.计算新过期时间对应的时间窗口;

h.根据指定的过期时间,计算对应的时间窗口,并更新生命周期管理。

(1)如果时间窗口已经存在,则在该时间窗口对应的key列表插入该k;如图5所示。

(3)如果时间窗口不存在,则在时间窗口列表合适的位置插入该时间窗口,保证有序,同时该时间窗口需要指向k。如图6所示。

性能测试数据如下:

本发明制定了面向海量规模kv缓存的数据生命周期管理方法,在不影响kv缓存性能的情况下能节省珍贵的内存资源。

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