冷存大量浮点数类型数据,有什么合适的压缩方案吗?

2021-02-16 20:59:03 +08:00
 LeeReamond

如题,自用传感器有大量时序数据需要记录,大概格式是时间-》传感器数据 A,传感器数据 B....等等这样,单个数据类型为单精度浮点数,小数点后 6 位以内

因为记录精度精确到毫秒,所以数据量非常大,粗略估算了一下在 1T 到 10T 之间这个数量级,

这些是原始数据,实际上工作中是用不到的,工作用到的数据是处理之后的版本,但是我觉得原始数据如果可能的话最好还是保存一下,谁知道以后可能出什么问题呢。

之前有了解过时序数据库似乎很适合储存这类传感器数据。但是我目前这个需要的是完全冷存,不需要有任何增删改查的功能,只需要储存体积尽可能小,这样可以少买几块硬盘。神通广大的 V 友有什么合适的方式推荐吗

1763 次点击
所在节点    问与答
20 条回复
codehz
2021-02-16 21:07:35 +08:00
直接序列存储+没有强数据安全需求的话根本用不到数据库,文件系统都不需要,直接按块写盘就好了。。。然后找个其他存储设备存元数据(即一块盘写了哪些东西,写了几个字节这些信息)
unixeno
2021-02-16 21:15:44 +08:00
10T 很大么,不是一块硬盘就完事儿了?
imn1
2021-02-16 21:26:56 +08:00
对于原始数据,我的话,不会考虑耗费硬盘多少,只考虑必要时能否读出,定期转存的成本(倒数据的工作量)
thedrwu
2021-02-16 21:43:25 +08:00
HDF
felixcode
2021-02-16 21:45:30 +08:00
如果直接简单粗暴用纯文本的话,压缩率会很可观的吧。
larry801
2021-02-16 22:05:21 +08:00
@felixcode 全是单精度当然直接存二进制啦 转文本不多一层么
各个云厂商的冷数据服务如何?
无规律的单精度压缩率估计不好看 省不了多少 考虑一下安全性吧 等要的时候又坏了才坑呢
zmj1316
2021-02-16 22:12:33 +08:00
12T 硬盘也不贵,还可以开启文件系统的压缩
xupefei
2021-02-16 22:12:46 +08:00
压缩后存 B2 或 glacier 的话,每月 20 美元应该搞得定。
买个大硬盘也可以,不贵。
3dwelcome
2021-02-16 22:18:50 +08:00
用 diff 算法按照 32bit 转置后存。
比如 1.21 ,1.23 ,1.24 就变成了三个 32bit 字节流,用转置算法把三个 sign 位拼一起压缩,把三个 exp 位拼接一起压缩,把三个 fraction 位拼一起压缩。
这样数据值变动小,压缩率就很可观。
thedrwu
2021-02-16 22:28:45 +08:00
考虑一下直接存采样的整数数据?
快速的模数转换,有 16 位进度已经很高了,容量需求直接砍一半。如果能省下几位 LSB,或者用 dithering 抖过去,又能节省十分之几的空间。
LeeReamond
2021-02-16 23:48:29 +08:00
@imn1 确实硬盘不是首要考量,但最好还是空间小一些,资金有限

@3dwelcome 没有听懂,不过听起来很诱人,想试一下这个方案,我的每个数值之间区别不大,容我研究研究。
ryd994
2021-02-16 23:57:48 +08:00
二进制,按时间分文件,然后压缩
想省事的话就用文件系统自带的压缩
jworg
2021-02-17 00:09:45 +08:00
10 楼正解,作为嵌入式一直很怀疑对接的人非要浮点数的必要,明明存采样 adc 的原始数据就可以了,然后注释一下转化公式。这个让下面的嵌入式改下面上传数据格式就可以了,比起浮点数还有无损的优点。
LeeReamond
2021-02-17 00:59:20 +08:00
感谢各位提供的思路,按楼上设想我准备输出成整数,然后采用某些已经有的序列化方案转换成二进制,最后做一下简单的压缩,理论上单个数值的合适储存体积应该小于 2bytes,经过上述操作可以比较接近这个数值,没什么不满意的了。
vhysug01
2021-02-17 01:15:25 +08:00
之前做股票价格数据,一般的数字存 csv 再压缩,能省 90%的空间
siyemiaokube
2021-02-17 03:32:20 +08:00
这个级别的时序数据,应该很需要考虑安全性了吧?感觉非常容易丢失啊
siyemiaokube
2021-02-17 03:36:11 +08:00
也要取决于你这个传感器的工作环境了,压缩算法自己造轮子的话,我感觉很可能存在大量丢失数据的风险。相对地,比起直接存定点数,压缩率大概顶多 50%?
3dwelcome
2021-02-17 04:31:48 +08:00
@LeeReamond 我这算法就是把 bit 拆分后压缩,很好理解。
比如你浮点数据都是正数,那么所有符号位的 bit,就全部都是 1 。把连续几万个 1 放一起,压缩后也就几个字节大小。然后依次处理剩下的 31 个 bit 。
浮点格式里,相近数字变化时,大部分 bit 都是不变的,就是利用这个特性来压缩。
whileFalse
2021-02-17 09:56:46 +08:00
直接写 txt,然后压缩
或者二进制后压缩

没必要自己研究存储算法。一般人研究不过 zip 。如果你不是一般人,那你根本不会提出这个问题。
zwzmzd
2021-02-17 10:26:01 +08:00
参考 facebook gorilla 压缩算法,时序数据压缩基本绕不开,而且代码都开源了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/753590

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX