Amazon S3 没有“查询”语言。你能做的最好的就是将文件组织成前缀并以此为基础限制结果。
例如,如果您在 S3 中的对象是:
年-月-日-时-分-秒.txt
然后您可以通过以下方式列出对象:
- 某年:2016-
- 某月:2016-10-
- 某一天:2016-10-31-
使用前缀等等。
但是您不能在 S3 中执行非常具体的时间范围。如果要根据特定时间范围进行查询,则需要自己收集每日/每月/每年的结果,然后修剪掉要排除的内容。
例如,如果您想在 10 月 29 日中午 12:01 到 10 月 31 日中午 12:01 之间查询对象,那么您可以从以下前缀收集对象:
- 2016-10-29-
- 2016-10-30-
- 2916-10-31-
并在您想要的时间范围之前和之后手动删除项目。
如果您想进行更好的查询,那么您最好使用专为查询设计的数据库。 SimpleDB 可能会工作。 DynamoDB 和 SQL 将起作用。您可以将文件转储到 S3 中,然后在数据库中记录它的对象键和时间戳。
查询时,从数据库中选择,然后根据需要从 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 月以来的所有文件:前缀 = "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 检索您日期范围内每个月的对象:
同样,一旦您有了该列表,您就可以将它们组合起来,并从您想要的时间范围之前和之后删除文件。
您选择哪个取决于您需要检索的不同天数与按月搜索返回的对象数相比。
这样做的逻辑会变得相当复杂。一个合适的可搜索数据库可能是值得的。