【问题标题】:Is it safe to use arbitrary values as the `ExclusiveStartKey` for a dynamodb scan or query?使用任意值作为 dynamodb 扫描或查询的“ExclusiveStartKey”是否安全?
【发布时间】:2021-06-11 06:11:55
【问题描述】:

根据ExclusiveStartKeyScanQuery)的 DynamoDB API 参考,我们有:

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

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

我在 SO 或其他地方找不到任何以这种方式使用 ExclusiveStartKey 的人的示例。它似乎有效,但 API 参考似乎含糊不清这是否会脱离合同。我应该寻求不同的路线吗?有没有人在实践中使用过并且可以确认它是可靠的?

【问题讨论】:

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


    【解决方案1】:

    是的,您应该在此用例中使用 ExclusiveStartKey,因为这就是它的用途。如果您遇到第一次打电话但还不知道从哪里开始的情况(没有 LastEvaluatedKey),那么您可以简单地不包括 ExclusiveStartKey,因为它是可选的。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-22
        • 1970-01-01
        相关资源
        最近更新 更多