起源
旷视研究院在探索大数据存储方案的过程中,先后尝试了多种文件存储系统,包括 POSIX 协议的本地存储、OSS 等。
多种文件存储系统带来了开发上的困难,对于存储于不同文件系统的文件,在访问时需要针对不同文件系统的 SDK 编写复杂的代码,增加了开发者的工作量。除此之外,跨系统的文件访问在代码实现上也不够优雅,导致代码不易读。
为了解决上述问题,我们开发了 MegFile。
特性
MegFile 作为 Python 文件读写 SDK,主要提供三个特性:
1.方便、齐全并和标注库风格保持一致的 API
2.快速 s3 文件文件读写
3.支持 s3 的 Glob AP
API 接口
与 Python 标准库相似,MegFile 提供了函数式 API 和 Path-Like API 两种文件访问方式。
以 smart 开头的函数库提供了形如 smart_open, smart_glob,smart_listdir,smart_exists 等函数,来进行文件访问;同时,用户也可以使用 SmartPath 构建一个 Pathlike 对象,提供了open,unlink,remove 等方法。
不论是 SmartPath 还是 smart 系列函数,都能够识别不同文件系统路径协议 (例如:file:///path/to/file、s3://bucket/key),并正确完成对应的操作,为多种文件系统提供了统一流畅的访问体验,极大简化了跨后端文件访问的代码量和编写难度。
文件读写速度
在大型项目和读写密集型任务上,文件读写速度非常重要。如果为了支持跨后端文件读写而牺牲读写速度是得不偿失的。在 MegFile 中,使用 smart_open 方法不仅可以打开各种协议的资源,在旷视内部最常用的 s3 协议上的 reader / writer 内部提供了多线程实现,并通过自适应的预读策略,使得其速度比目前已知 Python