将任意值用作dynamodb扫描或查询的“ ExclusiveStartKey”是否安全?

时间:2019-02-21 19:53:19

标签: amazon-web-services amazon-dynamodb dynamodb-queries

ExclusiveStartKey(对于ScanQuery而言)的DynamoDB API参考中,我们可以得到:

  

此操作将评估的第一项的主键。使用在上一个操作中为LastEvaluatedKey返回的值。

我有一个用例,其中我想使用ExclusiveStartKey从特定的已知位置开始扫描(而不是使用它来继续现有的扫描)。上面的第一句话听起来确实不错,但是第二句话却不行。第二句话让我停顿了一下,特别是因为它不是“您应该[...]”或“您必须[...]”,只是一个没有上下文或解释的普通旧命令。

我无法以这种方式在使用ExclusiveStartKey的人或其他人身上找到任何示例。似乎可行,但是API参考对于这是否脱离合同似乎含糊不清。我应该寻找其他路线吗?有人在实践中使用过此方法,可以确认它的可靠性吗?

2 个答案:

答案 0 :(得分:2)

是的,您应该在此用例中使用ExclusiveStartKey,因为它就是为此而创建的。如果您遇到第一次打电话而又不知道从哪里开始的情况(没有LastEvaluatedKey),那么您就可以根本不包括ExclusiveStartKey,因为它是可选的。

我认为第二句话很明显地暗示着“应该”,而他们之所以没有说“必须”,是因为您可以从技术上使用任何已扫描的密钥,但是可以,并且在正确扫描所有对象的情况下,应该使用LastEvaluatedKey。

答案 1 :(得分:0)

DynamoDB 使用哈希函数对所有主键进行排序,然后将其存储在正确的存储桶中。扫描文档时,ExclusiveStartKey 用于知道我们应该在哪个存储桶中继续扫描以及该存储桶中的下一个文档是什么。

ExclusiveStartKey 使用任意键是完全安全的,因为即使 DynamoDB 也无法预测它将落在哪个存储桶上。出于同样的原因,它也是无用的,除非您想从数据库中获取随机文档。