查询S3使用Athena或DynamoDB记录内容

Ash*_*han 3 amazon-s3 amazon-web-services amazon-dynamodb amazon-athena

我有一个用例来查询S3日志中的请求URL.亚马逊最近推出了Athena来查询S3文件内容.在成本和性能方面,最佳选择是什么?

  1. 使用Athena查询S3文件以获取请求URL
  2. 将每个文件的元数据与DynamoDB表中的请求URL信息一起存储以供查询

Joh*_*ein 6

对于通过Web日志运行查询,Amazon DynamoDB将是一个糟糕的选择.

DynamoDB速度非常快,但前提是您要根据主键(" 查询 ")检索数据.如果您正在对表中的所有数据运行查询(例如,要查找未编制索引的密钥中的特定IP地址),DynamoDB将需要扫描表中的所有行,这需要花费大量时间(" 扫描" ").例如,如果您的表配置为每秒100次读取并且您正在扫描10000行,则需要100秒(100 x 100 = 10000).

提示:不要在NoSQL数据库中执行全表扫描.

Amazon Athena是扫描日志文件的理想选择!无需预先加载数据 - 只需针对已存储在Amazon S3中的日志运行查询.使用标准SQL查找您正在寻找的数据.另外,您只需支付从磁盘读取的数据.文件格式有点奇怪,所以你需要正确的CREATE TABLE语句.

请参阅:使用AWS Athena查询S3服务器访问日志

另一种选择是使用Amazon Redshift,它可以跨越数十亿行的GB,TB甚至PB数据.如果要对日志数据进行频繁的查询,Redshift非常棒.但是,作为标准SQL数据库,您需要将数据预加载到Redshift中.遗憾的是,Amazon S3日志文件不是CSV格式,因此您需要将文件ETL转换为合适的格式.对于偶尔的临时请求,这是不值得的.

许多人还喜欢使用Amazon Elasticsearch Service扫描日志文件.同样,文件格式需要一些特殊处理,加载数据的管道需要一些工作,但结果是对S3日志文件进行近实时交互式分析.

请参阅:使用ELK堆栈分析S3日志