Amazon s3 如何在Python中使用DynamoDB和S3加速构建JSON树?
我有一组JSON消息。每个字段都有一个唯一的id。某些消息是其他消息的父消息,例如Amazon s3 如何在Python中使用DynamoDB和S3加速构建JSON树?,amazon-s3,tree,amazon-dynamodb,Amazon S3,Tree,Amazon Dynamodb,我有一组JSON消息。每个字段都有一个唯一的id。某些消息是其他消息的父消息,例如 {"id":"idX", ..., "parents":["idA", "idB", "idC"]} 每条消息都有其他字段,但它们与此问题无关 每条消息都存储在AWS-S3上的一个文件中。我还有一个DynamoDB表,它使用id作为键,并包含相应消息在S3上存储位置的信息,包括文件路径和消息的字节偏移量,以支持直接读取 给定一个id0,我需要生成完整的树,以递归方式将每个父级的id替换为其消息的全部内容。下面的
{"id":"idX", ..., "parents":["idA", "idB", "idC"]}
每条消息都有其他字段,但它们与此问题无关
每条消息都存储在AWS-S3上的一个文件中。我还有一个DynamoDB表,它使用id
作为键,并包含相应消息在S3上存储位置的信息,包括文件路径和消息的字节偏移量,以支持直接读取
给定一个id0
,我需要生成完整的树,以递归方式将每个父级的id替换为其消息的全部内容。下面的例子可以这样展开:
{"id":"idX", ..., "parentContents":[{"id":"idA", ...}, {"id":"idB", ...}, {"id":"idC", ...}]}
id{ABC}
的父级以同样的方式进行扩展,等等。最后,我得到了一条树形的JSON消息,起始的id0
是它的根
当前的算法本质上是这样的(在类似Python的伪代码中):
因此,我基本上是以深度优先的方式构建树。对于大型树,此实现速度较慢。我需要加快速度
我还没有对我的代码进行详细的分析,但我怀疑一个瓶颈是在步骤4从DynamoDB读取单个项。我玩了一会儿batch\u get\u item
,但我注意到,与get\u item
不同,当列表中的一个键不在表中时,它不会引发异常是否有其他批读取方法会抱怨找不到密钥?
我正在考虑使用batch\u get\u item
或类似的工具,重构代码,以便立即从DynamoDB读取给定id的所有父记录你认为这会大大加快速度吗?
有没有办法批量直接读取多个S3文件?目前,我正在使用以下块执行单个读取:
key = s3bkt.lookup(inFile)
line = key.get_contents_as_string(headers={"Range":"bytes="+str(fromOffset)+"-"+str(toOffset)})
此外,您是否怀疑存在其他瓶颈?
谢谢
key = s3bkt.lookup(inFile)
line = key.get_contents_as_string(headers={"Range":"bytes="+str(fromOffset)+"-"+str(toOffset)})