本发明涉及计算机大数据领域,具体涉及面向海量规模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缓存性能的情况下能节省珍贵的内存资源。