从S3加载数据以进行排序并进行时间轴分析

时间:2019-01-18 23:41:11

标签: elasticsearch amazon-s3 amazon-dynamodb timeline

我目前正在尝试为我的用例找到最佳的架构方法:

我有S3个存储桶(两个完全分开),其中包含以JSON格式存储的数据。数据按年/月/日前缀划分,在特定日期之内,我可以找到例如该日期的数百个文件

  

(例如:s3:// mybucket / 2018/12/31 / file1,   s3:// mybucket / 2018/12/31 / file2,s3://mybucket/2018/12/31/file..n)

不幸的是,在一天中的特定前缀中,在这数十个或几百个文件中,JSON并非按确切的时间戳排序-因此,如果我们遵循以下示例:

  

s3:// mybucket / 2018/12/31 /

我可以找到:

file1-包含有关对象“ A”的JSON,时间戳为“ 2018-12-31 18:00”

file100-包含有关对象“ A”的JSON,时间戳为“ 2018-12-31 04:00”

更糟糕的是...我第二个水桶遇到的情况相同。

我要如何处理这些数据?

从两个存储桶中收集我的事件,这些事件按对象的“ ID”排序(按时间戳记),以在最后一步在时间轴中可视化该事件(哪些工具及其作用范围)。

我的疑问更多是如何做到的:

  • 以经济高效的方式
  • 原生云(在AWS中)
  • 维护成本最低

我在想什么:

  1. 不确定是否...但是将到达S3的每个新文件加载到DynamoDB(使用触发的Lambda)。 AFAIK以正确的方式创建表-我的ID(如Hask键)和时间戳(如Range键)应该对我有用,对吗? 由于插入的每个新行都将被划分为特定的ID,并且已经以正确的方式进行了排序-但我不是专家。

  2. 使用Log-stash将数据从S3加载到ElasticSearch-同样,AEFAK ES中的所有内容都可以被索引,因此也可以进行排序。 Timelion可能会让我进行我需要创建的分析。但是再次....不确定ES是否会按我的意愿执行...价格...体积很大等。

  3. ???没有其他想法

为了帮助您以某种方式理解我的需求并显示一些数据结构,我准备了以下内容::)

example of workflow

数据量?

大约+ 200 000个事件-每个事件都是具有4个功能(ID,Event_type,时间戳,价格)的JSON

总结:

我需要有效地将数据放到某个地方,以最大程度地降低成本,并整理以便在下一步前端维护,以显示事件是如何基于时间进行更改的-通过特定的“ ID”进行过滤。

感谢并感谢我可以依靠的任何好的建议,一些最佳实践或解决方案!:)

@John Rotenstein-没错,我绝对忘记添加这些细节。基本上,我不需要任何SQL功能,因为不会更新数据。唯一的情况是特定ID的新事件即将到来,因此只有新的增量数据。基于此,我将对此数据集执行的唯一操作是“选择”。这就是为什么我更希望速度和即时答案。人们将主要针对每个“ ID”查看此信息-因此请使用过滤功能。数据每15分钟到达S3(新文件)。

@Athar Khan-谢谢您的良好配合!

1 个答案:

答案 0 :(得分:0)

据我了解,我将选择Elasticsearch的第二个选项,Logstash从S3加载数据,而Kibana作为调查,搜索,分类和可视化的工具。

让lambda将数据从s3推送到DynamoDB可能会起作用,但由于您在每个事件上运行计算过程,同时以小批量/单项批量推送到Dynamo,因此可能效率较低,成本更高。另一方面,Logstash会逐个读取文件并全部处理。这还取决于您计划将新数据加载到S3的方式,但是两种解决方案都适合。

时间戳在文件中未排序的事实在Elasticsearch中不会出现问题,您可以按任何顺序对其进行索引,但仍可以在kibana中以基于时间的排序顺序进行可视化和搜索