amazon-web-services - 使用 Athena 或 DynamoDB 查询 S3 日志内容

标签 amazon-web-services amazon-s3 amazon-dynamodb amazon-athena

我有一个从 S3 日志查询请求 url 的用例。 Amazon 最近引入了 Athena 来查询 S3 文件内容。就成本和性能而言,最佳选择是什么?

  • 使用 Athena 查询 S3 文件以获取请求 url
  • 将带有请求 url 信息的每个文件的元数据存储在 DynamoDB 表中以供查询
  • 最佳答案

    Amazon DynamoDB 将是一个 糟糕的选择 通过网络日志运行查询。

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

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

    Amazon Athena 非常适合扫描日志文件! 无需预加载数据 - 只需针对已存储在 Amazon S3 中的日志运行查询。使用标准 SQL 查找您要查找的数据。另外,您只需为从磁盘读取的数据付费。文件格式有点奇怪,因此您需要正确的 CREATE TABLE 语句。

    见:Using AWS Athena to query S3 Server Access Logs

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

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

    见:Using the ELK stack to analyze your S3 logs

    关于amazon-web-services - 使用 Athena 或 DynamoDB 查询 S3 日志内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45310189/

    相关文章:

    javascript - DynamoDB batchwriteItem 不会将数据放入 Lambda 函数中的动态 TableName

    linux - AWS CLI S3 CP --递归函数在控制台中有效,但在 .sh 文件中无效

    amazon-web-services - 配置 aws cli 使用 fakes3

    python - 使用 REST API 上传图片

    python - 仅当远程文件比本地副本更新时,如何使用 boto 从 S3 下载文件?

    amazon-web-services - 什么是 AWS DynamoDB 持久性 SLA?

    java - 如何找到 JAR :/home/hadoop/contrib/streaming/hadoop-streaming. jar

    amazon-web-services - Ansible **偶尔**失败,主机无法访问 - 无法通过 ssh 连接到主机

    amazon-web-services - 使用角色从另一个账户访问 AWS S3 存储桶

    python - DynamoDB 扫描函数返回正确的结果,但出现 DynamoDBResponseError