Amazon S3 - 存储基于时间的文件

Amazon S3 - Store timebased files

我想使用 S3 对象存储来存储基于时间的数据,每分钟 1 个文件。
目前,它存储在 EBS 上,在数据文件夹下有一个年、月、日文件夹和一天中每一分钟的文件。
我认为文件系统没有问题,将文件存储在对象存储上,问题是如果我想 "query" S3 检索特定的时间间隔,这可能吗?
如果不是,在顶部实现 "search" 函数的最佳方法是什么?
有一个 simpledb,做精确的文件匹配等? 有人有这方面的经验吗?

我将对 S3 使用 PHP SDK。

Amazon S3 没有 "query" 语言。您能做的最好的事情就是将文件组织成前缀并根据前缀限制结果。

例如,如果您在 S3 中的对象是:

年月日时分-second.txt

然后您可以通过以下方式列出对象:

  • 某年:2016-
  • 某月:2016-10-
  • 某日:2016-10-31-

等等使用前缀。

但是你不能在 S3 中做非常具体的时间范围。如果你想根据特定的时间范围进行查询,那么你需要自己收集 daily/monthly/yearly 结果,然后 trim 去掉你想要排除的内容。

例如,如果您想查询 12:01pm 10 月 29 日和 12:01pm 10 月 31 日之间的对象,那么您可以从以下前缀中收集对象:

  • 2016-10-29-
  • 2016-10-30-
  • 2916-10-31-

并手动删除所需时间范围前后的项目。

如果你想做更好的查询,那么你最好使用专为查询设计的数据库。 SimpleDB 可以工作。 DynamoDB 和 SQL 将起作用。您可以将文件转储到 S3 中,然后在数据库中记录它的对象键和时间戳。

查询时,select 来自数据库,然后根据需要从 S3 检索文件。

更新:使用前缀的示例

假设您有一堆这样的详细文件:

2016-10-29-00-00.txt 2016-10-29-00-01.txt 2016-10-29-00-02.txt ... 2016-10-30-00-00.txt 2016-10-30-00-01.txt ... 2016-10-31-00-00.txt ... 2016-11-01-00-00.txt

以此类推

然后您可以使用前缀进行以下搜索:

  • 要获取 2016 年的所有文件:prefix = "2016-"
  • 获取 2016 年 10 月的所有文件:prefix = "2016-10-"
  • 获取 2016 年 10 月 30 日的所有文件:prefix = "2016-10-30-"
  • 获取2016年10月30日从00:00到00:59的所有文件:prefix = "2016-10-30-00"
  • 要获取 2016 年 10 月 30 日 00:05 分钟的所有文件:prefix = "2016-10-30-00-05"

S3不能做范围搜索,如:

  • 2016 年 10 月 29 日 12:00 和 2016 年 10 月 31 日 11:59 之间的文件

相反,您有 2 个选择:

选项 1:使用前缀从 S3 检索日期范围内每一天的对象:

  • "2016-10-29-"
  • "2016-10-30-"
  • "2016-10-31-"

获得该列表后,您可以将它们组合起来,并删除所需时间范围之前和之后的文件。

选项 2:使用前缀从 S3 检索日期范围内每个月的对象:

  • "2016-10-"

同样,一旦您有了该列表,您就可以将它们组合起来,并从您想要的时间范围之前和之后拿走文件。

您选择哪一个取决于您需要检索的不同天数与按月搜索返回的对象数相比。

这样做的逻辑会变得相当复杂。一个合适的可搜索数据库可能是值得的。