Skip to content
This repository was archived by the owner on Apr 16, 2023. It is now read-only.

inclyc/LevelDB

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

84 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

为层次(Level)优化的时序数据库

开发动机

一般时序数据库设计为重视临近时间的数据,而距离当前时刻越远的数据则认为越不重要。这一设计思路普遍存在与各种现有的时序数据库中。然而,这个项目认为分层次的,有间隔的数据才是有价值的。例如,每隔2天,每隔10天,这样的数据,更能看出测量值随着主键变化的规律。

基本设计思路

主要分为三个区域,分别为 内存缓冲(mem)内存索引(index)块(block) 。内存缓冲负责直接承担写入的数据,内存索引负责将每个主键建立的时间线整理,将聚合参量缓存。

内存缓冲区(mem)

内存缓冲区

此区域设计如图所示,按照时间戳Timestamp的尾随0的数量,其包含多个双端队列,每个双端队列的元素是一个HashMap<K, V>,这在src/mem/memory_buffer中定义。这样设计的目的是,假设需要查询,以时间戳间隔1024的数据,只需要用的10层以上的数据,而不需要读取层次以下的。

内存索引区(index)

此区域整理每个主键的聚合数据。聚合(Aggregation),主要包含求和,求平均,求中位数,求最大值,求最小值等操作,这个仓库主要实现求和操作。这个区域的设计使得每次查询任意前若干个相邻时间戳的聚合值,都有着$O(\log n)$级别的复杂度。

内存缓冲区

如图所示,规定时间戳的尾随0的数量,来确认他“管理”几个节点的聚合值,比如100时间戳,就管理着4个之后时间的时间戳。程序每次更新时间戳二进制去掉最后一个1的位置,直到达到缓冲区终点为止。这部分代码可以在src/index/line.rs中找到。

About

Level-based optimization for timeseries database in Rust [WIP]

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •