我必须编写一个工具来管理非常大的数据集(嗯,对于普通工作站来说是很大的)。我需要的东西基本上是相反的工作,jpeg格式。我需要数据集在磁盘上保持完整,其中它可以是任意大小的,但是当它在内存中读取时,需要对其进行有损压缩,并且只有在任何给定时间使用的子部分需要在飞行过程中解压缩。我已经开始研究ipp (英特尔集成性能原语),但现在还不清楚我是否可以使用它们来做我需要做的事情。有谁能给我指个方向吗?
谢谢。
发布于 2012-01-14 18:10:22
考虑到您的数据的性质,您似乎正在处理某种原始样本。因此,最简单和最通用的“有损”技术将是删除较低的位,降低精度,直到您想要的水平。
请注意,您将需要“去掉低位”,这与“四舍五入到10的下一个幂”有很大的不同。计算机以2为基数工作,您希望所有低位都为"00000“,以便尽可能好地执行压缩。该方法假设所选择的压缩算法将利用可预测的0位模式。
另一种更复杂、更具体的方法是将索引形式的值转换为表。这样做的好处是,你可以在你想要的地方“瞄准”精度。明显的缺点是,该表将特定于分布模式。
最重要的是,你也可以存储的不是值本身,而是值与前一个值的增量,如果它们之间有任何关系的话。这也将有助于压缩。
对于要压缩的数据,需要按适当大小的数据包进行“分组”,例如64KB。在单个字段上,任何压缩算法都不会给出合适的结果。反过来,这意味着每次要访问某个字段时,都需要解压缩整个数据包,因此更好地根据您想要对其执行的操作对其进行调优。在这种情况下,顺序访问更容易处理。
关于压缩算法,由于这些数据将是“实时的”,你需要一些非常快的东西,以便访问数据具有非常小的延迟影响。
对于这一用途,有几种开源的替代方案。为了简化许可证管理,我建议使用BSD替代方案。由于您使用的是C++,因此下面的代码看起来很合适:http://code.google.com/p/snappy/和http://code.google.com/p/lz4/
https://stackoverflow.com/questions/8857851
复制相似问题