2

查询S3日志内容我有一个用例从S3日志查询请求的URL。亚马逊最近推出了Athena来查询S3文件内容。什么是成本和性能方面的最佳选择?使用雅典娜或DynamoDB

  1. 使用雅典娜查询S3文件URL请求与DynamoDB表请求的URL信息查询

回答

4

亚马逊DynamoDB将是一个糟糕的选择超过网络日志运行的查询。

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

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

亚马逊雅典娜是理想的扫描日志文件!无需预加载数据 - 只需针对已存储在Amazon S3中的日志运行查询即可。使用标准的SQL来查找您正在寻找的数据。另外,您只需支付从磁盘读取的数据。文件格式有点奇怪,所以您需要正确的CREATE TABLE声明。

参见:Using AWS Athena to query S3 Server Access Logs

另一种选择是使用亚马逊红移,其可以绿带,TBS和数据的跨越数十亿行的偶数PBS中。如果您要对日志数据运行频繁的查询,Redshift非常棒。但是,作为标准的SQL数据库,您需要将数据预加载到Redshift中。遗憾的是,Amazon S3日志文件不是CSV格式,因此您需要将文件ETL转换为合适的格式。偶尔的临时请求并不值得。

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

参见:Using the ELK stack to analyze your S3 logs

1

雅典娜与DynamoDB每个文件的

  • 存储元数据:如果您在功能上可以实现您的要求既 ;那么:

    1. DynamoDB将比雅典娜快许多倍。
    2. DynamoDB会比雅典娜更昂贵。在DynamoDB中,您需要支付预置IOPS的成本;而在雅典娜时,只有在您查询时才支付(否则您仅支付s3存储成本)。

    因此,如果您需要很少查询您的数据雅典娜会是一个更好的解决方案,否则DynamoDB。另外,如果性能很重要DynamoDB就是答案。另外,如果您在S3中已经有TB数据;然后雅典娜是一个解决方案,为什么你将它加载到DynamoDB这将花费一枚炸弹(直到并且除非你想以毫秒或秒为单位的查询结果)。

  • 0

    正如Deepak提到的,DynamoDB速度更快,但成本更高比雅典娜。根据您的使用情况,使用混合方法实施解决方案可能会在某些情况下为您提供良好的结果。

    您可以使用DynamoDB存储最近,读大量的数据。旧的,读取廉价的数据可以存储在S3中,并使用Athena来查询它。

    然而,实现明智的,这将是比较复杂的。