Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 如何在Python中使用DynamoDB和S3加速构建JSON树?_Amazon S3_Tree_Amazon Dynamodb - Fatal编程技术网

Amazon s3 如何在Python中使用DynamoDB和S3加速构建JSON树?

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替换为其消息的全部内容。下面的

我有一组JSON消息。每个字段都有一个唯一的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)})