1

我必须编写一个工具来管理非常大的数据集(嗯,对于普通工作站来说很大)。我基本上需要与 jpeg 格式相反的东西。我需要数据集在磁盘上保持完整,可以任意大,但是当它在内存中读取时需要进行有损压缩,并且只有在任何给定时间使用的子部分需要在飞行中解压缩。我已经开始研究 ipp(英特尔集成性能基元),但目前还不清楚是否可以将它们用于我需要做的事情。谁能指出我正确的方向?

谢谢你。

4

1 回答 1

0

鉴于您的数据的性质,您似乎正在处理某种原始样本。因此,最简单和最通用的“有损”技术将丢弃低位,降低精度,达到您想要的水平。

请注意,您需要“删除低位”,这与“四舍五入到 10 的下一个幂”完全不同。计算机以 2 为基数工作,您希望所有低位都为“00000”,以便尽可能好地执行压缩。此方法假设所选压缩算法将使用可预测的 0 位模式。

另一种更复杂、更具体的方法是将值作为索引转换为表。优点是您可以将精度“定位”到您想要的位置。明显的缺点是该表将特定于分布模式。

最重要的是,如果它们之间存在任何类型的关系,您也可以不存储值本身,而是存储值与其前一个值的增量。这也将有助于压缩。

对于要压缩的数据,您需要将它们按适当大小的数据包“分组”,例如 64KB。在单个字段上,没有压缩算法会给你合适的结果。反过来,这意味着每次您想要访问一个字段时,您都需要解压缩整个数据包,因此最好根据您想要对它做什么来调整它。在这种情况下,顺序访问更容易处理。

关于压缩算法,由于这些数据将是“实时的”,因此您需要非常快的东西,以便访问数据对延迟的影响非常小。

有几种开源替代品可用于该用途。为了更轻松地管理许可证,我建议使用 BSD 替代方案。由于您使用 C++,以下这些看起来很合适: http ://code.google.com/p/snappy/ 和 http://code.google.com/p/lz4/

于 2012-01-14T10:10:21.713 回答