Blosc是一款针对二进制数据进行了优化的高性能压缩器。它的设计目的是通过memcpy()OS调用将数据传输到处理器缓存,速度比传统的、非压缩的、直接内存提取方法更快。Blosc是第一个压缩器(我知道这一点),它不仅可以减少磁盘或内存中大型数据集的大小,还可以加速内存边界计算(这在向量-向量操作中很典型)。
它使用阻塞技术(如本文所述)尽可能减少内存总线上的活动。简而言之,分块技术的工作原理是将数据集分成小到足以容纳在现代处理器的一级高速缓存中的块,并在那里执行压缩/解压缩。它还利用了当今多核处理器中的SIMD(SSE2)和多线程功能,从而最大限度地加快了压缩/解压缩过程。
您可以在合成基准中看到更多基准。此外,您可能还想阅读这篇关于使用下一代Blosc的Blosc2打破内存墙的文章。
Blosc最初是为满足PyTables数据库和bcolz项目的需要而开发的,不过它也可以用于其他需要快速压缩机的地方。此外,您可能希望使用新的Bloscpack格式和参考实现,以便更轻松地从命令行访问Blosc的主要功能和优点。
使用Blosc/Bloscpack的应用程序预计会允许I/O性能超出预期的物理限制。例如,PyTables得益于Blosc在超大型表中的索引和查询操作。内存中的计算在某些情况下也可以更快(例如,请参阅此IPython笔记本)。
PyTables社区为测试Blosc做出了非常大的贡献,我很高兴地说,从0.9.5版本开始,它在许多不同的Windows和Unix机器上完美地压缩和解压缩了数百TB(来自Include Benchmark中的硬件套件和极限套件),包括32位和64位。当然,这并不意味着Blosc不包含错误,只是不太可能出现严重的错误。
此外,随着Blosc 1.0的引入,它已经被宣布为稳定的,API和格式都被冻结了,所以你应该期待你的Blosc驱动的应用程序有很大程度的稳定性。
Bloscpack是一种使用Blosc和引用实现的序列化格式,它配备了一个很好的命令行工具,可以压缩磁盘上现有的二进制数据集。它还内置了对Numpy数组的压缩和序列化支持,无论是在内存中还是在磁盘上都是如此:
虽然格式可能仍然会发生变化,但Bloscpack正在为成为一项伟大的实用程序而做出巨大的努力。
您的贡献对于使Blosc尽可能扎实非常重要。如果您检测到错误或希望提出改进建议,请随时打开新的票证或让您的声音出现在邮件列表中。此外,您还可以通过在自己的硬件上编译和运行不同的基准测试和测试套件来为该项目做出贡献,如SyntheticBenchmark页面中所述。
Blosc是自由软件,在非常许可的BSD许可条款下发布,因此您可以几乎以任何您想要的方式使用它!