【发布时间】:2020-07-04 20:45:38
【问题描述】:
我的问题是关于 DynamoDB REMOVE on a List 的时间复杂度...
- 我知道 DynamoDB 操作是从客户端抽象出来的(例如
boto3在 AWS Lambda 或 EC2 中),在 DynamoDB 本身内 - 但是 无论如何,DynamoDB 操作的运行时复杂性是否会影响 Read Consistency,或影响调用的计算的运行时间 DynamoDB 操作(例如 Lambda/EC2)? - 我也知道(在一般复杂性理论中)删除一个元素 从有序列表或数组,使得列表/数组元素 是随后/在移除的元素之后移动 1 [向左] 替换被移除的其他 [null/empty] 间隙 元素的原始索引/位置,是一个线性 O(n) 过程:所有 以下元素必须移动,并且它们的数量在 O(n) 的顺序。
最终结果(以下元素转移以弥补差距),也是在其上的 DynamoDB List after a REMOVE 操作上特别发生的结果[每个 DynamoDB 实施] - 但 我不知道事实上,列表中REMOVE 的 DynamoDB 内部时间复杂度是:O(n) 还是 O(1)?
无论它是什么,“如果操作是 DynamoDB 内部的,为什么这很重要”?以下是原因(如果它们是正确的):
- 如果 DynamoDB 被同步调用* [而不是异步],则客户端会等待 DynamoDB 完成/返回,因此 DynamoDB 运行时会添加到客户端的运行时中
- 我不能 100% 确定操作的 DynamoDB 运行时是否会影响所操作数据的读取一致性 - 读取一致性是否会随着 DynamoDB 操作完成的时间越长而降低? [fwiw,我会推断,是的,它会退化]
fwiw 我对这些问题很好奇,因为我正试图决定是否致电 REMOVE 以从中受益而不留下差距,或者实施一些可以代替差距的东西。
*例如,我认为boto3 本身会进行同步 DynamoDB 调用(尽管仍然使用 python 进行异步调用,但对于 aiobotocore 或 aioboto3 这样的项目来说可能是可能的)。
【问题讨论】:
-
答案是我们不知道。如果它对您来说真的很重要,那么您最好的选择可能是对各种场景进行计时,并确定您是否可以依赖一致的行为,然后进行相应的编程。
标签: amazon-web-services amazon-ec2 aws-lambda amazon-dynamodb boto3