冷存大量浮点数类型数据,有什么合适的压缩方案吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LeeReamond
V2EX    问与答

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

  •  
  •   LeeReamond 2021-02-16 20:59:03 +08:00 2291 次点击
    这是一个创建于 1748 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    没必要自己研究存储算法。一般人研究不过 zip 。如果你不是一般人,那你根本不会提出这个问题。
    zwzmzd
        20
    zwzmzd  
       2021-02-17 10:26:01 +08:00 via iPhone   1
    参考 facebook gorilla 压缩算法,时序数据压缩基本绕不开,而且代码都开源了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5090 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 09:28 PVG 17:28 LAX 01:28 JFK 04:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86