s3fs版本文件的本地文件缓存



我想使用基于fsspec的s3fs来访问S3上的文件。主要是因为两个简洁的功能:

  1. 本地缓存文件到磁盘,检查文件是否更改,即如果本地和远程文件不同,文件将被重新下载
  2. 文件版本id支持版本化的S3存储桶,即基于版本id
  3. 打开同一远程文件的不同版本的能力

我不需要这个高频使用和文件不经常更改。它主要用于使用存储在S3上的单元/集成测试数据,只有在测试和相关测试数据更新(版本!)时才会更改。

我可以把上面两个单独工作,但似乎我不能把两者结合起来工作。也就是说,我希望能够在本地缓存同一文件的不同版本。似乎只要你使用一个文件缓存,版本号消歧就丢失了。

fs = fsspec.filesystem("filecache", target_protocol='s3', cache_storage='/tmp/aws', check_files=True, version_aware=True)
with fs.open("s3://my_bucket/my_file.txt", "r", version_id=version_id) as f:
    text = f.read()

无论version_id是什么,我总是从S3获取最新的文件,这也是本地缓存的文件。

我所期望的是,我总是得到正确的文件版本,本地缓存要么为每个版本保留单独的文件(首选),要么在我请求与缓存版本不同的版本时更新本地文件。

是否有一种方法可以在库的当前状态下实现这一点,或者目前不可能实现?我使用s3fs==fsspec==2022.3.0

在与开发人员检查后,这种组合似乎不可能与库的当前状态,因为目标文件的哈希值仅基于文件路径,而忽略任何其他kwargs,如version_id

最新更新