Amazon web services 使用任意值作为dynamodb扫描或查询的“ExclusiveStartKey”安全吗?
根据Amazon web services 使用任意值作为dynamodb扫描或查询的“ExclusiveStartKey”安全吗?,amazon-web-services,amazon-dynamodb,dynamodb-queries,Amazon Web Services,Amazon Dynamodb,Dynamodb Queries,根据ExclusiveStartKey(对于扫描和查询)的DynamoDB API参考,我们有: 此操作将评估的第一项的主键。使用上次操作中为LastEvaluatedKey返回的值 我有一个用例,我想使用ExclusiveStartKey从特定的已知位置开始扫描(而不是使用它继续现有的扫描)。上面的第一句听起来完全可以,但第二句不行。第二句话让我停顿了一下,特别是因为它不是“你应该[…]”或“你必须[…]”,只是一个简单的古老命令,没有上下文或解释 我在SO或其他地方找不到任何这样使用Excl
ExclusiveStartKey
(对于扫描和查询)的DynamoDB API参考,我们有:
此操作将评估的第一项的主键。使用上次操作中为LastEvaluatedKey返回的值
我有一个用例,我想使用ExclusiveStartKey
从特定的已知位置开始扫描(而不是使用它继续现有的扫描)。上面的第一句听起来完全可以,但第二句不行。第二句话让我停顿了一下,特别是因为它不是“你应该[…]”或“你必须[…]”,只是一个简单的古老命令,没有上下文或解释
我在SO或其他地方找不到任何这样使用ExclusiveStartKey
的人的例子。这似乎是可行的,但API的参考资料似乎不清楚这是否会偏离合同。我应该换一条路吗?有没有人在实践中使用过它,并且可以确认它是可靠的?是的,您应该在这个用例中使用ExclusiveStartKey,因为这就是它的用途。如果您第一次打电话时还不知道从哪里开始(没有LastEvaluatedKey),那么您可以不包括ExclusiveStartKey,因为它是可选的
我认为第二句很清楚地暗示了“应该”,而他们没有说“必须”的原因是,从技术上来说,你可以使用任何扫描过的钥匙,但是你可以,在正确扫描所有物体的情况下,应使用LastEvaluatedKey。DynamoDB使用哈希函数对所有主键进行排序,然后将其存储在正确的存储桶中。扫描文档时,使用ExclusiveStartKey
可以知道我们应该在哪个存储桶中继续扫描,以及该存储桶上的下一个文档是什么
为ExclusiveStartKey
使用任何任意键都是完全安全的,因为即使DynamoDB也无法预测它将落在哪个桶上。出于同样的原因,它也是无用的,除非您想从数据库中获取随机文档