【问题标题】:How do I list only new files via the Backblaze B2 API?如何通过 Backblaze B2 API 仅列出新文件?
【发布时间】:2021-10-07 08:03:55
【问题描述】:

根据b2_list_file_names documentation“此调用每个事务最多返回1000个文件名”,您可以使用nextFileName字段获取接下来的1000个文件,依此类推。它没有说明这些文件的返回顺序,但 documentation for the similar b2_list_file_versions 表示“按文件名的字母顺序”,因此人们可能会怀疑 b2_list_file_names 的返回顺序相同。

这意味着在调用 b2_list_file_names 之间上传的任何新文件都不会出现在列表的末尾。

是否可以选择 b2_list_file_names 的时间顺序或以任何其他方式获取最新上传的文件?

为了避免出现XY Problem 的情况,这是我真正想做的:

将所有文件的 legal_hold 设置为“on”,并为所有新文件每周执行一次。由于我有大约 40 万个文件,因此每次列出所有文件都需要花钱(我认为)。

因此,解决我的问题的另一种方法是列出所有 legal_hold 未设置为“on”的文件。 这可能吗?

【问题讨论】:

  • 原来我没有正确阅读账单信息。列出 400 000 个文件转换为 400 个 C 类操作(假设您为每个请求指定 1000 个文件),并且您每天免费获得 2 500 个 C 类操作。所以对我来说没问题!不过,我会留下这个问题,因为这对其他人来说可能是个问题。
  • 嗨@Peter - 你能把你的评论变成一个答案,这样人们就可以更容易地看到解决方案吗?
  • 实际上,我认为我的评论并不是对问题的回答,正如我所说的那样(“如何通过 Backblaze B2 API 仅列出新文件”)。评论更像是“我不需要知道答案,因为我现在的文件很少,我可以列出所有文件而不会超出限制”。
  • 很公平 - 我会写一个答案来解决您的原始问题。在问之前我不想这样做。

标签: backblaze


【解决方案1】:

使用 B2(或实际上是 S3)执行此操作的方法是使用文件名。一种常见的方法是使用日期前缀,使用诸如yyyy-MM-dd/fileName 之类的约定命名文件。然后,您可以使用前缀参数查询给定日期的所有文件。

由于您每周都在工作,因此您可以使用 yyyy-ww/fileName 对此进行优化,其中 ww 是一年中的一周。

另一方面,如果您想要按时间顺序排列,则可以使用yyyy-MM-dd HH:mm:ss/fileName,然后使用startFileName 参数获取自给定时间点以来的所有文件。

【讨论】:

    猜你喜欢
    • 2022-07-12
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多