数据过期类型为 Latest 的表底层时序数据结构改为 list

背景

目前所有类型表的底层数据结构都为双层 skiplist。Latest 过期类型只保留指定的条数,默认最大可设置为 1000 条。skiplist 本身的 header 节点和数据节点的level 都需要额外的空间占用,如果 Latest 类型用 skiplist 带来的收益不会太大。因为本身 lastest 类型保留的数据不会太多,所以直接用 list 也不会有明显的性能损失而且还能节省内存占用。

编程语言

C++

实现方案

  1. 实现 lock_free 的 list,可以参考如下链接里的代码https://github.com/4paradigm/OpenMLDB/blob/main/hybridse/examples/toydb/src/storage/list.h
  2. 实现迭代器,便于迭代 list 里的数据
  3. 如果 ttl_type 为 latest, 将第二层跳表替换为listhttps://github.com/4paradigm/OpenMLDB/blob/main/src/storage/segment.h
  4. 增加 list 的 gc 方法。即按照设定的保留条数,删除掉过期的数据
  5. 添加单元测试,保证代码的正确性

Github Issue

https://github.com/4paradigm/OpenMLDB/issues/2007