问题描述
我们正在构建一个Web应用程序,以允许客户基于当前流到ElasticSearch中的事件来洞察其活动。客户是向人们发送消息的组织。
有人担心,在使用Elasticsearch的情况下,托管此数据三年的需求会导致大量存储和高昂的实施成本。
另一种方法是将每天的数据处理为存储在S3中的报告CSV,并使用Amazon Athena之类的东西执行查询。 Athena是我们的应用程序可以响应网络浏览器请求发送的临时查询吗?不可能一直都产生大量请求,但我不确定延迟会是什么样。
解决方法
雅典娜是无服务器的。您可以快速查询数据,而无需设置和管理任何服务器或数据仓库。只需在Amazon S3中指向您的数据,定义架构,然后使用内置查询编辑器开始查询。
Amazon Athena自动并行执行查询,因此大多数结果在几秒钟/分钟之内返回。
,是的,Athena将是该用例的一种可能的解决方案-正确地做它也可能相当便宜。
Athena不是低延迟查询引擎,但出于报告目的,它通常已经足够好了。在不知道更多信息的情况下无法确定地说什么,但是做对了,我们说的是低个位数秒。
您可以用不同的方法来处理此问题,或者按照您说的做,每天生成一个CSV,将它们存储所需的时间,并根据需要对它们进行查询。从您的描述来看,这些CSV听起来已经很合算,我认为每个客户每天的CSV都大大少于1兆字节。如果按客户和月份划分,则应该能够在几秒钟内的任意时间段内运行查询。
另一种方法是将所有数据存储在S3上,然后对整个数据集运行查询。当您将数据流传输到ElasticSearch时,也将其流传输到S3。根据您的操作方式,您可能需要一些Lambda函数形式的ETL,该ETL将每个客户和时间(天或月,具体取决于数量)对数据进行分区。然后,您可以对完整的历史数据集运行Athena查询。不利之处在于查询速度较慢(大多数查询为两位数秒,但我不知道您的数据量),但不利之处在于可以灵活查询所有内容。
有关用例细节的更多详细信息,我可以为您提供详细信息。