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

Load data from S3 to sort and allow timeline analysis

我目前正在尝试找出适合我的用例的最佳架构方法:

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

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

不幸的是,在一天的特定前缀内,在那些数十..或数百个文件中 JSONs 没有按确切的时间戳排序 - 所以如果我们按照这个例子:

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

我可以找到:

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

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

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

我想用这些数据做什么?

从两个桶中收集我的事件,按 "ID" 个对象排序,以一种排序方式(按时间戳)在最后一步的时间线中可视化(哪些工具以及它如何超出范围)。

我的疑惑更多的是怎么做:

我在想什么:

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

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

  3. ???没有其他想法

为了以某种方式帮助理解我的需求并展示一些数据结构,我准备了这个::)

example of workflow

数据量?

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

总结一下:

我需要将数据有效地放置在某个地方,最大限度地降低成本,进行排序以在下一步前端进行维护,以呈现事件如何根据时间变化 - 按特定 "ID".[=77 过滤=]

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

@John Rotenstein - 你是对的,我完全忘了添加这些细节。基本上我不需要任何 SQL 功能,因为数据不会更新。唯一的情况是特定 ID 的新事件刚刚到达,因此只有新的增量数据。基于此,我将对该数据集执行的唯一操作是 "Select"。这就是为什么我更喜欢速度和即时回答。人们将主要根据每个 "ID" 来查看此内容 - 因此使用过滤。 S3 上的数据每 15 分钟到达一次(新文件)。

@Athar Khan - 谢谢你的好建议!

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

使用 lambda 将数据从 s3 推送到 DynamoDB 可能会奏效,但可能效率较低且成本更高,因为您是 运行 每个事件的计算进程,而在 [=16= 中推送到 Dynamo ] 散装。另一方面,Logstash 会一个一个地读取文件并处理它们。它还取决于您计划将新数据加载到 S3 的频率,但这两种解决方案都应该适用。

文件中时间戳未排序的事实不会在 elasticsearch 中造成问题,您可以按任何顺序对它们进行索引,您仍然可以基于时间在 kibana 中可视化和搜索它们已排序。