Rust 惊天压缩:将 10GB 的 RATP 公共交通数据压缩至 530KB

2025-03-03

这个周末项目始于浏览巴黎公共交通网络的开放数据存储库,该存储库包含各种 API,用于查询实时出发、当前中断等。作者注意到数据重用部分,其中包含使用此开放数据的外部项目。特别是 RATP 状态网站提供了一个非常好的界面来可视化地铁、RER/火车和电车线路的历史中断情况。作者发现 ratpstatus.fr 的 GitHub 存储库包含从开放数据 API 查询到的所有 JSON 文件,几乎一年来每 2 分钟查询一次。这个存储库有 188K 次提交,仅在最后一次提交时就积累了超过 10GB 的数据。作者好奇能否通过合理的投入(周末项目)来更好地压缩这些数据。本文深入探讨了作者如何使用 Rust 中的驻留设计模式将此数据集压缩了两千倍!文中研究了如何最好地构建驻留器本身,如何调整数据模式以使其与驻留器良好配合,以及序列化如何最好地利用驻留。最终,作者成功地将 1.1GB 的 JSON 文件压缩到只有 530KB,实现了惊人的压缩效果。

阅读更多
开发 驻留

优化之旅:使用 Rayon(或不使用 Rayon)将并行 Rust 工作负载速度提高 10 倍

2024-12-04

作者在之前的文章中使用 Rayon 并行化 Rust 循环计算,但只获得了 2 倍的加速。本文记录了作者的优化之旅,最终实现了 10 倍的加速。作者首先使用 strace 和 perf 等分析工具找出性能瓶颈,发现 Rayon 的 futex 系统调用和 sched_yield 调用过多。然后,作者通过构建一个针对特定场景的 Rayon 替代方案,手动管理线程池并进行 CPU 绑定,减少了系统调用和 CPU 迁移带来的开销。此外,作者还实现了工作窃取机制,解决了负载不均衡的问题,进一步提升了性能。

阅读更多
未分类 Rayon