Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 在磁盘上存储时间序列数据的滑动窗口_Go_Time Series_Store_Leveldb - Fatal编程技术网

Go 在磁盘上存储时间序列数据的滑动窗口

Go 在磁盘上存储时间序列数据的滑动窗口,go,time-series,store,leveldb,Go,Time Series,Store,Leveldb,我编写了一个服务器,它使用按时间顺序排列的事件(时间序列)的实时流,并维护数据的滑动窗口(24小时)。它只支持一种查询类型: get N seconds of events starting at timestamp T 我目前正在使用with unix时间戳作为密钥。这可以正常工作,但由于leveldb是一个数据库,因此删除代价很高(逻辑删除) 有人能为这个用例推荐更好的解决方案/数据存储吗 数据太大,无法存储在内存中 服务器是用Go编写的 最简单的解决方案就是始终拥有2个leveldb–

我编写了一个服务器,它使用按时间顺序排列的事件(时间序列)的实时流,并维护数据的滑动窗口(24小时)。它只支持一种查询类型:

get N seconds of events starting at timestamp T
我目前正在使用with unix时间戳作为密钥。这可以正常工作,但由于leveldb是一个数据库,因此删除代价很高(逻辑删除)

有人能为这个用例推荐更好的解决方案/数据存储吗

  • 数据太大,无法存储在内存中
  • 服务器是用Go编写的

最简单的解决方案就是始终拥有2个leveldb–用于当天和前一天。而你只向电流写

每天一次,你只是

delete(previous)
previous := current
current := new()

然后,你可以节省将近2天而不是一天,但轮换真的很容易。

你正在为这个问题寻找一个不同的StackExchange,显然属于“基于意见”的类别,这似乎冒犯了这些部分;帕斯·伊万麦克唐纳尔说,这里不是图书馆推荐的地方,但是。。。您可以随时返回到久经考验的恒定空间时间序列db:
rrd
。MongoDB还有“封顶集合”,支持固定存储大小的大容量插入。部分问题在于我不需要固定的空间,我需要一个时间窗口。该窗口中显示的数据量可能会有很大差异。我不想要图书馆推荐,就像我想要数据结构推荐一样。如果是在内存中,我会使用桶的循环缓冲区。我想要这样的东西,但是在磁盘上。这比简化为“数据结构”要复杂一点,但如果这样的话,只需写一次数据,像每个存储桶一个日志文件这样简单的东西就足够了。你可能想看看你可以在桶中存储和删除的地方(另外,这是一个Go库)。+1对于JimB所说的。使用文件或目录(如果文件太多)来分割时间序列。然后“rm-fr”是过期的范围。