我正在序列化一些数据,并希望在不丢失数据基本细节的情况下,使文件尽可能小。对我而言,第一步是将数据保存为二进制格式而不是ASCII,因此我决定尝试使用flatbuffers。以前,当数据存储为文本文件时,它们约为400 mb。使用以下所示的架构,文件约为200 mb。因此,这是一个不错的减小大小的方法,但是较小的值当然会更好。数据由1个ControlParams,82个ControlData组成,并且强度矢量占据了大部分空间,是一个大小约为128x5000的矩阵。我们已经达到理论上的二进制大小128x5000 * 82 *每个浮点数4个字节〜200 mb。一般而言,矩阵非常密集,但是在这里和那里我可以看到零行。 flatbuffers可以利用这些零来进一步减小文件大小吗?自从我刚开始使用flatbuffers以来,也许有人可以在模式中发现其他效率低下的问题?
另一种减小文件大小的方法可能是研究不同的小波以压缩原始强度。我之所以使用Haar变换,是因为我能够制作一个C ++函数来执行此操作,并且发现可以进行2倍或4倍的压缩。我可能想研究其他小波,但想知道与Haar相比,其他小波是否尝试过不同的小波,发现它们能够使用更少的系数。
namespace RTSerialization;
table ControlParams{
extractStepSizeDa:float = 1.0005;
smooth:bool = false;
haarLevel:int = 10;
deltaTimeSec:float;
}
table ControlData{
mzAxis:[float];
timeSec:[float];
intensities:[float];
scanFilter:string;
}
table ControlParamsAndData{
params:ControlParams;
dataSet:[ControlData];
}
root_type ControlParamsAndData;