我目前正在尝试为我的用例找到最佳的架构方法:
我有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”排序(按时间戳记),以在最后一步在时间轴中可视化该事件(哪些工具及其作用范围)。
我的疑问更多是如何做到的:
我在想什么:
不确定是否...但是将到达S3的每个新文件加载到DynamoDB(使用触发的Lambda)。 AFAIK以正确的方式创建表-我的ID(如Hask键)和时间戳(如Range键)应该对我有用,对吗? 由于插入的每个新行都将被划分为特定的ID,并且已经以正确的方式进行了排序-但我不是专家。
使用Log-stash将数据从S3加载到ElasticSearch-同样,AEFAK ES中的所有内容都可以被索引,因此也可以进行排序。 Timelion可能会让我进行我需要创建的分析。但是再次....不确定ES是否会按我的意愿执行...价格...体积很大等。
???没有其他想法
为了帮助您以某种方式理解我的需求并显示一些数据结构,我准备了以下内容::)
数据量?
大约+ 200 000个事件-每个事件都是具有4个功能(ID,Event_type,时间戳,价格)的JSON
总结:
我需要有效地将数据放到某个地方,以最大程度地降低成本,并整理以便在下一步前端维护,以显示事件是如何基于时间进行更改的-通过特定的“ ID”进行过滤。
感谢并感谢我可以依靠的任何好的建议,一些最佳实践或解决方案!:)
@John Rotenstein-没错,我绝对忘记添加这些细节。基本上,我不需要任何SQL功能,因为不会更新数据。唯一的情况是特定ID的新事件即将到来,因此只有新的增量数据。基于此,我将对此数据集执行的唯一操作是“选择”。这就是为什么我更希望速度和即时答案。人们将主要针对每个“ ID”查看此信息-因此请使用过滤功能。数据每15分钟到达S3(新文件)。
@Athar Khan-谢谢您的良好配合!
答案 0 :(得分:0)
据我了解,我将选择Elasticsearch的第二个选项,Logstash从S3加载数据,而Kibana作为调查,搜索,分类和可视化的工具。
让lambda将数据从s3推送到DynamoDB可能会起作用,但由于您在每个事件上运行计算过程,同时以小批量/单项批量推送到Dynamo,因此可能效率较低,成本更高。另一方面,Logstash会逐个读取文件并全部处理。这还取决于您计划将新数据加载到S3的方式,但是两种解决方案都适合。
时间戳在文件中未排序的事实在Elasticsearch中不会出现问题,您可以按任何顺序对其进行索引,但仍可以在kibana中以基于时间的排序顺序进行可视化和搜索