从 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" 个对象排序,以一种排序方式(按时间戳)在最后一步的时间线中可视化(哪些工具以及它如何超出范围)。
我的疑惑更多的是怎么做:
- 以经济高效的方式
- 云原生(在 AWS 中)
- 尽可能少的维护
我在想什么:
不确定是否...但是将到达 S3 的每个新文件加载到 DynamoDB(使用 Lambda 触发)。 AFAIK 以正确的方法创建 table - 我的 ID 作为 Hask 键和时间戳作为 Range 键应该对我有用,对吗?
由于插入的每个新行都将分区到特定的 ID,并且已经以正确的方式排序 - 但我不是专家。
使用 Log-stash 将数据从 S3 加载到 ElasticSearch - 再次 AFAIK ES 中的所有内容都可以被索引,因此也可以排序。 Timelion 可能会让我做那些我需要创建的奇特分析。但是再次......不确定 ES 是否会像我想要的那样执行......价格......体积很大等等
???没有其他想法
为了以某种方式帮助理解我的需求并展示一些数据结构,我准备了这个::)
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 中可视化和搜索它们已排序。
我目前正在尝试找出适合我的用例的最佳架构方法:
我有 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" 个对象排序,以一种排序方式(按时间戳)在最后一步的时间线中可视化(哪些工具以及它如何超出范围)。
我的疑惑更多的是怎么做:
- 以经济高效的方式
- 云原生(在 AWS 中)
- 尽可能少的维护
我在想什么:
不确定是否...但是将到达 S3 的每个新文件加载到 DynamoDB(使用 Lambda 触发)。 AFAIK 以正确的方法创建 table - 我的 ID 作为 Hask 键和时间戳作为 Range 键应该对我有用,对吗? 由于插入的每个新行都将分区到特定的 ID,并且已经以正确的方式排序 - 但我不是专家。
使用 Log-stash 将数据从 S3 加载到 ElasticSearch - 再次 AFAIK ES 中的所有内容都可以被索引,因此也可以排序。 Timelion 可能会让我做那些我需要创建的奇特分析。但是再次......不确定 ES 是否会像我想要的那样执行......价格......体积很大等等
???没有其他想法
为了以某种方式帮助理解我的需求并展示一些数据结构,我准备了这个::)
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 中可视化和搜索它们已排序。