减少98%的S3 API调用 | 探索OpenDAL的RangeReader奥秘

减少98%的S3 API调用 | 探索OpenDAL的RangeReader奥秘

💡 原文英文,约2400词,阅读约需9分钟。
📝

内容提要

在GreptimeDB中,使用OpenDAL作为统一的数据访问层。最近,一位同事告诉我,执行Copy From语句从S3导入一个800 KiB的Parquet文件需要10秒。经过一些调查和对OpenDAL文档和实现的审查,我在这里记录并简要总结了我们的发现。OpenDAL的IO操作都围绕着Operator展开,Operator是在main.rs中构建的。OperatorBuilder::new函数中添加了ErrorContextLayer和CompleteLayer两个层,最后调用finish函数。在Copy From场景中,没有添加LruCacheLayer层。在ParquetRecordBatchStream的构造中,使用了BufReader,但实际上是多余的。在RangeReader中,每次调用seek都会重置内部状态,并在下一次read调用时发起新的远程请求。这导致了性能问题。

🏷️

标签

➡️

继续阅读